《單片機(jī)》課件第8章_第1頁
《單片機(jī)》課件第8章_第2頁
《單片機(jī)》課件第8章_第3頁
《單片機(jī)》課件第8章_第4頁
《單片機(jī)》課件第8章_第5頁
已閱讀5頁,還剩86頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

8.1設(shè)計(jì)概述

單片機(jī)應(yīng)用系統(tǒng)的設(shè)計(jì)雖然沒有固定的模式,但根據(jù)設(shè)計(jì)的一般過程,我們可以將其分解成以下幾個(gè)步驟。1.確定任務(wù)在對(duì)應(yīng)用系統(tǒng)進(jìn)行總體設(shè)計(jì)時(shí),應(yīng)根據(jù)應(yīng)用系統(tǒng)提出的各項(xiàng)技術(shù)性能指標(biāo),綜合考慮系統(tǒng)的先進(jìn)性、可靠性、可維護(hù)性及成本、經(jīng)濟(jì)效益,擬訂出設(shè)計(jì)方案。在方案設(shè)計(jì)中,對(duì)軟件和硬件進(jìn)行分工是一個(gè)重要的環(huán)節(jié),原則上,能夠由軟件來完成的任務(wù)就盡可能用軟件來實(shí)現(xiàn),以降低硬件成本,簡(jiǎn)化硬件結(jié)構(gòu),減少由硬件引發(fā)的故障。同時(shí),還要求大致規(guī)定各接口電路的地址、軟件的結(jié)構(gòu)和功能、上下位機(jī)的通信協(xié)議、程序的駐留區(qū)域及工作緩沖區(qū)等內(nèi)存劃分。2.硬件設(shè)計(jì)硬件設(shè)計(jì)是指應(yīng)用系統(tǒng)的電路設(shè)計(jì),包括CPU、控制電路、存儲(chǔ)器、I/O接口、A/D和D/A轉(zhuǎn)換電路等。硬件設(shè)計(jì)時(shí),應(yīng)考慮留有一定的余量,電路設(shè)計(jì)力求正確無誤,要考慮各類器件間的電平匹配問題、硬件器件產(chǎn)生的干擾和抗干擾問題等。有時(shí)因?yàn)楦蓴_或電平匹配不良引起的系統(tǒng)問題在軟件調(diào)試中很難發(fā)現(xiàn),所以硬件設(shè)計(jì)得越完善,軟件的調(diào)試也就越順利。下面討論MCS-51單片機(jī)應(yīng)用系統(tǒng)硬件電路設(shè)計(jì)時(shí)的幾個(gè)問題。(1)CPU的選擇目前產(chǎn)品設(shè)計(jì)時(shí)的CPU一般是選用ATMEL公司的產(chǎn)品,如AT89C51/52/2051等,性能可靠、價(jià)格低廉,調(diào)試也比較方便。也可以選用與MCS-51兼容的Philips系列產(chǎn)品,其特點(diǎn)是內(nèi)置A/D轉(zhuǎn)換器、看門狗等,如P87LPC767等,對(duì)于有在線升級(jí)需求的可以采用宏晶公司STC系列的單片機(jī),如STC89C54RD+(16KB閃存),或者采用華邦公司的W78E516B(內(nèi)核與8052完全兼容,具有64KB的主閃存和4KB的附加閃存,4KB閃存中裝有專門的裝載程序,用來更新64KB閃存中的程序)。選擇了有內(nèi)置程序存儲(chǔ)器的CPU后,一般不必?cái)U(kuò)展程序存儲(chǔ)器了,當(dāng)然,對(duì)于特殊的系統(tǒng),如包含很多字庫(kù)的系統(tǒng),還需要外部的EPROM芯片(如8KB的2764、16KB的27128和32KB的27256等)來存儲(chǔ)字型碼。(2)數(shù)據(jù)存儲(chǔ)器和I/O接口根據(jù)系統(tǒng)功能的要求決定是否配置外部RAM或I/O口。RAM芯片可選用6116(2KB)、6264(8KB)或62256(32KB),原則上應(yīng)盡量減少芯片數(shù)量,使譯碼電路簡(jiǎn)單。I/O接口芯片一般選用8155(兼帶256KB靜態(tài)RAM)或8255(3個(gè)8位口),這類芯片具有口線多、硬件接口電路簡(jiǎn)單等特點(diǎn)。若口線要求很少,且僅需要簡(jiǎn)單的輸入或輸出功能,則可選用不可編程的TTL電路或CMOS電路。A/D和D/A電路芯片主要根據(jù)精度、速度和價(jià)格等來選用,同時(shí)還要考慮與系統(tǒng)的連接是否方便,如并行接口占用的口線多,串行接口的就非常簡(jiǎn)單。(3)總線驅(qū)動(dòng)能力MCS-51系列單片機(jī)的外部擴(kuò)展功能很強(qiáng),但4個(gè)8位并行口的負(fù)載能力是有限的,P0口能驅(qū)動(dòng)8個(gè)LSTTL電路,P1~P3口只能驅(qū)動(dòng)4個(gè)TTL電路。在實(shí)際應(yīng)用中,這些端口不能滿載工作,這樣會(huì)降低系統(tǒng)的抗干擾,當(dāng)負(fù)載較重時(shí)應(yīng)采用總線驅(qū)動(dòng)電路,以提高端口的驅(qū)動(dòng)能力和系統(tǒng)的抗干擾能力。數(shù)據(jù)總線宜采用雙向8路三態(tài)緩沖器74LS245作為總線驅(qū)動(dòng)器,地址和控制總線可采用單向8路三態(tài)緩沖器74LS244作為單向總線驅(qū)動(dòng)器。(4)系統(tǒng)速度匹配MCS-51系列單片機(jī)時(shí)鐘頻率可在2MHz~12MHz之間任選(AT89C51/52可以工作在24MHz)。在不影響系統(tǒng)技術(shù)性能的前提下,時(shí)鐘頻率選擇低一些為好,這樣可降低系統(tǒng)中對(duì)元器件工作速度的要求,從而提高系統(tǒng)的可靠性。(5)抗干擾措施單片機(jī)應(yīng)用系統(tǒng)的工作環(huán)境往往都是具有多種干擾源的現(xiàn)場(chǎng),抗干擾措施在硬件電路設(shè)計(jì)中顯得尤為重要,在每個(gè)芯片的VCC和地之間添加一個(gè)0.1μF的瓷片電容是個(gè)簡(jiǎn)單有效的方法。對(duì)有大功率電機(jī)的系統(tǒng)中一般選用光電隔離,使干擾大大減少,另外,在PCB設(shè)計(jì)時(shí)的布線也非常有講究。(6)狀態(tài)指示系統(tǒng)本身的狀態(tài)指示是用來實(shí)現(xiàn)人機(jī)交流的,一般都安裝在面板上。在硬件設(shè)計(jì)時(shí),在內(nèi)部板子上稍增加(或預(yù)留)些狀態(tài)指示電路是非常必要的,對(duì)于調(diào)試是非常有利的,包括日后的維護(hù)也是如此。比如通信系統(tǒng)中,收到數(shù)據(jù)正確后點(diǎn)亮一個(gè)指示燈(也可以用聲音提示),對(duì)維護(hù)人員來說,若看到指示燈不亮,就重點(diǎn)去檢查跟通信相關(guān)的硬件和軟件部分就可以,而對(duì)最終“功能為什么沒有實(shí)現(xiàn)”可以暫時(shí)不去關(guān)心。3.軟件設(shè)計(jì)應(yīng)用系統(tǒng)中的軟件是根據(jù)系統(tǒng)功能要求設(shè)計(jì)的,應(yīng)可靠地實(shí)現(xiàn)系統(tǒng)的各種功能。應(yīng)用系統(tǒng)種類繁多,應(yīng)用軟件也各不相同,但是一個(gè)優(yōu)秀的應(yīng)用系統(tǒng)的軟件應(yīng)具有以下特點(diǎn)。(1)軟件結(jié)構(gòu)清晰、簡(jiǎn)捷、流程合理。(2)各功能程序?qū)崿F(xiàn)模塊化、系統(tǒng)化。這樣,既便于調(diào)試、連接,又便于移植、修改和維護(hù)。(3)程序存儲(chǔ)區(qū)、數(shù)據(jù)存儲(chǔ)區(qū)規(guī)劃合理,既能節(jié)約存儲(chǔ)容量,又能給程序設(shè)計(jì)與操作帶來方便。(4)運(yùn)行狀態(tài)實(shí)現(xiàn)標(biāo)志化管理。各個(gè)功能程序運(yùn)行狀態(tài)、運(yùn)行結(jié)果及運(yùn)行需求都設(shè)置狀態(tài)標(biāo)志,以便查詢,程序的轉(zhuǎn)移、運(yùn)行、控制都可通過狀態(tài)標(biāo)志條件來控制。(5)實(shí)現(xiàn)全面軟件抗干擾設(shè)計(jì)。軟件抗干擾是計(jì)算機(jī)應(yīng)用系統(tǒng)提高可靠性的有力措施。(6)對(duì)于要求較高的系統(tǒng),為了提高運(yùn)行的可靠性,可在應(yīng)用軟件中設(shè)置自診斷程序,在系統(tǒng)運(yùn)行前先運(yùn)行自診斷程序,用以檢查系統(tǒng)各特征參數(shù)是否正常。4.調(diào)試硬件與軟件的設(shè)計(jì)需要一個(gè)過程,這個(gè)過程中很重要的部分是調(diào)試,只有通過調(diào)試才能確保系統(tǒng)軟硬件功能的正常,企業(yè)開發(fā)中調(diào)試一般采用“PC+仿真器+目標(biāo)系統(tǒng)”(目前學(xué)校教學(xué)過程中單片機(jī)的學(xué)習(xí)大都采用實(shí)驗(yàn)箱,對(duì)培養(yǎng)應(yīng)用性人才是不利的),仿真器可以選萬利公司的ME52系列仿真器,該仿真器占用系統(tǒng)資源少,能進(jìn)行實(shí)時(shí)仿真,操作簡(jiǎn)單。不同仿真器提供的仿真軟件盡管不同,但調(diào)試的基本方法大致相同,即單步運(yùn)行、自動(dòng)單步運(yùn)行、全速運(yùn)行、斷點(diǎn)設(shè)置等,在運(yùn)行過程中結(jié)合內(nèi)部RAM、SFR查看和硬件的動(dòng)作反應(yīng)等,一般可以查出軟件或硬件的故障。5.程序燒錄當(dāng)程序軟硬件聯(lián)機(jī)調(diào)試成功后,系統(tǒng)要脫離原來的仿真平臺(tái)進(jìn)行獨(dú)立工作,所以要把程序“下載”到單片機(jī)中,這個(gè)過程就是程序的燒錄。燒錄可以用專用編程器,有些CPU內(nèi)置了下載程序,可以在線燒錄,如宏晶公司的STC89C54RD+等。8.2設(shè)計(jì)舉例1.設(shè)計(jì)實(shí)例一:手機(jī)主板穩(wěn)壓芯片在線測(cè)試器(1)任務(wù)要求描述某手機(jī)主板上有個(gè)穩(wěn)壓芯片,當(dāng)手機(jī)在工作時(shí),其穩(wěn)壓輸出電壓必須在2.7V~2.9V之間(相對(duì)誤差1%內(nèi)),超過此范圍則該芯片(主板)不合格。(2)設(shè)計(jì)要求因?yàn)樵摦a(chǎn)品在生產(chǎn)線上使用,所以必須具備性能可靠、操作簡(jiǎn)單、結(jié)果提示簡(jiǎn)潔明了(這一點(diǎn)對(duì)提高工作效率尤其重要),該測(cè)試器具有如下功能。①能測(cè)量被測(cè)端的電壓,相對(duì)誤差1%。②線路接通(一般采用專門模型讓主板接到測(cè)試器)后0.5秒內(nèi)完成測(cè)試,以滿足生產(chǎn)線的速度要求。③測(cè)試結(jié)果采用聲音提示和電壓值顯示兩種方式。當(dāng)測(cè)試電壓在正常范圍內(nèi),在電壓顯示的同時(shí),有嘟……嘟……間歇性聲音提示;當(dāng)測(cè)試電壓超過正常范圍時(shí),只顯示測(cè)量結(jié)果,供記錄后作返修參考(測(cè)試結(jié)論:沒聲音的主板是有問題的)。(3)硬件電路設(shè)計(jì)根據(jù)系統(tǒng)要求,硬件電路主要由CPU、晶體振蕩電路、復(fù)位電路、A/D轉(zhuǎn)換器、數(shù)碼管顯示電路、聲音提示電路等組成。CPU:選用AT89C51,4KB程序存儲(chǔ)器。晶體振蕩電路:選用6MHz晶振。復(fù)位:采用上電復(fù)位和手工復(fù)位。聲音提示電路:采用直流蜂鳴器提示,電路簡(jiǎn)單。以上部分如圖8-1所示。

