版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第1章 系統(tǒng)設(shè)計要求與方案確定1.1設(shè)計要求 以單片機為核心,設(shè)計一個具有定時和計數(shù)功能的智能化作息時間控制器。該控制器要求的功能有:按作息時間接通/斷開電鈴;課間接通/斷開播放音樂設(shè)備;時鐘顯示。作息時間控制器常用于學(xué)校教學(xué)樓的時間控制,利用單片機內(nèi)部定時器實現(xiàn)時間基準(zhǔn)定時,并配合“啟動”、“復(fù)位”等按鍵的操作完成鈴聲、音樂的開/??刂?,顯示的內(nèi)容要求有時、分、秒各兩位。1.2設(shè)計思路根據(jù)設(shè)計要求,初步思路如下:1) 計時單元由單片機內(nèi)部的定時器/計數(shù)器t1來實現(xiàn)。2) 時間顯示功能通過led數(shù)碼管動態(tài)掃描來實現(xiàn)。動態(tài)掃描的定時時間由單片機內(nèi)部的定時器/計數(shù)器t0實現(xiàn)。3) led數(shù)碼管的段
2、碼輸入和位碼輸入由8051的p0口、p1口產(chǎn)生。4)時間調(diào)整通過接入按鈕電路來實現(xiàn)。系統(tǒng)共設(shè)三個鍵,分別定義為: set功能:設(shè)置當(dāng)前時間,即當(dāng)電子時鐘的時間有誤差時,需要隨時對它進(jìn)行調(diào)整,使用set鍵與+1鍵、ret鍵配合來完成這一功能。 +1調(diào)整鍵功能:分別對時間值的小時十位、小時個位、分的十位、分的個位進(jìn)行+1調(diào)整,即該按鍵每按下一次,對應(yīng)的時間調(diào)整位+1。 ret確認(rèn)鍵功能:確認(rèn),即對+1調(diào)整位進(jìn)行確認(rèn),該鍵按下時,說明被調(diào)整位的值已經(jīng)確定,轉(zhuǎn)去調(diào)整下一位。5)打鈴是用p1口輸出來控制繼電器的閉合,從而控制打鈴和放音樂。為了方便觀察,用發(fā)光二極管來代替繼電器,即p1.7對應(yīng)的發(fā)光二極管
3、亮代表電鈴接通,若不亮代表電鈴斷開,p1.6對應(yīng)的發(fā)光二極管亮代表放音機接通,若不亮代表放音機斷開。第2章 控制系統(tǒng)硬件電路設(shè)計2.1硬件電路的設(shè)計方案及框圖根據(jù)設(shè)計要求與設(shè)計思路,確定該系統(tǒng)的控制方案,圖1所示為開系統(tǒng)設(shè)計方案的硬件電路的設(shè)計框圖。硬件電路由8個部分組成,即單片機按鍵輸入電路、單片機時鐘電路、單片機復(fù)位電路、6位led動態(tài)掃描電路、語音輸出與打鈴電路。下面將分別對硬件電路的設(shè)計和器件的選擇做詳細(xì)介紹。3個按鍵輸入電路時鐘電路復(fù)位電路單片機6位led動態(tài)掃描電路語音輸出與打鈴電路圖1 硬件電路設(shè)計框圖2.2單片機的選擇當(dāng)今單片機廠商琳瑯滿目,產(chǎn)品性能各異。常用的單片機有很多種:
4、intel8051系列、motorola和m68hc系列、atmel的at89系列、臺灣winbond(華邦)w78系列、荷蘭pilips的pcf80c51系列、microchip公司的pic系列、zilog的z86系列、atmel的at90s系列、韓國三星公司的ks57c系列4位單片機、臺灣義隆的em-78系列等。根據(jù)初步設(shè)計方案的分析,設(shè)計這樣一個簡單的應(yīng)用系統(tǒng),可以選擇帶有eprom的單片機,應(yīng)用程序直接存儲在片內(nèi),不用在外部擴展程序存儲器,電路可以簡化。該系統(tǒng)的設(shè)計我們采用8051芯片。圖2所示為采用雙列直插式封裝的8051ah芯片管腳圖。各管腳的功能如下。1. 電源管腳vcc(40腳
5、):接+5v;vss(20腳):接地。(注:管腳未畫出)2時鐘信號管腳x1(19腳),x2(18腳):外部時鐘信號的兩個管腳3控制線1) reset(9腳):用作復(fù)位輸入端。2) ea/vp(31腳):ea為訪問內(nèi)部或外部程序存儲器的選擇信號。對片內(nèi)eprom編程市時,此管腳(作vp)接入21v編程電壓。3) ale/p(30腳):當(dāng)訪問外部存儲器時,ale信號的負(fù)跳變將p0口上的低8位地址送入鎖存器。當(dāng)對內(nèi)eprom編程時,該管腳(p) 圖2 8051ah管腳圖用于輸入編程脈沖。4) psen(29腳):外部程序存儲器讀選通控制信號。4輸入/輸出口線1) p0口(3239腳):8路漏極開路型
6、雙向并行i/o口。在訪問外部存儲器時,p0口作為低8位地址/數(shù)據(jù)總線復(fù)用口,通過分時操作,先傳送低8位地址,利用ale信號 的下降沿將地址鎖存,然后作為8位數(shù)據(jù)總線使用,用來傳送8位數(shù)據(jù)。在對片內(nèi)eprom編程時,p0口接受指令代碼;而在內(nèi)部程序校驗時,則輸出指令代碼,并要求外接上拉電阻。外部不擴展而單片應(yīng)用時,則作雙向i/o口用,p0口能以吸收電流的方式驅(qū)動8個lsttl負(fù)載。2) p1口(18腳):具有內(nèi)部上拉電阻的8位準(zhǔn)雙向i/o口。在對片內(nèi)eprom編程及校驗時,它接收低8位地址。p1口能驅(qū)動4個lsttl負(fù)載。3) p2口(2128腳):具有內(nèi)部上拉電阻的8位準(zhǔn)雙向i/o口。在外接存
7、儲器時,p2口作為高8位地址總線。在對片內(nèi)eprom編程及校驗時,它接收高8位地址。p2口驅(qū)動4個lsttl負(fù)載。4) p3口(1017腳):8位帶有內(nèi)部上拉電阻的準(zhǔn)雙向i/o口。每一位又具有如下的特殊功能(或稱第二功能):p3.0(rxd):串行輸入端。p3.1(txd):串行輸出端。p3.2(int0):外部中斷0輸入端,低電平有效。p3.3(int1):外部中斷1輸入端,低電平有效。p3.4(t0):定時/計數(shù)器0外部事件計數(shù)輸入端。p3.4(t0):定時/計數(shù)器0外部事件計數(shù)輸入端。p3.5(t1):定時/計數(shù)器1外部事件計數(shù)輸入端。p3.6(wr):外部數(shù)據(jù)存儲器寫選通信號,低電平有
8、效。p3.7(rd):外部數(shù)據(jù)存儲器讀選通信號,低電平有效。2.3時鐘與復(fù)位電路的設(shè)計單片機工作的時間基準(zhǔn)是由時鐘電路提供的。在單片機的x1和x2兩個管腳,接一只晶振及兩個電容就構(gòu)成了單片機的時鐘電路,如圖3(a)所示。電路中,電容器c1和c2對振蕩頻率有微調(diào)作用,通常的取值范圍為(3010pf)。石英晶體選擇6mhz或12mhz都可以,其結(jié)果只是機械周期時間不同,影響計數(shù)器的計數(shù)初值。單片機的rst管腳為主機提供一個外部復(fù)位信號輸入端口。復(fù)位信號是高電平有效,高電平有效的持續(xù)時間應(yīng)為2個機器周期以上。單片機的復(fù)位方式有上電復(fù)位和手動復(fù)位兩種。圖3(b)所示是51系列單片機常用的上電復(fù)位和手動
9、復(fù)位組合電路,只要vcc上升時間不超過1ms,它們都能很好地工作。復(fù)位以后,單片機內(nèi)部各部件恢復(fù)到初始狀態(tài)。(a)時鐘電路 (b)復(fù)位電路圖3 時鐘與復(fù)位電路2.4六位led動態(tài)掃描電路2.4.1數(shù)碼管電路 數(shù)碼管是單片機系統(tǒng)中常用的顯示界面,可以顯示“1、2、3、4、5、6、7、8、9、0”和十六進(jìn)制中的“a、b、c、d、e、f”及小數(shù)點“.”, 數(shù)碼管怎樣來顯示1,2, 3,4呢?數(shù)碼管實際上是由7個發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點就是8個。分別被命名為a,b,c,d,e,f,g,h和dp。如果要顯示一個數(shù)字2, 那么 a、b、g、e、d這5個段的發(fā)光管亮,b、e、h(小數(shù)點)不亮,就可
10、以了。圖5 六位led顯示器內(nèi)部結(jié)構(gòu)原理圖由圖4可知:要使數(shù)碼管發(fā)光必須滿足兩個條件,一、com端為高電平。二、在a-g端的對應(yīng)部分輸入低電平。這樣電流流過相應(yīng)的字段,數(shù)碼管就會顯示相應(yīng)的字符了!圖5所示,由于數(shù)碼管的a、b、c.dp端都并在一起,要使每個數(shù)碼管顯示各自的內(nèi)容,所以必須使用動態(tài)掃描方式。表一 字符代碼表顯示數(shù)字 a b c d e f g dp 16進(jìn)制代碼0 0 0 0 0 0 0 1 1 03h 1 1 001 1 1 1 1 9fh 2 0 0 1 0 0 1 0 1 25h 3 0 0 0 0 1 1 0 1 0dh 4 1 0 0 1 1 0 0 1 99h 5 0
11、1 0 0 1 0 0 1 49h 6 0 1 0 0 0 0 0 1 41h 7 0 0 0 1 1 1 1 1 1fh 8 0 0 0 0 0 0 0 1 01h 9 0 0 0 0 1 0 0 1 09h a 0 0 0 1 00 0 1 11h b 1 1 0 0 00 0 1 c1h c 0 1 1 0 0 0 1 1 63h d 1 0 0 0 0 0 0 1 85h e 0 1 1 0 0 0 0 1 61h f 0 1 1 1 0 0 0 1 71h . 1 1 1 1 1 1 1 0 feh 注:對于想顯示的字符只要查表的代碼送段碼輸入口顯示即可。我們可以先點亮左邊(右邊亦可
12、)第一位,其它的都熄滅,延時一定時間后,再點亮第二位,其它都熄滅當(dāng)點亮完最后一位時再從頭開始下一循環(huán)。雖然在每一瞬間只有一只發(fā)光管被點亮,但由于人的眼睛具有視覺殘留效應(yīng),只要所設(shè)定的延時時間恰當(dāng),所看到的所有發(fā)光管顯示的都是穩(wěn)定的字符,這就是動態(tài)顯示方式。為了編程方便,對于上面的電路圖,我們將可以顯示的字符代碼編制成表格如表一所示。2.4.2led的段碼和位碼驅(qū)動芯片的選擇由于選用動態(tài)顯示,每一位數(shù)據(jù)的顯示是由段和位選信號共同配合完成的,因此,要同時考慮段和位的驅(qū)動能力,而且端的驅(qū)動能力決定位的驅(qū)動能力。選用74ls273芯片作為顯示電路的段碼輸出鎖存,選用74ls06芯片來進(jìn)行反相和提高驅(qū)動
13、能力,然后再接各led顯示器的位控端。2.4.3led驅(qū)動電路與單片機的連接圖6 六位led顯示接口電路采用單片機的p1口作為位碼輸出口,通過74ls06芯片驅(qū)動數(shù)碼管的位控端。74ls273作為輸出接口由wr及a15組合信號控制,單片機的p0口作為數(shù)據(jù)線與i/o數(shù)據(jù)線相連(74ls273的口地址為cfa0h)。如圖6所示為六位led顯示接口電路,該電路的工作原理是:從字符代碼表格中取出顯示字符,通過74ls273芯片鎖存、譯碼和驅(qū)動作用,輸出具有一定驅(qū)動能力的七段字型碼,由于六位led的端碼輸入管腳是并聯(lián)在一起的,所以每位led都獲得這個段碼。若要控制在每一時刻只有一位led被點亮,必須由位
14、碼信號控制。p1口的低6位輸出位碼信號經(jīng)反相后接led的位碼控制端,因此p1口的位碼信號在每一時刻只有一位是“1”,其它為位為“0”,然后按時間順序改變輸出“1”的位置。詳細(xì)的led動態(tài)掃描顯示程序請參見軟件設(shè)計部分t0_sev子程序的設(shè)計。2.5按鍵電路設(shè)計與器件選擇該控制系統(tǒng)要用到時鐘電路,所以要求能隨時對當(dāng)前時間進(jìn)行調(diào)整。要實現(xiàn)這一功能,可以接入鍵盤電路。圖7 按鍵電路本系統(tǒng)只需要3個按鍵,因此選用獨立式鍵盤。如圖7所示,電路由按鍵和3個電阻組成,按鍵可以才喲功能輕觸開關(guān),按鍵分別命名為set、+1和 ret鍵,電阻阻值都為1k。將鍵盤直接與單片機的p3口相接,用p3.2口線通過按鍵se
15、t接入一個外部中斷的請求信號int0;p3.0、p3.1管腳作為i/o口使用。三個按鍵功能的設(shè)計思路如下:1)set鍵功能:設(shè)置當(dāng)前時間,即當(dāng)電子時鐘的時間有誤差時,需要隨時對它進(jìn)行調(diào)整,使用set鍵與+1鍵、ret鍵配合來完成這一功能。當(dāng)set鍵被按下時,在單片機的int0管腳產(chǎn)生一個低電平觸發(fā)中斷請求信號,cpu響應(yīng)中斷請求時,就轉(zhuǎn)移到int0中斷服務(wù)程序的入口地址,執(zhí)行中斷服務(wù)程序。設(shè)計int0的中斷服務(wù)程序的功能是調(diào)整當(dāng)前時間,程序的標(biāo)號地址是inta。2)+1調(diào)整鍵功能:分別對時間值的小時十位、小時個位、分的十位、分的個位進(jìn)行+1調(diào)整,即該按鍵每按下一次,對應(yīng)的時間調(diào)整位+1。該信號
16、與p3.0管腳連接,當(dāng)p3.0工作在i/o接口方式時,為了保證能正確輸入外部信息,在初始化程序中用指令“setb p3.0”對它進(jìn)行編程,即將p3.0管腳作為輸入口使用。3)ret確認(rèn)鍵功能:確認(rèn),即對+1調(diào)整位進(jìn)行確認(rèn),該鍵按下時,說明被調(diào)整位的值已經(jīng)確定,轉(zhuǎn)去調(diào)整下一位。該信號與p3.1管腳連接,與p3.0類似,用于i/o接口方式時,在初始化程序中用指令“setb p3.1”對它進(jìn)行編程,即將p3.1管腳作為輸入口使用。鍵盤的硬件電路設(shè)計只是完成3個按鍵信號可靠輸入,要想實現(xiàn)鍵盤的輸入功能,還要靠軟件編程來具體實現(xiàn)。設(shè)置當(dāng)前時間的中斷服務(wù)程序,請參見軟件設(shè)計一章中的inta子程序設(shè)計。2.
17、6語音輸出與打鈴電路設(shè)計要求到某一作息時間電鈴或語音有輸出。我們用發(fā)光二極管代替語音輸出設(shè)備,用代替電鈴。電路設(shè)計如圖8所示。蜂鳴器作為三極管vt的集電極負(fù)載,當(dāng)vt導(dǎo)通時,蜂鳴器發(fā)出鳴叫聲音;vt截止,蜂鳴器不發(fā)聲。r是限流電阻。蜂鳴器電路與單片機的接口:vt的基極接到單片機的p1.7管腳,p1.7口作為輸出口使用。當(dāng)p1.7=0時,vt導(dǎo)通,是蜂鳴器的兩管腳獲得將近5v的直流電壓,蜂鳴器中有電流通過,而產(chǎn)生蜂鳴音;當(dāng)p1.7=1時,vt截止,蜂鳴器的兩管腳間的直流電壓接近于0v,蜂鳴器不發(fā)聲。發(fā)光二極管與單片機的接口:發(fā)光二極管的陰極與單片機的p1.6管腳相連。當(dāng)p1.6=0時,發(fā)光二極管
18、亮,表示有語音輸出,當(dāng)p1.6=1時,發(fā)光二極管滅,此時無語音輸出。圖8 語音輸出與打鈴電路通過前面的設(shè)計過程,可設(shè)計出作息時間控制系統(tǒng)的硬件總電路如附錄a所示。 第3章 控制系統(tǒng)軟件設(shè)計3.1軟件設(shè)計方案確定 根據(jù)設(shè)計要求,我們將軟件設(shè)計分成6個功能模塊,分別是主程序模塊、數(shù)碼管動態(tài)掃描模塊、當(dāng)前時間計時模塊、當(dāng)前時間調(diào)整模塊、鬧鈴與語音、輸出模塊、數(shù)制轉(zhuǎn)換模塊(如圖所示)。各功能模塊都具有獨立的功能,產(chǎn)生相應(yīng)的結(jié)果,模塊的具體設(shè)計請見后面章節(jié)。主程序模塊數(shù)碼管動態(tài)掃描模塊當(dāng)前時間計時模塊當(dāng)前時間調(diào)整模塊鬧鈴與語音輸出模塊數(shù)制轉(zhuǎn)換模塊圖9 作息時間系統(tǒng)軟件設(shè)計模塊3.2內(nèi)存空間分配 一般在程
19、序設(shè)計前要對內(nèi)存進(jìn)行合理的分配,這樣既可使得編程時心中有數(shù),又可充分利用單片機內(nèi)部ram有限的存儲空間。作息時間系統(tǒng)程序設(shè)計內(nèi)存分配見表2。表二 內(nèi)存空間分配表地 址 分 配作 用60h7fh堆棧區(qū)40h45hled段碼顯示緩沖區(qū),存儲顯示字符bcd碼,低四位有效48h4dhled位碼顯示緩沖區(qū),存儲led位碼信號,低六位有效32h34h當(dāng)前時間的二進(jìn)制存儲單元,32h存儲小時,33h存儲分,34h存儲秒。29h輸入鍵值存儲單元30h當(dāng)前調(diào)整位標(biāo)志31hled顯示位數(shù)存儲單元02h05h計時用工作寄存器(0區(qū)r2r5)18h1ah動態(tài)掃描用工作寄存器(3區(qū)r0r2)2eh控制字存儲區(qū)地址指針暫
20、存單元6ah控制字開關(guān)操作碼暫存單元6bh6dh依次存控制字的秒值、分值和小時值3.3主程序設(shè)計主程序的內(nèi)容一般包括:主程序起始地址、中斷服務(wù)程序入口地址、有關(guān)內(nèi)存單元及相關(guān)部件的初始化和一些子程序調(diào)用等。主程序設(shè)計框圖如圖所示。1)程序的起始地址:mcs-51系列單片機復(fù)位后,(pc)=0000h,而0003h002bh分別為各中斷源的入口地址。所以,編程是應(yīng)在0000h處寫一跳轉(zhuǎn)指令。2)主程序初始化內(nèi)容:所謂初始化,是對將要用到的mcs-51系列單片機內(nèi)部部件或擴展芯片進(jìn)行初始工作狀態(tài)設(shè)定。mcs-51系列單片機復(fù)位后,特殊功能寄存器ie、ip的內(nèi)容均為00h,所以應(yīng)對ie、ip進(jìn)行初始
21、化編程。同時還要對一些存儲單元進(jìn)行初始化,這些內(nèi)容都應(yīng)在初始化程序中完成。參見main標(biāo)號地址到loop標(biāo)號地址之間的內(nèi)容。3)代碼轉(zhuǎn)化程序:由于人們習(xí)慣使用十進(jìn)制數(shù),而計算機的鍵盤輸入、輸出以及顯示常采用二進(jìn)制編碼的十進(jìn)制數(shù)(即bcd碼)。因此,在程序中經(jīng)常要進(jìn)行代碼轉(zhuǎn)換。其程序見loop標(biāo)號地址到lop標(biāo)號地址間的內(nèi)容。這段程序的功能是完成將當(dāng)前時間的二進(jìn)制數(shù)轉(zhuǎn)化為bcd代碼,并送顯示緩沖區(qū)。圖10 主程序設(shè)計框圖3.4各子模塊設(shè)計3.4.1led動態(tài)掃描程序模塊設(shè)計 在采用動態(tài)掃描顯示方式時,要是led顯示比較均勻,又有足夠亮度,需要設(shè)置適當(dāng)?shù)膾呙桀l率。當(dāng)掃描頻率在70hz左右時,能夠產(chǎn)
22、生足夠的圖形和較好的顯示效果。一般可以采用間隔20ms對led進(jìn)行動態(tài)掃描一次,每一位led的顯示時間為2ms。程序流程如圖所示。 本系統(tǒng)設(shè)計中 ,采用硬件定時和軟件定時并用的方式,即t0溢出中斷功能實現(xiàn)20ms定時,通過軟件延時程序?qū)崿F(xiàn)1ms定時。1)t0定時器中斷服務(wù)程序的功能 從顯示緩沖區(qū)分別取出顯示數(shù)據(jù)的位碼和段碼,分別送p1口和數(shù)據(jù)輸出p0口,依次顯示每一位,每一位能顯示時間為2ms,顯示6位需要12ms的時間;led顯示器顯示每一位時間為2ms,延時2ms子程序是典型的軟 圖11 led動態(tài)掃描程序流程圖件定時程序(程序見delay1標(biāo)號地址到delay標(biāo)號地址)。2)定時器t0的
23、計數(shù)初值x=09f0h,即有 th0=09h tl0=0f0h工作方式寄存器tmod=0000 0001b=01h,t0定時器以工作方式1完成定時。3.4.2時鐘計時程序模塊設(shè)計作息時間控制系統(tǒng)必須設(shè)計一個時鐘程序來實現(xiàn)24h的定時功能。本系統(tǒng)中單片機的時鐘頻率為6mhz,則定時器最長的定時時間是131。72ms,以此來產(chǎn)生24小時的時間值,可采用硬件定時與軟件定時想結(jié)合的方法來實現(xiàn)。1)24小時時間的產(chǎn)生。選擇定時器t1,用工作方式1,定時100ms。t1定時100ms中斷一次,利用r2累加器加1,當(dāng)r2=10時,時間正好是1s;再利用r3計數(shù)60s,依次類推,累計24h的時間值,需要設(shè)置以
24、下幾個寄存器:r2:累計1s時間寄存器。t1中斷一次r2=r2+1,計數(shù)十次向r3進(jìn)位,并將r2清零。r3:累計60s時間寄存器。當(dāng)r3=60s向r4進(jìn)位,并使r3=0。r4:累計60min時間寄存器。當(dāng)r4=60min向r5進(jìn)位,并將r4清零。r5:累計24h時間寄存器。當(dāng)r5=24h,正好是一晝夜,并使r5=0。r2r5按二進(jìn)制計數(shù),程序設(shè)計的思路和方法,如圖程序框圖和程序清單。 2)定時器t1的計算初值x=3cb0h。初值寄存器的初值th1=3ch,tl1=0b0h,工作方式寄存器tmod=0001 0000b=10h。t1定時器每中斷一次,中斷10次為1s。程序流程圖如圖12所示圖12
25、 t1定時器程序設(shè)計流程圖3.4.3鍵盤接受子程序設(shè)計由于機械觸點的彈性作用,在閉合及斷開的瞬間均伴隨有一連串的抖動,而按鍵穩(wěn)定閉合時間的長短則是由操作人員的按鍵動作決定的,為了確保cpu對鍵的一次閉合僅作一次處理,鍵抖動可用硬件或軟件兩種方法消除。這里采用軟件去抖動的方法,程序流程圖如圖13所示,程序見inta中斷服務(wù)程序。(4)鬧鈴與語音輸出模塊設(shè)計 作息時間的主要功能就是實現(xiàn)自動打鈴和放語音。該模塊的設(shè)計流程如圖14所示。在主程序的每一個掃描周期都調(diào)用該子程序,當(dāng)作息時間與計時時間相等時,就進(jìn)行相關(guān)功能的選擇執(zhí)行。具體程序見ring子程序。圖14 打鈴程序流程圖3.5程序清單 見附錄b第
26、四章 調(diào)試步驟與結(jié)果1 輸入源程序 輸入源程序時,應(yīng)以西文方式輸入字母和符號,且中文注釋前要加分號。 2對源程序進(jìn)行匯編和糾錯 根據(jù)自動匯編提供的錯誤信息逐條糾正錯誤,直至匯編信息提示無誤。 3確定調(diào)試方案 在調(diào)試程序前認(rèn)真分析源程序,確定各功能程序運行的預(yù)期結(jié)果。然后結(jié)合源程序應(yīng)達(dá)到的結(jié)果,通過某些關(guān)鍵參數(shù)和實驗現(xiàn)象檢驗程序運行結(jié)果正確與否。并針對具體的分析和觀察對象選擇較合適的調(diào)試方法。如單步運行、跟蹤運行、連續(xù)運行、快速運行至光標(biāo)處、設(shè)置斷點等調(diào)試方法。 4調(diào)試程序1) 調(diào)試子程序。由于程序比較多,整體調(diào)試不容易發(fā)現(xiàn)和改正錯誤,故采取子程序調(diào)試的方法,但要明確子程序的具體功能。例如:調(diào)試
27、顯示子程序時,只將顯示子程序進(jìn)行匯編,確認(rèn)無誤后單步執(zhí)行,觀察cpu窗口和data窗口以及code窗口相應(yīng)單元的變化是否跟預(yù)期的一樣。如果有問題找出問題所在。采取各個擊破的方法調(diào)試好各個子程序。2)確定各子程序無誤后,再調(diào)試完整的程序,要注意各子程序之間的銜接以及和主程序之間的調(diào)用和返回。運行后,觀察有無顯示,時鐘是否工作,其時、分、秒顯示的變化過程是否正確。若運行結(jié)果不正確,首先應(yīng)根據(jù)程序運行的實際現(xiàn)象分析判斷哪些因素可引起相關(guān)故障,再通過調(diào)試方法逐一認(rèn)證和排除。通過反復(fù)調(diào)試,發(fā)現(xiàn)并排除軟件與硬件存在的各類問題,以滿足系統(tǒng)設(shè)計的預(yù)期目的。 5、調(diào)試結(jié)果運行主程序后,可看到六位led顯示器全亮
28、,并且每過一秒,最低位顯示器加一,當(dāng)加到59后,返回0。改變時間初值,顯示相應(yīng)的時間,分鐘到59后,也能返回0,小時到23后能返回0。若設(shè)定初始時間為7:59:59則過1秒后p1.7對應(yīng)的發(fā)光二極管亮,過10秒后p1.7對應(yīng)的發(fā)光二極管滅;若設(shè)定初始時間為9:40:59,則過1秒后p1.6所對應(yīng)的發(fā)光二極管亮,若設(shè)定初始時間為9:58:59,過1秒后p1.6所對應(yīng)的發(fā)光二極管滅說明調(diào)試正確。第五章 總 結(jié) 在這兩周的學(xué)習(xí)和設(shè)計中,使我充分認(rèn)識到理論聯(lián)系實際的重要。安裝和調(diào)試自始至終要有嚴(yán)謹(jǐn)?shù)目茖W(xué)作風(fēng),不能抱有僥幸心理。理論固然重要,但是在實際應(yīng)用中遇到的很多問題是不容忽視的。在第一周,我們通過
29、找大量的資料和同學(xué)們一起研究和討論,認(rèn)識設(shè)計的內(nèi)容,將其分為兩大部分(硬件設(shè)計部分和軟件設(shè)計部分),終于設(shè)計出一套完整的方案。但是將這些具體的方案落實到實際設(shè)計中,出現(xiàn)很多錯誤,而那些錯誤在原則上是可以避免的,這就需要我們在調(diào)試過程中利用所掌握的知識認(rèn)真檢查,發(fā)現(xiàn)不足。然后在討論如何解決不足之處,如此一次次的改,一次次的查,直到完全符合我們的功能要求。無數(shù)次的嘗試總算是把設(shè)計搞好了,電路調(diào)試成功。真是難以去形容那種愉悅的心情。自己的付出總算是有了回報。我也得到了自己知識不足的教訓(xùn)。感覺在知識不牢固的時候是多么無助。自己要反復(fù)的去查閱以前的課本和書籍是多煩瑣的事情。這也就堅定了我在以后的學(xué)習(xí)中要
30、認(rèn)真學(xué)好基礎(chǔ)知識的決心??傮w來說,這次實習(xí)使我受益匪淺。在摸索該如何設(shè)計電路使之實現(xiàn)所需功能的過程中,特別有趣,培養(yǎng)了我的設(shè)計思維,增加了實際操作能力。在讓我體會到了設(shè)計電路的艱辛的同時,更讓我體會到成功的喜悅和快樂。通過這次課程設(shè)計,我認(rèn)識到單片機設(shè)計中應(yīng)注意的幾個問題:(1)采用模塊化、子程序化的優(yōu)點是便于連接和移植,特別是重復(fù)使用時尤為方便。但使用者必須預(yù)先明確各子程序的入口參數(shù)、出口參數(shù)和所占用的資源,合理利用堆棧,避免主程序與子程序之間、子程序與子程序之間所占用的資源發(fā)生沖突。(2)在調(diào)試程序前,一定要預(yù)先將源程序分析透徹,在此基礎(chǔ)上訓(xùn)練如何通過實驗現(xiàn)象分析和判斷產(chǎn)生故障的原因及故障
31、可能存在的大致范圍;靈活運用開發(fā)系統(tǒng)所提供的各種調(diào)試方法,快速有效地排查和縮小故障范圍。通過反復(fù)調(diào)試,不斷地分析和排除故障,調(diào)試軟件和硬件的能力及速度。(3)調(diào)試程序時,要結(jié)合能反映故障存在與否的參數(shù)變化、運行路徑變化、顯示內(nèi)容變化等,選擇合適的觀測點和觀測對象,再運用適當(dāng)?shù)恼{(diào)試方法,快速地檢驗調(diào)試結(jié)果,由此分析和判斷故障點。致 謝 兩周的課程設(shè)計結(jié)束了,在此我想對我的指導(dǎo)老師王迎旭老師表達(dá)我衷心的謝意。在她耐心的指導(dǎo)下,使這次課程設(shè)計取得了較滿意的結(jié)果。這次設(shè)計過程中得到了其他老師的指導(dǎo)和幫助,在此一并表示衷心的感謝。在設(shè)計中,我查了不少參考資料,在此向其作者表示敬意!參考文獻(xiàn):1王迎旭.單
32、片機原理與應(yīng)用.機械工業(yè)出版社.2005.82李全利、遲榮強.單片機原理及接口技術(shù).高等教育社.2004.13譚浩強.mcs-51單片機應(yīng)用教程.清華大學(xué)出版社.2004.3附錄a:程序清單 sec equ 32h min equ 33h hour equ 34horg 0000hljmp main ;轉(zhuǎn)主程序org 0003h ;外部中斷0中斷服務(wù)程序入口地址ljmp inta ;轉(zhuǎn)外部中斷0中斷服務(wù)程序org 000bh ;t0定時服務(wù)程序入口地址ljmp t0_sev ;轉(zhuǎn)t0定時服務(wù)程序org 001bh ;t1定時服務(wù)程序入口地址ljmp t1_sev ;轉(zhuǎn)t0定時服務(wù)程序org 0
33、030h ;設(shè)置主程序起始地址=0030hmain: mov sp,#60h ;設(shè)堆棧區(qū) mov 48h,#0dfh ;led位選擇碼 mov 49h,#0efh mov 4ah,#0f7h mov 4bh,#0fbh mov 4ch,#0fdh mov 4dh,#0feh mov sec,#10 mov min,#30 mov hour,#06 ;設(shè)置時間初值為12:00:00 mov tmod,#99h 設(shè)置t1,t0定時器,工作方式一 mov th1,#3ch ;t1定時100ms mov tl1,#0b0h mov th0,#0d9h mov tl0,#0f0h ;t0定時20ms定時
34、 mov ip, #08h ;設(shè)置優(yōu)先級 mov tcon,#50h ;啟動t1,t0定時 mov ie,#9fh ;開中斷l(xiāng)oop: mov b,#10 ;將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn);制數(shù)(bcd碼) mov a,hour ;并送到顯示緩沖區(qū)40h到45h div ab mov 40h,a mov 41h,b mov b,#10 mov a,min div ab mov 42h,a mov 43h,b mov b,#10 mov a,sec div ab mov 44h,a mov 45h,b lcall ring ;調(diào)用打鈴子程序 nop sjmp loop;t0中斷服務(wù)程序t0_sev: pu
35、sh a push psw setb rs1 setb rs0 clr tr0 mov r2,#06h ;設(shè)置顯示器位數(shù) mov r0,#40h ;設(shè)置段碼首地址 mov r1,#48h ;設(shè)置位碼首地址go_on: mov a,r2 ;送顯示位數(shù)a mov a,r1 ;送位碼到a累加器 mov p1,a ;將位碼送p1口 mov a,r0 ;送段碼到a累加器 mov dptr,#worldtab movc a,a+dptr mov dptr,#0cfa0h ;將段碼輸出 movx dptr,a lcall delay1 ;調(diào)用延時子程序,延時2ms inc r0 ;段碼地址+1 inc r1
36、 ;位碼地址+1 djnz r2,go_on ;判斷6位是否顯示完,;沒完繼續(xù)顯示下一位 mov th0,#0d9h mov tl0,#0f0h pop a setb et0 setb tr0 setb ea retidelay1: mov r3,#10h ;延時2ms子程序again: mov r4,#48hdelay: nop nop djnz r4,delay djnz r3,again ret;t1定時器每100ms中斷一次,中斷10次為1s。程序如下:t1_sev: mov th1,#3ch ;重置t1計數(shù)初值 mov tl1,#0b0h push a ;保護(hù)現(xiàn)場 push b pu
37、sh psw clr ea clr rs1 clr rs0 ;選擇0區(qū)工作寄存器 inc r2 cjne r2,#0ah,en mov r2,#0 inc r3 ;秒計時單元r3加1 mov sec,r3 ;秒值送32h單元 cjne r3,#3ch,en ;判斷r3=60s否,否則轉(zhuǎn)en mov r3,#0 ;60s時間到,r3=0 mov sec,r3 ;秒值送32h單元 inc r4 ;分計時單元r4加1 mov min,r4 ;分值送33h單元 cjne r4,#3ch,en ;判斷r3=60min否,否則轉(zhuǎn)en mov r4,#0 ;60min時間到,r4=0 mov min,r4
38、;分值送33h單元 inc r5 ;小時單元r5加1 mov hour,r5 ;小時值送34h單元 cjne r5,#18h,en ;判斷r5=24h否,;否則轉(zhuǎn)en標(biāo)號地址 mov r5,#0 ;24h時間到,r5=0 mov hour,r5 ;小時值送34h單元en: pop psw ;恢復(fù)現(xiàn)場 pop b pop a setb ea ;開中斷 reti ;中斷返回;打鈴子程序如下: ring: mov r3,#04h mov dptr,#2ffchloop3: mov r1,#35h mov a,#0h inc dptr djnz r3,loop3 movc a,a+dptr ;讀取控制
39、碼 jz loop2 ;控制碼為0則返回 mov 6ah,a ;存控制字 mov r3,#03hloop1: inc dptr ;地址指針增量 dec r1 ;計時單元地址減量 mov a,#0h movc a,a+dptr ;讀作息時間(秒,分,時) mov 6bh,a ;存作息時間 mov a,r1 ;讀計時時間 cjne a,6bh,loop3 ;計時時間與作息時間比較 ;不等則轉(zhuǎn),繼續(xù)讀下面的控制碼 djnz r3,loop1 ;共讀取3次 mov a,6ah ;開關(guān)操作碼送a mov r3,#04h cjne a,#0feh,bb ;判斷是否打鈴定時時間到 clr p1.7 ;打鈴
40、sjmp loop3bb: cjne a,#7fh,cc ;判斷是否播音時間到 clr p1.6 ;放音樂 sjmp loop3cc: cjne a,#0fdh,dd setb p1.7 sjmp loop3dd: cjne a,#0bfh,loop2 setb p1.6loop2: ret ;返回;設(shè)置當(dāng)前時間程序如下:inta:setb p3.0 ;輸入鍵值前,先將p3.0、p3.1置1 setb p3.1 clr tr1 ;t1停止定時 clr et1 ;t1禁止中斷 clr ex0 ;int0禁止中斷 setb ea ;開中斷 setb pt0 ;允許t0中斷 push a ;保護(hù)現(xiàn)場
41、 push b push psw mov 31h,#06h ;(31h=06h(led位數(shù)) mov 29h,#00h ;(29h)=00hlp0: mov a,p3 anl a,#01h cjne a,#0,next0 ;判斷p3.0鍵(+1鍵)按下否,;否則轉(zhuǎn)next0 lcall delay1 ;有鍵按下,延時1ms mov a,p3 anl a,#01h cjne a,#0,lp0 ;判斷是否松開,否則轉(zhuǎn)lp0lp1: mov a,p3 anl a,#01h cjne a,#01h,lp1 ;等待鍵松開 inc 29h ;鍵松開后,(29h)+1 mov 30h,#1h sjmp lp
42、1next0:mov a,p3 anl a,#02h cjne a,#0,ll1 ;判斷p3.1是否按下,否則轉(zhuǎn)l1 lcall delay1 mov a,p3 anl a,#01h cjne a,#0,next0 ;是否松開,否則轉(zhuǎn)next0ld1:mov a,p3 anl a,#02h cjne a,#02h,ld1 ;是否松開,否則轉(zhuǎn)ld1 mov 29h,#0 mov 30h,#1 djnz 31h,lo1 sjmp lllo1:mov a,31h cjne a,#06h,lo2 ;是時鐘十位嗎?否則轉(zhuǎn)lo2 mov a,29h cjne a,#03h,la1 ;十位等于3嗎?否則轉(zhuǎn)l
43、a1 mov 29h,#00h ;是的,清零la1:mov 40h,29h ;(29h)-(40h) sjmp ll1 ;轉(zhuǎn)l1lpp0:sjmp lp0lo2:mov a,31h cjne a,#05h,lo3 ;是時鐘個位嗎?否則轉(zhuǎn)lo3 mov a,40h cjne a,#2,a1 mov a,29h cjne a,#4,la2 mov 29h,#0 sjmp la2a1:mov a,29h cjne a,#0ah,la2 mov 29h,#00hla2:mov 41h,29h sjmp ll1lo3:mov a,31h cjne a,#04h,lo4 ;是分鐘是十位嗎?否則轉(zhuǎn)lo4 mov a,29h cjne a,#06h,la3 ;大于5嗎?否則轉(zhuǎn)la3 mov 29h,#00hla3:mov 42h,29h sjmp ll1ll1:sjmp l1lo4:mov a,31h cjne a,#03h,lo5 ;是分鐘是個位嗎?否則轉(zhuǎn)lo5 mov a,29h cjne a,#0ah,la4 ;大于9嗎?否則轉(zhuǎn)la4 mov 29h,#00hla4:mov 43h,29h sjmp l1lo5:mov a,31h cjne a,#02h,lo6 ;是秒鐘是
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度大貨車司機職業(yè)安全培訓(xùn)合同樣本2篇
- 2024柚子果實分揀、包裝與倉儲物流合同3篇
- 2025年廠房電氣設(shè)備安裝與綠色建筑認(rèn)證服務(wù)合同3篇
- 2024簡化版反擔(dān)保金融抵押協(xié)議指導(dǎo)本版B版
- 《性分化異?!氛n件
- 2025年度促銷員突發(fā)事件應(yīng)對合同3篇
- 敦煌學(xué)探秘知到智慧樹章節(jié)測試課后答案2024年秋西安電子科技大學(xué)
- 藝術(shù)館文化協(xié)理員招聘協(xié)議
- 環(huán)保項目工程師勞動合同書
- 藥品倉庫租賃合同:藥品存儲
- 冬季高空作業(yè)施工方案
- 2024-2025學(xué)年人教版九年級數(shù)學(xué)上學(xué)期復(fù)習(xí):圓的綜合解答題 壓軸題型專項訓(xùn)練(30道題)
- 高中學(xué)生交通安全課件
- 高速收費站文明服務(wù)培訓(xùn)
- 2024年基金應(yīng)知應(yīng)會考試試題
- 2024員工質(zhì)量意識培訓(xùn)內(nèi)容大全
- 上海市徐匯區(qū)南洋模范中學(xué)2025屆物理高二第一學(xué)期期末檢測試題含解析
- 2024年教師資格考試初級中學(xué)學(xué)科知識與教學(xué)能力數(shù)學(xué)試題及解答參考
- 小學(xué)三年級上冊數(shù)學(xué)豎式計算題大全
- 物 理2024-2025學(xué)年蘇科版物理八年級上學(xué)期 期末綜合測試卷
- 2024新能源光伏電站運行規(guī)程
評論
0/150
提交評論