項目七制作可定時定鬧的數(shù)字鐘_第1頁
項目七制作可定時定鬧的數(shù)字鐘_第2頁
項目七制作可定時定鬧的數(shù)字鐘_第3頁
項目七制作可定時定鬧的數(shù)字鐘_第4頁
項目七制作可定時定鬧的數(shù)字鐘_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機原理與應(yīng)用教材項目七制作可定時定鬧的數(shù)字鐘本項目完成的數(shù)字鐘為24小時制時間顯示,可校準(按鍵)、可定時、定鬧、定時時間掉電保存等。涉及數(shù)碼顯示、中斷系統(tǒng)、定時器、按鍵輸入、E2PR0M讀/寫、數(shù)據(jù)運算處理等單片機綜合知識,是一個相對復(fù)雜的實用程序。由此展開,可得到如打鈴儀、校園定時廣播系統(tǒng)、倒計時器及與時間控制有關(guān)的工業(yè)控制器等產(chǎn)品項目;可與項目三有機合并,成為一個適合比賽用的綜合顯示牌。【知識目標(biāo)】知道串行總線的概念。會用E2PR0M,重點為AT24系列芯片的讀/寫時序。知道并會用基本的硬件/軟件措施增強單片機系統(tǒng)的可靠性。【技能目標(biāo)】完成數(shù)字鐘的設(shè)計。擴展數(shù)字鐘功能。學(xué)會單片機項目

2、開發(fā)規(guī)劃步驟。任務(wù)一I2C總線與AT24C02【任務(wù)目標(biāo)】知道I2C通信、時序概念。學(xué)會AT24C02讀/寫步驟。學(xué)會看器件手冊、了解時序?!咀x一讀】知識I2C總線概念與AT24C021.I2C總線概念I(lǐng)2C總線協(xié)議即雙向數(shù)據(jù)通信“握手”約定,這種約定允許通過一個簡單的兩線系統(tǒng)總線在各種設(shè)備之間進行通信操作。I2C總線實際上已經(jīng)成為一個國際標(biāo)準,在超過數(shù)百種不同的IC上實現(xiàn)并得到50多家公司的認可,下面是fc總線的一些特征。1)只要求兩條總線線路:一條串行數(shù)據(jù)線(SDA),一條串行時鐘線CSCL)。2)每個連接到總線的器件都可以通過唯一的地址作為發(fā)送器或接收器。3)串行8位雙向數(shù)據(jù)傳輸速率在標(biāo)

3、準模式時可達100Kb/s。2.AT24C02AT24C但是電可擦除的串行只讀存儲器(E2PR0M),可存儲256個字節(jié)內(nèi)容,每個字節(jié)為8位。該器件特點:兩線串行接口、雙向數(shù)據(jù)傳輸、硬件數(shù)據(jù)寫保護、8字節(jié)頁寫方式等。可保證10萬次擦寫周期及有效保存數(shù)據(jù)10年。由于這種器件上電后可在線編程數(shù)據(jù)、失電時長期保存,故被廣泛用于智能儀表、信息存儲卡、掉電保護等各個領(lǐng)域。AT24C02屬AT24CXX系列的一個型號,該系列其他型號的芯片功能均與之兼容,僅存儲空間大小有區(qū)別,如AT24C0l為128字節(jié)。對AT24C02引腳功能闡述如下。AT24C02引腳排列如圖7-1所示。圖7-1AT24C02引腳排列

4、1)串行時鐘(SCL)0SCL為串行時鐘端,時鐘信號用于對輸入和輸出數(shù)據(jù)的同步,寫入串行E2PR0M的數(shù)據(jù)用其上升沿同步,輸出數(shù)據(jù)用其下降沿同步。2)串行數(shù)據(jù)(SDA)。SDA為串行數(shù)據(jù)輸入/輸出端。該引腳是漏極開路驅(qū)動,可以與其他漏極開路或集電極開路的器件“線或”連接。3)寫保護端CWP)。該引腳用于硬件數(shù)據(jù)保護。當(dāng)其接地時,可對整個器件進行正常的讀/寫操作;當(dāng)其接正電源Vcc時,芯片具有數(shù)據(jù)寫保護功能,數(shù)據(jù)只能讀出不能寫入。4)器件地址CA0、Al、A2)。片選或頁面選擇地址輸入,用于器件的選擇。在一個單總線上最多可掛8個AT24C02器件。每個器件通過引腳A0、Al,A2的不同連接(接V

5、cc或接地)來設(shè)置不同器件的地址,如圖7-2所示。圖7-2不同接法的器件地址5)電源(VCC)0AT24C02標(biāo)準電壓為+5V。3.AT24C02編程步驟AT24C02遵守I2C總線協(xié)議,其讀/寫時序如圖7-3所示。圖7-3I2C時序編程步驟如下。1)主控器件發(fā)送一個起始信號啟動一次數(shù)據(jù)傳送,啟動時序規(guī)范如圖7-4(a)所示。圖7-424C02定時規(guī)范2)發(fā)送命令字節(jié),其格式如下:該命令字節(jié)的D7D4位為固定部分,規(guī)定為1010;D3D1為受控器件的地址編碼(如圖7-2所示)D0位表明隨后的操作是寫或讀,D0位等于1為讀,D0位等于0為寫。例如對圖7-2(a)接法的24C02器件發(fā)送的命令字節(jié)

6、為101000000D0位為0表示隨后命令為寫入。3)發(fā)送完命令字節(jié)后,SCL發(fā)送第九個時鐘,等待受控器件(24C02)接收完畢并在數(shù)據(jù)線SDA上產(chǎn)生應(yīng)答位(ACK)作為響應(yīng)。主控器件單片機收到應(yīng)答信號后,就可以進行數(shù)據(jù)傳送了。4)如果是寫操作,首先發(fā)送被寫入器件的內(nèi)存首地址,等待應(yīng)答信號(ACK)后,逐個發(fā)送各數(shù)據(jù)。如果是讀操作,首先發(fā)送被讀/寫器件的內(nèi)存首地址,等待應(yīng)答信號(ACK)后,在SDA數(shù)據(jù)線上按時鐘節(jié)拍逐位移入數(shù)據(jù)。AT24C02內(nèi)存地址范圍為00HFFH。5)讀/寫數(shù)據(jù)完畢后,發(fā)送停止信號,終止操作。時序如圖7-4(b)所示?!咀鲆蛔觥繉嵱?xùn)AT24C02讀/寫操作1.實訓(xùn)目的熟