圖8-1復(fù)位、晶振、提示電路A/D轉(zhuǎn)換器:8位的A/D的相對(duì)誤差為1/256(約0.4%),優(yōu)于相對(duì)誤差1%指標(biāo),所以這里選用ADC0809,與CPU的連接電路如圖8-2所示,ADC0809“0”通道的地址是7FFFH,時(shí)鐘信號(hào)來自CPU的ALE,A/D的“EOC”經(jīng)過反相后作為CPU的外部中斷1信號(hào),每次轉(zhuǎn)換結(jié)束產(chǎn)生一次中斷。圖8-2DAC0809與CPU連接圖

數(shù)碼顯示電路:根據(jù)測(cè)試電壓要求,數(shù)碼管用三位,并將小數(shù)點(diǎn)固定,能顯示“x.xx”。為節(jié)約硬件投入,采用動(dòng)態(tài)掃描、軟件譯碼方式:P1口提供段碼,P3口P3.0、P3.1、P3.2作為位控制,如圖8-3中的W1、W2、W3。圖8-3三位動(dòng)態(tài)掃描數(shù)碼管顯示電路(4)軟件設(shè)計(jì)根據(jù)系統(tǒng)要求實(shí)現(xiàn)的功能,軟件部分可以分為以下幾個(gè)模塊。主程序:主要完成端口狀態(tài)的設(shè)置,中斷、定時(shí)器工作方式設(shè)置、內(nèi)部緩沖區(qū)初始化。流程如圖8-4所示。定時(shí)器中斷服務(wù)程序:其主要任務(wù)是啟動(dòng)A/D,定時(shí)時(shí)間決定了采樣頻率,同時(shí)要完成工作指示燈的閃爍,根據(jù)標(biāo)志完成蜂鳴器發(fā)聲。流程如圖8-5所示。圖8-4主程序流程圖

圖8-5定時(shí)器中斷程序顯示子程序:采用軟件譯碼、動(dòng)態(tài)掃描方式,將A/D轉(zhuǎn)換的結(jié)果顯示在三位數(shù)碼管上,內(nèi)部顯示緩沖區(qū)的地址為:22H(高位)、23H(中間位)、24H(低位),顯示格式為“x.xx”。流程如圖8-6所示。A/D數(shù)據(jù)讀取程序:根據(jù)圖8-2所示的硬件電路,當(dāng)A/D轉(zhuǎn)換結(jié)束后引起CPU外部1中斷,所以此模塊就是外部中斷1服務(wù)程序。其主要任務(wù)是讀取A/D的結(jié)果,然后進(jìn)行適當(dāng)?shù)臄?shù)據(jù)處理,首先判斷數(shù)據(jù)是否在允許的電壓范圍里,然后根據(jù)判斷結(jié)果做提示聲標(biāo)志,同時(shí)要將實(shí)際電壓的BCD碼送顯示緩沖區(qū)用于顯示,流程如圖8-7所示。當(dāng)基準(zhǔn)電壓取5.1V(可以用TL431和若干個(gè)電阻來實(shí)現(xiàn))的時(shí)候,A/D轉(zhuǎn)換后的滿值數(shù)據(jù)是255(FFH),這樣模擬量與數(shù)字量本身的比值(分辨率)是個(gè)整數(shù)(5.1V/255=)20mV,為實(shí)際模擬量的計(jì)算提供了方便。計(jì)算時(shí)只要將數(shù)字量乘以2,小數(shù)點(diǎn)固定即可,計(jì)算過程不會(huì)引入誤差。圖8-6顯示子程序圖8-7A/D數(shù)據(jù)讀取程序(5)主板測(cè)試器程序清單

