定時與中斷接口程序設(shè)計_第1頁
定時與中斷接口程序設(shè)計_第2頁
定時與中斷接口程序設(shè)計_第3頁
定時與中斷接口程序設(shè)計_第4頁
定時與中斷接口程序設(shè)計_第5頁
免費預(yù)覽已結(jié)束,剩余4頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

試驗1 定時與中斷接口程序設(shè)計一試驗?zāi)康牧私舛〞r器/8253、并行I/O8255A在PC機中的電路連接方法;學習使用TURBOC++8253、8255進展編程操作;生疏攔截PC機中斷向量的TC++編程方法。二試驗內(nèi)容1.8253、8255在PC/XT機中的電路連接介紹D7…D0D7…D0D7…D0D7…D0OUT08259IRQ0,中斷類型=8IO/MA9…A2地址譯碼OUT2GATE2CLK0,1,2&放大CS40H~43H1.19MHz地址譯碼CSPB0PB160H~63H8255IORRDGATE0+5VIOWWRCLK0A0A0OUT18237的DRAMA1A1GATE1CLK1+5VPC機啟動后,系統(tǒng)設(shè)置的初始狀態(tài)為:芯片有關(guān)工作方式初值運行狀況82530#:方式3〔方波發(fā)生器〕計數(shù)初值:0000HOUT55ms方波至8259的IRQ02#:?〔1KHz〕?(1KHz方波)8255出〕掌握蜂鳴器發(fā)聲。0:不發(fā)聲,1:發(fā)聲8259IRQ0:允許中斷中斷類型號:8CPU8號中斷表中,82532#的工作方式和計數(shù)初值未知,要求自己設(shè)置。2.程序要求利用TURBOC++開發(fā)環(huán)境設(shè)計程序,實現(xiàn)如下功能:程序啟動時,要求輸入定時時間,以秒為單位。按秒計時,每秒到達時,在屏幕上顯示當前為第幾秒,同時蜂鳴器發(fā)出短促叫聲;TimeUp三試驗環(huán)境硬件環(huán)境:PC機一臺;軟件環(huán)境:操作系統(tǒng)不限,TURBOC++3.0。四試驗步驟建立源文件啟動TURBOC++3.0,建立Timer.CPPD:\×××〔學號〕\Timer.CPP;設(shè)置TC工作名目選菜單Options/Directories1、23、4欄填寫您的文件存放名目,OK。如此,TC生成的可執(zhí)行文件等將會存放到此工作名目下。樣例如下:輸入源程序以下源程序僅供參考。#include <stdio.h> //支持標準輸入輸出,如printf。#include <dos.h> //支持接口訪問、中斷向量操作函數(shù)#include <STDLIB.H> //支持exit函數(shù)#ifdef cplusplus //定義C++使用的中斷函數(shù)標識符。假設(shè)是×××.C程序,則不需要#define CPPARGS...#else#endif