7、悉E2PR0M編程原理及步驟,進一步明確其時序要求。2.實訓(xùn)內(nèi)容在AT24C02內(nèi)存地址80H寫入數(shù)據(jù)后讀出,并在LED上顯示。3.實訓(xùn)步驟1)畫出AT24C02與單片機89C51接口電路,如圖7-5所示。2)畫出程序流程圖。寫操作流程圖如圖7-6所示,要求自行完成讀操作流程圖、數(shù)碼管顯示流程圖。3)程序編寫、編譯、芯片燒錄。參考程序如下。圖7-5AT24C02接口電路圖7-6AT24C02寫操作流程圖;*;項目七:24C02讀寫操作;MCU:89C51,系統(tǒng)時鐘12MHZ;功能:寫入數(shù)據(jù)并讀出,同時顯示在LED上;已在實驗板上調(diào)試通過;*LEDEQUP0LED1EQUP2.7SDAEQUP2

8、.1;數(shù)據(jù)線SCLEQUP2.0;時鐘線WRNUMEQU30H;讀出數(shù)據(jù)存儲WRITEDATAEQU3DH;E2PR0M寫入數(shù)據(jù)緩存0RG0000HLJMPSTART0RG0003HRETI0RG000BHRETI0RG0013HRETI0RG00lBHRETI0RG0023HRETSTART:M0V P0,#0FFHM0VP1,#0FFHM0V R0"#7FHCLRAM:M0VR0,#00DJNZR0,ÇLRAM;內(nèi)容RAM單元清零M0V SP,#70H;堆戰(zhàn)設(shè)置在60H單元MAIN:LCALLWRITE;將數(shù)據(jù)寫入LCALLREAD;數(shù)據(jù)讀出,在WR_NUM單元LCAL

9、LLEDPLAY;將WR一肌用單元數(shù)顯示在LEDLJMPMAIN;*;數(shù)碼管顯示子程序;*LED_PLAY:M0V A,WR_NUM;顯示十位M0VDPTR,#TABM0VCA,A+DPTRM0V P0,ACLRLED1RETTAB:DB0C0H,0F9H,0A/H,0B0H,99H,92H,82H,0F8H,80H,90HF共陽數(shù)碼管段碼;*;E2PR0M讀子程序(AT24C02);*READ:LCALLSTART_EEPR0MM0V A,#0A0HLCALLWBYTEM0V A,#80H;寫入讀數(shù)據(jù)地址LCALLWBYTEN0PN0PLCALLSTARTEEPR0MM0V A,#0A1H;

10、寫入芯片地址LCALLWBYTELCALLRBYTEM0VWR_NUM,A;讀出數(shù)據(jù)LCALLST0PRET;*;WRITE:E2PR0M讀子程序(AT24C02);*WRITE:LCALLSTART_E2PR0MM0V A,#0A0HLCALLWBYTEM0V A,#80H;寫入數(shù)據(jù)地址LCALLWBYTEM0V A,#0;寫入數(shù)據(jù)(0),存24C02地址80HLCALLWBYTE;寫入LCALLST0P;停RET;*;字節(jié)寫子程序;入口;A;占用:R3,write_data;*WBYTE:N0PN0PM0VWRITE_DATA,AWBY1:M0V A,WRITE_DATAM0V R3,#8

11、WBY0:CLRSCLRLCAM0VSDA,CSETBSCLDJNZR3,WBY0;8次CLRSCLN0PN0PSETBSCLN0PN0PN0PN0PJBSDA,WBYl;等ACK響應(yīng),沒有響應(yīng)則重寫CLRSCLN0PN0PRET;*;字節(jié)讀子程序;出口:A;占用:R3;*RBYTE:N0P;字節(jié)讀N0PM0V R3,#8RBY0:CLRSCLN0PN0PSETBSCLN0PN0PMQVc,SDARLCADJNZR3,RBY0CLRSCLN0PN0PSETBSDAN0PN0PSETBSCLN0PN0PRET;*START_EEPR0M:CLRSCL;啟動子程序N0PN0PSETBSDAN0PN

12、0PSETBSCLN0PN0PCLRSDAN0PN0PCLRSCLRET;*ST0P:CLRSCL;停止子程序N0PN0PCLRSDAN0PN0PSETBSCLN0PN0PSETBSDAN0PN0PCLRSCLRETEND4)實驗板上運行程序井觀察數(shù)碼管顯示結(jié)果,依次修改寫入數(shù)據(jù)(限于09)并驗證程序的正確性。5)完成實訓(xùn)報告?!咀h一議】1)I2C總線時序要求非常嚴格,編寫程序時應(yīng)保證其時序的正確,此為程序成敗的關(guān)鍵,對照寫入數(shù)據(jù)的子程序畫出其時序圖,將有助于對I2C總線的理解。2)實訓(xùn)程序中多次出現(xiàn)“N0P"指令,思考其作用是什么?3)在AT24C02地址80H開始連續(xù)寫入1、2、