;22H:電壓高位;23H電壓中間位;24H:電壓低位的數(shù)據(jù)緩沖區(qū) ;32H:A/D數(shù)據(jù)(十六進(jìn)制)讀入后寄存單元,數(shù)據(jù)乘以2后放在30H(高)和31H;(低)單元,轉(zhuǎn)換成三位BCD碼放入22H\23H\24H作為顯示用(高位為0不顯示) ;26H:指示燈節(jié)奏控制 ;27H:蜂鳴時(shí)間設(shè)定 ;28H:蜂鳴標(biāo)志設(shè)定,=00H:不叫 ;=FFH:叫 ;++++++++以下端口地址定義

ADDR_A EQU 7FFFH ;A/D地址

W1 EQU P3.0 ;動(dòng)態(tài)掃描位置控制

W2 EQU P3.1 W3 EQU P3.3 LED EQU P3.4 ;指示燈

FM EQU P3.5 ;蜂鳴器

TL0_TIME EQU 58H ;定時(shí)器時(shí)間常數(shù),晶振6MHzTH0_TIME EQU 9EH

;++++++++以下入口地址定義

ORG 0000H LJMP START ORG 0003H RETI ORG 000BH LJMP ZDT0 ORG 0013H LJMP ZDEX1 ;A/D轉(zhuǎn)換中斷

ORG 001BH RETI ORG 0023H RETI

;++++++++以下主程序

ORG 0050H START: MOV P1,#0FFH ;滅顯示器MOV P3,#0FFH CLR FM ;開機(jī)鳴叫,提示系統(tǒng)開始工作

MOV R5,#250 ;設(shè)置開機(jī)鳴叫時(shí)間1sD10: LCALL DELAY ;1ms延時(shí)

LCALL DELAY LCALL DELAY LCALL DELAY DJNZR5,D10 SETBFM MOV SP,#50H MOV TMOD,#01H ;設(shè)置定時(shí)器T0工作方式1 MOV TL0,#TL0_TIME MOV TH0,#TH0_TIME ;定時(shí)50ms,每秒采樣20次

MOV IE,#10000110B SETB TR0 ;啟動(dòng)定時(shí)器

SETB PX1 SETB IT1 ;EX1邊沿觸發(fā)

MOV 22H,#00H ;高位地址

MOV 23H,#00H ;中間位

MOV 24H,#00H ;低位地址

MOV 26H,#8 ;指示燈快慢節(jié)奏控制

MOV 32H,#00H ;數(shù)據(jù)區(qū)初始化

MOV 31H,#00H MOV 30H,#00H MOV 28H,#00H MOV 27H,#0 MOV 27H,#15 ;蜂鳴間隔時(shí)間L0: LCALL DISP SJMP L0

;++++++++顯示子程序?qū)?2H\23H\24H送P1口顯示,動(dòng)態(tài)掃描DISP: MOV DPTR,#TAB ;定義字型表頭地址

MOV A,22H ;取數(shù)據(jù)MOVC A,@A+DPTR ;查表轉(zhuǎn)換成字型碼

CLR W1 ;選中高位

SETB W2 SETB W3 MOV P1,A ;字型碼送P1口

LCALL DELAY ;1ms延時(shí)

MOV A,23H ;取數(shù)據(jù)

MOVC A,@A+DPTR ;查表轉(zhuǎn)換成字型碼

CLR W2 ;選中中間位

SETB W1 SETB W3 MOV P1,A ;字型碼送P1口

LCALL DELAY ;1ms延時(shí)

MOV A,24H ;取數(shù)據(jù)

MOVC A,@A+DPTR ;查表轉(zhuǎn)換成字型碼

CLR W3 ;選中低位

SETB W1 SETB W2MOV P1,A ;字型碼送P1口

LCALLDELAY ;1ms延時(shí)

RET ;子程序返回DELAY: ;延時(shí)1ms程序

MOVR4,#100DL: NOP ;2μs DJNZR4,DL ;8μs RETTAB: DB0C0H,0F9H,0A4H,0B0H,99H DB92H,82H,0f8H,80H,90H ;字型碼表 ;++++++++啟動(dòng)數(shù)據(jù)采集,采樣頻率20HzZDT0: MOV TL0,#TL0_TIME MOV TH0,#TH0_TIME ;重寫時(shí)間常數(shù)

PUSH ACC ;數(shù)據(jù)進(jìn)棧

PUSH PSW PUSH DPL PUSH DPH MOV DPTR,#ADDR_A ;定義A/D地址

MOVX @DPTR,A ;啟動(dòng)A/D

DJNZ 26H,T01 ;控制指示燈閃爍頻率

MOV 26H,#8 CPL LED ;指示燈閃爍T01: MOV A,28H ;判斷是否蜂鳴

JZ T02 DJNZ 27H,T02 ;判斷蜂鳴時(shí)間

MOV 27H,#15 ;間斷性蜂鳴"嘟……嘟……嘟……" CPL FMT02: POP DPH POP DPL POP PSW POP ACC RETI

;++++++++外部中斷1,數(shù)據(jù)從A/D采集讀入到32H單元ZDEX1: PUSH ACC PUSH DPL PUSH DPH PUSH PSWMOV DPTR,#ADDR_A ;A/D地址

MOVX A,@DPTR ;讀A/D MOV 32H,A ;數(shù)據(jù)存入32H CLR C SUBB A,#135 ;數(shù)字量135相當(dāng)于2.7V JC GO2;小于2.7V,不蜂鳴

MOV A,32H CLR C SUBB A,#145 ;數(shù)字量145相當(dāng)于2.9V JNC GO2 ;大于2.9V,不蜂鳴

MOV 28H,#0FFH ;在2.7V和2.9V之間設(shè)定蜂鳴標(biāo)志GO1: MOV A,32H CLR C ;數(shù)據(jù)×2轉(zhuǎn)換成模擬量存入30H\31H單元

ADD A,32H

MOV 31H,A ;存低位

MOV A,#0 ;高位處理

ADDC A,#0 MOV 30H,A ;存高位LCALL CHU_L ;調(diào)用子程序轉(zhuǎn)換成三位BCD碼到22H\23H\24H GBACK:POP PSW ;數(shù)據(jù)出棧

POP DPH POP DPL POP ACC RETIGO2: MOV 28H,#00H ;在2.7V和2.9V之外不蜂鳴

LJMP GO1;++++++++RAM30H、31H中數(shù)據(jù)轉(zhuǎn)換成5位的BCD碼,放在20H、21H、22H、23H、24H(高位在前面)CHU_l: MOV R0,#20H ;結(jié)果單元的首地址

MOV A,30H ;原來數(shù)據(jù)的高位

MOV B,31H ;原來數(shù)據(jù)的低位

MOV R6,#27H MOV R5,#10H ;2710H相當(dāng)于10000 LCALL CHUFA ;萬位存30H MOV R6,#03H MOV R5,#0E8H ;03E8H相當(dāng)于1000 INC R0 LCALL CHUFA ;千位存31H MOV R6,#00 MOV R5,#100 ;相當(dāng)于100 INC R0 LCALL CHUFA ;百位存32H

XCH A,B ;取出百位后,A中為0,只有B中有數(shù)據(jù)

MOV B,#10 DIV AB INC R0 MOV @R0,A ;十位存33HXCH A,B INC R0 MOV @R0,A ;個(gè)位存34H RET;++++++++(A、B)/(R6、R5),商@R0(<=255),余數(shù)A、BCHUFA:MOV R7,#0 ;商寄存器清零 CHF1: CLR C XCH A,B SUBB A,R5 ;被除數(shù)低位減去除數(shù)低位

