版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 交通信號燈的控制</b></p><p><b> 一、設計目的</b></p><p> 通過課程設計使學生更進一步掌握微機原理及應用課程的有關知識,提高應用微機解決問題的能力,加深對微機應用的理解。通過查閱資料,結合所學知識進行軟、硬件的設計,使學生初步掌握應用微機解決問題的步驟及方法。</p>
2、<p><b> 二、設計要求</b></p><p> 1.通過8255A并口來控制LED發(fā)光二極管的亮滅。 2.A口控制紅燈,B口控制黃燈,C口控制綠燈。 3.輸出為0則亮,輸出為1則滅。 4.用8253定時來控制變換時間 。要求:</p><p> 設有一個十字路口,1、3為南,北方向,2、4為東西方向,初始態(tài)為4個路口的紅
3、燈全亮。之后,1、3路口的綠燈亮,2、4路口的紅燈亮,1、3路口方向通車。延遲30秒后,1、3路口的綠燈熄滅,而1,3路口的黃燈開始閃爍(1HZ)。閃爍5次后,1、3路口的紅燈亮,同時2、4路口的綠燈亮,2、4路口方向開始通車。延遲30秒時間后,2、4路口的綠燈熄滅,而黃燈開始閃爍。閃爍5次后,再切換到1、3路口方向。之后,重復上述過程。三、硬件方案說明工作原理簡要說明: 此方案是通過并行接口芯片8255A和8088計算機的
4、硬件連接,以及通過8253延時的方法,來實現(xiàn)十字路口交通燈的模擬控制。 硬件連接方案:紅燈(RLED),黃燈(YLED)和綠燈(GLED)分別接在8255的A,B,C口的低四位端口,PA0,PA1,PA2,PA3分別接1,2,3,4路口的紅燈,B,C口類推。8088工作在最小模式,低八位端口AD0~AD7接到8255和8253的D0~D7,同時AD0~AD7通過地址鎖存器,接到3—8譯碼器,譯碼后分別連到8255和8253的CS
5、片選端。8253的三個門控端接+5V,CLO</p><p> 下面分塊說明各硬件的連接情況</p><p><b> 1)地址線的連接</b></p><p> 地址線只用低八位,即AD0~AD7,該地址線通過分時復用,先送出地址,通過地址鎖存器74LS373鎖存以后,再送出數(shù)據(jù)。其中A7、A6通過一個與門產生一個信號,A5、A4通過一
6、個與門產生一個信號,將這兩個信號再通過一個與非門產生一個74LS138的高位C相連輸入信號,A3、A2分別與譯碼器B、A相連,作</p><p> 為片選信號。而A1、A0則直接與8255和8253的A1、</p><p> A0相連。而8255和8253的片選信號CS分別接Y1和</p><p> Y0。由上述可知A7A6A5A4=1111,由此可得各端口地
7、</p><p><b> 址如表1所示:</b></p><p> 2)LED燈與8255的連接</p><p> 設計要求給出,當8255的端口輸出低電平時,LED燈</p><p> 亮,當輸出高電平時,LED燈滅,由此可將LED燈的陽極通過</p><p> 一電阻與電源VCC相
8、連,陰極與8255的端口直接相連,則可</p><p> 滿足上述要求。右圖給出了連接示意圖(具體連接圖見附件</p><p><b> 一)。</b></p><p><b> 3)8253的連接</b></p><p> 8253共有3個相同的計數(shù)器??紤]到最小頻率要求為1Hz,<
9、/p><p> 表1 8255和8253各端口地址</p><p> 當輸入為1Mz時,要求計數(shù)器的初始值為1000000,而8253計數(shù)值最大值只能為65536,因而考慮將1Mz的時鐘輸入計數(shù)器0,再將計數(shù)器0的輸出信號作為計數(shù)器1和計數(shù)器2的輸入,則可以產生最小為1Hz的信號。而計數(shù)器1和計數(shù)器2可以分別用于30s定時和黃燈閃爍。</p><p> 基于以上
10、分析,計數(shù)器0應工作于方式3,計數(shù)初始值為10000,則輸出信號周期為0.01s;再以此作為輸入,讓計數(shù)器1工作于方式0,計數(shù)初值為3000,也即定時30s,供綠燈向黃燈轉換的定時之用;而黃燈要求以1Hz的頻率閃爍5次,則可考慮用方波信號和8255的PB口信號一起通過一個與門來控制黃燈的熄滅,達到閃爍的目的,頻率為1Hz,則計數(shù)初值為100,工作方式為3。</p><p> 三個計數(shù)器的GATE端都直接接高電平
11、,OUT1接PC7口,供定時檢測;OUT2接PC6口,供閃爍次數(shù)檢測。</p><p> 4)完整的硬件連接圖</p><p><b> 見附錄一。</b></p><p><b> 四、軟件方案說明</b></p><p><b> 1)程序流程圖</b></p
12、><p> 易知程序應該實現(xiàn)循環(huán),即各路口在綠燈、黃燈和紅燈之間實現(xiàn)切換。以下給出總的程序流程圖,之后再對程序的關鍵點進行說明。</p><p><b> 2)各端口地址定義</b></p><p> 在數(shù)據(jù)段中將各端口地址用變量進行定義,以便在程序中使用,也便于修改。定義如下:</p><p> DATA SEG
13、MENT ;定義8255和8253各端口地址數(shù)據(jù)</p><p> PA8255 EQU 00F4H</p><p> PB8255 EQU 00F5H</p><p> PC8255 EQU 00F6H</p><p> CON8255 EQU 00F7H</p><p> CL
14、K08253 EQU 00F0H</p><p> CLK18253 EQU 00F1H</p><p> CLK28253 EQU 00F2H</p><p> CON8253 EQU 00F3H</p><p> DATA ENDS</p><p><b> 程序流程圖</b>&l
15、t;/p><p> 3)30s延時檢測程序</p><p><b> 程序如下:</b></p><p> LPO30_1:MOV AL,0 ;掃描PC7口是否有高電平輸入</p><p> MOV DX,CON8255</p><p> MOV AL,88H</p
16、><p> OUT DX,AL ;改PC口為輸入方式,準備讀入PC7的值</p><p> MOV DX,PC8255</p><p><b> IN AL,DX</b></p><p> AND AL,80H ;取最高位即PC7的值</p><p>
17、; CMP AL,80H</p><p> JNZ LOP30_1 ;未檢測到高電平則繼續(xù)循環(huán)檢測</p><p> 延時程序執(zhí)行前,應該先將8255的控制字更改,即將PC口改為輸入方式,以便下一時刻讀取。用AND AL,80H將除PC7口之外的七位清零,并將其與80H比較,如標志位為ZF=1,證明30s延時已經結束;若ZF=0,則繼續(xù)循環(huán)檢測。</p>
18、<p> 4)5次閃爍檢測程序</p><p><b> 程序如下:</b></p><p> LOP5_1:MOV DX,CON8255 ;檢測PC6高電平</p><p> MOV AL,88H</p><p> OUT DX,AL ;改PC口為輸入方式,準備讀
19、入PC6</p><p> MOV DX,PC8255</p><p><b> IN AL,DX</b></p><p> AND AL,40H ;取PC6</p><p> CMP AL,40H </p><p> JNZ LOP5_1
20、 ;檢測PC6是否為高電平,沒有高電平則不延時繼續(xù)掃描</p><p> MOV DX,1000 ;延時約一秒,實際比一秒略小</p><p> DELAY1:MOV BX,10000</p><p> DELAY2:DEC BX</p><p><b> CMP BX,0</b></p&
21、gt;<p> JNZ DELAY2</p><p><b> DEC DX</b></p><p><b> CMP DX,0</b></p><p> JNZ DELAY1</p><p><b> INC CX</b></p><
22、;p> CMP CX,05H </p><p> JNZ LOP5_1 ;是否檢測到5次高電平,有則結束循環(huán),黃燈5次閃爍完成</p><p> 檢測程序中涉及到一個小的延時模塊,現(xiàn)單獨說明。</p><p> MOV DX,1190 ;延時約一秒,實際比一秒略小</p><p> DELA
23、Y1:MOV BX,10000</p><p> DELAY2:DEC BX</p><p><b> CMP BX,0</b></p><p> JNZ DELAY2</p><p><b> DEC DX</b></p><p><b> CMP DX
24、,0</b></p><p> JNZ DELAY1</p><p> 開始時設定DX為1190(這樣設定是考慮到要執(zhí)行跳轉等指令的時間),然后開始循環(huán)。內層循環(huán)中,設定BX為10000,并將BX進行自減。這樣,指令約執(zhí)行了12000000次,對于12M的晶振,指令執(zhí)行的時間約為1s。而且此處不要求時間是精準的1s,因為它只用于延遲檢測的時間,實際中OUT2的方波有一定的寬
25、度,而且只檢測5次,可以保證每次都在高電平時候進行檢測,也即每次高電平都可以檢測到。而且若未檢測高電平,則不進行延時,立即進行下一次循環(huán),而這幾乎是不耗費時間的。</p><p> 而檢測到高電平次數(shù)的計數(shù)則通過計數(shù)器CX自增實現(xiàn),若未檢測到高電平,直接跳轉回標號LOP30_1處,不延時CX也不自增。5次計滿,則退出循環(huán)。這樣,通過對PC6口高電平的檢測就可以記錄黃燈閃爍的次數(shù),實現(xiàn)黃燈的5次閃爍。</p
26、><p> 5)路口燈與燈之間的轉換</p><p> 下面僅分析1、3路口由綠燈向黃燈的轉換,其他顏色之間的轉換原理上與此相同。</p><p><b> 部分程序如下:</b></p><p> MOV DX,CON8255</p><p> MOV AL,80H</p>
27、<p><b> OUT DX,AL</b></p><p> MOV PC8255</p><p> MOV AL,0FH ;0FH=00001111</p><p> OUT DX,AL ;1、3綠燈滅</p><p> MOV DX,PB8255<
28、/p><p> MOV AL,0AH ;0AH=00001010</p><p> OUT DX,AL ;1、3黃燈開始閃爍</p><p> 綠燈向黃燈由8088向8255個端口送出不同的二進制代碼實現(xiàn)。上面的程序中,1、3路口本是綠燈亮,通過向PC口送出二進制代碼00001111,即可將綠燈熄滅(送出0為亮,送出1為滅
29、),然后向PB口送出代碼00001010,即可讓1、3口的黃燈開始閃爍。即通過向8255的PA、PB和PC口送出不同的二進制代碼,即可控制各個路口不同顏色的燈的亮滅。其控制字各位代表的含義如下圖所示。</p><p> 5)南、北與東、西路口的循環(huán)</p><p> 總的循環(huán)只要通過無條件跳轉指令JMP跳轉到標號BEGIN處即可,這樣就可以進行下一次總循環(huán)了。</p>&
30、lt;p><b> 6)完整的程序代碼</b></p><p> STACK SEGMENT STACK 'STACK'</p><p> DW 32 DUP(?)</p><p> STACK ENDS</p><p> DATA SEGMENT ;定義82
31、55和8253各端口地址數(shù)據(jù)</p><p> PA8255 EQU 00F4H</p><p> PB8255 EQU 00F5H</p><p> PC8255 EQU 00F6H</p><p> CON8255 EQU 00F7H</p><p> CLK08253 EQU 00F0H</p&g
32、t;<p> CLK18253 EQU 00F1H</p><p> CLK28253 EQU 00F2H</p><p> CON8253 EQU 00F3H</p><p> DATA ENDS</p><p> ;********************************數(shù)據(jù)段定義完成**********
33、**********************</p><p> CODE SEGMENT</p><p> ASSUME CS:CODE,DS:DATA,SS:STACK</p><p><b> PUSH DS</b></p><p><b> SUB AX,AX</b></p>
34、;<p> MOV AX,DATA</p><p><b> MOV DS,AX</b></p><p> MOV DX,CON8253 ;初始化8252通道0</p><p> MOV AL,36H</p><p><b> OUT DX,AL</b></
35、p><p> MOV DX,CLK08253</p><p> MOV AX,2710H</p><p><b> OUT DX,AL</b></p><p><b> MOV AL,AH</b></p><p> OUT DX,AL ;通道0初始化完成,工作方式3,初
36、始計數(shù)值為10000,則其周期為0.01s</p><p> MOV DX,CON8253</p><p> MOV AL,71H</p><p> OUT DX,AL ;通道1初始化完成,工作方式1</p><p> MOV DX,CON8253</p><p> MOV AL,96H
37、</p><p><b> OUT DX,AL</b></p><p> MOV DX,CLK28253</p><p> MOV AL,64H</p><p> OUT DX,AL </p><p> ;通道2初始化完成,工作方式3,計數(shù)初值為100,由 CLK0輸入以后周期為1s&l
38、t;/p><p> MOV DX,CON8255</p><p> MOV AL,80H</p><p> OUT DX,AL ;8255初始化完成,A、B、C均工作在方式0,即基本的輸入輸出</p><p> MOV AL,0 ;初始化各燈的狀態(tài)</p><p> MOV DX,
39、PA8255</p><p> OUT DX,AL ;紅燈全亮</p><p> MOV DX,PB8255</p><p> MOV AL,0FH</p><p> OUT DX,AL ;黃燈全滅</p><p> MOV DX,PC8255</p>
40、<p> OUT DX,AL ;綠燈全滅</p><p> ;********************************初始化工作完成********************************</p><p> BEGIN: MOV DX,PA8255</p><p> MOV AL,05H </p>
41、<p> OUT DX,AL ;05H=00000101,2、4紅燈亮</p><p> MOV DX,PB8255</p><p> MOV AL,OFH</p><p> OUT DX,AL ;0FH=00001111,黃燈全滅</p><p> MOV DX,PC825
42、5</p><p> MOV AL,0AH</p><p> OUT DX,AL ;0AH=00001010,1、3綠燈亮</p><p> MOV DX,CLK18253</p><p> MOV AX,0BB8H</p><p><b> OUT DX,AL</b&g
43、t;</p><p><b> MOV AL,AH</b></p><p> OUT DX,AL ;0BB8H=3000,即通道1的計數(shù)值為3000,也就是30s</p><p> LPO30_1:MOV AL,0 ;掃描PC7口是否有高電平輸入</p><p> MOV
44、 DX,CON8255</p><p> MOV AL,88H</p><p> OUT DX,AL ;改PC口為輸入方式,準備讀入PC7的值</p><p> MOV DX,PC8255</p><p><b> IN AL,DX</b></p><p> AN
45、D AL,80H ;取最高位即PC7的值</p><p> CMP AL,80H</p><p> JNZ LOP30_1 ;未檢測到高電平則繼續(xù)循環(huán)檢測</p><p> ;***************1和3綠燈亮、2和4紅燈亮、黃燈全滅并且延時30s秒完成**************</p><p
46、> MOV DX,CON8255</p><p> MOV AL,80H</p><p><b> OUT DX,AL</b></p><p> MOV PC8255</p><p> MOV AL,0FH ;0FH=00001111</p><p> OUT
47、 DX,AL ;1、3綠燈滅</p><p> MOV DX,PB8255</p><p> MOV AL,0AH ;0AH=00001010</p><p> OUT DX,AL ;1、3黃燈開始閃爍</p><p><b> MOV CX,0</b&g
48、t;</p><p> LOP5_1:MOV DX,CON8255 ;檢測PC6高電平</p><p> MOV AL,88H</p><p> OUT DX,AL ;改PC口為輸入方式,準備讀入PC6</p><p> MOV DX,PC8255</p><p><b&g
49、t; IN AL,DX</b></p><p> AND AL,40H ;取PC6</p><p> CMP AL,40H </p><p> JNZ LOP5_1 ;檢測PC6是否為高電平,沒有高電平則不延時繼續(xù)掃描</p><p> MOV DX,1200
50、 ;延時約一秒,實際比一秒略小</p><p> DELAY1:MOV BX,10000</p><p> DELAY2:DEC BX</p><p><b> CMP BX,0</b></p><p> JNZ DELAY2</p><p><b> DEC DX<
51、/b></p><p><b> CMP DX,0</b></p><p> JNZ DELAY1</p><p><b> INC CX</b></p><p> CMP CX,05H </p><p> JNZ LOP5_1 ;是否檢測到
52、5次高電平,有則結束循環(huán),黃燈5次閃爍完成</p><p> ;*****************1和3黃燈閃爍5次、2和4紅燈保持不變完成**********************</p><p> MOV DX,CON8255</p><p> MOV AL,80H</p><p><b> OUT DX,AL<
53、/b></p><p> MOV DX,PA8255</p><p> MOV AL,0AH</p><p> OUT DX,AL ;0AH=00001010,1、3口紅燈亮,2、4口紅燈滅</p><p> MOV DX,PB8255</p><p> MOV AL,OFH<
54、;/p><p> OUT DX,AL ;0FH=00001111,1、3口黃燈滅</p><p> MOV DX,PC8255</p><p> MOV AL,05H</p><p> OUT DX,AL ;05H=00000101,2、4口綠燈亮</p><p> M
55、OV DX,CLK18253</p><p> MOV AX,0BB8H</p><p><b> OUT DX,AL</b></p><p><b> MOV AL,AH</b></p><p> OUT DX,AL ;8253通道1賦值3000,計時30s開始<
56、;/p><p> LOP30_2:MOV AL,0 ;掃描PC7口是否有高電平輸入</p><p> MOV DX,CNO8255</p><p> MOV AL,88H</p><p> OUT DX,AL ;改PC口為輸入方式,準備讀入PC7的值</p><p> M
57、OV DX,PC8255</p><p><b> IN AL,DX</b></p><p> AND AL,80H ;取最高位即PC7的值</p><p> CMP AL,80H</p><p> JNZ LOP30_2 ;未檢測到高電平則繼續(xù)循環(huán)檢測</p>
58、<p> ;*************2和4綠燈亮、1和3紅燈亮、黃燈全滅并且延時30s秒完成***************</p><p> MOV DX,CON8255</p><p> MOV AL,80H</p><p><b> OUT DX,AL</b></p><p> MOV PC
59、8255</p><p> MOV AL,0FH ;0FH=00001111</p><p> OUT DX,AL ;1、3綠燈滅</p><p> MOV DX,PB8255</p><p> MOV AL,0AH ;0AH=00001010</p><
60、;p> OUT DX,AL ;1、3黃燈開始閃爍</p><p><b> MOV CX,0</b></p><p> LOP5_2:MOV DX,CON8255 ;檢測PC6高電平</p><p> MOV AL,88H</p><p> OUT DX,AL
61、 ;改PC口為輸入方式,準備讀入PC6</p><p> MOV DX,PC8255</p><p><b> IN AL,DX</b></p><p> AND AL,40H ;取PC6</p><p> CMP AL,40H </p><p> J
62、NZ LOP5_2 ;檢測PC6是否為高電平,沒有高電平則不延時繼續(xù)掃描</p><p> OV DX,1000 ;延時約一秒,實際比一秒略小</p><p> DELAY3:MOV BX,10000</p><p> DELAY4:DEC BX</p><p><b> CMP BX
63、,0</b></p><p> JNZ DELAY4</p><p><b> DEC DX</b></p><p><b> CMP DX,0</b></p><p> JNZ DELAY3</p><p><b> INC CX</b
64、></p><p> CMP CX,05H </p><p> JNZ LOP5_2 ;是否檢測到5次高電平,有則結束循環(huán),黃燈5次閃爍完成</p><p> ;********************2和4黃燈閃爍5次、1和3紅燈保持不變完成********************</p><p> ;***
65、***************************至此,一次整循環(huán)結束*****************************</p><p> JMP BEGIN ;進行下一次循環(huán)</p><p><b> CODE ENDS</b></p><p><b> END BEGIN</b></
66、p><p><b> 五、總結說明</b></p><p> 本設計通過8088作主控芯片,拓展連接一片8255和一片8253,配合軟件編程,基本實現(xiàn)了對交叉路口交通信號燈的控制,滿足設計要求。其設計難點在于綠燈亮時定時30s和黃燈閃爍5次。程序中LOP30_1和LOP30_2處的循環(huán)圓滿的解決了對30s定時的檢測,而LOP5_1和LOP5_2則基本解決對5次閃爍的檢
67、測。但黃燈閃爍次數(shù)的檢測程序有待于改善,這在方案改進部分再討論。</p><p> 通過本次課程設計,我進一步學習了8255和8253兩個可編程芯片。由程序可以看出,在控制過程中需要不停的讀入和送出數(shù)據(jù),以完成各種燈的轉換和對定時、閃爍的檢測。這就要求不停地改寫兩個芯片的控制字和對應的寄存器的端口地址,同時還有8255PA、PB和PC口的端口地址,這要求與硬件相對應。在本次設計中,只采用了8088低八位地址線,
68、通過鎖存器鎖存即可。設計過程中,參考了別人的程序,在讀懂的前提下,自己重寫了程序,并附有詳細注釋,自己設計了硬件的連接圖。</p><p> 本次課程設計是對微機原理知識的綜合應用,在此期間自己也學到很多東西,而且比在課堂上學到的更加深刻、理解得更加精準。既鍛煉自學能力,又鞏固了知識。</p><p><b> 六、方案改進</b></p><
69、p> 在以上的方案中,基本實現(xiàn)了對交叉路口信號燈的控制。但是在對黃燈閃爍的控制中,采用的是檢測PC6口高電平的次數(shù),這樣可能會存在一定的誤差。實際上可以采取外部中斷的思想來記錄黃燈閃爍的次數(shù)。8088有一個外部中斷接口INTR。我們可以將OUT2產生的方波信號同時輸入到INTR中,同時編寫相應中斷程序,每次高電平即產生一個中斷信號,8088收到此信號后則將計數(shù)寄存器加1,累計滿5次則跳轉到燈的轉換程序中去。這樣在程序中就不需要時
70、間不精準的延時程序了。這樣的設計比利用延時程序更加精確,對于要求較高的路口可以采用這種方式。同樣,30s定時完畢的高電平信號也可以輸入到中斷口,但若采用兩個外部中斷,則需要采用一片中斷管理芯片8259A,這樣的硬件連接將更加復雜,程序也將更加復雜。</p><p><b> 七、參考文獻</b></p><p> [1] 朱定華,微機原理、匯編與接口技術,清華大學
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 微機原理課程設計---交通信號燈的控制
- 微機原理課程設計--交通信號燈設計
- 微機型交通信號燈課程設計
- 交通信號燈課程設計---交通信號燈系統(tǒng)設計
- 交通信號燈課程設計--交通信號燈控制電路的設計
- 微機原理課程設計---基于80868088的交通信號燈設計
- 交通信號燈控制課程設計
- 交通信號燈控制課程設計
- 微機原理課程設計---交通信號燈模擬控制系統(tǒng)的設計
- 微機原理課程設計---交通信號燈模擬控制系統(tǒng)的設計
- 微機原理交通燈課程設計---交通信號燈的設計
- 課程設計---交通信號燈控制
- 課程設計---交通信號燈控制設計
- 課程設計交通信號燈
- 交通信號燈課程設計
- 交通信號燈課程設計
- 交通信號燈課程設計
- 交通信號燈課程設計
- 信號燈課程設計---簡易交通信號燈控制器
- 電工課程設計----交通信號燈原理設計
評論
0/150
提交評論