13、3、4四個數(shù)據(jù),應(yīng)如何編寫程序?在實訓(xùn)參考程序上改動完成?!驹u一評】表7-1AT24C02讀/寫操作實訓(xùn)評測任務(wù)二數(shù)字鐘的設(shè)計【任務(wù)目標(biāo)】學(xué)會對單片機項目的任務(wù)分析法。懂得初步規(guī)劃單片機內(nèi)部資源。完成數(shù)字鐘的程序調(diào)試?!咀x一讀】知識1數(shù)字鐘任務(wù)分析1.任務(wù)分析數(shù)字鐘以其顯示直觀、走時準確而受到了人們的歡迎。在工業(yè)控制方面,數(shù)字鐘作為一種嵌入式電子部件被廣泛應(yīng)用于智能儀表、自動化控制設(shè)備、汽車及與時間有關(guān)的各類控制設(shè)備中。在基本數(shù)字鐘顯示時、分、秒的基礎(chǔ)上,為滿足各種需要,可增加其他相關(guān)功能,如顯示星期、日期(農(nóng)歷、陽歷)、環(huán)境溫度、定時定鬧、多路定時控制(打鈴儀)。圖7-7所示為部分數(shù)字鐘。圖

14、7-7部分數(shù)字鐘外形作為一種計時工具,數(shù)學(xué)鐘的核心離不開計時器,利用單片機設(shè)計制作數(shù)字鐘具有電路簡潔、計時準確、控制靈活等優(yōu)點,任務(wù)設(shè)計流程采用自頂向下設(shè)計法,如圖7-8所示。本項目數(shù)字鐘功能確定:采用四位數(shù)碼管顯示時、分,一路定鬧輸出,采用三個按鍵完成時鐘較準、定時調(diào)節(jié),定時時間可永久記憶。圖7-8數(shù)字鐘設(shè)計自頂向下分析法2.數(shù)字鐘硬件電路設(shè)計根據(jù)本項目的功能分析,確定電路結(jié)構(gòu)如圖7-9所示,采用89C51最小系統(tǒng)為核心,采用4只共陽LED用作顯示,P0口輸出段碼數(shù)據(jù),P2./P2.7口作為位掃描輸出;P1.6口接按鍵7為定鬧設(shè)定,P1.5口接接鍵11調(diào)分鍵,P1.4口接按鍵15為調(diào)小時鍵。

15、P2./P2.7I/0口外接。三極管9012的作用是增強89C51P2口驅(qū)動電流,單片機系統(tǒng)晶振選12MHz,有利于提高秒計時的準確性。圖7-9數(shù)字鐘電路為簡化電路設(shè)計,時鐘的秒點以數(shù)碼管的小數(shù)點顯示,故數(shù)碼管LED3應(yīng)倒裝,因此LED3段碼與其他三種數(shù)碼管不同,在編寫程序時必須注意。知識2時鐘系統(tǒng)程序規(guī)劃1.主程序主程序完成89C51初始化、調(diào)用顯示子程序、按鍵判斷、定鬧時間判斷等功能,流程圖如圖7-10所示。對主程序中幾個標(biāo)志說明如下。FLAGT:時鐘調(diào)整標(biāo)志,供加1子程序用,F(xiàn)LAG_T為1時,調(diào)整小時位,F(xiàn)LAGT為0時調(diào)整分位。圖7-10主程序流程圖阻YDATA:鬧鐘設(shè)定鍵鍵值,每按

16、一次設(shè)定鍵(KEYM0V),鍵值加1,鍵值范圍03。各鍵值意義如表7-2所示。定鬧時間最小單位是分,只需每分鐘查詢一次鬧鈴時間是否己到即可。設(shè)定一個1分鐘時間標(biāo)志FLAGN,1分鐘時間到,由定時器T0子程序置1(FLAGN=l),主程序根據(jù)FLAGN標(biāo)志決定是否查詢定鬧時間。表7-2鍵值標(biāo)志按住時間調(diào)整鍵(阻YH0UR,阻YMINU)不放,時間連續(xù)加1,故程序中不必判斷按鍵是否松開。2.加l子程序加1子程序完成小時、分位的加l調(diào)整,這里有兩種情況,一是對時鐘的調(diào)整(加1)。二是對定鬧時間的調(diào)整:調(diào)整時還須分清是調(diào)小時位還是分位,以上各種情況根據(jù)不同的標(biāo)志完成,表7-3給出了各標(biāo)志代表的意義,圖

17、7-11為加l子程序流程圖。表7-3加1子程序標(biāo)志操作圖7-11加子程序流程圖值得提的是,當(dāng)分位或小時位連續(xù)加l時,單片機運行速度很快,如“加1"速度不加以限責(zé)L二二二會給調(diào)整帶來困難。表7-3中FLAGSPEED標(biāo)志即用來限制調(diào)整速度,本項目設(shè)計為每0.5s加1,F(xiàn)LAGSPEED標(biāo)志產(chǎn)生于定時中斷子程序。3.T0定時中斷子程序定時器T0用于時間計時,定時溢出周期設(shè)為50ms,累計中斷20次為Is,按時、分、秒進制規(guī)律分別給時、分、秒單元賦值。時鐘采用24小時制,即時間到23時59分59秒后全部歸零。定時器T0同時還需完成各種與定時有關(guān)的標(biāo)志,供其他程序使用。由T0產(chǎn)生的標(biāo)志列于表

18、7-4。表7-4T0產(chǎn)生的標(biāo)志4.顯示子程序數(shù)碼智顯示采用動態(tài)掃描顯示法。根據(jù)時鐘所處的狀態(tài),顯示內(nèi)容分為兩種:是顯示正常走時的時鐘;二是顯示定鬧時間。進入定鬧時間調(diào)整狀態(tài)時,顯示定鬧時間,并且小時位或分位數(shù)字閃爍,表明該位己進入調(diào)整狀態(tài),可以進行調(diào)整。不同的顯示狀態(tài)由各自標(biāo)志來判斷。顯示子程序所用的標(biāo)志如表7-5所示。表7-5顯示子程序中的標(biāo)志【做一做】實訓(xùn)1定時、顯示子程序的編寫1.實訓(xùn)目的進一步熟悉動態(tài)掃描顯示法、定時中斷的設(shè)置應(yīng)用。2.實訓(xùn)內(nèi)容完成時鐘顯示、定時子程序流程圖、程序編寫。3.實訓(xùn)步驟(1)畫出顯示子程序流程圖。由圖7-9時鐘電路可知,數(shù)碼管段碼由單片機P0口驅(qū)動,位選分別