XCH A,B SUBB A,R6 ;被除數(shù)高位減去除數(shù)高位

INC R7 ;商預(yù)+1 JNC CHF1 DEC R7 ;不夠減,商復(fù)原

XCH A,B ADD A,R5 XCH A,B ADDC A,R6 XCH A,R7 MOV @R0,A XCH A,R7 RET END2.設(shè)計(jì)實(shí)例二:簡(jiǎn)易遙控器系統(tǒng)的設(shè)計(jì)(1)任務(wù)要求描述用TC9148作為發(fā)射器,MCS-51單片機(jī)作為接收芯片,設(shè)計(jì)簡(jiǎn)易遙控系統(tǒng)。(2)硬件電路設(shè)計(jì)根據(jù)系統(tǒng)要求,硬件電路主要由發(fā)射電路和接收電路組成。其中發(fā)射電路采用東芝公司生產(chǎn)的專用遙控芯片TC9148,其典型應(yīng)用如圖8-8所示。TC9148具有電源電壓范圍較寬(2.2V~5.5V);CMOS工藝功耗極低,待機(jī)時(shí)10μA以下;外圍元件少,電路簡(jiǎn)單等特點(diǎn)。圖8-8TC9148發(fā)射芯片典型應(yīng)用圖

實(shí)際調(diào)試時(shí)可以到市場(chǎng)上購(gòu)買現(xiàn)成的TC9148芯片的遙控器,要注意的是檢查發(fā)射電路是否將發(fā)射脈沖反相,另外檢查它的用戶碼的結(jié)構(gòu),即圖8-8中TC9148的10、11、12腳的二極管組合。下面所講接收器的設(shè)計(jì)是針對(duì)圖8-8的發(fā)射電路。接收器硬件電路設(shè)計(jì):接收器硬件包括接收頭、CPU電路、外部指示燈。接收頭:采用目前市場(chǎng)上價(jià)廉易購(gòu)的一體化接收頭,其內(nèi)部集成了放大、整形、解碼等,直接輸出調(diào)制代碼,有關(guān)“0”、“1”碼的定義及一體化接收輸出后的波形如圖8-9所示。(a)發(fā)射時(shí)“0”、“1”碼的定義(b)一體化接收輸出后波形圖8-9發(fā)射與接收波形CPU:考慮到接收系統(tǒng)所需的端口較少,CPU暫時(shí)用AT89C2051(允許電壓2.7V~6V),程序稍加改變可以移植到AT89C51/52的系統(tǒng)中。外部電路:用LED作為遙控接收后的狀態(tài)指示,對(duì)實(shí)際應(yīng)用系統(tǒng),根據(jù)控制對(duì)象及要求來設(shè)計(jì)相應(yīng)的接口電路。相關(guān)硬件電路如圖8-10所示,D1、D2、D3、D4分別為4個(gè)按鍵對(duì)應(yīng)的指示燈,并且每次接收正確代碼后有“短”的提示聲,錯(cuò)則發(fā)“長(zhǎng)”聲。圖8-10簡(jiǎn)易遙控接收系統(tǒng)硬件(3)軟件設(shè)計(jì)根據(jù)系統(tǒng)要實(shí)現(xiàn)的功能,軟件部分的核心是遙控信號(hào)接收程序。下面先對(duì)TC9148發(fā)射器的編碼規(guī)則進(jìn)行簡(jiǎn)單的介紹。①TC9148發(fā)送的命令發(fā)送命令由12位碼組成,格式如下所示:C1C2C3HS1S2D1D2D3D4D5D6用戶碼連發(fā)/單發(fā)碼鍵碼

其中C1、C2、C3是用戶碼,用來確定不同的模式,區(qū)分不同的產(chǎn)品。確定用戶碼的方法是:在T1、T2、T3(TC9148的10、11、12腳)與CODE之間分別接二極管則分別代表C1、C2、C3為“1”,若某一端不接二極管則代表“0”,圖8-8中的用戶碼為“1、1、1”(在12位碼中,“0”與“1”的定義如圖8-9所示)。12位碼中的H1、S1、S2是代表連續(xù)發(fā)送或單次發(fā)送的識(shí)別碼,當(dāng)H1、S1、S2取“1、0、0”時(shí)對(duì)應(yīng)了6個(gè)連發(fā)鍵,即圖8-8中的1、2、……、6號(hào)鍵。當(dāng)H1、S1、S2取“0、1、0”和“0、0、1”時(shí)對(duì)應(yīng)了12個(gè)單發(fā)鍵,即圖8-8中的7、8、……、18號(hào)鍵。12位碼中的D1~D6是發(fā)送的數(shù)據(jù)碼,具體可以參考TC9148的介紹。下面給出本例中用到的7、8、9、10四個(gè)單發(fā)鍵的12位代碼組成。“7”:111010100000 “8”:111010010000“9”:111010001000 “10”:111010000100②編碼發(fā)送規(guī)則在遙控系統(tǒng)中,編碼發(fā)射時(shí)具有嚴(yán)格的次序和時(shí)間規(guī)定。基本發(fā)送波形:每個(gè)發(fā)送周期按C1、C2、C3、H1、S1、S2、D1、D2、D3、D4、D5、D6的次序串行發(fā)送,總長(zhǎng)度為48a,其中a等于每個(gè)碼周期的1/4,其計(jì)算方法是a=(1/fosc)×192s≈420μs,其中fosc是遙控發(fā)射器的晶體振蕩器頻率,目前普遍采用的是455kHz。圖8-11是發(fā)送“010100100100”12位碼的波形,所需時(shí)間共48a≈20ms。圖8-11基本發(fā)送波形單發(fā)鍵發(fā)送規(guī)則:按下單發(fā)鍵時(shí),輸出的12位碼共發(fā)送兩個(gè)周期(12位碼為一個(gè)周期),中間間隔80a,如圖8-12所示。連發(fā)鍵發(fā)送規(guī)則:按下連續(xù)鍵時(shí),輸出碼將連續(xù)發(fā)送,在每?jī)山M(兩個(gè)周期為1組)信號(hào)之間停頓208a,如圖8-13所示。圖8-12單發(fā)鍵發(fā)送規(guī)則圖8-13連發(fā)鍵發(fā)送規(guī)則無論是“0”還是“1”,它們被發(fā)射時(shí),被調(diào)制在38kHz(振蕩頻率為455kHz經(jīng)過分頻后產(chǎn)生)的載波上(載波的占空比為1/3,這樣有利于減小功耗),如圖8-14所示。接收頭收到信號(hào)后通過解碼又恢復(fù)出原來的代碼(實(shí)際為反碼)。圖8-14調(diào)制后的波形③軟件接收思想根據(jù)上面的編碼規(guī)則和發(fā)送波形,對(duì)于單發(fā)信號(hào)來說,我們只要連續(xù)接收兩個(gè)周期的編碼,然后進(jìn)行比較即可。如兩次編碼不同,則放棄這些數(shù)據(jù)。如兩次編碼相同,則對(duì)編碼進(jìn)行鑒別與判斷,首先是鑒別用戶碼,如果不符,則認(rèn)為是其他干擾信號(hào)(如其他類似遙控器的指令);如果用戶碼通過,則認(rèn)為信號(hào)有效,然后進(jìn)行鍵碼的進(jìn)一步比較,判斷是哪個(gè)按鍵,最后根據(jù)按鍵號(hào)執(zhí)行相應(yīng)的功能。另外,在每次按鍵判斷時(shí),必須設(shè)立一個(gè)時(shí)間范圍,超過此時(shí)間后,取消本次接收,重新進(jìn)入第一個(gè)脈沖的接收。從圖8-12可以算出單發(fā)鍵每次的信號(hào)從開始到結(jié)束持續(xù)時(shí)間為48a+80a+48a=176a≈74ms,所以時(shí)間可以設(shè)置成100ms。④代碼的讀?、壑兄v的是總體接收的思想,那么對(duì)于每個(gè)代碼(“0”、“1”)又是如何來識(shí)別和讀取呢?圖8-15是從一體化接收頭輸出的“0”、“1”碼的波形,分析波形后不難發(fā)現(xiàn):不管是“0”還是“1”,它們出現(xiàn)時(shí)的共同點(diǎn)是都有從“1”到“0”的一個(gè)跳變,即出現(xiàn)一個(gè)下降沿。利用外部中斷的下降沿中斷功能就可以捕捉到這一跳變,這樣就找到了代碼捕捉的起始點(diǎn),同時(shí)進(jìn)一步觀測(cè)圖8-9與圖8-15的波形后可以發(fā)現(xiàn),從起始點(diǎn)經(jīng)過約2a(=840μs)后能較好地讀到代碼的值(因?yàn)榻邮疹^內(nèi)部的倒相,實(shí)際讀到的是反碼,程序中取反就可恢復(fù)原碼)。圖8-15接收輸出后波形⑤程序介紹主程序:主要完成端口狀態(tài)的初始化,中斷、定時(shí)器工作方式設(shè)置、內(nèi)部緩沖區(qū)狀態(tài)初始化,流程如圖8-16所示。外部中斷0服務(wù)程序:利用下降沿中斷功能來檢測(cè)遙控信號(hào)的到來,一旦有代碼輸入即發(fā)生中斷。程序的任務(wù)先是做好2a定時(shí)的準(zhǔn)備,同時(shí)對(duì)輸入的脈沖數(shù)目進(jìn)行統(tǒng)計(jì),以區(qū)分是第一個(gè)周期的12個(gè)代碼還是第二個(gè)周期的12個(gè)代碼,并做好相應(yīng)的標(biāo)志,使數(shù)據(jù)能分別存入相應(yīng)的單元中,流程如圖8-17所示

