0060-電梯自動控制系統(tǒng)的設(shè)計(jì)
0060-電梯自動控制系統(tǒng)的設(shè)計(jì),電梯,自動控制系統(tǒng),設(shè)計(jì)
目錄
第一章 引言 …………………………………………………………………………2
第二章 設(shè)計(jì)要求 ……………………………………………………………………2
第三章 設(shè)計(jì)方案 ……………………………………………………………………3
第四章 硬件設(shè)計(jì) ……………………………………………………………………5
4.1 單片機(jī) …………………………………………………………………5
4.2 各樓層電梯間電路 ……………………………………………………9
4.3 電梯間電路 …………………………………………………………12
4.4 控制臺電路 ……………………………………………………………13
4.5 單片機(jī)電路 ……………………………………………………………16
4.6 電路PCB圖 ……………………………………………………………17
第五章 軟件設(shè)計(jì) …………………………………………………………………19
5.1 簡易控制方案 …………………………………………………………19
5.2 進(jìn)一步控制方案 ………………………………………………………22
5.2.1 控制邏輯流程圖 ………………………………………………22
5.2.2 說明 ……………………………………………………………25
5.2.3 參考程序 ………………………………………………………26
第六章 軟硬件系統(tǒng)的調(diào)試 ………………………………………………………31
6.1 軟件調(diào)試 ………………………………………………………………31
6.2 硬件調(diào)試 ………………………………………………………………32
第七章 結(jié)束語 ……………………………………………………………………33
畢業(yè)設(shè)計(jì)總結(jié) …………………………………………………………………34
參考文獻(xiàn) ………………………………………………………………………36
電梯控制系統(tǒng)模型
摘 要:本論文主要介紹的是電梯自動控制模型,硬件部分我們使用的是單片機(jī)及外圍電路組成高度為四層樓的電梯控制系統(tǒng)。單片機(jī)采用AT89C51,晶體振蕩器選6MHz,C51、C52為30uF瓷片電容與晶體振蕩器形成時鐘電路。電容C53、電阻R51、R52和按鍵RESET構(gòu)成上電復(fù)位和手動復(fù)位電路。軟件部分采用了兩種控制方案,簡易控制方案只是簡單的電梯上升下降,在各樓層短暫停留。而進(jìn)一步控制方案則考慮各樓層的信號請求,以完成各樓層的升降控制。該系統(tǒng)具有工作穩(wěn)定,操作簡單等優(yōu)點(diǎn)。
關(guān)鍵詞:電梯, AT89C51單片機(jī),共陰極數(shù)碼管,CD4511譯碼器,發(fā)光二極管
第一章 引言
據(jù)國外有關(guān)資料介紹,公元前2800年在古代埃及,為了建筑當(dāng)時的金字塔,曾使用過由人力驅(qū)動的升降機(jī)械。公元1765年瓦特發(fā)明了蒸汽機(jī)之后,1858年美國研制出以蒸汽為動力,并通過皮帶轉(zhuǎn)動和蝸輪減速裝置驅(qū)動的電梯。1878年英國的阿姆斯特郎發(fā)明了水壓梯。并隨著水壓梯的發(fā)展,淘汰了蒸汽梯。后來又出現(xiàn)了采用液壓泵和控制閥以及直接柱塞式和側(cè)柱塞式結(jié)構(gòu)的液壓梯,這種掖壓梯至今仍為人們所采用。但是,電梯得以興盛發(fā)展的原因在于采用了電力作為動力來源.。在20世紀(jì)初,美國奧梯斯電梯公司首先使用直流電動機(jī)作為動力,生產(chǎn)出以槽輪式驅(qū)動的直流電梯,從而為今天的高速度,高行程電梯的發(fā)展奠定了基礎(chǔ)。20世紀(jì)30年代美國紐約市的102層摩天大樓建成,美國奧梯斯電梯公司為這座大樓制造和安裝了74臺速度為6.0M\S的電梯。 從此以后,電梯這個產(chǎn)品,一直在日新月異的發(fā)展著.目前電梯產(chǎn)品,不但規(guī)格品種多,自動化強(qiáng),而且安全可靠,乘坐舒服.近幾年來,隨著電子工業(yè)的發(fā)展,微處理機(jī)和電子計(jì)算機(jī)已成功的應(yīng)用到電梯的電氣控制系統(tǒng)中去,采用無觸點(diǎn)元件的電梯電氣控制系統(tǒng)已開始批量生產(chǎn)。
第二章 設(shè)計(jì)要求
采用AT89C51單片機(jī)及外圍電路組成高度為四層樓的電梯控制系統(tǒng)。
電梯內(nèi)電路由FS1、FS2、FS3和FS4四個發(fā)光二極管作為指示燈,電梯模型上電后,電梯的起始位置為一樓,等待控制臺Start按鍵按下,數(shù)碼管顯示“1”。當(dāng)Start按鍵按下后,電梯開始向上運(yùn)動,控制臺的上升指示燈UP亮。2s后到達(dá)二樓,數(shù)碼管顯示“2”并在二樓停留5s,然后繼續(xù)上升。每層樓停留5s,直到四樓。在四樓停留5s后開始下降,控制臺的指示燈DOWN亮。每層樓停5s,直到一樓。然后重復(fù)上述過程。如果在一個上下循環(huán)中按下過Stop鍵,電梯下降到一樓后停止工作。直到再次按下Start鍵后重新恢復(fù)工作
第三章 設(shè)計(jì)方案
電梯控制系統(tǒng)由各層樓的電梯間電路、電梯內(nèi)電路和控制臺電路三部分組成。電梯在各樓層的定位本應(yīng)采用行程開關(guān),考慮到模型的操作性,采用延時控制。相鄰樓層間升降設(shè)定為2S。
1)各樓層的電梯間電路
二、三層的電路間均有“上升”和“下降”選擇按鍵,一樓只有“上升”按鍵,四樓只有“下降”按鍵,每個按鍵配一只發(fā)光二極管,作為指示燈。
2)電梯內(nèi)部電路
目標(biāo)樓層1——4選擇按鍵配又相應(yīng)的指示燈。
3)控制臺電路
(1)兩個按鍵用于手動控制??刂齐娐返摹伴_始運(yùn)行”和“停止運(yùn)行”
(2)兩個指示燈,分別指示電梯的升降情況。
(3)一只數(shù)碼管,用于顯示電梯當(dāng)前所在的樓層。
4)控制方案
(1)簡單控制方案(見圖1)
工作原理:控制臺按下START鍵后,通過AT89C51單片機(jī)的控制使得電梯運(yùn)行,該系統(tǒng)中電梯運(yùn)行時不受各樓層的控制和影響往復(fù)運(yùn)動,只有在控制臺按下STOP鍵后,電梯降到一樓停止,等待控制臺再次啟動。該系統(tǒng)使用數(shù)碼管顯示當(dāng)前樓層。
圖1
(2)進(jìn)一步控制方案(見圖2)
工作原理:工作臺啟動電梯,單片機(jī)檢測各樓層信號請求控制電梯運(yùn)動,電梯動作完成后數(shù)碼管顯示所在樓層,同時單片機(jī)再次檢測各樓層請求信號,使的電梯再次動作,直到控制臺停止電梯,電梯降到一樓后停止,等待控制臺再次啟動電梯。
圖2
第四章 硬件設(shè)計(jì)
4.1 單片機(jī)
采用AT89C51單片機(jī)及外圍電路組成高度為四層樓的電梯控制系統(tǒng)。
AT89c51是一種低功耗高性能的8位單片機(jī),片內(nèi)帶有一個4k字節(jié)的flash可編擦除只讀存儲器(perom),它采用了cmos工藝和atmel公司的高密度非易失性存儲器(nuram)技術(shù),而且其輸出引腳和指令系統(tǒng)和mcu_51系列單片機(jī)兼容。片內(nèi)的flash存儲器允許在系統(tǒng)內(nèi)可改編程序或用常規(guī)的非易失性的存儲器編程器來編程。同時已具有三級程序存儲器保密的性能。
在眾多的51系列單片機(jī)中,要算atmei公司的at89c51更實(shí)用,因?yàn)樗粌H和mcu_51系列單片機(jī)指令、管腳完全兼容,而且其片內(nèi)的4k程序存儲器是flash工藝的,這種下藝的存儲器用戶可以用電的方式瞬間擦除、改寫。所以說這種單片機(jī)對開發(fā)設(shè)備的要求很低,開發(fā)時間也大大縮短。寫入單片機(jī)的程序還可以加密,這又很好地保護(hù)了所有者的勞動成果。
管腳說明
??? VCC:供電電壓。
???GND:接地。
???P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時,P0輸出原碼,此時P0外部必須被拉高。
??? P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時,P1口作為第八位地址接收。
?? P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時接收高八位地址信號和控制信號。
?? P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入““1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
?? P3口也可作為AT89C51的一些特殊功能口,如下表所示:
?? 口管腳 備選功能
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(記時器0外部輸入)
P3.5 T1(記時器1外部輸入)
P3.6 /WR(外部數(shù)據(jù)存儲器寫選通)
P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)
P3口同時為閃爍編程和編程校驗(yàn)接收一些控制信號。
?? RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機(jī)器周期的高電平時間。
?? ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
?? /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
?? /EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
單片機(jī)的基本組成如圖3所示
振蕩器和時鐘電路
程序儲存器(4KB)
數(shù)據(jù)儲存器(128字節(jié))
兩個16位
定時器/計(jì)數(shù)器
CPU
中斷
控制
內(nèi)部中斷
總線擴(kuò)展控制器
并行可編程I/O口
可編程串行口
外部中斷
擴(kuò)展控制
P0 P1 P2 P3
RXD TXD
外時鐘源
外部事件計(jì)數(shù)
AT89C51單片機(jī)的基本組成
圖3
下面簡要說明各部分組成
1、 中央處理器
單片機(jī)的中央處理器是單片機(jī)的核心,完成運(yùn)算和控制操作,中央處理器主要包括運(yùn)算器和控制器兩部分。
2、 存儲器
單片機(jī)內(nèi)部的存儲器分為程序存儲器和數(shù)據(jù)存儲器。
3、外圍接口電路
CPU與外部設(shè)備的信息交換都是通過接口電路來進(jìn)行。AT89C51單片機(jī)的外圍接口電路主要包括:4個可編程并行I/O口,1個可編程串行口,2個16位的可編程定時器以及中斷系統(tǒng)等。
4、時鐘振蕩電路
時鐘振蕩電路是CPU所需要的各種定時控制信號的必備單元。CPU只有在時序信號和控制信號的協(xié)調(diào)下工作,才能執(zhí)行各種指令。
4.2各樓層電梯間電路
如圖4所示,R52、R55、R56、R59、R60和R62是上拉電阻,其作用是保證按鍵未按下時,端口P1.0——P1.5為高電平。當(dāng)按鍵按下時,端口P1.0——P1.5通過按鍵接地,使得P1.0——P1.5變?yōu)榈碗娖健k娙軨51——C56的作用是消除抖動和抗干擾。各樓層電梯間的升降選擇按鍵均于單片機(jī)P1口連接,上升按鍵的P1.0——P1.2連接。下降按鍵與P1口的P1.3——P1.5連接,即由P1口可以讀出電梯間升、降按鍵的狀態(tài)。每個上升、下降按鍵均有一只發(fā)光二極管作為指示燈與之配合,發(fā)光二極管與P0口的P0.0——P0.5連接。每個發(fā)光二極管通過一只阻值為470?的限流電阻接電源(Vcc),這樣流經(jīng)發(fā)光二極管的電流均為7.5mA,有適當(dāng)?shù)牧炼龋瑫r單片機(jī)的端口在不加驅(qū)動的情況下可以承受。
一層
二層
三層
四層
圖4 電梯間電路
4.3電梯內(nèi)電路
電梯內(nèi)電路如圖5所示,四個目標(biāo)樓層選擇按鍵F1、F2、F3、F4和四個與之配合的發(fā)光二極管作為指示燈,即FS1、FS2、FS3和FS4。按鍵與P3口的P3.0——P3.3連接,指示燈與P2口的P2.0——P2.3相連。上拉電阻R11——R14和電容C11——C14的作用同上。
圖5 電梯內(nèi)電路
4.4控制臺電路
控制臺電路如圖6所示。發(fā)光二極管Power是電源指示燈,用以顯示供電是否正常。DISP是0.5in(英寸)共陰極數(shù)碼管,用來顯示當(dāng)前樓層。采用CD4511作譯碼器,經(jīng)R31——R37(阻值為470Ω)對數(shù)碼管限流。UP、DOWN兩只發(fā)光管用來顯示電梯運(yùn)行的方向。
CD4511是BCD-鎖存/七段譯碼/驅(qū)動器:
有燈測試功能;以反相器作輸出級,用以驅(qū)動LED或數(shù)碼管;具有消隱輸入;顯示數(shù)6時,a=0,顯示9時,d=0。
1--B,2--C,3--LT(為燈測試輸入端),4--BI(數(shù)據(jù)輸入端),5--LE(鎖存使能,鎖存輸入使能),6--D,7--A,8--VSS(電源負(fù)極)(A,B,C,D為門電路的輸入端)9--e,10--d,11--c,12--b,13--a,14--g,15--f, 16--vdd(電源正極)(a,b,c,d,e,f,g為譯碼輸出;顯示字符端輸出,連接數(shù)碼管的相應(yīng)腳)
CD4511功能表
十進(jìn)制
或功能
輸 入
輸 出
字
型
LE
D C B A
a b c d e f g
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
0 1 1 1
1 0 0 0
1 0 0 1
1
1
1
1
1
1
1
1
1
1
1 1 1 1 1 1 0
0 1 1 0 0 0 0
1 1 0 1 1 0 1
1 1 1 1 0 0 1
0 1 1 0 0 1 1
1 0 1 1 0 1 1
0 0 1 1 1 1 1
1 1 1 0 0 0 0
1 1 1 1 1 1 1
1 1 1 1 0 1 1
消 隱
鎖 定
燈 測 試
×
1
×
1
1
0
× × × ×
× × × ×
× × × ×
0
1
×
0 0 0 0 0 0 0
鎖定在上一個LE=0時
1 1 1 1 1 1 1
圖6 控制臺電路
4.5單片機(jī)電路
單片機(jī)電路如圖7所示,單片機(jī)采用AT89C51,晶體振蕩器選6MHz,C51、C52為30uF瓷片電容與晶體振蕩器形成時鐘電路。電容C53、電阻R51、R52和按鍵RESET構(gòu)成上電復(fù)位和手動復(fù)位電路。外部接線圖見附圖1。
圖7 單片機(jī)電路
4.6、電路板PCB圖
圖8所示電路板PCB圖的頂層和底層。
圖8 電梯模型PCB圖(頂面)
圖8 電梯模型PCB圖(底面)
第五章 軟件設(shè)計(jì)
5.1簡易控制方案
(1)電梯模型上電后,電梯的起始位置為一樓,等待控制臺Start按鍵按下,數(shù)碼管顯示“1”。
(2)當(dāng)Start按鍵按下后,電梯開始向上運(yùn)動,控制臺的上升指示燈UP亮。2s后到達(dá)二樓,數(shù)碼管顯示“2”并在二樓停留5s,然后繼續(xù)上升。每層樓停留5s,直到四樓。在四樓停留5s后開始下降,控制臺的指示燈DOWN亮。每層樓停5s,直到一樓。然后重復(fù)上述過程。
(3)如果在一個上下循環(huán)中按下過Stop鍵,電梯下降到一樓后停止工作。直到再次按下Start鍵后重新恢復(fù)工作。
(4)5s定時由定時器T0和R2一起完成。T0定時100ms,每100ms中斷一次。在中斷服務(wù)程序中將R2加1。當(dāng)R2加到50時,中斷了50次,50×100ms=5s,即完成5s定時。
(5)定時器T1定時10ms。每10s中斷一次,在中斷服務(wù)程序中檢查一次Stop鍵是否按下,如果按下停止T1計(jì)時(TR1=0),并將R3置為非0(程序中間R3寫#0FFH)。電梯下降到一樓是檢查R3中的內(nèi)容,如果不是0就停止工作。
(6)參考程序
ORG 0000H
AJMP START
ORG 000BH
AJMP TIME
ORG 001BH
AJMP TIME1
START:MOV TMOD,#11H
MOV IE,#8AH
MOV TH0,#3CH ;定時100ms
MOV TL0,#0B0H
MOV TH1,0ECH ;定時10ms
MOV TL1,#78H
SETB TR0
SETB TR1
MOV SP,#6FH
Q1: SETB P0.6 ;下降指示燈滅
SETB P0.7 ;上升指示燈滅
MOV R3,#0
MOV P3,#1FH ;數(shù)碼管顯示"1"
JB P1.7,$ ;等待開始工作指令
SETB P0.6
Q2: CLR P0.7 ;上升指示燈亮
ACALL DLY ;上升2s
SETB P0.7 ;到達(dá)二層,上升指示燈滅
MOV P3,#2FH ;數(shù)碼管顯示"2"
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
CLR P0.7 ;5s到,繼續(xù)上升
ACALL DLY ;上升2s
SETB P0.7 ??;到達(dá)三層,上升指示燈滅
MOV P3,#3FH ;數(shù)碼管顯示"3"
MOV R2,#0 ;5s定時開始
DJNZ R2,#50,$ ;等待5s延時
CLR P0.7 ;5s到,繼續(xù)上升
ACALL DLY ;上升2s
SETB P0.7 ??;到達(dá)四層,上升指示燈滅
MOV P3,#4FH ;數(shù)碼管顯示"4"
MOV R2,#0 ;5s定時開始
DJNZ R2,#50,$ ;等待5s延時
CLR P0.6 ;5s到,開始下降,下降指示燈亮
ACALL DLY ;下降2s
SETB P0.6 ;達(dá)到三層,下降指示燈滅
MOV P3,#3FH ;數(shù)碼管顯示"3"
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
CLR P0.6 ;5s到,繼續(xù)下降,下降指示燈亮
ACALL DLY ;下降2s
SETB P0.6 ;達(dá)到二層,下降指示燈滅
MOV P3,#2FH ;數(shù)碼管顯示"2"
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
CLR P0.6 ;5s到,開始下降,下降指示燈亮
ACALL DLY ;下降2s
SETB P0.6 ;達(dá)到一層,下降指示燈滅
MOV P3,#1FH ;數(shù)碼管顯示"1"
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
CJNZ R3,#0,Q3
AJMP Q2 ;R3=0轉(zhuǎn)到Q2開始新的循環(huán)
AJMP Q2 ;R3≠0轉(zhuǎn)Q1停止工作
;定時器T0中斷服務(wù)程序:5s定時,R2為計(jì)數(shù)器
TIME: MOV TH0,#3CH
MOV TL0,#0B0H
INC R2
RET1
;定時器T1中斷服務(wù)程序;記錄Stop鍵是否曾經(jīng)按下過,R3作為標(biāo)志
TIME: JB P1.6,TIME11
MOV R3,#0FFH
CLR TH1
TIME11:RET1
DLY: MOV R4,#200
DLY1: MOV R5,#250
DJNZ R5,$
DJNZ R4,DLY1
RET
END
5.2進(jìn)一步控制方案
5.2.1控制邏輯流程圖如圖9和圖10所示。
開始
圖9 主程序流程
N
停留5S
停留5s
三、四 樓有請求?
停留5s
本樓層是
請求目標(biāo)?
上升到達(dá)二樓
二、三、四
樓有請求?
P1.7=0
本樓層請求目標(biāo)?
上升到達(dá)三樓
四樓有請求?
開始到達(dá)四樓
在一樓
初始化
一、二、三樓有請求
下降到達(dá)三樓
本樓層是否請求目標(biāo)?
停留5S
一、二樓有請求?
下降到達(dá)二樓
本樓層是
請求目標(biāo)?
停留5S
一樓有請求?
下降到達(dá)一樓
停留5S
R3=0?
Y
Y
N
Y
N
Y
N
Y
N
Y
N
圖10定時器T1中斷程序流程
開始
讀取所有按鍵
標(biāo)志R3置非0數(shù)
清除全部電梯間上升請求
清除全部電梯間下降請求
清除全部電梯內(nèi)目標(biāo)樓層請求
修改讀入的按鍵狀態(tài)使之只有電梯內(nèi)目標(biāo)為一樓
并關(guān)閉T1,不再讀取按鍵
Stop按下?
取得電梯間上升請求,并刷新指示燈
取得電梯間下降請求,并刷新指示燈
取得電梯內(nèi)目標(biāo)樓層請求,并刷新指示燈
返回
5.2.2說明
?存儲單元分配
20H——電梯間上升請求;
20H.0——1樓;20H.1——2樓;20H.2——3樓;20H.3——4樓。
21H——電梯下降請求:
21H.0——1樓;21H.1——2樓;21H.2——3樓;21H.3——4樓。
22H——電梯內(nèi)目標(biāo)樓層請求:
22H.0——1樓;22H.1——2樓;22H.2——3樓;22H.3——4樓。
20H——22H:0=無請求;1=有請求。
堆線棧底:70H單元。
T1中斷服務(wù)程序中6EH單元包袱累加器A的內(nèi)容。
30H、31H單元分別臨時存放P1、P3按鍵狀態(tài)。
32H作為單元按鍵及指示燈處理的中間單元。
R3作為Stop鍵曾經(jīng)下過的記錄。
?上電之后,系統(tǒng)一直等待,當(dāng)Start鍵按下后開始工作。
?如果按下Stop鍵,強(qiáng)制電梯直接下降到一樓,然后電梯停止工作。直到再次按下Start鍵后重新恢復(fù)工作。
④中斷服務(wù)程序每10ms一次檢查所有按鍵狀態(tài),并記錄在相應(yīng)存儲單元,同時控制相應(yīng)指示燈。
⑤定時器T0定時100ms,R2作為5s定時的計(jì)數(shù)器。T0每中斷一次R2加1,當(dāng)R2=50時,5s計(jì)時完成。
5.2.3參考程序
ORG 0000H
AJMP START
ORG 0000BH
AJMP TIME1
START: MOV TMOD,#11H
MOV IE,#8AH
MOV TH0,3CH ;定時100ms
MOV TL0,#0B0H
MOV TH1,#0ECH ;定時10ms
MOV TL1,#78H
SETB TR0
MOV SP,#6FH
S1: CLR P0.6
CLR P0.7
MOV R3,#0
MOV P3,#1F ;數(shù)碼管顯示“1”
JB P1.7,$ ;等待開始工作指令
SETB P0.6
SETB TR1 ;啟動T1
;10ms一次讀取按鍵
UP1: MOV A,20H ;目前在一樓
ORL A,21H ;取得>1樓請求情況
ORL A,22H
ANL A,#0EH
JZ UP1 ;無請求,則等待
CLR P0.7 ;上升指示燈亮
ACALL DLY ;上升2s
UP2: MOV P3,#2FH ;到達(dá)2樓,數(shù)碼管顯示“2”
JB 20H.1,UP21 ;是2樓電梯間的上升請求,轉(zhuǎn)UP21
JB 22H.1,U ;是電梯內(nèi)目標(biāo)2樓請求,轉(zhuǎn)UP21
SJMP UP22
UP21: CLR 20H.1 ;清2樓電梯間上升請求標(biāo)志位
CLR 22H.1 ;清電梯內(nèi)目標(biāo)2樓請求標(biāo)志位
SETB P0.7 ;上升指示燈滅
MOV R2,#0 ;5s定時開始
CNJE R2,#50,$ ;等待5s延時
UP22: MOV A,20H
ORL A,21H
ORL A,22H
ANL A,#0CH ;取得>2樓請求情況
JNZ UP23
AJMP DOWN22 ;>2樓無請求,轉(zhuǎn)2樓下降
UP23:CLR P0.7 ;上升指示燈亮
ACALL DLY ;上升2s
UP3: MOV P3,#3FH ;到達(dá)3樓,數(shù)碼管顯示“3”
JB 20H.2,UP31 ;是3樓電梯間的上升請求,轉(zhuǎn)UP31
JB 22H.2,UP31 ;是電梯內(nèi)目標(biāo)3樓請求,轉(zhuǎn)UP31
SJMP R2,#50,$
UP31:CLR 20H.1 ;清3樓電梯間上升請求標(biāo)志位
CLR 22H.1 ;清電梯內(nèi)目標(biāo)3樓請求標(biāo)志位
SETB P0.7 ;上升指示燈滅
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
UP32:MOV A,20H
ORL A,21H
ORL A,22H
ANL A,#O8H ;取得>3樓請求情況
JNZ UP33
AJMP DOWN32 ;>3樓無請求,轉(zhuǎn)3樓下降
UP33:CLR P0.7 ;上升指示燈亮
ACALL DLY ;上升2s
UP4: CLR 20H.3 ;清4樓電梯間下降請求標(biāo)志位
CLR 22H.3 ;清電梯內(nèi)目標(biāo)4樓請求標(biāo)志位
SETB P0.7 ;上升指示燈滅
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
UD4: MOV A,20H
ORG A,21H
ORG A,22H
ANL A,#07H ;取得〈4的請求情況
JNZ DOWN4
AJMP UD4
DOWN4:CLR P0.6 ;下降指示燈亮
ACALL DLY ;下降2s
DOWN3: MOV P3,#3FH ;到達(dá)3樓,數(shù)碼管顯示“3”
JB 21H.2,DOWN31 ;是3樓電梯間的下降請求,轉(zhuǎn)DOWN31
JB 22H.2,DOWN31 ;是電梯內(nèi)目標(biāo)3樓請求,轉(zhuǎn)DOWN31
SJMP DOWN32
DOWN31:CLR 21H.2 ;清3樓電梯間下降請求標(biāo)志位
CLR 22H.2 ;清電梯內(nèi)目標(biāo)3樓請求標(biāo)志位
SETB P0.6 ;下降指示燈滅
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
DOWN32:MOV A,20H
ORL A,21H
ORL A,22H
ANL A,#03H ;取得〈3樓請求情況
JNZ DOWN33
AJMP UP32 ;〈3樓請求,轉(zhuǎn)3樓上升
DOWN33:CLR P0.6 ;下降指示燈亮
ACALL DLY
DOWN2: MOV P3,#2FH ;到達(dá)2樓,數(shù)碼管顯示“2”
JB 21H.1,DOWN21 ;是2樓電梯間的下降請求,轉(zhuǎn)DOWN21
JB 22H.1,DOWN22 ;是電梯內(nèi)目標(biāo)3樓請求,轉(zhuǎn)DOWN21
SJMP DOWN22
DOWN21:CLR 21H.1 ;清2樓電梯間下降請求標(biāo)志位
CLR 22H.1 ;清電梯內(nèi)目標(biāo)2樓請求標(biāo)志位
SETB P0.6 ;下降指示燈滅
MOV R2,#0 ;5s定時開始
CJNE R2,#50,$ ;等待5s延時
DOWN22:MOV A,20H
ORL A,21H
ORL A,22H
ANL A,#01H ;取得〈2樓請求情況
JNZ DOWN23
AJMP UP22 ;〈2無樓請求,轉(zhuǎn)2樓上升
DOWN23:CLR P0.6 ;下降指示燈亮
ACALL DLY
DOWN1: CLR P3,#1FH ;到達(dá)1樓,數(shù)碼管顯示“1”
DOWN11:CLR 21H.0 ;清電梯內(nèi)目標(biāo)1樓請求標(biāo)志位
SETB P0.6 ;下降指示燈滅
MOV R2,#0 ;5s定時開始
CJNZ R2,#50,$ ;等待5s延時
CJNZ R3,#0,DOWN12 ;Stop鍵是否按下過
AJMP UP1
DOWN12:CLR P0.6 ;若Stop鍵按下過,轉(zhuǎn)S1停止工作
CLR P0.7
AJMP S1
;定時器T0中斷服務(wù)程序;5s計(jì)時
TIME: MOV TH0,#3CH
MOV TL0,#0B0H
INC R2 ;R2計(jì)數(shù)器
RETI
;定時器T1中斷服務(wù)程序;按鍵狀態(tài)檢查
TIME1: MOV TH1,#0ECH ;每10ms檢查一次按鍵
MOV TL1,#78H
MOV 6EH,A
MOV 30H,P1 ;讀入所有按鍵狀態(tài)
MOV 31H,P3
JB P1.6,TIME11 ;若Stop鍵按下,則正常運(yùn)行
MOV R3,#0FFH ;Stop鍵按下,標(biāo)志R3置非0數(shù)
MOV 20H,#0 ;清除全部電梯間上升請求
MOV 21H,#0 ;清除全部電梯間下降請求
MOV 22H,#0 ;清除全部電梯內(nèi)目標(biāo)樓層請求
MOV 30H,#0FFH ;修改讀入的按鍵狀態(tài),使之為
MOV 31H,#0FEH ;電梯內(nèi)目標(biāo)為一樓
CLR TR1 ;開關(guān)閉T1,不再讀取按鍵
TIME11: MOV A,30H
CPL A
ANL A,#07H ;取得電梯間上升請求
ORL 20H,A
MOV A,20H ;取得上升指示燈狀態(tài)
CPL A
ANL A,#07H
MOV 32H,A
MOV A,30H
CPL A
ANL A,#38H ;取得電椅間下降請求
RR A
RR A
ORL 21H,A
MOV A,21H
CPL A
ANL A,#0EH
RL A
RL A
ORL 32H,A
MOV A,P0
ANL A,#0C0H
ORL A,32H ;刷新上升、下降請求指示燈
MOV A,31H
ANL A,#0FH ;取得電梯內(nèi)目標(biāo)樓層請求
ORL 22H,A
MOV A,22H
CPL A
MOV P2,A ;刷新電梯內(nèi)目標(biāo)樓層指示燈
TIME12: MOV A,6EH
RET1
;2s延時程序
DLY: MOV R5,#20
DLYI: MOV R6,#100
DLY2: MOV R7,#250
DJNZ R7,$
DJNZ R6,DLY2
DJNZ R5,DLY1
RET
END
第六章 軟硬件系統(tǒng)的調(diào)試
6.1 軟件調(diào)試
軟件調(diào)試的任務(wù)是利用開發(fā)工具進(jìn)行在線仿真調(diào)試,發(fā)現(xiàn)和糾正程序錯誤,同時也能發(fā)現(xiàn)硬件故障。
程序的調(diào)試應(yīng)一個模塊一個模塊地進(jìn)行,首先單獨(dú)調(diào)試各功能子程序,檢驗(yàn)程序是否能夠?qū)崿F(xiàn)預(yù)期的功能,接口電路的控制是否正常等;最后逐步將各子程序連接起來總調(diào)。聯(lián)調(diào)需要注意的是,各程序模塊間能否正確傳遞參數(shù),特別要注意各子程序的現(xiàn)場保護(hù)與恢復(fù)。調(diào)試的基本步驟如下:
(1) 用仿真器修改顯示緩沖區(qū)內(nèi)容,屏蔽拆字程序,調(diào)試動態(tài)掃描顯示功能。例如將DISP0~DISP5單元置為“012345”,應(yīng)能在LED上從左到右顯示“012345”。若顯示不正確,可在DISP子程序相應(yīng)位置設(shè)置斷點(diǎn)調(diào)試檢查。然后用仿真器修改計(jì)時緩沖區(qū)內(nèi)容,調(diào)用拆字程序,調(diào)試顯示模塊DISPLAY。例如,將HOUR、MIN、SEC單元置為“123456”,檢查是否能正確顯示“12:34:56”。若顯示不正確,應(yīng)在SEPA子程序相應(yīng)位置設(shè)置斷點(diǎn),調(diào)試檢查。
(2) 運(yùn)行主程序調(diào)試計(jì)時模塊,不按下任何鍵,檢查是否能從由00:00:00開始正確計(jì)時。
若不能正確計(jì)時則應(yīng)在定時器中斷服務(wù)子程序中設(shè)置斷點(diǎn),檢查HOUR、MIN、SEC、MSEC單元是否隨斷點(diǎn)運(yùn)行而變化。然后屏蔽緩沖區(qū)初始化部分,用仿真器修改計(jì)時緩沖區(qū)內(nèi)容為23:58:48,運(yùn)行主程序(不按下任何鍵),檢驗(yàn)?zāi)芊裾_進(jìn)位。
(3) 調(diào)試鍵盤掃描模塊KEYSCAN,先用延時10ms子程序代替顯示子程序延時消抖,在求取鍵號后設(shè)置斷點(diǎn),中斷后觀察A累加器中的鍵號是否正確;然后恢復(fù)用顯示子程序延時消抖,檢驗(yàn)與DISPLAY模塊能否正確連接。
(4) 調(diào)試時間設(shè)置/鬧鐘定時模塊MODIFY。首先屏蔽COMB子程序,單獨(dú)調(diào)試鍵盤設(shè)置模塊KEYIN,觀察顯示緩沖區(qū)DISP0~DISP5單元的內(nèi)容是否隨鍵入的鍵號改變,以及鍵號能否在LED上顯示。然后屏蔽KEYIN子程序,單獨(dú)調(diào)試合字模塊COMB,分別將R1設(shè)置為時間設(shè)置緩沖區(qū)和鬧鐘值寄存區(qū)的首地址,修改顯示緩沖區(qū)內(nèi)容,程序運(yùn)行后查看時間設(shè)置緩沖區(qū)HOUR、MIN、SEC單元和鬧鐘值寄存區(qū)AHOUR、AMIN、ASEC單元內(nèi)容是否正確。最后聯(lián)調(diào)MODIFY模塊。
(5) 運(yùn)行主程序聯(lián)調(diào),檢查能否用鍵盤修改當(dāng)前時間以及設(shè)置鬧鐘,能否正確計(jì)時、啟鬧、停鬧。
6.2硬件調(diào)試
6.2.1 狀態(tài)燈顯示測試
當(dāng)電路連接完畢后,將寫好的測試程序刷寫到芯片內(nèi),分別給端
收藏