接口實驗報告_第1頁
接口實驗報告_第2頁
接口實驗報告_第3頁
接口實驗報告_第4頁
接口實驗報告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上武漢輕工大學(xué) -現(xiàn)代微機(jī)原理與接口技術(shù)報告學(xué)號:姓名:王雪瑞班級:網(wǎng)工一班成績: 2014 年 5 月 15 日 實驗1 定時與中斷接口程序設(shè)計實驗項目:定時與中斷接口程序設(shè)計實驗日期:4月22日實驗場地:東7-409實驗環(huán)境: 硬件環(huán)境:PC機(jī)一臺; 軟件環(huán)境:操作系統(tǒng)不限,TURBO C+3.0。實驗?zāi)康模?1學(xué)習(xí)定時器/計數(shù)器8253、并行I/O接口8255A在PC機(jī)中的電路連接方法;2學(xué)習(xí)使用TURBO C+對8253、8255進(jìn)行編程操作;3熟悉攔截PC機(jī)中斷向量的TC+ 編程方法。實驗過程:1建立源文件啟動TURBO C+3.0,建立Timer.CPP。保

2、存到D:/Timer.CPP;2設(shè)置TC工作目錄選菜單Options/Directories,第1、2欄保持不變,第3、4欄填寫您的文件存放目錄。這樣,TC生成的可執(zhí)行文件就會存放到此工作目錄下。3輸入源程序#include <stdio.h> /支持標(biāo)準(zhǔn)輸入輸出,如printf()。#include <dos.h> /支持接口訪問、中斷向量操作函數(shù)#include <STDLIB.H> /支持exit()函數(shù)#ifdef _cplusplus /定義C+使用的中斷函數(shù)標(biāo)識符。 #define _CPPARGS .#else #define _CPPARGS

3、#endifint nTick=0,sec=0,flag=0;unsigned char sys_PB,my_PB;void interrupt far (*sys_int_08)(_CPPARGS); void interrupt far my_int_08(_CPPARGS) /8號中斷,每55ms中斷一次,由8253的0號定時器定時,并向8259 IRQ0申請中斷 +nTick; if(nTick =1) outportb(0x61,my_PB); /開始鳴叫 else if(nTick =3) outportb(0x61,0x01); /停止鳴叫,PB1=0, PB0保持為1 else

4、 if(nTick>18) / 1second/55ms 近似等于18 flag=1; nTick=0; sec+; sys_int_08(); /調(diào)用系統(tǒng)的中斷向量void main() unsigned int Time_up; printf("Please input Up Time(5-30): "); scanf("%d",&Time_up); printf("n"); if(Time_up<5 | Time_up>30) printf("Input Error!"); exit

5、(1); /結(jié)束程序 sys_PB=inportb(0x61); /讀取PB口,內(nèi)容 my_PB=sys_PB|0x03; /將PB口低2位(PB0,PB1)置1 /8253通道2,產(chǎn)生1KHz方波,送到揚(yáng)聲器,使揚(yáng)聲器發(fā)聲 outportb(0x43,0xb6); /CW= B,通道2,先低字節(jié),再高字節(jié),方式3,二進(jìn)制 outportb(0x42,0xa6); /low byte, outportb(0x42,0x04); /high byte,0x04a6=1190,f = 1.19MHz,out=f/1190=1000Hz sys_int_08=getvect(0x08); /保存系統(tǒng)

6、的中斷向量 setvect(0x08,my_int_08); /設(shè)置系統(tǒng)向量 while(1) if(flag=1) flag=0; printf("%d ",sec); if(sec=Time_up) break; printf("Timer Up!nn");outportb(0x61,sys_PB); /恢復(fù)系統(tǒng)的PB口狀態(tài) setvect(0x08,sys_int_08); /恢復(fù)系統(tǒng)的中斷向量4. 運(yùn)行程序,并修改一些數(shù)據(jù)重新運(yùn)行。實驗結(jié)果及分析: 通過本次實驗學(xué)習(xí)使用TURBO C+對8253、8255進(jìn)行編程操作,我熟悉了8253、8255的