圖8-16主程序流程圖

圖8-17外部中斷0流程定時(shí)器T1中斷服務(wù)程序:定時(shí)器T1定時(shí)時(shí)間為210μs,其啟動(dòng)時(shí)間受外部中斷0的控制,以便在2a(840μs)時(shí)刻對(duì)輸入代碼進(jìn)行讀取與識(shí)別。程序的內(nèi)容是,每次在2a時(shí)刻讀入代碼并取反(接收頭輸出為反碼),根據(jù)前后兩周期(12個(gè)為一周期)的標(biāo)志保存到相應(yīng)內(nèi)存中,等到24個(gè)脈沖收齊后進(jìn)行前后兩組數(shù)據(jù)判斷,如前后兩組不等,則數(shù)據(jù)作廢;如前后兩組相等,則檢測(cè)用戶碼,若錯(cuò)誤,則發(fā)長(zhǎng)音以示非本系統(tǒng)的遙控器;若用戶碼檢驗(yàn)通過,則判斷按鍵并執(zhí)行相應(yīng)的功能,程序流程如圖8-18所示。定時(shí)器T0中斷服務(wù)程序:定時(shí)器T0定時(shí)時(shí)間為50ms,其任務(wù)是產(chǎn)生100ms時(shí)間,并完成蜂鳴的處理,流程如圖8-19所示。圖8-18T1中斷流程圖

圖8-19T0中斷流程圖(4)程序清單

;2AH單元:為首次脈沖到來標(biāo)記,=00H表示沒有脈沖來過;第一個(gè)脈沖來后變?yōu)镕FH,并開始定時(shí)100ms后,恢復(fù)00H;2BH單元:100ms計(jì)時(shí),初值為00,第一個(gè)脈沖后設(shè)置為2×50ms;30H單元:中斷脈沖統(tǒng)計(jì),初值為0;31H單元:前后12次脈沖記號(hào),前12個(gè)=00H,后12個(gè)=FFH;33H單元:接收脈沖前12位的低8位;34H單元:接收脈沖前12位的高4位,前12位是第一個(gè)周期的脈沖;35H單元:接收脈沖后12位的低8位;36H單元:接收脈沖后12位的高4位,后12位是第二個(gè)周期的脈沖;37H單元:4×210μs(840μs)的常數(shù)4;38H單元:發(fā)聲長(zhǎng)短時(shí)間控制;++++++++端口地址、常數(shù)定義

LED_1 BIT P1.3 ;13 LED_2 BIT P1.4 ;14 LED_3 BIT P1.5 ;15 LED_4 BIT P1.6 ;16 FM BIT P1.2 YK_IN BIT P3.2 TIM_TL0 EQU 0B8H ;50ms時(shí)間常數(shù),時(shí)鐘頻率12MHz TIM_TH0 EQU 3CH TIM_TL1 EQU 2EH ;210μs時(shí)間常數(shù)

TIM_TH1 EQU 2EH

;++++++++以下是入口地址

ORG 0000H SJMP MAIN ORG 0003H LJMP ZDEX0 ORG 000BH LJMP ZDT0

ORG 001BH LJMP ZDT1

;++++++++主程序ORG 0050HMAIN: MOV SP,#60H MOV P1,#11111111B ;P1輸出初始化

MOV P3,#0FFH ;P3輸入初始化

MOV TMOD,#21H ;T0定時(shí)方式1、T1方式2 MOV TL0,#TIM_TL0 MOV TH0,#TIM_TH0 ;T0定時(shí)方式1,50ms,f=6MHz MOV TL1,#TIM_TL1 MOV TH1,#TIM_TH1 ;T1定時(shí)210μs MOV IE,#10001011B ;設(shè)置中斷方式

SETB PT1 SETB PX0 CLR PT0 SETB IT0 ;外部中斷0為遙控輸入,設(shè)置成邊沿中斷

SETB TR0MOV 38H,#10 ;聲音長(zhǎng)短設(shè)置,開機(jī)發(fā)短聲

CLR FM MOV 2AH,#0 ;首次脈沖標(biāo)記

MOV 2BH,#0 ;首個(gè)脈沖后100ms計(jì)時(shí)單元

MOV 30H,#0 ;中斷脈沖個(gè)數(shù)統(tǒng)計(jì)

MOV 31H,#0 ;前12個(gè)、后12個(gè)脈沖標(biāo)記

MOV 33H,#0 ;前12個(gè)脈沖的低8位

MOV 34H,#0 ;前12個(gè)脈沖的高4位

MOV 35H,#0 ;后12個(gè)脈沖的低8位

MOV 36H,#0 ;后12個(gè)脈沖的高4位

MOV 37H,#4 ;4×210μs=840μs SJMP $

MOV TH0,#TIM_TH0 MOV A,38H ;蜂鳴判斷處理

JZ LL1 DEC 38H MOV A,38H JNZ LL1 SETB FM ;發(fā)音結(jié)束

LL1: MOV A,2BH ;100ms判斷

JZ ZDT0_1 DEC 2BH MOV A,2BH JNZ ZDT0_1 MOV 2AH,#0 ;100ms后首個(gè)脈沖標(biāo)記清零MOV 30H,#0 ;脈沖統(tǒng)計(jì)單元

MOV 31H,#0 ;前后12個(gè)脈沖標(biāo)記

MOV 33H,#0 ;代碼存儲(chǔ)區(qū)清零

MOV 34H,#0 MOV 35H,#0 MOV 36H,#0ZDT0_1:POP PSW POP ACC RETI;++++++++外部中斷0(遙控脈沖來后中斷)服務(wù)程序ZDEX0:PUSH ACC PUSH PSW CLR EX0 ;關(guān)閉外部中斷0 MOV 37H,#4 ;840μs到***

SETB TR1 ;啟動(dòng)2a(840μs)定時(shí)

MOV A, 2AH ;判斷是否是第一個(gè)脈沖JNZ ZDX0_1 MOV 31H,#0 ;是第一個(gè)脈沖

MOV 2AH,#0FFH MOV 2BH,#2 ;設(shè)定每次接收的時(shí)間2×50msZDX0_1:INC 30H ;脈沖數(shù)累計(jì)

