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

下載本文檔

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

文檔簡介

8.1設(shè)計概述

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

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

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

圖8-5定時器中斷程序顯示子程序:采用軟件譯碼、動態(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)志,同時要將實際電壓的BCD碼送顯示緩沖區(qū)用于顯示,流程如圖8-7所示。當(dāng)基準(zhǔn)電壓取5.1V(可以用TL431和若干個電阻來實現(xiàn))的時候,A/D轉(zhuǎn)換后的滿值數(shù)據(jù)是255(FFH),這樣模擬量與數(shù)字量本身的比值(分辨率)是個整數(shù)(5.1V/255=)20mV,為實際模擬量的計算提供了方便。計算時只要將數(shù)字量乘以2,小數(shù)點固定即可,計算過程不會引入誤差。圖8-6顯示子程序圖8-7A/D數(shù)據(jù)讀取程序(5)主板測試器程序清單

;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è)定 ;28H:蜂鳴標(biāo)志設(shè)定,=00H:不叫 ;=FFH:叫 ;++++++++以下端口地址定義

ADDR_A EQU 7FFFH ;A/D地址

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

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

FM EQU P3.5 ;蜂鳴器

TL0_TIME EQU 58H ;定時器時間常數(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ī)鳴叫時間1sD10: LCALL DELAY ;1ms延時

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

MOV IE,#10000110B SETB TR0 ;啟動定時器

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 ;蜂鳴間隔時間L0: LCALL DISP SJMP L0

;++++++++顯示子程序?qū)?2H\23H\24H送P1口顯示,動態(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延時

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

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

CLR W2 ;選中中間位

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

LCALL DELAY ;1ms延時

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

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

CLR W3 ;選中低位

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

LCALLDELAY ;1ms延時

RET ;子程序返回DELAY: ;延時1ms程序

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

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

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

MOVX @DPTR,A ;啟動A/D

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

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

JZ T02 DJNZ 27H,T02 ;判斷蜂鳴時間

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

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

圖8-16主程序流程圖

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

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

;2AH單元:為首次脈沖到來標(biāo)記,=00H表示沒有脈沖來過;第一個脈沖來后變?yōu)镕FH,并開始定時100ms后,恢復(fù)00H;2BH單元:100ms計時,初值為00,第一個脈沖后設(shè)置為2×50ms;30H單元:中斷脈沖統(tǒng)計,初值為0;31H單元:前后12次脈沖記號,前12個=00H,后12個=FFH;33H單元:接收脈沖前12位的低8位;34H單元:接收脈沖前12位的高4位,前12位是第一個周期的脈沖;35H單元:接收脈沖后12位的低8位;36H單元:接收脈沖后12位的高4位,后12位是第二個周期的脈沖;37H單元:4×210μs(840μs)的常數(shù)4;38H單元:發(fā)聲長短時間控制;++++++++端口地址、常數(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ù),時鐘頻率12MHz TIM_TH0 EQU 3CH TIM_TL1 EQU 2EH ;210μs時間常數(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定時方式1、T1方式2 MOV TL0,#TIM_TL0 MOV TH0,#TIM_TH0 ;T0定時方式1,50ms,f=6MHz MOV TL1,#TIM_TL1 MOV TH1,#TIM_TH1 ;T1定時210μs MOV IE,#10001011B ;設(shè)置中斷方式

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

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

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

MOV 2BH,#0 ;首個脈沖后100ms計時單元

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

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

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

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

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

MOV 36H,#0 ;后12個脈沖的高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后首個脈沖標(biāo)記清零MOV 30H,#0 ;脈沖統(tǒng)計單元

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

MOV 33H,#0 ;代碼存儲區(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 ;啟動2a(840μs)定時

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

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

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

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

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

MOV 37H,#4 ;840μs到

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

MOV A,31H ;前后12個脈沖判斷

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

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個脈沖,代碼放入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(兩個周期共24位代碼)個返回MOV 2AH,#0 MOV 30H,#0 MOV 31H,#0 MOV A,35H ;足24個進(jì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 ;驗證用戶碼,錯誤發(fā)長音

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 ;用戶碼錯誤發(fā)長音

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

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

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

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

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

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

時鬧鈴05H寄存器A0AH秒鬧鈴01H

星期06H寄存器B0BH分02H

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

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

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

溫馨提示

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

評論

0/150

提交評論