7、接口邏輯和它們的內(nèi)部結(jié)構(gòu)、工作原理。了解了8253、8255的工作方式,并熟練掌握了8259的工作原理。 實驗2 MFC串行通信程序設(shè)計實驗項目:MFC串行通信程序設(shè)計實驗時間:4月29日實驗地點:東7-409實驗環(huán)境: 硬件環(huán)境:PC機(jī)一臺 串行通信終接頭一個 串行通信電纜一根軟件環(huán)境:Windows7操作系統(tǒng)VC+6.0實驗?zāi)康模?1了解MFC編寫Windows應(yīng)用程序的一般方法,熟悉Windows API 接口函數(shù)的使用;2熟悉定時器Timer( )函數(shù)、RS232 API接口函數(shù)的使用,兩者之間的協(xié)調(diào)工作。實驗過程:1建立基于對話框的MFC工程工程名為Scom,對話框的類(Class)

8、為CscomDlg,對應(yīng)的頭文件為ScomDlg.h,源程序文件為ScomDlg.cpp。 2. 建立串行通信接口(1)在ScomDlg.h文件中定義串行通信接口對象的句柄 class CScomDlg : public CDialog/ Constructionpublic:CScomDlg(CWnd* pParent = NULL);/ standard constructorHANDLE hCom; /自己添加的代碼(2)在ScomDlg.cpp文件中的OnInitDialog()函數(shù)中創(chuàng)建串行通信接口BOOL CScomDlg:OnInitDialog() . / TODO: Add

9、extra initialization here hCom=CreateFile( "COM1",GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); /創(chuàng)建接口對象,返回句柄if(hCom=(HANDLE)-1) MessageBox( "創(chuàng)建串口1接口實例失敗","未找到COM1口",MB_ICONSTOP|MB_OK ); return TRUE;DCB dcb; /定義DCB(設(shè)備控制塊)結(jié)構(gòu),用于設(shè)置串口設(shè)備的屬性和參數(shù)GetCommState(hCom

10、,&dcb); /先得到系統(tǒng)默認(rèn)的DCB屬性和參數(shù)BuildCommDCB("COM1: 1200, n,8,1", &dcb ); /再修改DCB的幾個參數(shù):1200bps,無奇偶校驗,8數(shù)據(jù)位,1停止位SetCommState(hCom,&dcb); COMMTIMEOUTS ComTimeOut; /定義超時結(jié)構(gòu),用于設(shè)置串口讀寫的等待時間ComTimeOut.ReadIntervalTimeout=MAXWORD; /讀間隔超時ComTimeOut.ReadTotalTimeoutMultiplier=0; /讀總超時系數(shù)ComTimeOut

11、.ReadTotalTimeoutConstant=0; /讀總超時常數(shù)ComTimeOut.WriteTotalTimeoutMultiplier=0; /寫總超時系數(shù)ComTimeOut.WriteTotalTimeoutConstant=400; /寫總超時常數(shù)SetCommTimeouts(hCom,&ComTimeOut); /按超時結(jié)構(gòu)設(shè)置串口讀寫的等待時間SetupComm(hCom,1000,1000); /設(shè)置讀寫緩沖區(qū)PurgeComm(hCom,PURGE_TXCLEAR);/清空發(fā)送緩沖區(qū)PurgeComm(hCom,PURGE_RXCLEAR);/清空接收緩沖

12、區(qū)3. 用可視化工具在對話框窗體上添加按鈕、編輯框. 按下表設(shè)置各控件的屬性??丶QVisibleIDMultilineAotoHscrollAotoVscrollWantRturnRead-Only發(fā)送按鈕IDC_SEND發(fā)送編輯框IDC_SendTxt接收編輯框IDC_Receive 為上述控件加入變量。選View/ClassWizard,選Member Variables卡,按下圖設(shè)置 4. 建立各控件的消息響應(yīng)函數(shù)(1)為“退出”按鈕建立消息響應(yīng)函數(shù),雙擊“退出”按鈕,彈出對話框,點擊確定。于是MFC自動在CscomDlg類中建立了“退出”按鈕的響應(yīng)函數(shù)OnCancel();請在該函