MOV A,30H CLR C SUBB A,#13 ;前后12個(gè)脈沖判斷

JC ZDX0_2 MOV 31H,#0FFH ;后12個(gè)脈沖標(biāo)記ZDX0_3:SETB EX0 POP PSW POP ACC RETIZDX0_2:MOV 31H,#00H ;前12個(gè)脈沖標(biāo)記

LJMP ZDX0_3;++++++++定時(shí)器T1中斷服務(wù)程序(定時(shí)210μs)ZDT1: PUSH ACC PUSH PSW DJNZ 37H,BACK ;2a=840μs時(shí)間判斷

MOV 37H,#4 ;840μs到

CLR TR1 ;關(guān)定時(shí)器

MOV A,31H ;前后12個(gè)脈沖判斷

JNZ ZDT1_1 MOV C,YK_IN ;前12個(gè)脈沖,讀取代碼

CPL C MOV A,33H ;

RLC A MOV 33H,A ;代碼并放入34H、33HMOV A,34H RLC A MOV 34H,ABACK:POP PSW POP ACC RETI ZDT1_1:MOV C,YK_IN ;后12個(gè)脈沖,代碼放入36H、35H CPL C MOV A,35H RLC A MOV 35H,A MOV A,36H RLC A MOV 36H,A MOV A,30H CJNE A,#18H,BACK ;不到24(兩個(gè)周期共24位代碼)個(gè)返回MOV 2AH,#0 MOV 30H,#0 MOV 31H,#0 MOV A,35H ;足24個(gè)進(jìn)行代碼驗(yàn)證和比較

CJNE A,33H,ZDT1_2 ;代碼低8位不等,作廢

MOV A,34H CJNE A,36H,ZDT1_2 ;代碼高4位不等,作廢

ANL A,#0FH ;屏蔽其他無關(guān)數(shù)據(jù)

CJNE A,#0EH,ZDT1_3 ;驗(yàn)證用戶碼,錯(cuò)誤發(fā)長(zhǎng)音

CLR FM ;接收正確,發(fā)短音

MOV 38H,#10 MOV A,35H CJNE A,#0A0H,NEXT1 ;鍵碼判斷LCALL FUN_K7 ;是K7,調(diào)相應(yīng)功能程序

CLR LED_1 ;接收后狀態(tài)指示燈SETB LED_2 SETB LED_3 SETB LED_4 LJMP BACKNEXT1:CJNEA,#90H,NEXT2 LCALL FUN_K8 ;是K8,調(diào)相應(yīng)功能程序

SETB LED_1CLR LED_2 ;接收后狀態(tài)指示燈

SETB LED_3 SETB LED_4 LJMP BACKNEXT2:CJNE A,#88H,NEXT3 LCALL FUN_K9 ;是K9,調(diào)相應(yīng)功能程序SETB LED_2 SETB LED_3 CLR LED_4 SETB LED_1SETB LED_2 CLR LED_3 ;接收后狀態(tài)指示燈

SETB LED_4 LJMP BACKNEXT3:CJNE A,#84H,BACK LCALL FUN_K10 ;是K10,調(diào)相應(yīng)功能程序

SETB LED_1 ;接收后狀態(tài)指示燈

LJMP BACKZDT1_3:MOV 38H,#20 ;用戶碼錯(cuò)誤發(fā)長(zhǎng)音

CLR FMZDT1_2:MOV 2AH,#0 MOV 30H,#0 ;脈沖統(tǒng)計(jì)單元等復(fù)原

MOV 31H,#0 LJMP BACKFUN_K7:… ;K7的功能描述子程序

RETFUN_K8:… ;K8的功能描述子程序

RETFUN_K9:… ;K9的功能描述子程序

RETFUN_K10:… ;K10的功能描述子程序

RETEND上述“…”表示讀者可根據(jù)需要自行定義按鍵功能。3.設(shè)計(jì)實(shí)例三:電子鬧鐘(1)任務(wù)要求描述設(shè)計(jì)一款帶鬧鈴功能的電子時(shí)鐘,能顯示時(shí)、分、秒,能進(jìn)行鬧鈴時(shí)間設(shè)定,精確到秒。(2)硬件電路設(shè)計(jì)MCS-51單片機(jī)內(nèi)部帶有定時(shí)器,可以實(shí)現(xiàn)各種定時(shí)功能,包括時(shí)鐘功能。但由于每次定時(shí)時(shí)間比較短,若對(duì)時(shí)間常數(shù)不做修正,則累計(jì)誤差會(huì)很大,影響走時(shí)精度。同時(shí),考慮到應(yīng)拓展視野,故本例介紹專用的實(shí)時(shí)時(shí)鐘(RTC)芯片DS12C887的應(yīng)用。在單片機(jī)控制下,用DS12C887可以設(shè)計(jì)出一款精度較高的電子時(shí)鐘,并可以實(shí)現(xiàn)任意時(shí)間(精確到秒)的鬧鈴,可以開發(fā)出比較專業(yè)的時(shí)間控制器。下面先來介紹DS12C887的基本使用。圖8-20DS12C887管腳VCC①基本特性DS12C887是Dallas公司生產(chǎn)的專用實(shí)時(shí)時(shí)鐘芯片,其前身是DS1287、DS12887、DS12B887等。該芯片走時(shí)精度高,月誤差小于1分;內(nèi)置鋰電池,斷電下可繼續(xù)工作10年;解決了“千年蟲”問題,可取代電腦上的時(shí)鐘/日歷;具有12小時(shí)制和24小時(shí)制,可廣泛用于各種場(chǎng)合;具有多種中斷功能,便于實(shí)現(xiàn)單片機(jī)控制。②管腳情況DS12C887的管腳如圖8-20所示。圖8-20DS12C887管腳MOT:總線模式選擇,接VCC為Motorola總線時(shí)序,接GND為Intel總線時(shí)序,這里與MCS-51連接時(shí)接GND。SQW:方波輸出腳,根據(jù)內(nèi)部寄存器的設(shè)置,可以輸出15種不同頻率的方波。AS:地址激發(fā)輸入,相當(dāng)于地址鎖存信號(hào),與CPU的ALE相連。DS:數(shù)據(jù)激發(fā)或讀取輸入,在Intel時(shí)序下,作為數(shù)據(jù)讀取控制,與CPU的相連。R/W:在Intel時(shí)序下,R/W相當(dāng)于存儲(chǔ)器的,與CPU的連接。:中斷要求輸出腳,當(dāng)滿足中斷要求時(shí),該腳作為中斷請(qǐng)求輸出,可以與CPU的外部中斷0、1的輸入腳(P3.2、P3.3)連接。:片選端。AD0~AD7:雙向的數(shù)據(jù)/地址線。③內(nèi)部寄存器情況DS12C887內(nèi)部有作一般目的使用的非揮發(fā)性SRAM113個(gè)單元,地址為0EH~31H、33H~7FH;有作為即時(shí)時(shí)鐘數(shù)據(jù)專用存儲(chǔ)的11個(gè)單元;有用于控制用的寄存器4個(gè)單元,地址如表8-1所示(高位地址由決定)。秒00H

時(shí)鬧鈴05H寄存器A0AH秒鬧鈴01H

星期06H寄存器B0BH分02H

日07H寄存器C0CH分鬧鈴03H

月08H寄存器D0DH時(shí)04H