19、由P2.7、P2.6、P2.5、P2./完成。在數(shù)字鐘系統(tǒng)中,顯示內(nèi)容有兩個方面,是顯示正常的時鐘;二是在按鍵的控制下可以顯示定鬧時間,在顯示子程序里依靠鍵值KEY_DATA識別(參見表7-5),由此畫出顯示子流程圖如圖7-12所示。圖7-12顯示子、程序流程圖(2)定時中斷子程序定時器T0中斷子程序主要完成時間的累加,以24小時制的規(guī)律運行,即每60s分加1.每1小時加1.每24小時后時間歸零。另外,由表7-3可知,須產(chǎn)生FLAG250ms、FLAG_speed、FLAGS、FLAGN這幾個與時間有關(guān)的標(biāo)志,供其子程序使用。根據(jù)任務(wù)分析完成定時子程序流程圖。(3)顯示、定時中斷參考子程序;*

20、;定時器T0中斷子程序;*TIMER0:M0VT日0,#3CH0RLTL0,#0B0H;重裝初值PUSHPSWPUSHACCDJNZDATAl,T_0M0VDATA1,#SCPLFLAG250MS;250m8時間到標(biāo)志T_0:DJNZDATA2,T_lM0VDATA2,#10SETBFLAG_SPEED;0.5s時間到標(biāo)志T_l:DJNZDATA0,TIMER0_ENDM0VDATA0,#10CPLFLAGS;每一分鐘給標(biāo)志INCSEC0NDM0V A,SEC0NDCJNE A,#120,TIMER0_ENDM0VSEC0ND,#0SETBFLAGNINCMlNUTEM0V A,MlNUTEC

21、JNE A,#60,TIMER0_ENDM0VMINUTE,#0INCH0URM0V A,H0URCJNE A,#24,TIMER0_ENDM0VH0UR,#0TIMER0END:P0PACCP0PPSWRETI;*;數(shù)碼管顯示子程序;*LEDPLAY:CLRLED_1CLRLED_2CLRLED_3CLRLED_4M0V A,KEY_DATACJNE A,#0,PLAY_SETM0V A,H0UR;顯示時鐘,BCD轉(zhuǎn)換M0VB,#10DIVABM0VLED_Q,AM0VLED_B,BM0V A',MlNUTEM0VB,#10DIVABM0VLED_S,AM0VLED_G,BLJMPP

22、LAY_10PLAY_SET:M0V A,H0UR_SET;顯示定鬧時間,BCD轉(zhuǎn)換M0VB,#10DIVABM0VLED_Q,AM0VLED_B,BM0V A,MlNUTE_SETM0VB,#10DIVABM0VLED_S,AM0VLED_G,BPLAY_10:M0V A,KEY_DATACJNE A,#1,PLAY_0JNBFLAG_250MS,PLAY_0M0V A,#0FFH;熄滅符AJMPPLAY1PLbY_0:M0V A,LED_Q;顯示小時十位M0VDPTR,#TABM0VCA,A+DPTRPLAY_1:M0V P0,ASETBLED1LCALLDELIMSCLRLED1M0V

23、A,KEY_DATACJNE A-,#1,PLAY_2JNBFLAG_250MS,PLAY_2M0V A,#0FFH;熄滅符AJMPPLAY3PLAY_2:M0V A,LED_B;顯示小時十位M0VDPTR,#TABM0VCA,A+DPTRJBFLAG_S,PLAY_3CLRACC.7;點亮秒點PLAY_3:M0V P0,ASETBLED_2LCALLDEL_1MSCLRLED_2PLAY_4:M0V A,KEY_DATACJNE A,#2,PLAY_5JNBFLAG_250MS,PLAY_5M0V A,#0FFH;熄滅符AJMPPLAY6PLAY_5:M0V A,LED_S;顯示分十位M0V

24、DPTR,#TABl;實驗板上第二位數(shù)碼管倒裝,其段碼不同M0VCA,A+DPTRJBFLAG_S,PLAY_6CLRACC.6;點亮秒點PLAY_6:M0V P0,ASETBLED3LCALLDEL_lMSCLRLED3M0V A,KEY_DATACJNE A,#2,PLAY_7JNBFLAG_250MS,PLAY_7M0V A,#0FFH;熄滅符AJMPPLAY_8PLAY_7:M0V A,LED_G;顯示分個位M0VDPTR,#TABM0VCA,A+DPTRPLAY_8:M0V P0,ASETBLED4LCALLDELlMSCLRLED4LED_PLAY_END:RETTAB:DB0C0

25、H,0F歸,0A4H,0B0H,99H,92H,82H,0F8日,80H,90日;共陽數(shù)碼管段碼TABl:DB0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H;倒裝數(shù)碼管段碼;*;1ms延時子程序;*DEL_lMS:M0V R0,#2DEL_l:M0V Rl,#250DEL_0:DJNZRl,DEL_0DJNZR0,DEL_lRET(4)顯示子程序調(diào)試在編譯軟件中輸入顯示子程序,軟件匯編通過后燒錄在實驗板上測試。為使顯示子程序正確顯示效果,需在顯示子程序前定義相關(guān)寄存器、并給H0UR(小時)、H0URSET(定鬧小時)、MINUTE(分)、MINUTESET

