版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 第1節(jié) AT89C51單片機(jī)系統(tǒng)說(shuō)明…………………………………………………3</p><p> 1.1 89系列單片機(jī)的概況…………………………………………………… 3</p><p> 1.2 AT89C51單片機(jī)的內(nèi)部結(jié)構(gòu)………………………………………………5<
2、;/p><p> 1.3 各類(lèi)型單片機(jī)的比較分析……………………………………………… 6</p><p> 1.4 AT89C51單片機(jī)性能………………………………………………………6</p><p> 第2節(jié) 數(shù)字搶答器總體方案的設(shè)計(jì)…………………………………………… 8</p><p> 2.1 系統(tǒng)硬件設(shè)計(jì)………………………
3、…………………………………… 8</p><p> 2.1.1 系統(tǒng)原理圖………………………………………………………8</p><p> 2.1.2 時(shí)鐘頻率電路的設(shè)計(jì)……………………………………………9</p><p> 2.1.3 復(fù)位電路的設(shè)計(jì)………………………………………………10</p><p> 2.1.4 顯示電
4、路的設(shè)計(jì)………………………………………………10</p><p> 2.1.5 鍵盤(pán)掃描電路的設(shè)計(jì)…………………………………………11</p><p> 2.1.6 發(fā)聲…………………………………………………………… 11</p><p> 2.1.7 系統(tǒng)復(fù)位……………………………………………………… 11</p><p>
5、第3節(jié) 系統(tǒng)軟件設(shè)計(jì) ……………………………………………………………13</p><p> 3.1 主程序系統(tǒng)結(jié)構(gòu)圖 …………………………………………… 13</p><p> 3.2 程序流程圖 …………………………………………………… 14</p><p> 3.3 系統(tǒng)程序 ……………………………………………………… 15</p>
6、<p> 第4節(jié) 結(jié)束語(yǔ)…………………………………………………………………… 25</p><p> 參考文獻(xiàn)…………………………………………………………………………… 26</p><p> 基于單片機(jī)的數(shù)字搶答器系統(tǒng)</p><p> AT89C51單片機(jī)系統(tǒng)說(shuō)明</p><p> AT89C51單片機(jī)內(nèi)部包含了
7、作為微型計(jì)算機(jī)所必須的基本功能部件,各功能部件相互獨(dú)立的集成在同一塊芯片上。在此主要介紹AT89C51單片機(jī)的系統(tǒng)結(jié)構(gòu)及其功能。</p><p> 1.1 AT89C2051單片機(jī)的概況</p><p> AT89C51單片機(jī)是ATMAL公司89系列單片機(jī)的一種8位Flash單片機(jī)。它最大特點(diǎn)是片內(nèi)含有Flash存儲(chǔ)器,用途十分廣泛,特別是在生產(chǎn)便攜式商品,手提式儀器等方面,有著十分
8、廣泛的應(yīng)用。</p><p> (1) 89系列單片機(jī)的特點(diǎn):</p><p> 89系列單片機(jī)是以8031為內(nèi)核的產(chǎn)品,它與51系列單片機(jī)是兼容的。89系列單片機(jī)具有以下特點(diǎn):</p><p> a) 內(nèi)部含有Flash存儲(chǔ)器,使用戶(hù)在開(kāi)發(fā)過(guò)程中十分容易修改程序縮短系統(tǒng)的開(kāi)發(fā)周期??梢灾貜?fù)多次編程,可根據(jù)需要對(duì)內(nèi)部程序進(jìn)行更新或升級(jí)。</p>
9、<p> b) 89系列單片機(jī)的引腳和AT80C51引腳座兼容,用89系列單片機(jī)可以代替同檔次的AT80C51單片機(jī),不需要對(duì)外圍電路進(jìn)行改動(dòng)。</p><p> 表1-1 AT89C51特殊功能寄存器列表</p><p> 注:帶*號(hào)的特殊功能寄存器都是可以位尋址的寄存器</p><p> c) 89系列單片機(jī)采用靜態(tài)時(shí)鐘方式,可以節(jié)省電能,降低
10、便攜式設(shè)備的功耗。</p><p> (2) 89系列單片機(jī)的結(jié)構(gòu)簡(jiǎn)介:</p><p> 89系列單片機(jī)的內(nèi)部結(jié)構(gòu)與AT80C51相近,主要有以下部件:</p><p> 1 8031CPU 2 振蕩電路 3 總線(xiàn)控制部件</p><p> 4 中斷控制部件 5 片內(nèi)Flash存儲(chǔ)器
11、 6 片內(nèi)RAM</p><p> 7 并行I/O接口 8 定時(shí)器 9 串行I/O接口</p><p> 89系列的各種型號(hào)單片機(jī),內(nèi)部差別很大。例如,AT89C1051片內(nèi)Flash存儲(chǔ)器只有1KB,而AT89C52、AT89LV52和AT89S8252的片內(nèi)Flash存儲(chǔ)器有8KB。AT89S8252的結(jié)構(gòu)最復(fù)雜,它的內(nèi)部含有標(biāo)準(zhǔn)的串行口,還有一
12、個(gè)串行的外圍接口SPI,Watchdog定時(shí)器,雙數(shù)據(jù)指針等部件,以及電源下降的中斷恢復(fù)功能。</p><p> 89系列的單片機(jī)一共有五種型號(hào),分別為AT89C51,AT89LV51,AT89C52,AT89LV52和AT89S8252,其中AT89LV51和AT89LV52分別是AT89C51和AT89C52的低壓產(chǎn)品,最低電壓可以低2.7V,AT89C1051和AT89C2051則是抵擋的低壓產(chǎn)品,只有2
13、0根引腳。89系列單片機(jī)的型號(hào)編碼中字母的意義是:AT表示該器件是ATMEL公司的產(chǎn)品,C表示該器件是CMOS產(chǎn)品,LV表示該器件是低電壓產(chǎn)品,S表示該器件含可以下載的Flash存儲(chǔ)器。</p><p> AT89C51是89系列單片機(jī)的標(biāo)準(zhǔn)型,它是與MSC-51系列單片機(jī)兼容的。在內(nèi)部含有4KB或8KB可重復(fù)編程的Flash存儲(chǔ)器,可進(jìn)行1000次擦寫(xiě)操作。全靜態(tài)工作為0-24MHZ,有3級(jí)程序鎖存器,內(nèi)部含
14、有128-256字節(jié)的RAM,有32條可編程I/O口線(xiàn),2-3個(gè)16位定時(shí)/計(jì)數(shù)器,6-8個(gè)中斷源,通用的串行接口,低電壓空閑及電源下降方式。</p><p> AT89C51是基本型,具有4KB的Flash存儲(chǔ)器,128字節(jié)的片內(nèi)RAM,32條可編程I/O口,兩個(gè)個(gè)16位定時(shí)/計(jì)數(shù)器,6個(gè)中斷源,3位存儲(chǔ)器加密,一個(gè)可編程串行接口。AT89C52在AT89C52的基礎(chǔ)上,增加了一個(gè)定時(shí)/計(jì)數(shù)器,2個(gè)中斷源,1
15、28字節(jié)的片內(nèi)RAM,4KB的Flash存儲(chǔ)器。</p><p> 1.2 AT89C51單片機(jī)的內(nèi)部結(jié)構(gòu)</p><p> AT89C51單片機(jī)內(nèi)部由CPU、4KB的FPEROM ,128B的RAM,兩個(gè)16位的定時(shí)/計(jì)數(shù)器T0和T1,4個(gè)8位的I/O端P0、P1、P2、P3等組成。單片微機(jī)內(nèi)部最核心的部分是CPU。CPU主要功能是產(chǎn)生各種控制信號(hào),控制存儲(chǔ)器、輸入/輸出端口的數(shù)據(jù)
16、傳輸、數(shù)據(jù)的算術(shù)運(yùn)算、邏輯運(yùn)算以及位操作處理等,CPU按其功能可分為運(yùn)算器和控制器兩部分??刂破饔沙绦蛴?jì)數(shù)器PC、指令儲(chǔ)存器、指令譯碼器、實(shí)時(shí)控制與條件轉(zhuǎn)移邏輯電路等組成。它的功能是對(duì)來(lái)自存儲(chǔ)器中的指令進(jìn)行譯碼,通過(guò)實(shí)時(shí)控制電路,在規(guī)定的時(shí)刻發(fā)出各種操作所需的內(nèi)部和外部的控制信號(hào),使各部分協(xié)調(diào)工作,完成指令所規(guī)定的操作。運(yùn)算器由算術(shù)邏輯器部件ALU、累加器ACC、暫存器、程序狀態(tài)字寄存器PSW,BCD碼運(yùn)算調(diào)整電路等組成。</p&
17、gt;<p> 圖1-1 AT89C51單片機(jī)的內(nèi)部結(jié)構(gòu)圖</p><p> 為了提高數(shù)據(jù)處理和位操作功能,片內(nèi)增加了一個(gè)通用寄存器B和一些專(zhuān)用寄存器,還增加了位處理邏輯電路的功能。其內(nèi)部結(jié)構(gòu)如圖1-1所示。</p><p> 1.3 各類(lèi)型單片機(jī)的比較分析</p><p> 如表1-2所示,以下各種類(lèi)型的單片機(jī)內(nèi)除CPU外,還包括ROM、
18、RAM、4*8 I/O口和2個(gè)16位定時(shí)/計(jì)數(shù)器,它們都是功能很強(qiáng)的單片微型計(jì)算機(jī)。但由于80C51片內(nèi)為掩膜ROM,故內(nèi)部程序不能改寫(xiě),不用于實(shí)驗(yàn)開(kāi)發(fā)。87C51具有片內(nèi)EPROM,是真正的單片微機(jī),但由于價(jià)格較貴,且程序改寫(xiě)時(shí)要用紫外線(xiàn)擦除,時(shí)間較長(zhǎng),所以用得較少。80C31在市場(chǎng)上的價(jià)格很低,但片內(nèi)沒(méi)有ROM,必須在片外擴(kuò)展一片EPROM,非常不便。AT89C51片內(nèi)具有可電擦除的FPEROM,可以快速、多次地編程,且價(jià)格不高,所
19、以用得非常廣泛,目前開(kāi)發(fā)用的MCS—51產(chǎn)品絕大多數(shù)用89C51。</p><p> 表1-2 單片機(jī)主要性能的比較</p><p> 1.4 AT89C51單片機(jī)性能</p><p> AT89C51是一種低功耗、高性能的含有4KB閃速可編程電擦除只讀存儲(chǔ)器(FPEROM—Flash Programmable and Erasable Read Only
20、Memory)的8位CMOS微控制器,使用高密度、非易失存儲(chǔ)技術(shù)制造,并且與80C51指令系統(tǒng)和引腳完成兼容。芯片上的FPEROM允許在線(xiàn)或采用通用的非易失存儲(chǔ)編程器對(duì)程序存儲(chǔ)器重復(fù)編程。</p><p> (1)AT89C51的主要性能包括:AT89C51與MCS—51控制器系列產(chǎn)品兼容,片內(nèi)有4K可在線(xiàn)重復(fù)編程閃速電擦除存儲(chǔ)器(Flash Memory),存儲(chǔ)器可循環(huán)寫(xiě)入/擦除1000次;存儲(chǔ)器數(shù)據(jù)保存時(shí)
21、間可達(dá)10年;工作電壓范圍寬:Vcc可由2.7V到6V;全靜態(tài)工作可由0Hz到16MHz;程序存儲(chǔ)器具有3級(jí)鎖存保護(hù);128*8位內(nèi)部RAM;32條可編程I/O線(xiàn);兩個(gè)16位定時(shí)器/計(jì)數(shù)器;中斷結(jié)構(gòu)具有5個(gè)中斷源和2個(gè)中斷優(yōu)先級(jí);可編程全雙工串行通信;空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲(chǔ)內(nèi)容。</p><p> (2)FPEROM的編程:AT89C51的I/O口P0、P1、P2和P3除具有與80C51相同的一些
22、性能和用途外,在FPEROM編程時(shí),P0口接收代碼字節(jié),并在程序檢驗(yàn)時(shí)輸出代碼字節(jié),但在程序校驗(yàn)時(shí)需要外部上拉負(fù)載電阻,在FPEROM編程和程序校驗(yàn)期間,P1口接收低位地址字節(jié),P2口接收高位地址字節(jié)和一些控制信號(hào),P3口也接收一些FPEROM編程和校驗(yàn)用的信號(hào),此時(shí)ALE/PROG引腳是編程脈沖輸入(PROG)端,在FPEROM編程期間,如果選擇12V編程電壓、那么EA/Vpp引腳也允許接受12V編程電壓(Vpp)。</p>
23、;<p> 數(shù)字搶答器總體方案的設(shè)計(jì)</p><p> 本設(shè)計(jì)分為硬件設(shè)計(jì)和軟件設(shè)計(jì),這兩者相互結(jié)合,不可分離;從時(shí)間上看,硬件設(shè)計(jì)的絕大部分工作量是在最初階段,到后期往往還要做一些修改。只要技術(shù)準(zhǔn)備充分,硬件設(shè)計(jì)的大返工是比較少的,軟件設(shè)計(jì)的任務(wù)貫徹始終,到中后期基本上都是軟件設(shè)計(jì)任務(wù),隨著集成電路技術(shù)的飛速發(fā)展,各種功能很強(qiáng)的芯片不斷出現(xiàn),使硬件電路的集成度越來(lái)越高,硬件設(shè)計(jì)的工作量在整個(gè)項(xiàng)
24、目中的所占的比重逐漸下降。</p><p><b> 系統(tǒng)硬件設(shè)計(jì)</b></p><p> 為使硬件電路設(shè)計(jì)盡可能合理,應(yīng)注意以下幾方面:</p><p> (1) 盡可能采用功能強(qiáng)的芯片,以簡(jiǎn)化電路,功能強(qiáng)的芯片可以代替若干普通芯片,隨著生產(chǎn)工藝的提高,新型芯片的的價(jià)格不斷下降,并不一定比若干普通芯片價(jià)格的總和高。</p>
25、<p> (2) 留有設(shè)計(jì)余地。在設(shè)計(jì)硬件電路時(shí),要考慮到將來(lái)修改擴(kuò)展的方便。因?yàn)楹苌儆幸诲N定音的電路設(shè)計(jì),如果現(xiàn)在不留余地,將來(lái)可能要為一點(diǎn)小小的修改或擴(kuò)展而被迫進(jìn)行全面返工。</p><p> (3) 程序空間,選用片內(nèi)程序空間足夠大的單片機(jī),本設(shè)計(jì)采用AT89C51單片機(jī)。</p><p> (4) I/O端口,在樣機(jī)研制出來(lái)后進(jìn)行現(xiàn)場(chǎng)試用時(shí),往往會(huì)發(fā)現(xiàn)一些被忽
26、視的問(wèn)題,而這些問(wèn)題不是靠單純的軟件措施來(lái)解決的。如有些新的信號(hào)需要采集,就必須增加輸入檢測(cè)端;有些物理量需要控制,就必須增加輸出端。如果在硬件電路設(shè)計(jì)就預(yù)留出一些I/O端口,雖然當(dāng)時(shí)空著沒(méi)用,那么用的時(shí)候就派上用場(chǎng)了。</p><p><b> 總體原理圖</b></p><p> 如圖2-1,P1.0為開(kāi)始搶答,P1.7為停止,P1.1-P1.6為六路搶答輸入
27、,數(shù)碼管段選P0口,位選P2口低3位,蜂鳴器輸出為P3.6口。P3.2為時(shí)間加1調(diào)整,P3.3為時(shí)間減1調(diào)整。</p><p> 圖2-1 系統(tǒng)原理圖</p><p><b> 時(shí)鐘頻率電路的設(shè)計(jì)</b></p><p> 單片機(jī)必須在時(shí)鐘的驅(qū)動(dòng)下才能工作.在單片機(jī)內(nèi)部有一個(gè)時(shí)鐘振蕩電路,只需要外接一個(gè)振蕩源就能產(chǎn)生一定的時(shí)鐘信號(hào)送到單片
28、機(jī)內(nèi)部的各個(gè)單元,決定單片機(jī)的工作速度。</p><p> 圖2-2 外部振蕩源電路</p><p> 一般選用石英晶體振蕩器。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時(shí)鐘信號(hào),其振蕩頻率主要由石英晶振的頻率確定。電路中兩個(gè)電容 C1,C2的作用有兩個(gè):一是幫助振蕩器起振;二是對(duì)振蕩器的頻率進(jìn)行微調(diào)。C1,C2的典型值為30PF。</p
29、><p> 單片機(jī)在工作時(shí),由內(nèi)部振蕩器產(chǎn)生或由外直接輸入的送至內(nèi)部控制邏輯單元的時(shí)鐘信號(hào)的周期稱(chēng)為時(shí)鐘周期。其大小是時(shí)鐘信號(hào)頻率的倒數(shù),常用fosc表示。如時(shí)鐘頻率為12MHz,即fosc=12MHz,則時(shí)鐘周期為1/12µs。</p><p> 2.1.3 復(fù)位電路的設(shè)計(jì)</p><p> 單片機(jī)的第9腳RST為硬件復(fù)位端,只要將該端持續(xù)4個(gè)機(jī)器周
30、期的高電平即可實(shí)現(xiàn)復(fù)位,復(fù)位后單片機(jī)的各狀態(tài)都恢復(fù)到初始化狀態(tài),其電路圖如圖4所示:</p><p><b> 圖2-3 復(fù)位電路</b></p><p> 值得注意的是,在設(shè)計(jì)當(dāng)中使用到了硬件復(fù)位和軟件復(fù)位兩種功能,由上面的硬件復(fù)位后的各狀態(tài)可知寄存器及存儲(chǔ)器的值都恢復(fù)到了初始值,而前面的功能介紹中提到了倒計(jì)時(shí)時(shí)間的記憶功能,該功能的實(shí)現(xiàn)的前提條件就是不能對(duì)單片
31、機(jī)進(jìn)行硬件復(fù)位,所以設(shè)定了軟復(fù)位功能。軟復(fù)位實(shí)際上就是當(dāng)程序執(zhí)行完畢之后,將程序指針通過(guò)一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到程序執(zhí)行的起始地址。</p><p> 2.1.4 顯示電路的設(shè)計(jì)</p><p> 顯示功能與硬件關(guān)系極大,當(dāng)硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來(lái)解決。</p><p> 2.1.5 鍵盤(pán)掃描電路的設(shè)計(jì)<
32、;/p><p> 鍵盤(pán)是人與微機(jī)系統(tǒng)打交道的主要設(shè)備。關(guān)于鍵盤(pán)硬件電路的設(shè)計(jì)方法也可以在文獻(xiàn)和書(shū)籍中找到,配合各種不同的硬件電路,這些書(shū)籍中一般也提供了相應(yīng)的鍵盤(pán)掃描程序。站在系統(tǒng)監(jiān)控軟件設(shè)計(jì)的立場(chǎng)上來(lái)看,僅僅完成鍵盤(pán)掃描,讀取當(dāng)前時(shí)刻的鍵盤(pán)狀態(tài)是不夠的,還有不少問(wèn)題需要妥善解決,否則,人們?cè)诓僮麈I盤(pán)就容易引起誤操作和操作失控現(xiàn)象。在單片機(jī)應(yīng)用中鍵盤(pán)用得最多的形式是獨(dú)立鍵盤(pán)及矩陣鍵盤(pán)。</p><
33、;p><b> 圖2-4 獨(dú)立鍵盤(pán)</b></p><p> 它們各有自己的特點(diǎn),其中獨(dú)立鍵盤(pán)硬件電路簡(jiǎn)單,而且在程序設(shè)計(jì)上也不復(fù)雜,一般用在對(duì)硬件電路要求不高的簡(jiǎn)單電路中;矩陣鍵盤(pán)與獨(dú)立鍵盤(pán)有很大區(qū)別,首先在硬件電路上它要比獨(dú)立鍵盤(pán)復(fù)雜得多,而且在程序算法上比它要煩瑣,但它在節(jié)省端口資源上有優(yōu)勢(shì)得多,因此它更適合于多按鍵電路。其次就是消除在按鍵過(guò)程中產(chǎn)生的“毛刺”現(xiàn)象。這里采用最
34、常用的方法,即延時(shí)重復(fù)掃描法,延時(shí)法的原理為:因?yàn)椤懊獭泵}沖一般持續(xù)時(shí)間短,約為幾ms,而我們按鍵的時(shí)間一般遠(yuǎn)遠(yuǎn)大于這個(gè)時(shí)間,所以當(dāng)單片機(jī)檢測(cè)到有按鍵動(dòng)靜后再延時(shí)一段時(shí)間(這里我們?nèi)?0ms)后再判斷此電平是否保持原狀態(tài),如果是則為有效按鍵,否則無(wú)效。</p><p><b> 2.1.6 發(fā)聲</b></p><p> 我們知道,聲音的頻譜范圍約在幾十到幾千
35、赫茲,若能利用程序來(lái)控制單片機(jī)某個(gè)口線(xiàn)的“高”電平或低電平,則在該口線(xiàn)上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào),使喇叭發(fā)出不同的聲音。</p><p> 2.1.7 系統(tǒng)復(fù)位</p><p> 使CPU進(jìn)入初始狀態(tài),從0000H地址開(kāi)始執(zhí)行程序的過(guò)程叫系統(tǒng)復(fù)位。從實(shí)現(xiàn)系統(tǒng)復(fù)位的方法來(lái)看,
36、系統(tǒng)復(fù)位可分為硬件復(fù)位和軟件復(fù)位。硬件復(fù)位必須通過(guò)CPU外部的硬件電路給CPU的RESET端加上足夠時(shí)間的高電位才能實(shí)現(xiàn)。上電復(fù)位,人工按鈕復(fù)位和硬件看門(mén)狗復(fù)位均為硬件復(fù)位。硬件復(fù)位后,各專(zhuān)用寄存器的狀態(tài)均被初始化,且對(duì)片內(nèi)通用寄存器的內(nèi)容沒(méi)有影響。但是,硬件復(fù)位還能自動(dòng)清除中斷激活標(biāo)志,使中斷系統(tǒng)能夠正常工作,這樣一個(gè)事實(shí)卻容易為不少編碼人員所忽視。軟件復(fù)位就是用一系列指令來(lái)模擬硬件復(fù)位功能,最后通過(guò)轉(zhuǎn)移指令使程序從0000H地址開(kāi)始
37、執(zhí)行。對(duì)各專(zhuān)用寄存器的復(fù)位操作是容易的,也沒(méi)有必要完全模擬,可根據(jù)實(shí)際需要去主程序初始化過(guò)程中完成。而對(duì)中斷激活標(biāo)志的清除工作常被遺忘,因?yàn)樗鼪](méi)有明確的位地址可供編程。有的編程人員用020000(LJMP 0000H)作為軟件陷阱,認(rèn)為直接轉(zhuǎn)向0000H地址就完成了軟件復(fù)位,就是這類(lèi)錯(cuò)誤的典型代表。軟件復(fù)位是使用軟件陷阱和軟件看門(mén)狗后必須進(jìn)行的工作,這時(shí)程序出錯(cuò)完全有可能發(fā)生在中斷子程序中,中斷激活標(biāo)志已置位,它將阻止同級(jí)中斷響應(yīng)。
38、由于軟件看門(mén)是高級(jí)中斷,它</p><p> 在所有的指令中,只有RETI指令能夠清除中斷激活標(biāo)志。前文各處提案到的出錯(cuò)處理程序ERR主要完成這一功能,其他的善后工作交由復(fù)位后的系統(tǒng)去完成。這部分程序如下:</p><p> POWER DATA 67H ;上電標(biāo)志存放單元 </p><p> ERR: CLR
39、 EA ;關(guān)中斷</p><p> MOV DPTR,#ERR1 ;準(zhǔn)備返回地址</p><p> PUSH DPL</p><p> PUSH DPH</p><p> RETI ;清除高級(jí)中斷激活標(biāo)志</p><p> ERR1: MOV PO
40、WER,#0AAH;重建上電標(biāo)志</p><p> CLR A ;準(zhǔn)備復(fù)位地址</p><p> PUSH ACC ;壓入復(fù)位地址0000H</p><p> PUSH ACC</p><p> RETI ;清除低級(jí)中斷激活標(biāo)志,從程序0000H開(kāi)始執(zhí)行。</p>&l
41、t;p> 這段程序先關(guān)中斷,以便后續(xù)處理能順利進(jìn)行,然后用兩個(gè)RETI指令代替兩個(gè)LJMP指令,從而清除了兩級(jí)中斷激活標(biāo)志。有相應(yīng)軟件陷阱捕捉來(lái)的程序可能沒(méi)有全部激活兩個(gè)標(biāo)志,這也無(wú)妨。</p><p><b> 系統(tǒng)軟件設(shè)計(jì)</b></p><p> 軟件任務(wù)分析和硬件電路設(shè)計(jì)結(jié)合進(jìn)行,哪些功能由硬件完成,哪些任務(wù)由軟件完成,在硬件電路設(shè)計(jì)基本定型后,也
42、就基本上決定下來(lái)了。</p><p><b> 主程序系統(tǒng)結(jié)構(gòu)圖</b></p><p> 圖2-5 軟件系統(tǒng)結(jié)構(gòu)圖</p><p><b> 程序流程圖</b></p><p> 在本設(shè)計(jì)中包括了以下八個(gè)主要的程序:主程序;非法搶答序;搶答時(shí)間調(diào)整程序;回答時(shí)間調(diào)整程序;倒計(jì)時(shí)程序;正常搶
43、答處理程序;犯規(guī)處理程序;顯示及發(fā)聲程序。主流程圖如2-6所示:</p><p> 圖2-6 程序設(shè)計(jì)流程圖</p><p><b> 系統(tǒng)程序</b></p><p> OK EQU 20H;搶答開(kāi)始標(biāo)志位</p><p> RING EQU 22H;響鈴標(biāo)志位</p><p><
44、b> ORG 0000H</b></p><p><b> AJMP MAIN</b></p><p><b> ORG 0003H</b></p><p> AJMP INT0SUB</p><p><b> ORG 000BH</b></p
45、><p> AJMP T0INT</p><p><b> ORG 0013H</b></p><p> AJMP INT1SUB</p><p><b> ORG 001BH</b></p><p> AJMP T1INT</p><p>&l
46、t;b> ORG 0040H</b></p><p> MAIN: MOV R1,#0FH; 初設(shè)搶答時(shí)間為15s</p><p> MOV R2,#0AH; 初設(shè)答題時(shí)間為10s</p><p> MOV TMOD,#11H; 設(shè)置未定時(shí)器/模式1</p><p> MOV TH0,#0F0H</p>
47、;<p> MOV TL0,#0FFH; 越高發(fā)聲頻率越高,越尖</p><p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H; 50ms為一次溢出中斷</p><p><b> SETB EA</b></p><p><b> SETB ET0</b&
48、gt;</p><p><b> SETB ET1</b></p><p><b> SETB EX0</b></p><p> SETB EX1; 允許四個(gè)中斷,T0/T1/INT0/INT1</p><p><b> CLR OK</b></p>&l
49、t;p><b> CLR RING</b></p><p><b> SETB TR1</b></p><p> SETB TR0; 一開(kāi)始就運(yùn)行定時(shí)器,以開(kāi)始顯示FFF.如果想重新計(jì)數(shù),重置TH1/TL1就可以了</p><p><b> 查詢(xún)程序:</b></p>&l
50、t;p> START: MOV R5,#0BH</p><p> MOV R4,#0BH</p><p> MOV R3,#0BH</p><p> ACALL DISPLAY; 未開(kāi)始搶答時(shí)候顯示FFF</p><p> JB P1.0,NEXT</p><p> ACALL DELAY<
51、;/p><p> JB P1.0,NEXT;去抖動(dòng),如果"開(kāi)始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢(xún)</p><p> ACALL BARK;按鍵發(fā)聲</p><p><b> MOV A,R1</b></p><p> MOV R6,A; 送R1->R6,因?yàn)镽1中保存了搶答時(shí)間<
52、/p><p> SETB OK; 搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢(xún)搶答</p><p> MOV R3,0AH; 搶答只顯示計(jì)時(shí),滅號(hào)數(shù)</p><p> AJMP COUNT;進(jìn)入倒計(jì)時(shí)程序,"查詢(xún)有效搶答的程序"在COUNT里面</p><p> NEXT: JNB P1.1,FALSE1<
53、/p><p> JNB P1.2,FALSE2</p><p> JNB P1.3,FALSE3</p><p> JNB P1.4,FALSE4</p><p> JNB P1.5,FALSE5</p><p> JNB P1.6,FALSE6</p><p> AJMP START&
54、lt;/p><p><b> 非法搶答處理程序:</b></p><p> FALSE1: ACALL BARK; 按鍵發(fā)聲</p><p> MOV R3,#01H</p><p> AJMP ERROR</p><p> FALSE2: ACALL BARK</p><
55、;p> MOV R3,#02H</p><p> AJMP ERROR</p><p> FALSE3: ACALL BARK</p><p> MOV R3,#03H</p><p> AJMP ERROR</p><p> FALSE4: ACALL BARK</p><p&g
56、t; MOV R3,#04H</p><p> AJMP ERROR</p><p> FALSE5: ACALL BARK</p><p> MOV R3,#05H</p><p> AJMP ERROR</p><p> FALSE6: ACALL BARK</p><p>
57、MOV R3,#06H</p><p> AJMP ERROR</p><p> INT0(搶答時(shí)間R1調(diào)整程序):</p><p> INT0SUB:MOV A,R1</p><p> MOV B,#0AH</p><p><b> DIV AB</b></p><
58、p><b> MOV R5,A</b></p><p><b> MOV R4,B</b></p><p> MOV R3,#0AH</p><p> ACALL DISPLAY;先在兩個(gè)時(shí)間LED上顯示R1</p><p> JNB P3.2,INC0; P3.2為+1s鍵,如按下
59、跳到INCO</p><p> JNB P3.3,DEC0; P3.3為-1s鍵,如按下跳到DECO</p><p> JNB P1.7,BACK0; P1.7為確定鍵,如按下跳到BACKO</p><p> AJMP INT0SUB</p><p> INC0: MOV A,R1</p><p> CJ
60、NE A,#63H,ADD0; 如果不是99,R2加1,如果加到99了,R1就置0,重新加起</p><p> MOV R1,#00H</p><p> ACALL DELAY1</p><p> AJMP INT0SUB</p><p> ADD0: INC R1</p><p> ACALL DELA
61、Y1</p><p> AJMP INT0SUB</p><p> DEC0: MOV A,R1</p><p> JZ SETR1;如果R1為0, R1就置99,</p><p><b> DEC R1</b></p><p> ACALL DELAY1</p>&l
62、t;p> AJMP INT0SUB</p><p> SETR1: MOV R1,#63H</p><p> ACALL DELAY1</p><p> AJMP INT0SUB</p><p> BACK0: RETI</p><p> INT1(回答時(shí)間R2調(diào)整程序):</p>
63、<p> INT1SUB:MOV A,R2</p><p> MOV B,#0AH</p><p><b> DIV AB</b></p><p><b> MOV R5,A</b></p><p><b> MOV R4,B</b></p>
64、<p> MOV R3,#0AH</p><p> ACALL DISPLAY</p><p> JNB P3.2,INC1</p><p> JNB P3.3,DEC1</p><p> JNB P1.7,BACK1</p><p> AJMP INT1SUB</p><p&
65、gt; INC1: MOV A,R2</p><p> CJNE A,#63H,ADD1</p><p> MOV R2,#00H</p><p> ACALL DELAY1</p><p> AJMP INT1SUB</p><p> ADD1: INC R2</p><p&g
66、t; ACALL DELAY1</p><p> AJMP INT1SUB</p><p> DEC1: MOV A,R2</p><p><b> JZ SETR2</b></p><p><b> DEC R2</b></p><p> ACALL DEL
67、AY1</p><p> AJMP INT1SUB</p><p> SETR2: MOV R2,#63H</p><p> ACALL DELAY1</p><p> AJMP INT1SUB</p><p> BACK1: RETI</p><p> 倒計(jì)時(shí)程序(搶答倒計(jì)時(shí)和
68、回答倒計(jì)時(shí)都跳到該程序):</p><p> COUNT: MOV R0,#00H; 重置定時(shí)器中斷次數(shù)</p><p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H; 重置定時(shí)器</p><p> RECOUNT: MOV A,R6; R6保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)間或回答時(shí)間給R6</
69、p><p> MOV B,#0AH</p><p> DIV AB; 除十分出個(gè)位/十位</p><p> MOV 30H,A; 十位存于(30H)</p><p> MOV 31H,B; 個(gè)位存于(31H)</p><p> MOV R5,30H; 取十位</p><p&
70、gt; MOV R4,31H; 取個(gè)位</p><p><b> MOV A,R6</b></p><p> SUBB A,#07H</p><p> JNC LARGER;大于5s跳到LARGER,小于等于5s會(huì)提醒</p><p><b> MOV A,R0</b></p>
71、;<p> CJNE A,#0AH,FULL;1s中0.5s向下運(yùn)行</p><p><b> CLR RING</b></p><p> AJMP CHECK</p><p> FULL: CJNE A,#14H,CHECK; 下面系1s的情況,響并顯示號(hào)數(shù)并清R0,重新計(jì)時(shí)</p><p>
72、;<b> SETB RING</b></p><p><b> MOV A,R6</b></p><p> JZ QUIT; 計(jì)時(shí)完畢</p><p> MOV R0,#00H</p><p> DEC R6; 一秒標(biāo)志減1</p><p> AJMP
73、 CHECK</p><p> LARGER: MOV A,R0</p><p> CJNE A,#14H,CHECK; 如果1s向下運(yùn)行,否者跳到查"停/顯示"</p><p> DEC R6; 計(jì)時(shí)一秒R6自動(dòng)減1</p><p> MOV R0,#00H</p><p&
74、gt; CHECK: JNB P1.7,QUIT; 如按下停止鍵退出</p><p> ACALL DISPLAY</p><p> JB OK,ACCOUT; 如果是搶答倒計(jì)時(shí),如是則查詢(xún)搶答,否者跳過(guò)查詢(xún)繼續(xù)倒數(shù)(這里起到鎖搶答作用)</p><p> AJMP RECOUNT</p><p> ACCOUT: JN
75、B P1.1,TRUE1</p><p> JNB P1.2,TRUE2</p><p> JNB P1.3,TRUE3</p><p> JNB P1.4,TRUE4</p><p> JNB P1.5,TRUE5</p><p> JNB P1.6,TRUE6</p><p>
76、AJMP RECOUNT</p><p> QUIT: CLR OK; 如果按下了"停止鍵"執(zhí)行的程序</p><p><b> CLR RING</b></p><p> AJMP START</p><p><b> 正常搶答處理程序:</b></p>
77、<p> TRUE1: ACALL BARK; 按鍵發(fā)聲</p><p><b> MOV A,R2</b></p><p> MOV R6,A; 搶答時(shí)間R2送R6</p><p> MOV R3,#01H</p><p> CLR OK; 因?yàn)榇痤}的計(jì)時(shí)不再查詢(xún)搶答,所以就鎖了搶答<
78、/p><p> AJMP COUNT</p><p> TRUE2:ACALL BARK;</p><p><b> MOV A,R2</b></p><p><b> MOV R6,A</b></p><p> MOV R3,#02H</p><p
79、><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE3:ACALL BARK;</p><p><b> MOV A,R2</b></p><p><b> MOV R6,A</b></p><
80、p> MOV R3,#03H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE4:ACALL BARK;</p><p><b> MOV A,R2</b></p><p><b>
81、 MOV R6,A</b></p><p> MOV R3,#04H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE5: ACALL BARK;</p><p><b> MOV A,R2<
82、/b></p><p><b> MOV R6,A</b></p><p> MOV R3,#05H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p><p> TRUE6: ACALL BARK;</p&
83、gt;<p><b> MOV A,R2</b></p><p><b> MOV R6,A</b></p><p> MOV R3,#06H</p><p><b> CLR OK</b></p><p> AJMP COUNT</p>
84、<p><b> 犯規(guī)搶答程序:</b></p><p> ERROR: MOV R0,#00H</p><p> MOV TH1,#3CH</p><p> MOV TL1,#0B0H</p><p> MOV 34H,R3; 犯規(guī)號(hào)數(shù)暫存與(34H)</p><p>
85、HERE: MOV A,R0</p><p> CJNE A,#0AH,FLASH; 0.5s向下運(yùn)行->滅并停響</p><p><b> CLR RING</b></p><p> MOV R3,#0AH</p><p> MOV R4,#0AH</p><p> MOV
86、 R5,#0AH; 三燈全滅</p><p> AJMP CHECK1</p><p> FLASH: CJNE A,#14H,CHECK1; 下面系1s的情況,響并顯示號(hào)數(shù)并清R0,重新計(jì)</p><p><b> SETB RING</b></p><p> MOV R0,#00H</p>
87、<p> MOV R3,34H; 取回號(hào)數(shù)</p><p> MOV R5,#0BH</p><p> MOV R4,#0BH; 顯示FF和號(hào)數(shù)</p><p> AJMP CHECK1</p><p> CHECK1: JNB P1.7,QUIT1</p><p> ACALL DIS
88、PLAY</p><p><b> AJMP HERE</b></p><p> QUIT1: CLR RING</p><p><b> CLR OK</b></p><p> AJMP START</p><p><b> 顯示程序:</b&g
89、t;</p><p> 入口參數(shù):R5,R4,R3存入的分別為第一,二,三為數(shù)碼所顯示的位碼</p><p><b> 出口參數(shù):無(wú)</b></p><p> DISPLAY:MOV DPTR,#DAT1; 查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出</p><p><b> MO
90、V A,R5</b></p><p> MOVC A,@A+DPTR</p><p> MOV P2,#01H</p><p><b> MOV P0,A</b></p><p> ACALL DELAY</p><p> MOV DPTR,#DAT2</p>
91、<p><b> MOV A,R4</b></p><p> MOVC A,@A+DPTR</p><p> MOV P2,#02H</p><p><b> MOV P0,A</b></p><p> ACALL DELAY</p><p><b&
92、gt; MOV A,R3</b></p><p> MOVC A,@A+DPTR</p><p> MOV P2,#04H</p><p><b> MOV P0,A</b></p><p> ACALL DELAY</p><p><b> RET</b&
93、gt;</p><p> DAT1:DB 00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p> ;"滅","1","2","3","4","5","6","7",&qu
94、ot;8","9","滅","F"</p><p> DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p> ;第一個(gè)為零,其他與上相同,因?yàn)槭蝗绻麨榱泔@示熄滅</p><p> 加減時(shí)間延時(shí)(起到不會(huì)按下就加N個(gè)數(shù)
95、):</p><p> DELAY1: MOV 35H,#08H</p><p> LOOP0: ACALL DISPLAY</p><p> DJNZ 35H,LOOP0</p><p><b> RET</b></p><p> 延時(shí)(顯示和去抖動(dòng)用到):</p>&
96、lt;p> DELAY: MOV 32H,#12H</p><p> LOOP: MOV 33H,#0AFH</p><p> LOOP1: DJNZ 33H,LOOP1</p><p> DJNZ 32H,LOOP</p><p><b> RET</b></p><p>
97、;<b> 發(fā)聲程序:</b></p><p> BARK: SETB RING</p><p> ACALL DELAY1</p><p> ACALL DELAY1</p><p> CLR RING; 按鍵發(fā)聲</p><p><b> RET</b>
98、;</p><p> TO溢出中斷(響鈴程序):</p><p> T0INT:MOV TH0,#0ECH</p><p> MOV TL0,#0FFH</p><p> JNB RING,OUT</p><p> CPL P3.6 ; RING標(biāo)志位為1時(shí)候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音&l
99、t;/p><p><b> OUT:RETI</b></p><p> T1溢出中斷(計(jì)時(shí)程序):</p><p> T1INT: MOV TH1,#3CH</p><p> MOV TL1,#0B0H</p><p><b> INC R0</b></p>
100、;<p><b> RETI</b></p><p><b> END</b></p><p><b> 第4節(jié) 結(jié)束語(yǔ)</b></p><p> 通過(guò)這次學(xué)習(xí),讓我深深的了解了單片機(jī)這個(gè)偉大的系統(tǒng),它的功能是如此強(qiáng)大,利用它就可以做出各種各樣的設(shè)備來(lái),比如電子鐘、交通燈控制系統(tǒng)
101、,溫度控制系統(tǒng)等等,自從學(xué)了單片機(jī)我對(duì)電腦也刮目相看了,電腦跟單片機(jī)聯(lián)系在一起就是非常棒了。</p><p> 下面說(shuō)說(shuō)我在做個(gè)系統(tǒng)的時(shí)候遇到的問(wèn)題:</p><p> 自己對(duì)單片機(jī)的程度設(shè)計(jì)還不是非常得心應(yīng)手,應(yīng)該努力惡補(bǔ)一下。</p><p> 對(duì)電路不熟悉,對(duì)電路的不熟悉在設(shè)計(jì)過(guò)程中成為了我的絆腳石。</p><p> 編程時(shí)不
102、夠仔細(xì),往往一個(gè)小錯(cuò)誤就導(dǎo)致了功能不能實(shí)現(xiàn)。</p><p> 除了遇到的問(wèn)題一一解決之外,我還學(xué)到了非常多的東西,我發(fā)現(xiàn)單片機(jī)的是非常強(qiáng)大啊,什么事情都能做,我還在設(shè)計(jì)之余學(xué)習(xí)了單片機(jī)的目前發(fā)展規(guī)律和市場(chǎng),希望以后自己在這方面做做文章。</p><p> 在讀書(shū)的時(shí)候老師就給我們看過(guò)他做的電子鐘,那時(shí)我就傻掉了,單片機(jī)也能做這個(gè)東西?但是等老師慢慢的說(shuō)出步驟后,我也就是覺(jué)得不怎么奇怪
103、了,老師能做,我也能做,所以我認(rèn)真開(kāi)始跟著老師學(xué)習(xí),最終在短學(xué)期做了個(gè)系統(tǒng),通過(guò)這次短學(xué)期我學(xué)習(xí)到很多很多東西。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 胡漢才 單片機(jī)原理及其接口技術(shù)(第2版) 清華大學(xué)出版社 2004</p><p> [2] 冀振燕 LJML系統(tǒng)分析設(shè)計(jì)與應(yīng)用案例 人民郵電出版社 20
104、03</p><p> [3] 王文峰 數(shù)碼顯示六路搶答器的設(shè)計(jì) 井岡山師范學(xué)院學(xué)報(bào) 2000年05期 20-21</p><p> [4] 陳越等 ISD全系列單片語(yǔ)音錄放電路設(shè)計(jì)與應(yīng)用 電子工業(yè)出版社 2005</p><p> [5] 楊曉輝、張彤、姜俊海、智能搶答器的設(shè)計(jì)與制作 長(zhǎng)春大學(xué)學(xué)報(bào) 2000年06期 24-25</p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- at89c51單片機(jī)課程設(shè)計(jì)-----搶答器
- 畢業(yè)設(shè)計(jì)---聲光顯示89c51單片機(jī)搶答器
- 基于at89c51單片機(jī)的多人搶答器設(shè)計(jì)課程設(shè)計(jì)
- 89c51單片機(jī)課程設(shè)計(jì)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì)
- 89c51單片機(jī)數(shù)字電壓表課程設(shè)計(jì)
- 基于51單片機(jī)搶答器的課程設(shè)計(jì)
- 基于at89c51單片機(jī)的多人搶答器設(shè)計(jì)
- 課程設(shè)計(jì)-基于89c51單片機(jī)的數(shù)字溫度計(jì)設(shè)計(jì)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì) (2)
- 基于89c51單片機(jī)的秒表課程設(shè)計(jì) 2
- 單片機(jī)課程設(shè)計(jì)_基于89c51的數(shù)字電子時(shí)鐘的設(shè)計(jì)
- 基于89c51單片機(jī)交通燈課程設(shè)計(jì)
- 課程設(shè)計(jì)論文-基于89c51單片機(jī)的數(shù)字電子鐘設(shè)計(jì)
- 單片機(jī)搶答器課程設(shè)計(jì) --搶答器
- 課程設(shè)計(jì)--基于51單片機(jī)8路搶答器設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---基于89c51的電纜定長(zhǎng)控制設(shè)計(jì)
- 基于89c51的八路搶答器設(shè)計(jì)
- 單片機(jī)多功能秒表課程設(shè)計(jì)--89c51單片機(jī)秒表的設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論