年09H世紀(jì)32HD7D6D5D4D3D2D1D0UIPDV2DV1DV0RS3RS2RS1RS0RR/WR/WR/WR/WR/WR/WR/W表8-1DS12C887內(nèi)部主要單元地址表寄存器A:UIP位:只讀。UIP=1代表數(shù)據(jù)的更新很快就要發(fā)生,UIP=0代表數(shù)據(jù)更新至少在244μs內(nèi)不會(huì)發(fā)生。DV2、DV1、DV0:用來關(guān)閉、開啟振蕩器。沒使用前的DS12C877應(yīng)該處于關(guān)閉狀態(tài),以節(jié)省內(nèi)置電池的耗電。當(dāng)三位出現(xiàn)“010”組合時(shí)將開啟振蕩器并允許即時(shí)計(jì)時(shí)?!?1x”組合時(shí)會(huì)開啟振蕩器,但不能計(jì)時(shí)(計(jì)時(shí)單元都處于復(fù)位),其他任何組合都關(guān)閉振蕩器。RS3~RS0:共16種組合,用于選擇從SQW腳輸出方波的頻率。當(dāng)“0000”組合時(shí)不輸出,詳細(xì)頻率可參考其他相關(guān)資料。寄存器B:D7D6D5D4D3D2D1D0SETPIEAIEUIESQWEDM24/12DSER/WR/WR/WR/WR/WR/WR/WR/WSET位:數(shù)據(jù)更新控制位。SET=0時(shí),每秒后數(shù)據(jù)更新一次;SET=1時(shí),數(shù)據(jù)禁止更新。PIE位:用于設(shè)置SQW腳產(chǎn)生方波時(shí)是否允許中斷。PIE=1時(shí),會(huì)使變低電平作為中斷申請(qǐng)信號(hào);PIE=0時(shí),不產(chǎn)生中斷信號(hào)。AIE:鬧鈴中斷允許控制。AIE=1時(shí),當(dāng)鬧鈴時(shí)間到就會(huì)使變低電平作為中斷申請(qǐng)信號(hào);AIE=0時(shí),即使鬧鈴時(shí)間到也不會(huì)使為低電平。AIE用于設(shè)置鬧鈴是否請(qǐng)求中斷。UIE:數(shù)據(jù)更新中斷允許控制。UIE=1時(shí),數(shù)據(jù)每次更新(每秒更新一次)后使變低電平作為中斷申請(qǐng)信號(hào);UIE=0時(shí),不會(huì)使變?yōu)榈碗娖?。SQWE:用于控制SQW腳是否輸出波形。SQWE=1允許輸出;SQWE=0使SQW恒為低電平。DM:選擇內(nèi)部時(shí)間數(shù)據(jù)的格式。DM=1時(shí)為二進(jìn)制格式;DM=0時(shí)為BCD碼格式。24/12:選擇12小時(shí)制或24小時(shí)制。為1表示24小時(shí)制;為0表示12小時(shí)制。DSE:日光節(jié)約致能,一般設(shè)為0。寄存器C:D7D6D5D4D3D2D1D0IRQFPFAFUF0000RRRRRRRRIRQF:中斷請(qǐng)求總標(biāo)志位。PF:SQW方波輸出中斷請(qǐng)求標(biāo)志位。AF:鬧鈴中斷請(qǐng)求標(biāo)志位。UF:數(shù)據(jù)更新中斷請(qǐng)求標(biāo)志位。上述各位都只能讀,只要讀取寄存器C,各請(qǐng)求標(biāo)志就被清零。寄存器D