#define CPPARGSint nTick=0,sec=0,flag=0;unsignedchar sys_PB,my_PB;voidinterruptfar(*sys_int_08)( CPPARGS); //假設(shè)是×××.C,則函數(shù)參數(shù)不寫voidinterruptfarmy_int_08( CPPARGS) //假設(shè)是×××.C,則函數(shù)參數(shù)不寫{//855ms825308259IRQ0申請中斷++nTick;if(tinck==1)outportb(0x61,my_PB); //開頭鳴叫elseif(tinck==3) outportb(0x61,sys_PB); //停頓鳴叫elseif(nTick>18){//1second/55ms18flag=1;nTick=0;sec++;}sys_int_08; //調(diào)用系統(tǒng)的中斷向量}//==========================================void main{ unsigned int Time_up;printf(“PleaseinputUpTime(5--30):“);scanf(“%d“,&Time_up);printf(“\n“);if(Time_up<5||Time_up>30){ printf(“InputError!“);exit(1); //完畢程序}outportb(0x63,0x82);//8255,PB為輸入方式sys_PB=inportb(0x61);//PB口,內(nèi)容my_PB=sys_PB|0x03;//PB2位〔PB0,PB1〕1outportb(0x63,0x80);//8255,PB為輸出方式//825321KHz方波,送到揚聲器,使揚聲器發(fā)聲outportb(0x43,0xb6);//CW=10110110B23,二進制outportb(0x42,0xa6);//lowbyte,outportb(0x42,0x04);//highbyte,0x04a6=1190,f=1.19MHz,out=f/1190=1000Hzsys_int_08=getvect(0x08); //保存系統(tǒng)的中斷向量setvect(0x08,my_int_08); //設(shè)置系統(tǒng)向量while(1){ if(flag==1){ flag=0;printf(“%d “,sec);if(sec==Time_up)break;}}printf(“TimerUp!\n\n“);outportb(0x61,sys_PB); //恢復(fù)系統(tǒng)的PB口狀態(tài)setvect(0x08,sys_int_08); //恢復(fù)系統(tǒng)的中斷向量}運行程序,再完成如下內(nèi)容〔1〕8253的通道0在程序中起什么作用?為什么在程序中沒有對其進展初始化及賦初值?82530#的初值,使計時精度嚴格為1秒。1000ms。55ms的定時=65535×1/1.19MHzmy_int_08〔〕函數(shù)什么時候被調(diào)用?將mainDOS環(huán)境下執(zhí)行這個程序。本程序為什么承受DOS環(huán)境編寫程序,而不承受Windows環(huán)境?六試驗報告果。試驗報告的組成一般為:試驗工程名稱〔要求嚴格與本指導(dǎo)書全都、試驗日期、場地、承受的軟硬件環(huán)境,試驗者;TV?試驗?zāi)康模壕唧w寫要做成什么,期望得出什么結(jié)果。不要照抄本指導(dǎo)書。試驗過程:具體寫操作的過程,對于源程序,不肯定全部寫出,但應(yīng)畫出模塊圖、流程圖。核心代碼可寫出。特別要寫出試驗中遇到的問題及分析、解決方法。試驗結(jié)果及分析:照實寫出結(jié)果,對結(jié)果進展分析,可進一步提出改進、提高的方法。試驗1 定時與中斷接口程序設(shè)計一試驗?zāi)康牧私舛〞r器/8253、并行I/O8255A在PC機中的電路連接方法;學習使用TURBOC++8253、8255進展編程操作;生疏攔截PC機中斷向量的TC++編程方法。二試驗內(nèi)容1.8253、8255在PC/XT機中的電路連接介紹D7…D0D7…D0D7…D0D7…D0OUT08259IRQ0,中斷類型=8IO/MA9…A2地址譯碼OUT2GATE2CLK0,1,2&放大CS40H~43H1.19MHz地址譯碼CSPB0PB160H~63H8255IORRDGATE0+5VIOWWRCLK0A0A0OUT18237的DRAMA1A1GATE1CLK1+5VPC機啟動后,系統(tǒng)設(shè)置的初始狀態(tài)為:芯片有關(guān)工作方式初值運行狀況82530#:方式3〔方波發(fā)生器〕計數(shù)初值:0000HOUT55ms方波至8259的IRQ02#:?〔1KHz〕?(1KHz方波)8255出〕掌握蜂鳴器發(fā)聲。0:不發(fā)聲,1:發(fā)聲8259IRQ0:允許中斷中斷類型號:8CPU8號中斷表中,82532#的工作方式和計數(shù)初值未知,要求自己設(shè)置。2.程序要求利用TURBOC++開發(fā)環(huán)境設(shè)計程序,實現(xiàn)如下功能:程序啟動時,要求輸入定時時間,以秒為單位。按秒計時,每秒到達時,在屏幕上顯示當前為第幾秒,同時蜂鳴器發(fā)出短促叫聲;TimeUp三試驗環(huán)境硬件環(huán)境:PC機一臺;軟件環(huán)境:操作系統(tǒng)不限,TURBOC++3.0。四試驗步驟建立源文件啟動TURBOC++3.0,建立Timer.CPPD:\×××〔學號〕\Timer.CPP;設(shè)置TC工作名目選菜單Options/Directories1、23、4欄填寫您的文件存放名目,OK。如此,TC生成的可執(zhí)行文件等將會存放到此工作名目下。樣例如下:輸入源程序以下源程序僅供參考。#include <stdio.h> //支持標準輸入輸出,如printf。#include <dos.h> //支持接口訪問、中斷向量操作函數(shù)#include <STDLIB.H> //支持exit函數(shù)#ifdef cplusplus //定義C++使用的中斷函數(shù)標識符。假設(shè)是×××.C程序,則不需要#define CPPARGS...#else#endif

#define CPPARGSint nTick=0,sec=0,flag=0;unsignedchar sys_PB,my_PB;voidinterruptfar(*sys_int_08)( CPPARGS); //假設(shè)是×××.C,則函數(shù)參數(shù)不寫voidinterruptfarmy_int_08( CPPARGS) //假設(shè)是×××.C,則函數(shù)參數(shù)不寫{//855ms825308259IRQ0申請中斷++nTick;if(tinck==1)outportb(0x61,my_PB); //開頭鳴叫elseif(tinck==3) outportb(0x61,sys_PB); //停頓鳴叫elseif(nTick>18){//1second/55ms18flag=1;nTick=0;sec++;}sys_int_08; //調(diào)用系統(tǒng)的中斷向量}//==========================================void main{ unsigned int Time_up;printf(“PleaseinputUpTime(5--30):“);scanf(“%d“,&Time_up);printf(“\n“);if(Time_up<5||Time_up>30){ printf(“InputError!“);exit(1); //完畢程序}outportb(0x63,0x82);//8255,PB為輸入方式sys_PB=inportb(0x61);//PB口,內(nèi)容my_PB=sys_PB|0x03;//PB2位〔PB0,PB1〕1outportb(0x63,0x80);//8255,PB為輸出方式//825321KHz方波,送到揚聲器,使揚聲器發(fā)聲outportb(0x43,0xb6);//CW=10110110B23,二進制outportb(0x42,0xa6);//lowbyte,outportb(0x42,0x04);//highbyte,0x04a6=1190,f=1.19MHz,out=f/1190=1000Hzsys_int_08=getvect(0x08); //保存系統(tǒng)的中斷向量setvect(0x08,my_int_08); //設(shè)置系統(tǒng)向量while(1){ if(flag==1){ flag=0;printf(“%d “,sec);if(sec==Time_up)break;}}printf(“TimerUp!\n\n“);outportb(0x61,sys_PB); //恢復(fù)系統(tǒng)的PB口狀態(tài)setvect(0x08,sys_int_08); //恢復(fù)系統(tǒng)的中斷向量}運行程序,再完成如下內(nèi)容〔1〕8253的通道0在程序中起什么作用?為什么在程序中沒有對其進展初始化及賦初值?82530#的初值,使計時精度嚴格為1秒。1000ms。55ms的定時=65535×1/1.19MHzmy_int_08〔〕函數(shù)什么時候被調(diào)用?將mai

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論