26、(定鬧分)賦值,觀察實驗板是否正確顯示:在阻Y一DATA為0時,應(yīng)顯示時鐘,為1時應(yīng)顯示定鬧時鐘。(5)定時器T0中斷子程序調(diào)試調(diào)試前需做相關(guān)設(shè)置(頭文件):1)打開定時器T0中斷、總中斷。2)設(shè)置T0定時器初值(按50ms計算)。3)T0中斷子程序相關(guān)寄存器定義。T0定時中斷子程序采用軟件仿真的形式進行調(diào)試,利用Medwin編譯軟件的單步、斷點等功能,觀察是否能產(chǎn)生相關(guān)標(biāo)志,時鐘寄存器單元是否按設(shè)定的要求累加。(6)顯示子程序、定時器中斷子程序聯(lián)調(diào)顯示、定時子程序聯(lián)合調(diào)試可在實驗板上直觀顯示,產(chǎn)生時鐘的效果。調(diào)試前同樣須設(shè)置好頭文件(主程序),如單片機數(shù)據(jù)存儲器清零初始化、定時器設(shè)置、中斷設(shè)

27、置、調(diào)用顯示子程序。實訓(xùn)完成后,寫出實訓(xùn)報告,并填寫評測表。【議一議】1)本實訓(xùn)提供了-種復(fù)雜程序的調(diào)試方法:先按功能模塊(子程序)調(diào)試、最后總調(diào)。這種方法最適合于初次編寫程序的人員,優(yōu)點是容易在較小的范圍內(nèi)發(fā)現(xiàn)錯誤并迅速排錯:缺點是比較費時:故編程具備相當(dāng)熟練的基礎(chǔ)后可跳過分功能調(diào)試,直接進行總調(diào)。2)調(diào)試某一子程序時,為能使程序正確運行、能直觀觀察到數(shù)據(jù)以達到調(diào)試的目的,需在調(diào)試子程序前做些準備工作,如給某些寄存器人為的賦予特定值、加上必要的調(diào)用指令等。務(wù)必讓子程序全部功能顯示出來,讓可能的錯誤全部暴露。3)本實訓(xùn)給出了參考子程序,但并不是唯一的編寫方法,“依葫蘆畫瓢”后可大膽編寫具有自己

28、思路的程序,才能逐步形成自己的編程風(fēng)格?!驹u一評】填定表7-6中的內(nèi)容。表7-6定時、顯示子程序?qū)嵱?xùn)評測表【做一做】實訓(xùn)2數(shù)字鐘的調(diào)試1.實訓(xùn)目的完成整個數(shù)字鐘的調(diào)試,學(xué)會程序調(diào)試、排錯方法。2.實訓(xùn)內(nèi)容1)完成數(shù)字鐘主程序。2)完成E2PR0M讀/寫子程序,保存、讀出走鬧時間。3)其他子程序(顯示、T0中斷子程序、加1子程序等組合聯(lián)調(diào)。3.實訓(xùn)步驟1)細化圖7-10所示流程圖,并寫出程序。2)編寫定鬧時間讀/寫子程序,將定鬧時間小時位、分位寫入24C02保存,每次開機時從24C02讀出定鬧時間。3)完成全部子程序,整機調(diào)試。4)脫機運行。參考主程序如下。;*;項目七:可走時定鬧的數(shù)字鐘;MC

29、U:89C51,系統(tǒng)時鐘12MHz;功能:24小時制時鐘,帶走鬧功能,定鬧時間可永久保存;己在實驗板上調(diào)試通過;*為89C51I/O口定義*KEY_日0UREQUP1.4;調(diào)時KEY_M1NUEQUP1.5;調(diào)分KEY_M0VEQUP1.6;設(shè)定鍵,進入定鬧時間調(diào)整LEDEQUP0LED1EQUP2.7LED2EQUP2.6LED3EQUP2.5LED4EQUP2.4S0UNTEQUP2.3;鬧鐘報警SDAEQUP2.1;E2PR0M數(shù)據(jù)線SCLEQUP2.0;E2PR0M時鐘線;*以下為用戶RAM定義*H0UREQU30H;時鐘小時單元MlNUTEEQU31H;時鐘分單元SEC0NDEQU3

30、2H;時鐘秒單元H0URSETEQU33H;定鬧時間小時單元M1NUTE_SETEQU34H;定鬧時間分單元LED_QEQU35H;BCD千位LEDBEQU36日;BCD百位LEDGEQU37H;BCD個位LEDSEQU38H;BCD十位DATA0EQU39HDATA1EQU3AHDATA2EQU3BHKEY_DATAEQU3CH;設(shè)定鍵鍵值=1調(diào)定鬧小時,=2調(diào)定鬧分,=3保存定鬧時間WRITE_DATAEQU3DH;E2PR0M寫入數(shù)據(jù)緩存FLAG_SEQU20H.0;秒閃標(biāo)志FLAG_TEQU20H.1;=1調(diào)時鐘小時位,=0調(diào)時鐘分位FLAG_SPEEDEQU20H.2;調(diào)整速度FLA

31、G_250MSEQU20H.3FLAGNEQU20H.4;每分鐘查詢一次定鬧時間標(biāo)志;主程序開始:0RG0000HLJMPSTART0RG0003HRET10RG000BHLJMPT1MER00RG0013HN0PRET10RG001BHN0PRETI0RG0023HN0PRETISTART:M0V P0,#0FFHMQVP1,#0FFHCLRS0UNTM0V R0,#7FHCLRAM:M0VR0,#00DJNZR0,CLRAM;內(nèi)容RAM單元清零M0VDATA0,#10M0VDATAl,#5M0VDATA2,#10M0V SP,#60H;堆棧設(shè)置在60H單元M0VH0UR,#12;上電默認時

32、間12:_00M0VTM0D,#01H;設(shè)置T0方式1SETBEASETBET0M0VTH0,#3CHM0VTL0,#0B0H;50ms初值SETBTR0LCALLREAD;讀出定鬧時間MAIN:LCALLLEDPLAYJBKEY_H0UR,MAIN_0LCALLLEDPLAYLCALLLEDPLAYJBKEY_H0UR,MAIN_0SETBFLAGTLCALLADD1;小時加1MAIN_0:JBKEY_MINU,MAIN_1LCALLLEDPLAY.LCALLLEDFLAYJBKEY_MINU,MAIN_1CLR.FLAGTLCALLADD1;分加1MAIN_1:JBKEY_M0V,MAIN