VRT:出廠時(shí)設(shè)定為1,若讀到0,說明電池已經(jīng)消耗殆盡,其余各位都為0。D7D6D5D4D3D2D1D0VRT0000000RRRRRRRR④電子鐘硬件電路根據(jù)系統(tǒng)要求,硬件部分包括以下幾個(gè)部分。鍵盤電路:用于修改時(shí)間、設(shè)置鬧鈴時(shí)間。這里設(shè)置3個(gè)按鍵K1、K2、K3,1個(gè)開關(guān)S1,其中K1為移位鍵,用于選擇要修改的位置(一般處于閃爍狀態(tài));K2為“+1”鍵,對(duì)選中的數(shù)據(jù)進(jìn)行加1;K4為“-1”鍵,對(duì)選中的數(shù)據(jù)進(jìn)行減1;S1鍵是時(shí)鐘/鬧鈴切換鍵,用于時(shí)鐘與鬧鈴設(shè)置的狀態(tài)選擇,打開為時(shí)鐘狀態(tài),閉合為鬧鈴設(shè)置狀態(tài)。顯示電路:采用動(dòng)態(tài)掃描、軟件譯碼方式,共設(shè)置6位數(shù)碼管,分別代表時(shí)、分、秒。指示電路:用4個(gè)LED(L1、L2、L3、L4)作為時(shí)、分、秒的分隔號(hào)“:”,處于一直點(diǎn)亮狀態(tài),另外有一個(gè)L5代表鬧鈴時(shí)間到的指示。DS12C887與CPU的連接電路:根據(jù)DS12C887的管腳,與CPU的連接比較簡(jiǎn)單。以上各部分分別如圖8-21、圖8-22、圖8-23所示(省略了振蕩、復(fù)位電路)。圖8-21顯示電路圖8-22CPU與DS12C887的連接圖圖8-23鍵盤、指示燈電路(3)軟件設(shè)計(jì)根據(jù)系統(tǒng)功能,軟件要完成的工作是:讀取并顯示當(dāng)前時(shí)間;掃描鍵盤;完成鬧鈴。①基本思想系統(tǒng)工作有兩種狀態(tài),即時(shí)鐘狀態(tài)和鬧鈴設(shè)置狀態(tài)。在時(shí)鐘狀態(tài)下,根據(jù)DS12C887的中斷功能和目前的硬件結(jié)構(gòu),秒更新和鬧鈴時(shí)都將引發(fā)一次中斷,在中斷程序中通過檢查DS12C887的中斷標(biāo)志(AF:鬧鈴中斷請(qǐng)求標(biāo)志位;UF:數(shù)據(jù)更新中斷請(qǐng)求標(biāo)志位)就可以區(qū)分是秒更新中斷還是鬧鈴中斷,若是秒更新中斷,則CPU直接讀取DS12C887內(nèi)部時(shí)、分、秒的數(shù)據(jù)送顯示緩沖區(qū),若是鬧鈴中斷,則進(jìn)行鬧鈴的處理。同時(shí)在時(shí)鐘狀態(tài)下還要接收鍵盤的信息,隨時(shí)允許進(jìn)行當(dāng)前時(shí)間的設(shè)置工作,設(shè)置時(shí),要做好標(biāo)記,禁止鬧鈴中斷中有關(guān)程序的執(zhí)行。在鬧鈴狀態(tài)下,進(jìn)行鍵盤掃描完成鬧鈴的時(shí)分秒設(shè)置,同時(shí)做好標(biāo)志禁止鬧鈴中斷中有關(guān)程序的執(zhí)行。②程序流程主程序:完成DS12C887的寄存器初始化,其中寄存器A主要是開啟振蕩器和計(jì)時(shí),一般對(duì)新的片子只需要運(yùn)行一次就夠,寄存器B完成時(shí)鐘芯片中斷申請(qǐng)?jiān)O(shè)置;還完成CPU中斷設(shè)置,根據(jù)硬件圖8-22將外部中斷1打開并設(shè)置成邊沿方式;完成從DS12C887中當(dāng)前時(shí)間的讀取并顯示任務(wù);完成有關(guān)內(nèi)存中標(biāo)志單元的初始化;判斷S1的狀態(tài)并做標(biāo)志,調(diào)用鍵盤檢測(cè)程序和信息顯示(根據(jù)S1的狀態(tài)來顯示)。流程如圖8-24所示,兩種狀態(tài)下的鍵盤程序可以合起來通過標(biāo)志來區(qū)分,但這樣難度會(huì)增加,目前的流程從表面上程序量會(huì)稍增加,但比較容易處理。圖8-24主程序流程圖外部1中斷服務(wù)程序:首先讀取DS12C887的寄存器C的數(shù)據(jù),一方面是為了下面的中斷源的判斷,同時(shí)讀取寄存器C后可以清除中斷標(biāo)志,以免引起多次中斷。然后根據(jù)讀取的寄存器C的數(shù)據(jù)判斷是秒更新中斷還是鬧鈴中斷,對(duì)于秒更新中斷,只需將DS12C887的當(dāng)前時(shí)、分、秒信息讀到顯示緩沖區(qū)即可;對(duì)于鬧鈴中斷,檢查是否允許鬧鈴(在時(shí)間修改狀態(tài)和鬧鈴設(shè)置狀態(tài)一般禁止鬧鈴),如允許則執(zhí)行鬧鈴程序,否則跳過鬧鈴程序。流程如圖8-25所示。鍵盤程序1:按照獨(dú)立按鍵式鍵盤的處理方法進(jìn)行鍵盤的識(shí)別,最后執(zhí)行相應(yīng)的功能。K1的功能是移位并使相應(yīng)的數(shù)據(jù)位閃爍,完成數(shù)據(jù)修改后將時(shí)間寫入DS12C887的時(shí)間存儲(chǔ)單元;K2的功能是使閃爍的數(shù)據(jù)+1,分、秒加到“60”回“0”,時(shí)加到“13”回“1”或加到“24”回“0”;K3的功能是使閃爍的數(shù)據(jù)-1。流程圖略。圖8-25外部中斷1服務(wù)程序鍵盤程序2:實(shí)際上與鍵盤程序1幾乎是一樣的,只是鍵盤功能部分改變的數(shù)據(jù)對(duì)象不同,即改變的是鬧鈴緩沖區(qū)的數(shù)據(jù),最后要將數(shù)據(jù)寫入到DS12C887的鬧鈴數(shù)據(jù)區(qū),流程略。顯示程序:參考前面的動(dòng)態(tài)掃描程序的基本流程,按照標(biāo)志顯示當(dāng)前時(shí)間或鬧鈴時(shí)間。同時(shí)要完成數(shù)據(jù)修改位的閃爍,流程略。4.設(shè)計(jì)實(shí)例四:分區(qū)廣播控制器(1)任務(wù)要求描述由PC機(jī)定時(shí)播放音樂(或鈴聲),同時(shí)發(fā)分區(qū)控制指令給控制器,由控制器打開/關(guān)閉相應(yīng)分區(qū)的電源、信號(hào)通路,完成分區(qū)廣播,如早上8:00播放歌曲1,廣播地點(diǎn)1區(qū),控制器接到指令后將1區(qū)(對(duì)控制器來說叫1通道)的電源、信號(hào)通路打開;又如9:30播放歌曲3,廣播地點(diǎn)2區(qū)、4區(qū)、6區(qū),則控制器接到指令后將2通道、4通道、6通道的電源和信號(hào)通路打開。歌曲播放結(jié)束后由PC機(jī)發(fā)結(jié)束指令給控制器,將控制器的相應(yīng)通道都關(guān)閉。(2)設(shè)計(jì)要求本系統(tǒng)是與PC機(jī)通信的應(yīng)用系統(tǒng),控制器輸入信息包括PC機(jī)聲卡提供的音樂信號(hào)和來自PC機(jī)RS232接口的控制信息。根據(jù)約定,控制信息的數(shù)據(jù)格式為“$通道號(hào)通道開/關(guān)碼校驗(yàn)碼”,其中“$”作為數(shù)據(jù)的頭,每次數(shù)據(jù)通信以此為聯(lián)絡(luò)信號(hào),其ASCII碼為“24H”;“通道號(hào)”對(duì)應(yīng)各個(gè)分區(qū)號(hào),控制器設(shè)置8個(gè)通道(每個(gè)通道包含電源和信號(hào)),因此“通道號(hào)”為“01H”到“08H”的數(shù);“通道開/關(guān)碼”是代表執(zhí)行的動(dòng)作,設(shè)“00H”代表關(guān)閉通道,“FFH”代表打開通道;“校驗(yàn)碼”是對(duì)前面的“通道號(hào)通道開/關(guān)碼”兩個(gè)數(shù)據(jù)進(jìn)行校驗(yàn),采用“異或”校驗(yàn),即“校驗(yàn)碼”=“通道號(hào)”異或“通道開/關(guān)碼”,若單片機(jī)收到的控制指令出錯(cuò)(即校驗(yàn)通不過),則給PC機(jī)發(fā)回一個(gè)字符“?”(ASCII碼3FH),讓PC機(jī)重發(fā)剛才的控制指令;若校驗(yàn)正確也給PC機(jī)一個(gè)回話,如發(fā)個(gè)字符“!”(ASCII碼21H)。控制器的輸出共8個(gè)通道,每個(gè)通道包括電源和信號(hào),同時(shí)每個(gè)通道的開/關(guān)狀態(tài)由相應(yīng)的發(fā)光管來指示。(3)硬件電路設(shè)計(jì)根據(jù)系統(tǒng)所述,硬件電路主要有CPU及周邊電路、信號(hào)通路控制電路、電源通路控制電路、RS232接口電路、有關(guān)指示電路。CPU及周邊電路:選用AT89C51,4KB程序存儲(chǔ)器;振蕩電路晶振選用11.0592MHz;因?yàn)橄到y(tǒng)是無人值守的,要求受干擾死機(jī)后能自動(dòng)恢復(fù),所以復(fù)位電路選用看門狗復(fù)位電路。上述硬件電路在第2章都有詳細(xì)介紹。信號(hào)通路控制電路:音頻信號(hào)的控制,一般可以選用模擬電子開關(guān),如四雙向模擬開關(guān)CD4066、三2通道模擬開關(guān)CD4053等。電源通路控制電路:考慮負(fù)載是一般的定壓功放、VCD等廣播系統(tǒng)設(shè)備,所以電源控制選用繼電器控制,同時(shí)將LED發(fā)光管并聯(lián)在繼電器的線包兩端,可以作繼電器工作的指示燈,繼電器的驅(qū)動(dòng)選用ULN2003A,內(nèi)部有7個(gè)達(dá)林頓管,每路可以通過500mA的電流,同時(shí)內(nèi)置7個(gè)續(xù)流二極管,可直接驅(qū)動(dòng)感性負(fù)載,如繼電器、打印頭等,結(jié)構(gòu)如圖8-26所示。(a)ULN2003A內(nèi)部結(jié)構(gòu)(b)ULN2003A外部管腳電源通路和信號(hào)通路的控制電路如圖8-27、圖8-28所示,電源通路由P2.0控制,高電平打開,虛線內(nèi)為ULN2003A內(nèi)部電路,信號(hào)通路由P1.0控制,高電平信號(hào)接通,這里給出一個(gè)通道的例子,實(shí)際上包含8個(gè)一樣的通道,P2控制電源通路,P1口控制信號(hào)通路。通信接口電路采用MAX232CPE,可以參考第6章的相關(guān)內(nèi)容,這里不再重復(fù)。圖8-27通道1電源通路控制電路圖8-28通道1信號(hào)通路控制電路(4)軟件設(shè)計(jì)軟件設(shè)計(jì)的重點(diǎn)是與PC機(jī)的數(shù)據(jù)通信,根據(jù)設(shè)計(jì)要求,通信的數(shù)據(jù)格式是“$通道號(hào)通道開/關(guān)碼校驗(yàn)碼”,我們讓單片機(jī)處于中斷接收方式,并做好數(shù)據(jù)接收個(gè)數(shù)的記錄,收到第一個(gè)數(shù)據(jù)后判斷是否字符“$”,正確的話,接收數(shù)據(jù)個(gè)數(shù)加1,準(zhǔn)備接收其他數(shù)據(jù);若第一個(gè)數(shù)據(jù)不是“$”,則作廢,重新接收第一個(gè)數(shù)據(jù)。這樣收齊4個(gè)數(shù)據(jù)(后三個(gè)數(shù)據(jù)在內(nèi)存中要暫時(shí)保存起來以備后用)后檢驗(yàn)“校驗(yàn)碼”是否等于“通道號(hào)”和“通道開/關(guān)碼”的異或,如果關(guān)系成立,則對(duì)“通道號(hào)”和“通道開/關(guān)碼”進(jìn)行判斷并作出相應(yīng)的處理,并給PC機(jī)發(fā)送“21H”;如果關(guān)系不成立,說明通信過程數(shù)據(jù)出錯(cuò),給PC機(jī)發(fā)送“3FH”,要求重發(fā)指令,另外從接收到第一個(gè)“$”后定時(shí)器開始定時(shí),來設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論