13、數(shù)中添加代碼:void CScomDlg:OnCancel() / TODO: Add extra cleanup hereCloseHandle(hCom); /最后釋放串口資源 (2)為“發(fā)送” 按鈕建立消息響應(yīng)函數(shù),雙擊“發(fā)送”按鈕,彈出對話框,點擊確定。于是MFC自動在CscomDlg類中建立了“發(fā)送”按鈕的響應(yīng)函數(shù)OnSend ();請在該函數(shù)中添加代碼:void CScomDlg:OnSend() / TODO: Add your control notification handler code hereCOMSTAT state; /定義串口狀態(tài)結(jié)構(gòu),用于存放串口通信的狀態(tài)DW

14、ORD BytesWritten; /定義存放實際發(fā)送了多少字節(jié)的變量int SendBytes; /定義應(yīng)發(fā)送的字節(jié)數(shù)存放變量LPTSTR TxdBuff; /定義將發(fā)送的字符串UpdateData(TRUE); /將當(dāng)前編輯框中輸入的字符更新到m_SenTxt變量中SendBytes=m_SenTxt.GetLength(); /得到m_SenTxt變量中存放的字符數(shù)TxdBuff=m_SenTxt.GetBuffer(SendBytes); /使發(fā)送字符串指針指向m_SenTxtBOOL OK=WriteFile(hCom,TxdBuff,SendBytes,&BytesWrit

15、ten,NULL); /發(fā)送if(!OK) /發(fā)送失敗ClearCommError(hCom,&BytesWritten,&state); /清除發(fā)送錯誤5. 為接收數(shù)據(jù)創(chuàng)建定時器每隔500ms自動檢測是否有數(shù)據(jù)發(fā)來。如果有數(shù)據(jù)發(fā)來,則讀取、顯示傳來的數(shù)據(jù)。(1)先在ScomDlg.cpp文件中的OnInitDialog()函數(shù)中創(chuàng)建定時器:BOOL CScomDlg:OnInitDialog()./ TODO: Add extra initialization hereSetTimer(1,500,NULL); /創(chuàng)建定時器hCom=CreateFile( "COM

16、1", GENERIC_READ|GENERIC_WRITE, .當(dāng)程序退出時,應(yīng)刪除本定時器:void CScomDlg:OnCancel() / TODO: Add extra cleanup hereKillTimer(1); /刪除定時器CloseHandle(hCom);/最后釋放串口資源.(2) 再創(chuàng)建“定時時間到”消息響應(yīng)函數(shù)。選菜單項View/ClassWizard,選Message Map卡,在Object IDs列表框中選CScomdlg,在Class Name列表框中選CScomdlg,在Messages列表框中選WM_TIMER,點擊“Add Function

17、”、“Edit Code”。于是,在CScomDlg類中添加了OnTimer(UINT nIDEvent)函數(shù),請輸入代碼:void CScomDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultDWORD BytesRead, dwErrorFlags; /定義存放實際接收到多少字節(jié)的變量BYTE RxdBuff51; /定義存放接收到的字符的數(shù)組COMSTAT ComStat;   ClearCommError(hCom,dwErrorFlags,ComStat);   /讀取串行設(shè)備的當(dāng)前狀態(tài),獲取接收緩沖區(qū)中已有的字節(jié)數(shù) BytesRead =min(50,ComStat.cbInQue);  /應(yīng)該讀取的數(shù)據(jù)長度 If(BytesRead) ReadFile(hCom,RxdBuff, BytesRead,&BytesRead,NULL); /試圖接收BytesRead個字符 if(BytesRead>0) /實際收到

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論