基于μC/OS和80C51單片機(jī)的固話(huà)來(lái)電防火墻設(shè)計(jì)
本文介紹了基于μC/OS—II嵌入式實(shí)時(shí)操作系統(tǒng)和來(lái)電顯示技術(shù)設(shè)計(jì),由鈴流檢測(cè)電路、來(lái)電解碼電路、DTMF解碼電路、模擬掛機(jī)電路、號(hào)碼存儲(chǔ)電路等組成。系統(tǒng)利用得到的來(lái)電號(hào)碼,同存儲(chǔ)黑名單中的號(hào)碼進(jìn)行比較,判斷是接通話(huà)機(jī)振鈴線(xiàn)路,還是控制模擬掛機(jī)電路掛機(jī)。本系統(tǒng)復(fù)用電話(huà)機(jī)鍵盤(pán)控制,并以L(fǎng)CD中文顯示,可方便地對(duì)黑名單中的號(hào)碼進(jìn)行管理。
隨著電信業(yè)務(wù)的發(fā)展,騷擾電話(huà)問(wèn)題日益突出,大量用戶(hù)被騷擾電話(huà)所煩擾。為躲避騷擾,多數(shù)人采取拔電話(huà)線(xiàn)的方法,卻因此錯(cuò)過(guò)不少重要來(lái)電。此外,每個(gè)人在生活中都可能遇到一些出于顧慮而不想接聽(tīng)的電話(huà)。針對(duì)此種現(xiàn)象,本次設(shè)計(jì)的來(lái)電防火墻可屏蔽騷擾電話(huà)。來(lái)電防火墻通俗地講就是“不想聽(tīng)”的電話(huà)打不進(jìn)來(lái),它可以過(guò)濾掉黑名單中電話(huà)號(hào)碼的來(lái)電,直接拒絕接昕。同時(shí),也支持親友名單模式,只接聽(tīng)親友名單中電話(huà)的來(lái)電,拒絕接聽(tīng)其他號(hào)碼的來(lái)電。
1 系統(tǒng)概述
μC/OS—II嵌入式實(shí)時(shí)操作系統(tǒng)的引入極大地方便了模塊的管理和號(hào)碼存儲(chǔ)的管理,系統(tǒng)復(fù)用電話(huà)機(jī)鍵盤(pán)控制,并以L(fǎng)CD中文顯示,可方便對(duì)黑名單中的號(hào)碼進(jìn)行管理。主叫識(shí)別信息傳送及顯示CID業(yè)務(wù)是向被叫電話(huà)用戶(hù)提供的一種新服務(wù)項(xiàng)目,是指在被叫用戶(hù)終端設(shè)備上顯示主叫號(hào)碼、主叫用戶(hù)姓名、呼叫日期時(shí)間等主叫識(shí)別信息,并進(jìn)行存儲(chǔ)以供用戶(hù)查閱的一種服務(wù)項(xiàng)目。實(shí)現(xiàn)CID的基本方法是發(fā)端交換機(jī)將主叫號(hào)碼等信息通過(guò)局間信令系統(tǒng)傳送給終端交換機(jī),終端交換機(jī)將主叫識(shí)別信息以移頻鍵控FSK的方式,送給被叫用戶(hù)終端,主叫識(shí)別信息傳送設(shè)備如圖1所示。
終端交換機(jī)將主叫識(shí)別信息送給被叫用戶(hù)終端設(shè)備,在下述兩種狀態(tài)下進(jìn)行;一種是用戶(hù)終端掛機(jī)狀態(tài),另一種是用戶(hù)終端通話(huà)狀態(tài)。掛機(jī)狀態(tài)下的傳送方法是終端交換機(jī)將主叫識(shí)別信息在第一次振鈴和第二次振鈴間隔期間,送給被叫用戶(hù)終端設(shè)備,被叫終端信息傳送如圖2所示。目前我國(guó)大陸地區(qū)都是采用圖2所示的方式進(jìn)行來(lái)電號(hào)碼傳遞。
2 系統(tǒng)硬件電路設(shè)計(jì)
固定電話(huà)來(lái)電防火墻是基于來(lái)電顯示(CID)設(shè)計(jì)的,通過(guò)解碼得到的來(lái)電號(hào)碼,與黑名單中的號(hào)碼進(jìn)行比對(duì),進(jìn)行模擬掛機(jī)或者接通振鈴行動(dòng)。復(fù)用電話(huà)及鍵盤(pán)進(jìn)行系統(tǒng)設(shè)置,通過(guò)電話(huà)機(jī)鍵盤(pán)輸入號(hào)碼,存儲(chǔ)到EEPROM中。
2.1 鈴流檢測(cè)電路
我國(guó)大陸來(lái)電顯示是FSK格式的。來(lái)電號(hào)碼在第一聲振鈴和第二聲振鈴之間發(fā)送。為避免在得到來(lái)電號(hào)碼前,第一聲振鈴對(duì)用戶(hù)產(chǎn)生影響,需要在話(huà)機(jī)振鈴電路動(dòng)作之前截?cái)嗾疋?,因此要求振鈴檢測(cè)迅速有效。圖3為鈴流檢測(cè)電路。
鈴流為25Hz,電壓有效值是90±15 V的正弦波,通過(guò)二極管組成的整流器整流后,進(jìn)入電壓比較器LM311。當(dāng)鈴流電壓上升到60 V以上的時(shí)候,LM311比較器就會(huì)輸出高電平。反相后,用來(lái)觸發(fā)單片機(jī)的外中斷。仿真波形略
2.2 線(xiàn)路切換及后備電源
當(dāng)檢測(cè)到鈴流后,單片機(jī)應(yīng)立即把電話(huà)機(jī)與外線(xiàn)電話(huà)線(xiàn)路斷開(kāi),防止電話(huà)響鈴。因?yàn)樵?huà)機(jī)可能存有信息,所以應(yīng)繼續(xù)為話(huà)機(jī)供電,以保證話(huà)機(jī)信息不丟失。同時(shí),電源也為系統(tǒng)設(shè)置復(fù)用話(huà)機(jī)鍵盤(pán)供電。
如圖4所示,使用一個(gè)雙刀雙擲繼電器進(jìn)行線(xiàn)路切換。常閉觸點(diǎn)連接外線(xiàn),常開(kāi)觸電連接后備電源。LM317接成電流反饋形式,構(gòu)成一個(gè)恒流源為話(huà)機(jī)供電。
2.3 來(lái)電解碼電路
來(lái)電解碼電路如圖5所示,解碼芯片采用盛群半導(dǎo)體公司的集成解碼芯片HT9032。它著眼于Type I或On—hook caller ID的應(yīng)用,符合Bellcore(Type I)及ITU—IV.23的規(guī)范。HT9032整合了FSK解調(diào)器于其芯片中,并以低耗電量及價(jià)格的優(yōu)勢(shì)等見(jiàn)長(zhǎng)。芯片將解碼以1 200波特率通過(guò)異步串行口發(fā)送至單片機(jī)。
2.4 摘掛機(jī)檢測(cè)及DTMF解碼電路
當(dāng)系統(tǒng)黑名單設(shè)置時(shí),會(huì)復(fù)用話(huà)機(jī)鍵盤(pán),因此需要對(duì)話(huà)機(jī)按鍵的DTMF撥號(hào)解碼,得到相應(yīng)的按鍵鍵值,送由單片機(jī)處理。同時(shí),要對(duì)話(huà)機(jī)狀態(tài)進(jìn)行檢測(cè),以及時(shí)通知單片機(jī)進(jìn)行解碼。DTMF解碼采用盛群半導(dǎo)體公司的HT9170B集成解碼芯片。摘掛機(jī)檢測(cè)及DTMF解碼電路如圖6所示。
摘掛機(jī)檢測(cè)使用了電壓比較器。根據(jù)我國(guó)電話(huà)網(wǎng)標(biāo)準(zhǔn),掛機(jī)狀態(tài)時(shí)電話(huà)網(wǎng)電壓在24 V以上,摘機(jī)時(shí)在10 V以下,用電壓比較器比較電壓,判斷話(huà)機(jī)狀態(tài)。
2.5 模擬掛機(jī)電路
模擬掛機(jī)電路如圖7所示。當(dāng)TAKEUP為高電平時(shí),T1導(dǎo)通;當(dāng)TAKEUP為低電平時(shí),T1截止。因此T1就是一個(gè)受單片機(jī)I/O口控制的開(kāi)關(guān),可以通過(guò)單片機(jī)模擬摘掛機(jī)。
2.6 單片機(jī)及顯示部分
單片機(jī)采用NXP公司的80C51內(nèi)核P89C668。P89C66單片機(jī)內(nèi)帶64 KB Flash存儲(chǔ)器,8KB RAM。顯示電路采用的是128×64點(diǎn)陣LED屏。
2.7 系統(tǒng)電源
電話(huà)機(jī)后備電源需要24 V供電,而其他數(shù)字電路需要5 V供電,若采用線(xiàn)性穩(wěn)壓則損耗較大,故采用DC-DC芯片將24 V電壓降為5 V,為數(shù)字電路供電。電源電路略——編者注。
3 μC/OS硬件層驅(qū)動(dòng)程序設(shè)計(jì)
3.1 異步串行口驅(qū)動(dòng)程序
當(dāng)使用中斷模式時(shí),從接收移位寄存器接收到一個(gè)完整的字節(jié),并將數(shù)據(jù)送入數(shù)據(jù)輸入寄存器,產(chǎn)生一個(gè)中斷。中斷處理程序從端口讀入字節(jié),清除中斷源。這時(shí),可以處理ISR收到的字節(jié),或者將字節(jié)送入緩沖區(qū)由后臺(tái)處理,緩沖區(qū)大小依賴(lài)于后臺(tái)進(jìn)程控制CPU處理信息的速度。從串行端口捕捉數(shù)據(jù)時(shí),常用一種被稱(chēng)作環(huán)形緩沖區(qū)的專(zhuān)用緩沖區(qū)。
輸入數(shù)據(jù)的響應(yīng)依賴(lài)于后臺(tái)進(jìn)程的執(zhí)行速度。如果是實(shí)時(shí)內(nèi)核,則處理輸入數(shù)據(jù)的速度就與ISR接收不處理的速度差不多。為此,環(huán)形緩沖區(qū)的管理加入了信號(hào)量說(shuō)明:
①應(yīng)用程序等待信號(hào)量。
②接收到一字節(jié)后,ISR從串行端口讀入字節(jié)。
③將接收到的字節(jié)送入環(huán)形緩沖區(qū)。
④ISR釋放一個(gè)信號(hào)量,通知任務(wù)已經(jīng)接收到一字節(jié)。
⑤信號(hào)量有效,等待任務(wù)準(zhǔn)備開(kāi)始運(yùn)行。ISR完成后,內(nèi)核決定等待任務(wù)是否成為優(yōu)先級(jí)最高的任務(wù)。如果是,并且內(nèi)核為可剝奪型內(nèi)核,則恢復(fù)等待字節(jié)的任務(wù)。該任務(wù)從環(huán)型緩沖區(qū)取出數(shù)據(jù),并執(zhí)行相關(guān)操作。
3.2 基于μC/OS—II的串行口接收驅(qū)動(dòng)
單片機(jī)對(duì)串口的支持僅僅是當(dāng)數(shù)據(jù)送入SBUF時(shí)開(kāi)始移位,但收到一個(gè)完整的字節(jié)后產(chǎn)生中斷,通知用戶(hù)進(jìn)行讀操作。在P89C668中,串行口并沒(méi)有設(shè)計(jì)緩沖區(qū),接收移位寄存器直接將數(shù)據(jù)送到接收SBUF,如果沒(méi)有及時(shí)從接收SBUF中取出,前一字節(jié)就會(huì)丟失。如果沒(méi)有驅(qū)動(dòng)程序的支持,應(yīng)用程序必須一字節(jié)一字節(jié)地接收數(shù)據(jù),不但浪費(fèi)時(shí)間,而且對(duì)應(yīng)用程序的編制將產(chǎn)生極大影響。所以,在使用串口的時(shí)候,串口驅(qū)動(dòng)程序是必須有的,通過(guò)驅(qū)動(dòng)程序,可以大大簡(jiǎn)化應(yīng)用程序的編寫(xiě)。
針對(duì)P89C668片內(nèi)UART和μC/OS—II的特性,設(shè)計(jì)了分層明確的驅(qū)動(dòng)模型,串口接收分層驅(qū)動(dòng)結(jié)構(gòu)圖略——編者注。
任務(wù)在對(duì)環(huán)形緩沖區(qū)進(jìn)行操作的時(shí)候,通過(guò)等待信號(hào)量,確定緩沖區(qū)是否允許操作。同時(shí),中斷服務(wù)子程序通過(guò)釋放信號(hào)量來(lái)通知任務(wù)可以對(duì)緩沖區(qū)進(jìn)行操作,大大提高了任務(wù)的響應(yīng)時(shí)間。
4 系統(tǒng)軟件設(shè)計(jì)
根據(jù)硬件構(gòu)成,系統(tǒng)軟件可分為來(lái)電解碼、顯示、鍵盤(pán)、判決、存儲(chǔ)幾大模塊。模塊在μC/OS—II的調(diào)度之下運(yùn)行。
防火墻在值守狀態(tài)時(shí),各模塊處于掛起態(tài)。當(dāng)系統(tǒng)檢測(cè)到鈴流,將運(yùn)行來(lái)電解碼模塊,并將解得的號(hào)碼通知μC/OS—II。μC/OS—II將通過(guò)判決模塊判斷來(lái)電屬性,執(zhí)行相應(yīng)動(dòng)作。程序流程如圖8所示。
結(jié)語(yǔ)
本文設(shè)計(jì)了基于μC/OS和80C51單片機(jī)的固話(huà)來(lái)電防火墻。介紹了電話(huà)機(jī)的基本工作原理,對(duì)硬件主要模塊進(jìn)行了詳細(xì)地分解分析。對(duì)軟件基本流程和設(shè)計(jì)思路進(jìn)行了闡述。整個(gè)系統(tǒng)通過(guò)了實(shí)際產(chǎn)品的最終驗(yàn)證,達(dá)到設(shè)計(jì)要求。