33、_3;調(diào)定鬧時間LCALLLEDPLAYLCALLLEDPLAYJBKEY_M0V,MAIN_3INCKEYDATAMAIN2:LCALLLEDPLAYJNBKEY_M0V,MAIN_2;按鍵松開?M0V A,KEY_DATACJNE A,#3,MAIN_3LCALLWRITE;保存定鬧時間M0VKEY_DATA,#0MAIN_3:JNBFLAG_N,MAIN;每分鐘查詢一次鬧鐘CLRFLAGNM0V A,H0UR_SETCJNE A,H0UR,MAIN_4M0V A,MlNUTE_SETCJNE A,MINUTE,MAIN_4SETBS0UNT;鬧鐘響一分鐘LJMPMAINMAIN4:CLR

34、S0UNTLJMPMAIN24C02讀/寫參考子程序為下。;*;EEPR0M讀子程序(AT24C02);*READ:LCALLSTARTEEPR0MM0V A,#0A0HLCALLWBYTEM0V A,#80H;寫入數(shù)據(jù)地址LCALLWBYTEN0PN0PLCALLSTART_EEPR0MM0V A,#0A1H;寫入芯片地址,定鬧時間存在24C02內(nèi)存80H、81HLCALLWBYTELCALLRBYTEM0VH0UR_:SET,A;讀出定鬧小時位LCALLSTARTEEPR0MM0V A,#0A0HLCALLWBYTEM0V A,#81H;寫入數(shù)據(jù)地址LCALLWBYTEN0PN0PLCAL

35、LSTART_EEPR0MM0V A,#0A1H;寫入芯片地址LCALLWBYTELCALLRBYTEM0VMINUTE_SET,A;讀出定鬧分位LCALLST0PRET;*;WriteE2PR0M子程序CAT24C02);*WRITE:LCALLSTART_EFPR0MM0V A,#0A0HLCALLWBYTEM0V A,#80H;寫入數(shù)據(jù)地址LCAbLWBYTEM0V A,H0UR_SET;寫定鬧小時位,存24C02地址80HLCALLWBYTE;寫入數(shù)據(jù)地址M0V A,MINUTE_SET;寫定鬧分位,存24C02地址81HLCALLWBYTELCALLST0P;停RET;*;字節(jié)寫子程

36、序;入口:A;占用:R3,WRITE_DATA;*WBYTE:M0VWRITE_DATA,AWBY1:M0V A,WRITE_DATAM0V R3,#8WBY0:CLRSCLRLCAM0VSDA,C;寫位SETBSCLDJNZ.R3,WBY0;8次CLRSCLN0PN0PSETBSCLN0PN0PN0PN0PJBSDA,WBYl;等ACK響應(yīng)CLRSCLN0PN0PRET;*;字節(jié)讀子程序;出口:A;占用:R3;*RBYTE:N0P;字節(jié)讀N0PM0V R3,#8RBY0:CLRSCLN0PN0PSETBSCLN0PN0PM0VC,SDARLCADJNZR3,RBY0CLRSCLN0PN0PS

37、ETBSDAN0PN0PSETBSCLN0PN0PRET;*;啟動子程序;*STARTEEPR0M:CLRSCL;啟動子程序N0PN0PSETBSDAN0PN0PSETBSCLN0PN0PCLRSDAN0PN0PCLRSCLRET;*;停止子程序;*ST0P:CLRSCLN0PN0PCLRSDAN0PN0PSETBSCLN0PN0PSETBSDAN0PN0PCLRSCLRET【議一議】1)本實訓(xùn)項目數(shù)字鐘的完成具有實用意義,可直接投入生活應(yīng)用。2)程序中所用標(biāo)志較多,寫程序時若列出表格,注明標(biāo)志功能,可減少差錯:凡涉及標(biāo)志,一定有“生”有“死”,即標(biāo)志產(chǎn)生于何時,又在何時消除,這是一個很嚴密的

38、邏輯,不容一點差錯。3)實訓(xùn)數(shù)字鐘程序可保存定鬧時間,即掉電后重新開機定鬧時間不變,但時鐘回到預(yù)設(shè)12:00,需重調(diào)時鐘:解決的辦法是:給單片機加后備電池,掉電后,數(shù)碼管不亮,但單片機正常運行,時間雖沒有顯示但仍在走,重新加電后又正常顯示時間。4)由于晶振等的誤差,導(dǎo)致時鐘走時與標(biāo)準時鐘(北京時間)有偏差,實訓(xùn)中數(shù)字鐘大約每24小時會偏差ls(誤差0.001%),可在軟件中進行調(diào)整或選擇精度高的晶振:高檔的時鐘一般會選用專用的時鐘芯片如DS1302。5)該數(shù)字鐘稍加改進可成為多時間走鬧(控制)的時鐘控制器,如打鈴儀、多路定時控制器及其他與時間有關(guān)的控制裝置。6)該數(shù)字鐘在調(diào)整時鐘時只能遞增循環(huán)

39、調(diào)整,沒有設(shè)計遞減按鍵,在使用時會感到不便,可考慮增加一個遞減按鍵(或用現(xiàn)有按鍵復(fù)用),在實訓(xùn)中思考并實踐?!驹u一評】請?zhí)顚懕?-7中內(nèi)容。表7-7數(shù)字鐘實訓(xùn)評測表任務(wù)三單片機可靠性設(shè)計【任務(wù)目標(biāo)】知道單片機可靠性設(shè)計的重要性。能說出影響單片機系統(tǒng)運行可靠性的基本因素。懂得提高可靠性的基本方法,能在軟件/硬件設(shè)計時初步應(yīng)用?!咀x一讀】幾乎所有的單片機工程師都有這樣的經(jīng)歷,在實驗室千辛萬苦安裝和調(diào)試好的單片機系統(tǒng)投入工業(yè)現(xiàn)場進行實際運行時,卻發(fā)現(xiàn)不能正常工作,有的一開機就失靈,有的時好時壞,那么,究竟是什么原因造成這種現(xiàn)象呢?原因只有二個,那就是干擾。眾所周知,工業(yè)環(huán)境有強大的電磁干擾,在單片機

