版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 系統(tǒng)綜合課程設(shè)計題目:交通燈控制系統(tǒng) 院(系、部): 信息工程學(xué)院 姓 名: 王碩 (070480) 胡學(xué)智(070288) 李潤龍(070779) 班 級: 計073 指導(dǎo)教師簽名: 2011 年 1 月 17 日·北京 實驗一 I/O地址譯碼一、實驗?zāi)康?掌握I/O地址譯碼電路的工作原理。二、實驗原理和內(nèi)容 實驗電路如圖11所示,其中74LS74為D觸發(fā)器,可直接使用實驗臺上數(shù)字電路實驗區(qū)的D觸發(fā)器,74LS138為地址譯碼器。譯碼輸出端Y0Y7在實驗臺上“I/O地址“輸出端引出,每個輸出端包含8個地址,Y0:280H287H,Y1:288H28FH, 當CPU執(zhí)行I/ O指令
2、且地址在280H2BFH范圍內(nèi),譯碼器選中,必有一根譯碼線輸出負脈沖。 例如:執(zhí)行下面兩條指令 MOV DX,2A0H OUT DX,AL(或IN AL,DX) Y4輸出一個負脈沖,執(zhí)行下面兩條指令 MOV DX,2A8H OUT DX,AL(或IN AL,DX) Y5輸出一個負脈沖。圖 11利用這個負脈沖控制L7閃爍發(fā)光(亮、滅、亮、滅、),時間間隔通過軟件延時實現(xiàn)。三、編程提示1、實驗電路中D觸發(fā)器CLK端輸入脈沖時,上升沿使Q端輸出高電平L7發(fā)光,RD端加低電平L7滅。2、由于TPC卡使用PCI總線,所以分配的IO地址每臺微機可能都不同,編程時需要了解當前的微機使用那段IO地址并進行設(shè)置
3、,獲取方法請參看匯編程序使用方法的介紹。( 四、實驗程序 #include <stdio.h> #include <conio.h> #include "ApiEx.h" #pragma comment(lib,"ApiEx.lib") void main() if(!Startup() /*打開設(shè)備*/ printf("ERROR:Open Device Error!n"); return; printf("Press any key to exit!"); while(!kbhit()
4、/*判斷是否有鍵按下*/ PortWriteByte(0x2A0,0x10); /*或PortReadByte(0x2A0, &data)*/ Sleep(1000); /*延遲一秒鐘*/ PortWriteByte(0x2A8,0x10); /*或PortReadByte(0x2A8, &data)*/ Sleep(1000); /*延遲一秒鐘*/ Cleanup(); /*關(guān)閉設(shè)備*/ 五、實驗結(jié)果:按任意鍵后L7燈每1秒閃爍一次實驗二 可編程并行接口(一)(8255方式0)一、實驗?zāi)康?掌握8255方式0的工作原理及使用方法。二、實驗內(nèi)容 1實驗電路如圖20,8255C口
5、接邏輯電平開關(guān)K0K7,A口接LED顯示電路L0L7。2. 編程從8255C口輸入數(shù)據(jù),再從A口輸出.圖 20 三、編程提示 1、8255控制寄存器端口地址 28BHA口的地址 288H C口的地址 28AH 2、參考流程圖:四、試驗程序/*/ /* 可編程并行接口(一) */ /*/ #include <stdio.h>#include <conio.h>#include ".ApiEx.h"#pragma comment(lib,".ApiEx.lib")void main()printf("Press any ke
6、y to begin!nn");getch();printf("Press any key to exit!n");if(!Startup()/*打開設(shè)備*/printf("ERROR:Open Device Error!n");return;PortWriteByte(0x28B,0x89);BYTE data;while(!kbhit()/*判斷是否有鍵按下*/PortReadByte(0x28A, &data);Sleep(1000);PortWriteByte(0x288,data);Sleep(1000);Cleanup();
7、/*關(guān)閉設(shè)備*/五、實驗結(jié)果:八個開關(guān)撥到上方時對應(yīng)的L0L7燈亮起,撥到下方時對應(yīng)的燈熄滅。實驗三 可編程定時器計數(shù)器一、實驗?zāi)康?掌握8253的基本工作原理和編程方法。二、實驗內(nèi)容1 按圖16虛線連接電路,將計數(shù)器0設(shè)置為方式0,計數(shù)器初值為N(N0FH),用手動逐個輸入單脈沖,編程使計數(shù)值在屏幕上顯示,并同時用邏輯筆觀察OUT0電平變化(當輸入N+1個脈沖后OUT0變高電平)。 圖 162 按圖17連接電路,將計數(shù)器0、計數(shù)器1分別設(shè)置為方式3,計數(shù)初值設(shè)為1000,用邏輯筆觀察OUT1輸出電平的變化(頻率1HZ)。圖 17三、編程提示 1、8253控制寄存器地址283H計數(shù)器0地址28
8、0H計數(shù)器1地址281HCLK0連接時鐘1MHZ 2、參考流程圖(見圖18、19):圖 18 圖 19四、試驗程序試驗程序1/*/ /* 可編程定時器計數(shù)器(一) */ /*/ #include <stdio.h>#include <conio.h>#include ".ApiEx.h"#pragma comment(lib,".ApiEx.lib")void main()int d;printf("Press any key to begin!nn");getch();printf("Press a
9、ny key to exit!n");if(!Startup()/*打開設(shè)備*/printf("ERROR:Open Device Error!n");return;PortWriteByte(0x283,0x10);printf("Press iinput data!n");scanf("%d",&d);PortWriteByte(0x280,d);Sleep(1000);BYTEdata;BYTEd1;PortReadByte(0x280,&data);while(!kbhit()/*判斷是否有鍵按下*/
10、PortReadByte(0x280,&data);/*或PortReadByte(0x2A0, &data)*/Sleep(1000);/*延遲一秒鐘*/if(data!=d1)d1=data;printf("%dn",data);if(data=0)PortWriteByte(0x280,d);/Sleep(1000);continue;/*或PortReadByte(0x2A8, &data)*/*延遲一秒鐘*/Cleanup();/*關(guān)閉設(shè)備*/實驗程序2: /*/ /* 可編程定時器計數(shù)器(二) */ /*/ #include<std
11、io.h>#include<conio.h>#include ".ApiEx.h"#pragma comment(lib,".ApiEx.lib")void main()if(!Startup() /*打開設(shè)備*/printf("ERROR: Open Device Error!n");return;PortWriteByte(0x283,0x36); /*寫方式字通道0方式3*/PortWriteByte(0x280,1000%256); /*送計數(shù)初值*/PortWriteByte(0x280,1000/256)
12、;PortWriteByte(0x283,0x76); /*設(shè)置計數(shù)器1方式字*/PortWriteByte(0x281,1000%256); /*送計數(shù)初值*/PortWriteByte(0x281,1000/256);Cleanup(); /*關(guān)閉設(shè)備*/printf("Press any key to exit!");五、實驗結(jié)果程序1:程序開始時設(shè)定初值,每按一次單脈沖數(shù)值-1程序2:插入邏輯筆后,到底紅綠燈交替亮滅,周期為1秒。實驗四 串行通訊實驗一、實驗?zāi)康?、了解串行通訊的基本原理。 、掌握串行接口芯片8251的工作原理和編程方法。二、實驗內(nèi)容、 按圖18連接
13、好電路,(8251插通用插座)其中8253計數(shù)器用于產(chǎn)生8251的發(fā)送和接收時鐘.TXD和RXD連在一起。、編程:從鍵盤輸入一個字符,將其ASCII碼加 1 后發(fā)送出去,再接收回來在屏幕上顯示。實現(xiàn)自發(fā)自收。圖18 串行通訊電路三、實驗提示、 圖示電路8251的控制口地址為2B9H,數(shù)據(jù)口地址為2B8H。、 8253計數(shù)器的計數(shù)初值=時鐘頻率 /(波特率×波特率因子),這里的時鐘頻率接 1MHz,波特率若選1200,波特率因子若選16,則計數(shù)器初值為52。、 收發(fā)采用查詢方式。四、參考流程圖(見圖20)圖 20五、試驗程序/*/ /* 8251串行通信 */ /*/ include
14、<conio.h>#include ".ApiEx.h"#pragma comment(lib,".ApiEx.lib")void main()int i;BYTE data;if(!Startup() /*打開設(shè)備*/printf("ERROR: Open Device Error!n");return;PortWriteByte(0x283,0x16); /*設(shè)8253計數(shù)器0工作方式*/Sleep(1*100); /*延時*/PortWriteByte(0x280,52); /*給8253通道0送初值*/Sleep(
15、1*100); /*延時*/for(i=0;i<3;i+)PortWriteByte(0x2b9,0); /*初始化8251,向8251控制端口送3個0*/Sleep(1*100); /*延時*/PortWriteByte(0x2b9,0x40); /*復(fù)位8251*/Sleep(1*100); /*延時*/PortWriteByte(0x2b9,0x4e); /*1個停止位,8個數(shù)據(jù)位,波特率因子為16*/Sleep(1*100); /*延時*/PortWriteByte(0x2b9,0x27); /*向8251送控制字允許其接收和發(fā)送*/Sleep(1*100); /*延時*/pri
16、ntf("You can Press a key to start:n"); /*提示*/printf("ESC is exit!n"); /*提示*/for(;)doPortReadByte(0x2b9,&data);while(!(data&0x01); /*發(fā)送未準備好則繼續(xù)接收*/data = getch();if(data = 0x1b) exit(0); /*若有ESC鍵按下則返回*/putchar(data);PortWriteByte(0x2b8,data+1); /*發(fā)送*/Sleep(1*100); /*延時*/doP
17、ortReadByte(0x2b9,&data);while(!(data&0x02); /*接收沒準備好則等待*/PortReadByte(0x2b8,&data);printf("%c",data); /*準備好則將接收后的字符顯示*/Cleanup(); /*關(guān)閉設(shè)備*/六、實驗結(jié)果輸入字符cer后出現(xiàn)字符dfs實驗五 中斷一、實驗?zāi)康?、掌握PC機中斷處理系統(tǒng)的基本原理。 、學(xué)會編寫中斷服務(wù)程序。二、實驗原理與內(nèi)容1、實驗原理PC機用戶可使用的硬件中斷只有可屏蔽中斷,由8259中斷控制器管理。中斷控制器用于接收外部的中斷請求信號,經(jīng)過優(yōu)先級判
18、別等處理后向CPU發(fā)出可屏蔽中斷請求。IBMPC、PC/XT機內(nèi)有一片8259中斷控制器對外可以提供8個中斷源:中斷源中斷類型號中斷功能IRQ008H時鐘IRQ109H鍵盤IRQ20AH保留IRQ3OBH串行口2IRQ40CH串行口1IRQ50DH硬盤IRQ60EH軟盤IRQ70FH并行打印機8個中斷源的中斷請求信號線IRQ0IRQ7在主機的62線ISA總線插座中可以引出,系統(tǒng)已設(shè)定中斷請求信號為“邊沿觸發(fā)”,普通結(jié)束方式。對于PC/AT及286以上微機內(nèi)又擴展了一片8259中斷控制,IRQ2用于兩片8259之間級連,對外可以提供16個中斷源:中斷源中斷類型號中斷功能IRQ8070H實時時鐘I
19、RQ9071H用戶中斷IRQ10072H保留IRQ11O73H保留IRQ12074H保留IRQ13075H協(xié)處理器IRQ14076H硬盤IRQ15077H保留PCI總線中的中斷線只有四根,INTA#、INTB#、INTC#、INTD#,它們需要通過P&P的設(shè)置來和某一根中斷相連接才能進行中斷申請。圖 21 中斷電路2、實驗內(nèi)容實驗電路如圖31,直接用手動產(chǎn)單脈沖作為中斷請求信號(只需連接一根導(dǎo)線)。要求每按一次開關(guān)產(chǎn)生一次中斷,在屏幕上顯示一次“TPC pci card Interrupt”,中斷10次后程序退出。三、編程提示1. 由于9054的驅(qū)動程序影響直寫9054芯片的控制寄存器
20、,中斷實驗需要在純DOS的環(huán)境中才能正常運行。這里指的純DOS環(huán)境是指微機啟動時按F8鍵進入的DOS環(huán)境。WINDOWS重啟進入MSDOS方式由于系統(tǒng)資源被重新規(guī)劃過,所以也不能正常實驗。2. 由于TPC卡使用PCI總線,所以分配的中斷號每臺微機可能都不同,編程時需要了解當前的微機使用那個中斷號并進行設(shè)置,獲取方法請參看匯編程序使用方法的介紹。(也可使用自動獲取資源分配的程序取得中斷號)3. 在純DOS環(huán)境下,有些微機的BIOS設(shè)置中有將資源保留給ISA總線使用的選項,致使在純DOS環(huán)境(WINDOWS環(huán)境下不會出現(xiàn)此問題)下PCI總線無法獲得系統(tǒng)資源,也就無法做實驗,這時需要將此選項修改為使
21、用即插即用。4. 在純DOS環(huán)境下,有些微機的BIOS設(shè)置中有使用即插即用操作系統(tǒng)的選項,如果在使用即插即用操作系統(tǒng)狀態(tài)下,BIOS將不會給TPC卡分配系統(tǒng)資源,致使在純DOS環(huán)境(WINDOWS環(huán)境下不會出現(xiàn)此問題)下PCI總線無法獲得系統(tǒng)資源,也就無法做實驗,這時需要將此選項修改為不使用即插即用操作系統(tǒng)。5. 由于TPC卡使用9054芯片連接微機,所以在編程使用微機中斷前需要使能9054的中斷功能,代碼如下:mov dx,ioport_cent+68h ;設(shè)置 tpc 卡中9054芯片io口,使能中斷in ax,dxor ax,0900hout dx,ax其中IOPORT_CENT是905
22、4芯片寄存器組的I/O起始地址,每臺微機可能都不同,編程時需要了解當前的微機使用哪段并進行設(shè)置,獲取方法請參看本書結(jié)尾部分的介紹。(也可使用自動獲取資源分配的程序取得),+68H的偏移是關(guān)于中斷使能的寄存器地址,設(shè)置含義如下:設(shè)置INTCSR(68H)寄存器,中斷模式設(shè)置BITS功能81:能夠產(chǎn)生PCI中斷0:禁止產(chǎn)生PCI中斷111:能夠LOCAL端輸入的中斷送到PCI端0:禁止LOCAL端輸入的中斷送到PCI端其它位為零即可,更多內(nèi)容參看9054芯片數(shù)據(jù)手冊程序退出前還要關(guān)閉9054的中斷,代碼如下:mov dx,ioport_cent+68h ;設(shè)置 tpc 卡中9054芯片io口,關(guān)閉
23、中斷in ax,dxand ax,0f7ffhout dx,ax6. PC機中斷控制器8259 的地址為20H、21H,編程時要根據(jù)中斷類型號設(shè)置中斷矢量,8259中斷屏蔽寄存器IMR對應(yīng)位要清零(允許中斷),中斷服務(wù)結(jié)束返回前要使用中斷結(jié)束命令:MOV AL,20HOUT 20H,AL中斷結(jié)束返回DOS時應(yīng)將IMR對應(yīng)位置1,以關(guān)閉中斷 。四、參考流程圖開始設(shè)置TPC卡中斷使能保存原中斷向量設(shè)置新中斷向量設(shè)置中斷掩碼顯示提示信息恢復(fù)中斷掩碼計數(shù)器為0?YN按任意鍵?YN恢復(fù)原中斷向量設(shè)置TPC卡中斷關(guān)閉關(guān)中斷開中斷結(jié)束返回中斷開始計數(shù)器減一顯示提示信息發(fā)出E0I結(jié)束中斷關(guān)中斷開中斷中斷返回圖
24、 22 中斷五、程序代碼/*/ /* 中斷實驗*/ /*/#include<stdio.h> #include<conio.h> #include ".ApiEx.h" #pragma comment(lib,".ApiEx.lib") int i = 0; void MyISR() printf("TPC pci card interruptn");i+; void main() if(!Startup() /*打開設(shè)備*/ printf("ERROR: Open Device Error!n&qu
25、ot;); return; printf("Please Press DMC! Press any key to exit!n"); RegisterLocalISR(MyISR); /*注冊中斷程序*/ EnableIntr(); /*開中斷*/ while(!kbhit() && i != 10) DisableIntr(); /*關(guān)中斷*/ Cleanup(); /*關(guān)閉設(shè)備*/ 六、實驗結(jié)果按一次單次脈沖,屏幕中出現(xiàn)“TPC pci card interrupt”,出現(xiàn)十次后程序退出。實驗六 模/數(shù)轉(zhuǎn)換器一、實驗?zāi)康牧私饽?數(shù)轉(zhuǎn)換的基本原理,掌握AD
26、C0809的使用方法。二、實驗內(nèi)容、實驗電路原理圖如圖22。通過實驗臺左下角電位器RW1輸出05直流電壓送入ADC0809通道0(IN0),利用debug的輸出命令啟動/轉(zhuǎn)換器,輸入命令讀取轉(zhuǎn)換結(jié)果,驗證輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系。啟動IN0開始轉(zhuǎn)換:Out 0298 0讀取轉(zhuǎn)換結(jié)果:In 0298圖 22 模數(shù)轉(zhuǎn)換電路、編程采集IN0輸入的電壓,在屏幕上顯示出轉(zhuǎn)換后的數(shù)據(jù)(用16進制數(shù))。三、實驗提示 、ADC0809的IN0口地址為298H,IN1口地址為299H。、IN0單極性輸入電壓與轉(zhuǎn)換后數(shù)字的關(guān)系為:其中Ui為輸入電壓,UREF為參考電壓,這里的參考電壓為機的電源。、一次A/D轉(zhuǎn)換
27、的程序可以為 MOV DX,口地址 OUT DX,AL ;啟動轉(zhuǎn)換 ;延時 IN AL,DX ;讀取轉(zhuǎn)換結(jié)果放在AL中四、參考流程圖(見圖23,24)(A) 主程序 (B) 顯示子程序五、程序代碼:/*/ /* A/D轉(zhuǎn)換實驗*/ /*/#include <conio.h> #include <stdio.h> #include ".ApiEx.h" #pragma comment(lib,".ApiEx.lib") void main() BYTE data; printf("Press any key to exit
28、!n"); if(!Startup() /*打開設(shè)備*/ printf("ERROR: Open Device Error!n"); return; while(!kbhit() PortWriteByte(0x298,0x00); /*啟動A/D通道0*/ Sleep(70); /*延時*/ PortReadByte(0x298,&data); printf("%dn",data); /*將轉(zhuǎn)換后的數(shù)據(jù)在屏幕上顯示*/ /*如有鍵按下則退出*/ Cleanup(); /*關(guān)閉設(shè)備*/ 六、實驗結(jié)果: 屏幕顯示電壓。實驗七 交通燈控制系
29、統(tǒng)(綜合實驗)一、實驗?zāi)康模壕C合運用8255、8253、8259等設(shè)計和搭接接口電路,完成設(shè)計要求。二、實驗內(nèi)容:1. 按照時間控制原則,利用并行接口和定時器,采用時間中斷方式設(shè)計一套十字路口的交通燈管理系統(tǒng)。2. 要求南北方向和東西方向上的車輛在交通燈的控制下交替放行,主干道每次通行時間可設(shè)置修改。3.在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換。4.黃燈亮?xí)r,要求每秒閃亮一次。5.當綠燈亮?xí)r,其顯示時間采用倒計時的方法在顯示器及實驗臺上的數(shù)碼管進行顯示。三、實驗電路:四、程序流程圖:1.主程序:2.中斷服務(wù)程序:3.顯示子程序:五、程序代碼:#include<stdio.h>
30、 #include<conio.h> #include ".ApiEx.h" #pragma comment(lib,".ApiEx.lib") int flag=0;int d;int portc=0x24,0x44,0x04,0x44,0x04,0x44,0x04,0x81,0x82,0x80,0x82,0x80,0x82,0x80,0xff;BYTE data;DWORD WINAPI ThreadProc(LPVOID lpParam)int a,b;char led10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0
31、x7d,0x07,0x7f,0x6f;a=data/10;b=data%10;PortWriteByte(0x288,leda);PortWriteByte(0x28a,0x10); /*顯示十位*/Sleep(1);PortWriteByte(0x288,ledb);PortWriteByte(0x28a,0x08); /*顯示個位*/Sleep(1);return 0;void MyISR() printf("0n");int i;switch(flag%2)case 0:for(i=1;i<7;i+)PortWriteByte(0x292,portci);Sle
32、ep(1000);break;case 1:for(i=8;i<14;i+)PortWriteByte(0x292,portci);Sleep(1000);break;flag+;PortWriteByte(0x281,d);Sleep(100); void main() if(!Startup() /*打開設(shè)備*/ printf("ERROR: Open Device Error!n"); return; PortWriteByte(0x283,0x36); /*寫方式字通道0方式3(計數(shù)器8253接280H)*/PortWriteByte(0x280,65535%256); /*送計數(shù)初值高*/PortWriteByte(0x280,65535/256);/*送計數(shù)初值低*/P
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 超市加工區(qū)安全制度
- 請?zhí)峁┮环輥砹蠙z驗獎罰制度
- 計算機教室管理人員崗位職責制度
- 行政事業(yè)單位職責分離制度
- 【疾控科普】尼帕病毒綜合防治知識
- 住院病歷質(zhì)量評分標準
- 用電安全與維護課件
- 養(yǎng)老機構(gòu)生活護理制度
- Unit 2 Go for it 知識清單 新教材外研版七年級英語下冊
- 2026青海海南州貴南縣自然資源和林業(yè)草原局招聘臨聘人員1人備考考試題庫附答案解析
- 市安全生產(chǎn)例會制度
- 生產(chǎn)安全管理三項制度
- 湖南省長沙市雨花區(qū)2025-2026學(xué)年上學(xué)期九年級物理檢測綜合練習(xí)試卷(含答案)
- 打火機工廠制度規(guī)范
- 肺含鐵血黃素沉著癥診療指南(2025年版)
- 湖口縣2026年第一批單位公開選調(diào)事業(yè)編制工作人員【32人】參考題庫附答案
- 統(tǒng)計分析培訓(xùn)課件
- 2025至2030中國乳鐵蛋白行業(yè)調(diào)研及市場前景預(yù)測評估報告
- 2026年人教版七年級英語上冊期末真題試卷含答案
- 高速公路bt合同范本
- 2026年《必背60題》酒店前廳接待經(jīng)理高頻面試題包含詳細解答
評論
0/150
提交評論