版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、微機(jī)原理與接口技術(shù)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告題目:交通燈控制功能設(shè)計(jì)指導(dǎo)老師: 專業(yè):信息科學(xué)與工程學(xué)院班級:自動(dòng)化0807班 日期:2011-1-5目錄一、設(shè)計(jì)思想和實(shí)施方案論述,硬件原理圖及分析 1.1、課程設(shè)計(jì)名稱 1.2、課程設(shè)計(jì)要求1.3、課程設(shè)計(jì)目的二、設(shè)計(jì)思想和實(shí)施方案論述,硬件原理圖及分析 2.1、設(shè)計(jì)思想和實(shí)施方案2.2、硬件原理圖三、典型模塊以及典型編程技巧分析 3.1、8086典型模塊分析3.2、編程技巧分析四、設(shè)計(jì)中遇到的問題及解決方法五、程序清單和程序注釋,相關(guān)流程圖 5.1程序清單和注釋5.2、實(shí)驗(yàn)室及流程圖六、收獲與體會(huì)七、參考文獻(xiàn)一、 設(shè)計(jì)課程名稱及要求1.1、課程設(shè)計(jì)名
2、稱:交通燈控制功能設(shè)計(jì)。1.2、課程設(shè)計(jì)要求:(1)、分別用C語言和匯編語言編程完成硬件接口功能設(shè)計(jì);(2)、硬件電路基于80x86微機(jī)接口;(3)、程序功能要求:小鍵盤給定、數(shù)碼管(屏幕)顯示;(4)、同時(shí)具備急救車應(yīng)急響應(yīng)功能和時(shí)間倒計(jì)時(shí)顯示功能。 1.3、課程設(shè)計(jì)目的:微機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與綜合實(shí)驗(yàn)(實(shí)踐)課程設(shè)計(jì)是自動(dòng)化專業(yè)本科生必修的一門技術(shù)基礎(chǔ)課。通過本課程設(shè)計(jì),讓學(xué)生對微機(jī)系統(tǒng)有一個(gè)較全面的理解,對典型數(shù)字接口電路的應(yīng)用技術(shù)有一個(gè)較深入的掌握,并對應(yīng)用系統(tǒng)進(jìn)行硬件原理和軟件編程進(jìn)行分析、設(shè)計(jì)和調(diào)試,達(dá)到基本掌握簡單微型計(jì)算機(jī)應(yīng)用系統(tǒng)軟硬件的設(shè)計(jì)方法,提高項(xiàng)目開發(fā)能力的目的。要求同學(xué)獨(dú)
3、立完成課題,寫出課程設(shè)計(jì)說明書,畫出電路原理圖,說明工作原理,畫出電路印制板圖, 編寫設(shè)計(jì)程序及程序流程圖。二、設(shè)計(jì)思想和實(shí)施方案論述,硬件原理圖及分析2.1、設(shè)計(jì)思想和實(shí)施方案: 本設(shè)計(jì)使用了兩種方案,一種是采用8086和8255A可編程并行接口實(shí)現(xiàn)了交通燈的設(shè)計(jì),分別對主干道和支干道顯示紅燈和綠燈并且計(jì)時(shí),采用8254定時(shí)器/計(jì)數(shù)器產(chǎn)生1HZ的脈沖,來控制8259產(chǎn)生中斷,從而實(shí)現(xiàn)整個(gè)電路的設(shè)計(jì)。交通燈采用紅綠兩種發(fā)光二極管,主干道亮45s,支干道亮30s,計(jì)數(shù)的最后5s中綠燈閃爍,用數(shù)碼管倒計(jì)時(shí)顯示時(shí)間,在發(fā)生緊急情況時(shí),可以認(rèn)為用開關(guān)控制主干道和支干道紅燈均亮,禁止任何車通行。另一種方
4、案是采用單片機(jī)來實(shí)現(xiàn)的,達(dá)到的效果和上述方案相同。單片機(jī)采用定時(shí)器T0和T1來觸發(fā)中斷,根據(jù)中斷優(yōu)先級的不同,從而可以處理不同的情況,交通燈也是采用紅綠兩種發(fā)光二極管,主干道亮45s,支干道亮30s,計(jì)數(shù)的最后5s中綠燈閃爍,用數(shù)碼管倒計(jì)時(shí)顯示時(shí)間,在發(fā)生緊急情況時(shí),可以認(rèn)為用開關(guān)控制主干道和支干道紅燈均亮,禁止任何車通行,在故障清除后,斷開開關(guān)可以使紅綠燈和數(shù)碼管回到原來的狀態(tài)繼續(xù)正常工作。2.2、硬件原理圖:(a)圖是基于8086的設(shè)計(jì),(b)圖是基于單片機(jī)的設(shè)計(jì)。在(a)圖中,可編程并行接口芯片8255A用作輸出口,控制紅綠燈的亮暗和數(shù)碼管的計(jì)時(shí),定時(shí)器/計(jì)數(shù)器8254采用級聯(lián)的方式產(chǎn)生
5、1HZ的脈沖,并將此方波接到中斷器8259的IR1上,即每秒鐘讓中斷控制器產(chǎn)生依次中斷,從而可以執(zhí)行中斷子程序。在(b)圖中,P0口用于接數(shù)碼管,P1口用于控制紅綠燈的亮暗,P2口用于選通數(shù)碼管,P32為定時(shí)器T0的控制端,當(dāng)P32口為高電平時(shí),定時(shí)器T0才會(huì)工作,并且T0的中斷優(yōu)先級高于T1,所以可以用于控制緊急情況。P37口接揚(yáng)聲器,在計(jì)數(shù)器T0工作時(shí)揚(yáng)聲器就會(huì)響。三、典型模塊以及典型編程技巧分析3.1、8086典型模塊分析:基于8086的設(shè)計(jì)主要由3個(gè)模塊構(gòu)成,其中8255是作為與外部顯示電路的接口單元,8254和8259協(xié)同工作產(chǎn)生中斷作為控制電路??删幊滩⑿薪涌谛酒?255A通過方式
6、控制字設(shè)置成方式0工作模式,A、B、C口均為輸出,可編程計(jì)數(shù)器/定時(shí)器8254通過控制字寄存器設(shè)置OU0和OU1均為方式3工作模式,通過級聯(lián)產(chǎn)生1HZ的方波,中斷控制器通過初始化命令字設(shè)置成邊緣觸發(fā),8254的OU1口接到8259的IR1端,每秒鐘就可以產(chǎn)生一次中斷,每次執(zhí)行中斷子程序時(shí)使計(jì)數(shù)減1,從而可以實(shí)現(xiàn)倒計(jì)時(shí)功能,當(dāng)計(jì)數(shù)到0時(shí),重新給計(jì)數(shù)初值賦給,改變燈的狀態(tài)。外部開關(guān)接8259的IR0端,它的中斷優(yōu)先級別高,設(shè)置成邊緣觸發(fā),當(dāng)按下開關(guān),產(chǎn)生一個(gè)高電平的脈沖,就可以停止原來的狀態(tài)來執(zhí)行更高級別的中斷子程序,這就可以處理緊急情況,讓主干道和支干道都變成紅燈。單片機(jī)典型模塊分析:基于單片機(jī)
7、的設(shè)計(jì)主要是以51單片機(jī)為核心,通過變成開放T0和T1的中斷,但T0要在INT0為高電平時(shí)計(jì)數(shù)器T0才會(huì)工作。計(jì)數(shù)器T1每50ms產(chǎn)生一次中斷,每產(chǎn)生20次中斷就令數(shù)碼管的計(jì)數(shù)減1,當(dāng)計(jì)數(shù)減到0時(shí),重新設(shè)置數(shù)碼管的計(jì)數(shù)初值,這樣就可以依次循環(huán)工作了。當(dāng)P32接高電平時(shí),計(jì)數(shù)器T0開始工作,此時(shí)紅燈都亮,揚(yáng)聲器發(fā)音,中斷結(jié)束后還原原來的狀態(tài)。3.2、編程技巧分析:基于8086的設(shè)計(jì)編程語言是匯編語言,這里的幾個(gè)編程模塊就是方波產(chǎn)生模塊,數(shù)碼管顯示模塊和中斷子程序模塊。方波是通過8254級聯(lián)產(chǎn)生的,設(shè)置8254的計(jì)時(shí)器0和計(jì)數(shù)器1工作在方式3,設(shè)置適當(dāng)計(jì)數(shù)初值n即可,這個(gè)模塊的程序如下所示:LOO
8、P2: MOV DX,MY8254_MODE MOV AL,0 OUT DX,AL ;計(jì)數(shù)器0,讀寫16位低高字節(jié),工作方式3,BCD計(jì)數(shù) MOV AL,00H MOV DX,MY8254_0 OUT DX,AL MOV AL,50 OUT DX,AL MOV DX,MY8254_MODE MOV AL,77H OUT DX,AL ;計(jì)數(shù)器1,讀寫16位低高字節(jié),工作方式3,BCD計(jì)數(shù) MOV AL,8 MOV DX,MY8254_1 OUT DX,AL MOV AL,2 OUT DX,AL ;1.MHZ/2000/1000=1HZ,即計(jì)數(shù)器輸出1HZ的方波數(shù)碼管的顯示是通過調(diào)用顯示函數(shù)實(shí)現(xiàn)的
9、,通過設(shè)置8255的工作模式,選擇數(shù)碼管的高位工作,然后將計(jì)數(shù)的高位送到數(shù)碼管,再選擇數(shù)碼管的低位工作,然后將計(jì)數(shù)的低位送到數(shù)碼管,在1s鐘內(nèi)多次掃描就可以消除閃爍,從而達(dá)到理想的計(jì)數(shù)效果,它的程序如下所示:disp PROC NEARC1:MOV DX,MY8255_CMOV AL,0FEH;選通高位數(shù)碼管OUT DX,ALSUB AH,AHMOV AL,COUNTMOV BL,0AHDIV BL;商寄存在AL中,余數(shù)在AH中MOV BX,OFFSET TABXLAT;通過查表找到對應(yīng)的7段顯示字符MOV DX,MY8255_BOUT DX,ALCALL DELAY1msMOV AL,0OU
10、T DX,ALMOV AL,0FDH;選通低位數(shù)碼管MOV DX,MY8255_COUT DX,ALMOV AL,AHMOV BX,OFFSET TABXLAT;通過查表找到對應(yīng)的7段顯示字符MOV DX,MY8255_BOUT DX,ALCALL DELAY1msMOV AL,0 OUT DX,ALMOV AH,1INT 16H;有鍵按下則跳出JNZ QUITdisp ENDP中斷子程序模塊是通過擴(kuò)充中斷源實(shí)現(xiàn)的,主要是通過設(shè)置8259的工作模式,開放TR1和TR0的中斷,按上開關(guān)K后,TR0就發(fā)生中斷,在TR0中斷沒有觸發(fā)的情況下,從OU1口輸出一個(gè)上升沿脈沖,TR1就中斷一次,程序如下所
11、示:QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3發(fā)送查詢命令 MOV AL,0CH OUT DX,AL IN AL,DX ;讀出查詢字 TEST AL,80H ;判斷中斷是否已響應(yīng) JZ QUERY ;沒有響應(yīng)則繼續(xù)查詢 AND AL,03H CMP AL,00H JE IR0ISR ;若為IR0請求,跳到IR0處理程序 JNE IR1ISR ;若為IR1請求,跳到IR1處理程序 JMP EOI基于單片機(jī)的編程語言是C語言,它主要有數(shù)碼管顯示程序和中斷服務(wù)子程序。數(shù)碼管的顯示和上面匯編語言的原理一樣,它的程序如下:void display(unsigned cha
12、r t)/顯示數(shù)碼管函數(shù) P2=0xf5;選通兩個(gè)高位數(shù)碼管 P0=tabt/10;取t的十位送到P0口顯示 delay(); P2=0xF0;開通所有的數(shù)碼管,避免閃爍 P2=0xfa;選通低位兩個(gè)數(shù)碼管 P0=tabt%10;取t的個(gè)位送到P0口顯示 delay(); P2=0xF0;中斷服務(wù)子程序有計(jì)數(shù)器T0和計(jì)數(shù)器T1的子程序。T1的優(yōu)先級低,它主要用于控制正常工作狀態(tài)的紅綠燈和數(shù)碼管計(jì)數(shù),而T0的優(yōu)先級高,可以處理緊急情況,并且在處理緊急情況以后能返回原正常運(yùn)行狀態(tài),這在匯編里面用的是棧保護(hù),而在C語言中可以設(shè)置一個(gè)變量也存儲(chǔ)原來的數(shù)據(jù),可以達(dá)到同樣保護(hù)數(shù)據(jù)的效果,這一點(diǎn)的實(shí)現(xiàn)代碼如
13、下:void Time0(void) interrupt 1 using 0 t=0;count1=count;/寄存中斷前count的值,以便中斷結(jié)束后恢復(fù) while(t!=125) t+; sound=sound; P10=0;/緊急情況綠燈全熄 P12=0; P11=1;/緊急情況紅燈全亮 P13=1; P2=0xF0;/點(diǎn)亮兩個(gè)數(shù)碼管 count=88; display(count); TH0=(65535-921)/256; TL0=(65535-921)%256; count=count1;/恢復(fù)原來count的值 if(a%2=0) P10=1; P11=0; P12=0; P
14、13=1;/返回主干道通行 else P10=0; P11=1; P12=1; P13=0;/返回主干道通行 四、設(shè)計(jì)中遇到的問題及解決方法 1.數(shù)碼管的計(jì)數(shù)每秒鐘減1,當(dāng)時(shí)不熟練8254的應(yīng)用,就想用軟件延時(shí)來實(shí)現(xiàn)這個(gè)功能,最后查資料的時(shí)候知道了計(jì)時(shí)器的級聯(lián)應(yīng)用,很容易的就解決了這個(gè)問題。 2.對于數(shù)碼管的顯示,最開始感覺很模糊,查閱資料的時(shí)候找到了XLAT表轉(zhuǎn)換指令的應(yīng)用,首先定義十進(jìn)制的七段顯示碼,將表格首地址送入BX,數(shù)字的七段碼在表格中的偏移量送入,然后執(zhí)行XLAT就可以實(shí)現(xiàn)這個(gè)功能了。 3.對于要求中的緊急響應(yīng)功能,開始時(shí)只想利用8254來實(shí)現(xiàn),結(jié)果失敗了,所以我就想到了用兩級中斷
15、,產(chǎn)生高級中斷時(shí)就開啟緊急響應(yīng)功能,觸發(fā)蜂鳴器,點(diǎn)亮紅燈。 4.在執(zhí)行中斷程序的過程中,寄存器中的變量好多都改變了,開始時(shí)束手無策,最后查資料時(shí)想到了棧的運(yùn)用,利用入棧和出棧來保護(hù)寄存器中的初值。 5.在用C語言編程時(shí),用PROTUES軟件進(jìn)行仿真時(shí),數(shù)碼管顯示錯(cuò)誤,一會(huì)顯示一會(huì)停止,閃爍感太明顯了。想想后,我就把顯示函數(shù)從中斷子程序中改放到主函數(shù)中,放在while(1)無限循環(huán)語句中,最后很好的解決了這個(gè)問題。查閱資料后才明白,執(zhí)行中斷子程序是很快的事,執(zhí)行完了后就會(huì)返回到主函數(shù)中繼續(xù)執(zhí)行,所以顯示函數(shù)放在中斷子程序中只有在產(chǎn)生中斷的時(shí)候才會(huì)工作,所以數(shù)碼管很多時(shí)候就處于熄滅的狀態(tài),而顯示函
16、數(shù)放在主函數(shù)中就放好解決了這個(gè)問題。 6.要做到可以人為設(shè)置通行時(shí)間,在單片機(jī)中,我不熟練鍵盤掃描,所以就想到了另外一個(gè)辦法,給P1的高四位賦不同的初值,這樣可以得到16種組合,故可以設(shè)置16中初值,為了簡化程序,我只設(shè)置了4種初值,不過同樣可以達(dá)到設(shè)置初值的效果。 7.用單片機(jī)產(chǎn)生兩級中斷的時(shí)候,我不知道該選定時(shí)器中斷還是外部中斷,查資料后知道定時(shí)器0和定時(shí)器1的中斷優(yōu)先級不一樣,定時(shí)器T0的優(yōu)先級高,所以可以讓定時(shí)器T1控制正常工作狀態(tài)的燈顯示和數(shù)碼管計(jì)數(shù),而定時(shí)器T0則控制突發(fā)情況。 五、程序清單和程序注釋,相關(guān)流程圖 5.1程序清單和注釋: 基于8086匯編語言的程序清單及注釋如下所示
17、: MY8255_A EQU IOY0+00H*4 ; 8255A口的地址 MY8255_B EQU IOY0+01H*4 ; 8255B口的地址 MY8255_C EQU IOY0+02H*4 ; 8255C口的地址 MY8255_MODE EQU IOY0+03H*4 ; 8255控制寄存器的地址 MY8254_0 EQU IOY1+00H*4 ; 8254計(jì)數(shù)器0端口的地址 MY8254_1 EQU IOY1+01H*4 ; 8254計(jì)數(shù)器0端口的地址 MY8254_MODE EQU IOY1+02H*4 ; 8254計(jì)數(shù)器0端口的地址;*根據(jù)CHECK配置信息修改下列符號(hào)值* INTR
18、_IVADD EQU 01CCH ;INTR對應(yīng)的中斷矢量地址 INTR_OCW1 EQU 0A1H ;INTR對應(yīng)PC機(jī)內(nèi)部8259的OCW1地址 INTR_OCW2 EQU 0A0H ;INTR對應(yīng)PC機(jī)內(nèi)部8259的OCW2地址 INTR_IM EQU 0F7H ;INTR對應(yīng)的中斷屏蔽字 PCI_INTCSR EQU 9438H ;PCI卡中斷控制寄存器地址 IOY0 EQU 0C400H ;片選IOY0對應(yīng)的端口始地址 IOY1 EQU 0C440H ;片選IOY0對應(yīng)的端口始地址 IOY2 EQU 0C480H ;片選IOY0對應(yīng)的端口始地址;* MY8259_ICW1 EQU I
19、OY2+00H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW1端口地址 MY8259_ICW2 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW2端口地址 MY8259_ICW3 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW3端口地址 MY8259_ICW4 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的ICW4端口地址 MY8259_OCW1 EQU IOY2+04H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW1端口地址 MY8259_OCW2 EQU IOY2+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW2端口地址 MY8259_OCW3 EQU IOY2+00H ;實(shí)驗(yàn)系統(tǒng)中8259的OCW3端口地址 RE
20、D EQU 0FAH ;緊急時(shí)刻,主支干道全部亮紅燈 ZHU EQU 0F5H ;主干道燈的狀態(tài) ZHI EQU 0F9H ;支干道燈的狀態(tài) FLICKER EQU 0F0H ;控制燈閃爍 CLOSE EQU 00H ;關(guān)閉所有的燈 TIME1 EQU 20 ;主干道通行時(shí)間 TIME2 EQU 10 ;支干道通行時(shí)間 DATA SEGMENT CS_BAK DW ? IP_BAK DW ? IM_BAK DW ? TAB DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18H ;十進(jìn)制數(shù)的七段顯示碼 COUNT DW ? ;存儲(chǔ)計(jì)數(shù)的變量 FLAG DW ? ;
21、flag為偶數(shù)時(shí)表明主干道通行 DATA ENDS STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX CLI MOV DX,MY8255_MODE MOV AL,80H OUT DX,AL ;初始化8255的工作模式A、B、C工作在方式0,均為輸出 LOOP1: MOV DX,MY8255_A MOV CX,3 A1: MOV AL,RED OUT DX,AL CALL DELAY1 ;延時(shí)0.5s M
22、OV AL,CLOSE OUT DX,AL CALL DELAY1 LOOP A1 ;初始狀態(tài)主支干道紅燈均閃爍,3s后進(jìn)入正常工作狀態(tài) LOOP2: MOV DX,MY8254_MODE MOV AL,0 OUT DX,AL ;計(jì)數(shù)器0,讀寫16位低高字節(jié),工作方式3,BCD計(jì)數(shù) MOV AL,00H MOV DX,MY8254_0 OUT DX,AL MOV AL,50 OUT DX,AL MOV DX,MY8254_MODE MOV AL,77H OUT DX,AL ;計(jì)數(shù)器1,讀寫16位低高字節(jié),工作方式3,BCD計(jì)數(shù) MOV AL,8 MOV DX,MY8254_1 OUT DX,A
23、L MOV AL,2 OUT DX,AL ;1.MHZ/2000/1000=1HZ,即計(jì)數(shù)器輸出1HZ的方波 MOV COUNT,TIME1 MOV FLAG,0 ;初始化主干道通行 MOV CL,ZHU MOV AL,CL MOV DX,MY8255_A OUT DX,AL MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ;初始化PCI卡中斷控制寄存器 MOV AX,1F00H ;向PCI_INTCSR中寫入003F1F00H OUT DX,AX ADD DX,2 MOV AX,003FH OUT DX,AX MOV AX,00
24、00H ;替換INTR的中斷矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:DI MOV IP_BAK,AX ;保存INTR原中斷處理程序入口偏移地址 MOV AX,OFFSET MYISR MOV ES:DI,AX ;設(shè)置當(dāng)前中斷處理程序入口偏移地址 ADD DI,2 MOV AX,ES:DI MOV CS_BAK,AX ;保存INTR原中斷處理程序入口段地址 MOV AX,SEG MYISR MOV ES:DI,AX ;設(shè)置當(dāng)前中斷處理程序入口段地址 MOV DX,INTR_OCW1 ;設(shè)置中斷屏蔽寄存器,打開INTR的屏蔽位 IN AL,DX XOR A
25、X,AX MOV IM_BAK, AX ;保存INTR原中斷屏蔽字 AND AL,INTR_IM OUT DX,AL MOV DX,MY8259_ICW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW1 MOV AL,13H ;邊沿觸發(fā)、單片8259、需要ICW4 OUT DX,AL MOV DX,MY8259_ICW2 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW2 MOV AL,08H OUT DX,AL MOV DX,MY8259_ICW4 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的ICW4 MOV AL,01H ;非自動(dòng)結(jié)束EOI OUT DX,AL MOV DX,MY8259_OCW1 ;初始化實(shí)驗(yàn)系統(tǒng)中8259的O
26、CW1 MOV AL,0FCH ;打開IR0和IR1的屏蔽位 OUT DX,AL STI WAIT1: CALL DISP ;數(shù)碼管顯示 MOV AH,1 ;判斷是否有按鍵按下 INT 16H JZ WAIT1 ;無按鍵則跳回繼續(xù)等待,有則退出 QUIT: CLI MOV DX,PCI_INTCSR ;恢復(fù)PCI卡中斷控制寄存器 MOV AX,0000H OUT DX,AX MOV AX,0000H ;恢復(fù)INTR原中斷矢量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK ;恢復(fù)INTR原中斷處理程序入口偏移地址 MOV ES:DI,AX ADD DI,2
27、MOV AX,CS_BAK ;恢復(fù)INTR原中斷處理程序入口段地址 MOV ES:DI,AX MOV DX,INTR_OCW1 XOR AX,AX ;恢復(fù)INTR原中斷屏蔽寄存器的屏蔽字 MOV AX,IM_BAK OUT DX,AL STI MOV AX,4C00H ;返回到DOS INT 21H MYISR PROC NEAR ;中斷處理程序MYISR QUERY: MOV DX,MY8259_OCW3 ;向8259的OCW3發(fā)送查詢命令 MOV AL,0CH OUT DX,AL IN AL,DX ;讀出查詢字 TEST AL,80H ;判斷中斷是否已響應(yīng) JZ QUERY ;沒有響應(yīng)則繼
28、續(xù)查詢 AND AL,03H CMP AL,00H JE IRO0 ;若為IR0請求,跳到IR0處理程序 JNE IRO1 ;若為IR1請求,跳到IR1處理程序 JMP EOI IRO0: MOV AL,FLAG ;IRO為高級中斷,處理緊急情況 CBW MOV BX,AX ;把count變成雙字節(jié)存入AX,這樣就可以存入棧中 MOV AL,COUNT ;把count變成雙字節(jié)存入AX,這樣就可以存入棧中 CBW PUSH AX PUSH BX MOV CX,0FFFFH ;中斷程序執(zhí)行時(shí)間為65536*256/f=3s LOOP0: MOV BL,0FFH LOOP1: MOV DX,MY8
29、255_A MOV AX,0FAH ;主干道支干道紅燈均亮 MOV DX,MY8255_C MOV AL,80H ;PC7為高電平,接揚(yáng)聲器 OUT DX,AL DEC BL CMP BL,0 JNE LOOP1 LOOP LOOP0 POP BX POP AX MOV COUNT,AL ;還原中斷前的變量值 MOV FLAG,BL MOV AH,0 MOV AL,FLAG MOV BL,2 DIV BL ;AH=1,FLAG為奇數(shù) ,支干道通行 CMP AH,1 JE P3 MOV DX,MY8255_A MOV AL,ZHU ;主干道通行燈的狀態(tài) OUT DX,AL P3: MOV DX,
30、MY8255_A MOV AL,ZHI ;支干道通行燈的狀態(tài) OUT DX,AL IRET IRO1: MOV AL,COUNT SUB AL,01H DAS MOV COUNT,AL ;計(jì)數(shù)初值自減1 CMP AL,0 JE L2 MOV AL,FLAG MOV BL,2 DIV BL ;AH=1,FLAG為奇數(shù) ,支干道通行 CMP AH,1 JE P1 MOV DX,MY8255_A MOV AL,ZHU ;主干道通行燈的狀態(tài) OUT DX,AL P1: MOV DX,MY8255_A MOV AL,ZHI ;支干道通行燈的狀態(tài) OUT DX,AL L2: MOV AL,FLAG ADD
31、 AL,01H ;狀態(tài)顯示數(shù)加1 DAA MOV AH,0 MOV BL,2 DIV BL ;AH=1,FLAG為奇數(shù) ,支干道通行 CMP AH,1 JE P2 MOV COUNT,TIME1 ;支干道工作完后設(shè)置主干道的通行時(shí)間TIME1 P2: MOV COUNT,TIME2 ;主干道工作完后設(shè)置支干道的通行時(shí)間TIME2 IRET EOI: MOV DX,MY8259_OCW2 ;向?qū)嶒?yàn)系統(tǒng)中8259發(fā)送中斷結(jié)束命令 MOV AL,20H OUT DX,AL OVER: MOV DX,PCI_INTCSR SUB DX,19H IN AL,DX MOV DX,PCI_INTCSR ;清
32、PCI卡中斷控制寄存器標(biāo)志位 ADD DX,2 MOV AX,003FH OUT DX,AX MOV DX,INTR_OCW2 ;向PC機(jī)內(nèi)部8259發(fā)送中斷結(jié)束命令 MOV AL,20H OUT DX,AL MOV AL,20H OUT 20H,AL IRET MYISR ENDP DISP PROC MOV DX,MY8255_C MOV AL,0AH ;選通高位數(shù)碼管 OUT DX,AL MOV AL,COUNT MOV BL,0AH DIV BL ;十位存在AL中,個(gè)位存在AH中 MOV BX,OFFSET TAB XLAT ;找到十位對應(yīng)的七段顯示碼 MOV DX,MY8255_B
33、OUT DX,AL CALL DELAY1MS MOV DX,MY8255_C MOV AL,05H OUT DX,AL MOV AL,AH MOV BX,OFFSET TAB XLAT ;找到個(gè)位對應(yīng)的七段顯示碼 MOV DX,MY8255_B OUT DX,AL RET ;過程返回指令 DISP ENDP DELAY1 PROC NEAR ;延時(shí)0.5s PUSH AX PUSH CX MOV AX,05FFFH D1: MOV CX,64FFH D2: LOOP D2 DEC AX JNZ D1 POP CX POP AX RET DELAY1 ENDP DELAY1MS PROC NE
34、AR ;延時(shí)1ms PUSH CX MOV CX,50H NEXT: NOP NOP LOOP NEXT POP CX RET DELAY1MS ENDP CODE ENDS END START 基于單片機(jī)的C語言程序清單及注釋如下所示: #include <reg52.h>unsigned char tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char time;unsigned char t;unsigned char count;/儲(chǔ)存通行時(shí)間unsigned char main1;/主干道通行
35、時(shí)間unsigned char cross;/支干道通行時(shí)間unsigned char count1;unsigned char a;/測試主干道工作還是支干道工作 sbit P10=P10;/控制主干道綠燈 sbit P11=P11;/主干道紅燈sbit P12=P12;/控制支干道綠燈sbit P13=P13;/支干道紅燈sbit P14=P14;/以下端口輔助撥碼開關(guān)設(shè)置時(shí)間sbit P15=P15;sbit P16=P16;sbit P17=P17;sbit sound=P37;/發(fā)聲音void delay()/延時(shí)20ms unsigned char i; for(i=0;i<
36、200;i+) ;void display(unsigned char t)/顯示數(shù)碼管函數(shù) P2=0xf5; P0=tabt/10; delay(); P2=0xF0; P2=0xfa; P0=tabt%10; delay(); P2=0xF0;void main() EA=1; /開總中斷 ET0=1; /開定時(shí)器0的中斷 ET1=1; /開定時(shí)器1的中斷 TMOD=0X19;/計(jì)數(shù)器1工作于方式1,計(jì)數(shù)器0工作于方式1,TR0為1且INT0為高電平啟動(dòng)工作 TH0=(65535-921)/256; TL0=(65535-921)%256; /定時(shí)器0賦初值 TH1=(65535-46083)/256; /定時(shí)50ms TL1=(65535-46083)/256; TR0=1; TR1=1; P10=1; P11=0; P12=0; P13=1;/初始化主干道通行 a=0;/初始
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)公司辦公費(fèi)用控制
- 機(jī)電工程人工費(fèi)施工合同
- 中心站服務(wù)改進(jìn)戰(zhàn)略
- 工程公司職工胸牌管理辦法
- 網(wǎng)絡(luò)安全招投標(biāo)小組職責(zé)探討
- 農(nóng)場獸醫(yī)服務(wù)合同范本
- 《Excel數(shù)據(jù)獲取與處理實(shí)戰(zhàn)》 課件 第7章 函數(shù)的應(yīng)用-1
- 2022年大學(xué)生物工程專業(yè)大學(xué)物理下冊月考試題A卷-含答案
- 防盜門鎖系統(tǒng)
- 2022年大學(xué)能源動(dòng)力專業(yè)大學(xué)物理下冊開學(xué)考試試題-含答案
- 直播技巧培訓(xùn)
- 數(shù)據(jù)分析師歷年考試真題試題庫(含答案)
- 心房顫動(dòng)與認(rèn)知功能障礙發(fā)生機(jī)制研究進(jìn)展
- 2024年江蘇省高考化學(xué)試卷(含答案解析)
- 廣東省珠海市2023-2024學(xué)年六年級上學(xué)期數(shù)學(xué)期中試卷(含答案)
- 2024~2025學(xué)年高二地理期中考試模擬試卷【人教版選擇性必修一第一至三章】
- 成都銀行招聘真題
- 2023年中國鐵塔招聘考試真題
- 人教版(2024新版)七年級上冊英語Unit 3 單元測試卷(筆試部分)(含答案)
- 江蘇省南京市六校聯(lián)考2024-2025學(xué)年高一上學(xué)期期中考試英語試卷(含答案含聽力原文無音頻)
- 2024年海南省發(fā)展控股限公司子公司招聘11人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評論
0/150
提交評論