40、沒有采取抗干擾措施或措施不得力時,單片機系統(tǒng)便不能適應(yīng)工業(yè)環(huán)境。故在系統(tǒng)開發(fā)設(shè)計時,抗干擾設(shè)計成為重中之重,有時為抗干擾所做的工作甚至比前期開發(fā)的工作還要多,由此可見抗干擾技術(shù)的重要性??垢蓴_技術(shù)從大的方面來分,可分為硬件措施和軟件措施兩大類。知識1硬件電路的可靠性設(shè)計硬件電路設(shè)計得當(dāng),可將絕大多數(shù)干擾拒之門外,這是單片機系統(tǒng)可靠性的第一道防線:硬件抗干擾的優(yōu)點是效率高,缺點是投入成本增加,同時使設(shè)備體積增大。最主要的硬件措施大致有元件可靠性選擇、電磁屏蔽技術(shù)、濾波技術(shù)、供電電源的可靠性設(shè)計、輸入/輸出的隔離措施、合理的PCB板設(shè)計等。1.元件的可靠性選擇元件的正確選用是單片機電路可靠性設(shè)計中

41、的重要環(huán)節(jié),選用的元器件是否合理與優(yōu)質(zhì)將直接影響到整個系統(tǒng)的性能與可靠性水平、系統(tǒng)成本及日后的維護。選用時應(yīng)遵循以下基本準則。1)滿足性能要求。元件的各項性能參數(shù)要滿足電路性能要求,如電壓等級、電流頻率特性、放大參數(shù)與功耗等。2)滿足可靠性要求??煽啃砸蟀目垢蓴_性能及使用壽命兩個方面。元件的壽命(失效率)隨著工作電壓、環(huán)境溫度等提高而成倍地縮短t失效率增加),在半導(dǎo)體技術(shù)水平尚不很發(fā)達的情況下,降額使用已成為提高系統(tǒng)可靠性的常用方法。降額設(shè)計是指使元件在低于其額定應(yīng)力情況下工作。影響元件可靠性運行的應(yīng)力有電應(yīng)力(電壓、電流、功率、頻率)、溫度、機械應(yīng)力(振動、沖擊)等。當(dāng)工作應(yīng)力高于

42、額定應(yīng)力時失效率就增加,例如金屬膜電阻,在700C溫度下,若功率降低50%,其失效率就降低兩個數(shù)量級,云母電容器的環(huán)境溫度降低50%,電壓降低30%時其失效率降低三個數(shù)量級,可見元件降額、使用是提高其可靠性的有效方法。元件常用降額系數(shù)如表7-8所示。表7-8各種元件降額系數(shù)表7-8中,電阻指功率降額,電容為電壓降額,半導(dǎo)體器件(集成電路)為功率、電流電壓降額,繼電器開關(guān)為電流降額。3)盡量減少元件品種、型號,保證安裝、維護的方便。4)全面考慮系統(tǒng)應(yīng)用的工作環(huán)境溫度、濕度、振動、沖擊及電參數(shù)條件。5)保證可靠性的條件下,盡量選用廉價的元件,以降低成本。2.電路設(shè)計常用的抗干擾措施1)光電隔離。在

43、輸入/輸出通道上采用光電藕合器進行信號傳遞,可有效地將傳感器、開關(guān),功率執(zhí)行器件(如繼電器、可控硅)從電氣上隔離開來,很大一部分干擾將被阻擋。2)硬件濾波電路。在一些低頻信號傳遞回路上常用串接RC低通濾波器,可大大削弱各類高頻干擾信號,如各類“毛刺”干擾。3)過壓保護電路:在單片機輸入/輸出回路上采用過壓保護元件,防止輸入過高電壓損壞單片機系統(tǒng),如用限流電阻、穩(wěn)壓管、瞬變二極管(TVS)等。4)穩(wěn)定可靠的電源技術(shù):單片機系統(tǒng)的供電電源是干擾進入的重要途徑,要求穩(wěn)壓電源穩(wěn)定、內(nèi)阻小、紋波系數(shù)小、抗干擾能力強。條件允許時,可在電路板各個位置上多接一些濾波電容,電路中每一個集成芯片的供電端均加應(yīng)接一

44、個瓷片電容(去相電容)。5)電路PCB板設(shè)計應(yīng)合理,符合電氣性能要求,如盡可能降低電源走線、地線的阻抗,輸入與輸出信號應(yīng)遠離,避免平行走線,電源與地線的環(huán)路面積應(yīng)盡量小。知識2軟件抗干擾技術(shù)設(shè)計單片機系統(tǒng)尤其是測控系統(tǒng)時,可靠性是最重要的指標(biāo)之二,要求其在工作環(huán)境惡劣、干擾嚴重時也能可靠運行。系統(tǒng)的可靠性除采用硬件抗干擾方法外,還應(yīng)輔之以優(yōu)良的軟件抗干擾技術(shù)。軟件抗干擾技術(shù)主要包括抑制疊加在模擬輸入信號上的干擾噪聲的影響,如數(shù)字濾披技術(shù),以及由于干擾使程序運行發(fā)生海亂、導(dǎo)致程序亂飛或陷入死循環(huán)時能將其納入正軌的措施,如軟件指令冗余、軟件陷阱、看門狗技術(shù)等。1.數(shù)字濾波技術(shù)模擬信號經(jīng)單片機AD轉(zhuǎn)

