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