45、換后來集,如有干擾作用于模擬信號會使AD轉(zhuǎn)換偏離真實值,如果僅采集一次,無法確定該結(jié)果是否可靠,必須多次來樣,通過某種處理后才能得到二個可信度較高的結(jié)果。即從數(shù)據(jù)系列中提取可靠的、近似真實數(shù)據(jù)的軟件算法稱為數(shù)字濾波算法。常用的數(shù)字濾波技術(shù)有中值濾波、算術(shù)平均濾波、滑動平均濾波、去極值平均濾波等。算術(shù)平均濾波算法適用于抑制隨機干擾,采集次數(shù)越多,平滑效果越好,但會影響系統(tǒng)的靈敏度,以下為算術(shù)平均濾波算法例程。設(shè)將8個己采集到的數(shù)據(jù)存放在30H37H單元,其程序段如下。M0V A,#0M0V R2,AM0V R3,AM0V R0,#30HL00P1:M0V AR0;取一個采樣值M0V A,R3M0

46、V R3,A;累加和低位放在R3CLRAADDCA,R2M0V R2,A;累加和高位放在R2INC R0CJNER0,#38H,L00Pl;累加完8個數(shù)據(jù)?SWAPA;以下累加和除以8RLAXCH A,R3SWAPARLAADDA,#80H;四舍五入ANLA,#lFHADDCA,R3;平均值在A中2.輸出口重復(fù)刷新為保證輸出數(shù)據(jù)的可靠性,最有效的方法是定時重復(fù)輸出同一數(shù)據(jù),這樣外部設(shè)備受到干擾時還沒來得及做出反應(yīng),個正確的輸出信息又來到,即可避免錯誤動作的發(fā)生。3.指令冗余技術(shù)當(dāng)CPU受到干擾后,往往將一些操作數(shù)當(dāng)作指令碼來執(zhí)行,引起程序混亂。這時首先要盡快將程序納入正軌(執(zhí)行真正的指令系列)

47、0MCS-51指令系統(tǒng)中所有的指令都不超過三個字節(jié),而且有很多單字節(jié)指令。當(dāng)程序彈飛到某一條單字節(jié)指令上時,便自動納入正軌:當(dāng)程序彈飛到某一雙字節(jié)指令上時,有可能落到其操作數(shù)上,從而繼續(xù)出錯:當(dāng)程序彈飛到三字節(jié)指令上時,因它有兩個操作數(shù),繼續(xù)出錯的機會就更大。因此,應(yīng)多采用單字節(jié)指令,并在關(guān)鍵的地方人為地插入一些單字節(jié)指令(N0P),或?qū)⒂行巫止?jié)指令重復(fù)書寫,這便是指令冗余。指令冗余無疑會降低系統(tǒng)的效率,但在絕大多數(shù)情況下,CPU還不至于忙到不能多執(zhí)行幾條指令的程度,故這種方法還是可以采用的。4.軟件陷阱技術(shù)所謂軟件陷阱,就是條引導(dǎo)指令,強行將捕獲的程序引向一個指定的地址,在那里有一段專門對

48、程序出錯進行處理的程序。如果把這段程序的入口標(biāo)號稱為ERR,則軟件陷阱即為一條“LJMPERR"指令。為加強其捕捉效果,一般還在它前面加兩條N0P指令,因此,真正的軟件陷阱由三條指令構(gòu)成,即N0PN0PLJMPERR例如,某8051系統(tǒng)共使用了三個中斷:INT0、T0和Tl,其中斷子程序分別為INT0P、TIMER0、TIMERl,可按下列方式設(shè)置軟件陷阱:0RG0000HLJMPMAIN0RG0003HLJMPINT0_P;INT0中斷入口N0PN0P;元余指令LJMPERR;陷阱0RG000BHLJMPTIMER0;T0中斷入口N0PN0P;冗余指令LJMPERR;陷阱0RG00

49、13HN0P;未使用的中斷N0PLJMPERR0RG00lBHLJMPTIMER1;T1中斷入口N0PN0PLJMPERR;陷阱MAIN:;主程序5.看門狗系統(tǒng)所謂看門狗技術(shù)(WATCHD0G),即“程序運行監(jiān)視系統(tǒng)”。程序運行時定期對“看門狗”還原一次(喂狗一次),當(dāng)程序彈飛到一個死循環(huán)時,CPU不能定期“喂狗”,“看門狗”將使程序強行復(fù)位,使之脫離死循環(huán)。這好比是主人養(yǎng)了一條狗,主人在正常干活的時候總是不忘每隔一段固定時間就給狗吃點東西,狗吃過東西后就安靜下來,不影響主人干活:如果主人打瞌睡,不干活了,到一定時間,狗餓了,發(fā)現(xiàn)主人還沒有給它吃東西,就會大叫起來,把主人喊醒。把“程序運行監(jiān)視

50、系統(tǒng)”稱為“看門狗”也就是這個意思。從這個比喻中可以看出,看門狗有如下特性。1)本身能獨立工作,基本上不依賴CPU。2)CPU在一個固定的時間間隔中和該系統(tǒng)打一次交道(喂一次狗),以表明系統(tǒng)“目前工作正?!?。3)當(dāng)CPU掉入死循環(huán)后,能及時發(fā)覺并使系統(tǒng)復(fù)位。在51系列中,許多增強型單片機如89S51己將看門狗系統(tǒng)做入芯片,使用起來比較方便:而89C51則必須由程序員自行建立外部看門狗電路。此部分內(nèi)容可參考相關(guān)資料,在此不再細述。知識鏈接單片機發(fā)展歷程8位單片機從1976年公布至今己30余年。以I;tel的8位單片機為例來了解單片機的發(fā)展歷史,其發(fā)展階段大致分為單片機探索階段,單片機完善階段,微控制器形成階段和微控制器完善階段。1.第一代:單片機探索階段工控領(lǐng)域?qū)τ嬎銠C提出了嵌入式應(yīng)用要求,首先是實現(xiàn)單芯片形態(tài)的計算機,以滿足構(gòu)成大量中小型智能化測控系統(tǒng)要求。因此,這階段的任務(wù)

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論