接口通訊課程設(shè)計
接口通訊課程設(shè)計,接口,通訊,通信,課程設(shè)計
設(shè)計目的及任務(wù):了解PC機串行口的使用。(1) 用RS-232C的零MODEN的連接法連好兩機的連線;(2) 用DEBUG的O命令將一數(shù)發(fā)送到串行口(3F8H/2F8H),然后再另一臺機上用DEBUG的I命令讀入串行口的內(nèi)容。如果發(fā)送的內(nèi)容與接受的內(nèi)容一致,說明兩機已經(jīng)連好線,否則必須檢查連線,直到兩機可通訊為止;(3) 編一程序,將一臺機的鍵盤輸入的鍵值通過RS-232C口傳送到另一臺機,并在CRT上顯示鍵值,實現(xiàn)遠程鍵盤功能;(4) 編一程序,通過RS-232C口進行一臺機到另一臺機的文件復制。(即將一臺機上的文件傳送到另一臺機上)設(shè)計所需設(shè)備及環(huán)境:PC機、RS-232C插座及連線,選擇Win-TC可視化編程環(huán)境設(shè)計概要:1 首先由主函數(shù)輸出初始界面,并提示用戶選擇所需功能。如下:2 本設(shè)計中通過零MODEM來實現(xiàn)數(shù)據(jù)的傳輸。1) 發(fā)送字符串功能由SendString()函數(shù)實現(xiàn):先由鍵盤輸入字符串并以Esc結(jié)尾,由putchar(c)將字符c寫到標準輸出設(shè)備,之后讀取線路狀態(tài)寄存器并測試發(fā)送保持寄存器是否為空,當為空時發(fā)送一個字符到端口。重復以上過程發(fā)送字符串,直到遇到ESC退出發(fā)送;2) 接收字符串功能由void ReceiveString()函數(shù)實現(xiàn),與發(fā)送字符串不同的是, 通過讀取線路狀態(tài)寄存器,當接收數(shù)據(jù)準備好時,從該口讀入數(shù)據(jù)并以#結(jié)束;3) 發(fā)送文件功能由void Sendfile()函數(shù)實現(xiàn),如果按照用戶輸入的文件路徑和文件名,文件能被成功打開,則把文件的內(nèi)容逐一讀出,如果查詢到狀態(tài)寄存器的發(fā)送保持寄存器空”位的值為真,那么就把數(shù)據(jù)發(fā)送到寄存器,從文件中讀出要一直讀到文件的結(jié)尾為止;4) 接收文件功能由void Receivefile()函數(shù)實現(xiàn),首先新建文件,再打開此文件,當查詢到狀態(tài)寄存器的接收數(shù)據(jù)準備好為真,就在文件的當前位置寫入一個字符,最后關(guān)閉文件,和文件句柄handle(由open()函數(shù)產(chǎn)生)。 printf(nn ok! n);串行口的有關(guān)硬件資料9芯接口標準()引腳:,載體檢測;()引腳:,接收數(shù)據(jù);()引腳:,發(fā)送數(shù)據(jù);()引腳:,終端準備好;()引腳:信號地;()引腳:,準備好;()引腳:,請求發(fā)送;()引腳:,清除發(fā)送;()引腳:,響鈴指示。29芯的零的連接方法3線路控制寄存器(端口地址3FBH/2FBH) 其中:奇偶校驗停止位 字長無效驗 奇效驗.5(字長為位時) 6 1 1 偶效驗(字長為6,7,8位時) 1 0 71 1 8 4.可編程波特率發(fā)生器(3F9H,3F8H,或2F9,2F8H)時,向(高八位),(低八位)寫入位數(shù),即可對1.8432hz的時鐘分頻,得到串行口的波特率。公式為:波特率=1846200/(分頻值)輸入頻率1.8432hz波特率分頻器分頻器60000HC0H120000H60H180000H40H200000H3AH240000H30H360000H20H480000H18H720000H10H960000H0CH1920000H03H5.線路狀態(tài)寄存器(3FDH/2FDH)6.中斷識別寄存器(3FAH/2FAH)其中:D2 D1 D0 中斷來源 NONE1 1 0 線路故障1 0 接收數(shù)據(jù)準保好發(fā)送保持寄存器ODEM中斷7.中斷允許寄存器(3F9H/2F9H,且DLAB=0)8.MODEM控制寄存器(3FEH/2FEH)9.MODEM控制寄存器 (3FEH/2FEH )8250內(nèi)部寄存器端口地址及讀寫情況端口地址寄存器名稱讀寫3F8H發(fā)送保持寄存器3F8H接收數(shù)據(jù)寄存器3F8H波特率分頻器3F9H波特率分頻器3F9H中斷允許寄存器3FAH中斷標識寄存器3FBH線路控制寄存器3FHMODEM控制寄存器3FDH線路狀態(tài)控制器3FEHMODEM狀態(tài)寄存器10.以上四.3四.4介紹的寄存器中D7D0的各位均為1有效,0無效功能實現(xiàn):數(shù)據(jù)收發(fā)時,一臺機選擇發(fā)送信息,另一臺選擇接收信息。雙方用鍵盤進行輸入,就可以發(fā)送、接收信息。文件收發(fā)時 一臺機選擇發(fā)送文件, 另一臺選擇接收文件。發(fā)送方輸入要發(fā)送的文件的路徑就可以傳送文件,系統(tǒng)將提示接收方輸入所要保存的文件的名稱。 程序代碼:#include /* creat函數(shù)的參數(shù)S_IREAD S_IWRITE要用到 */#include /* for creat (file) function */#include /* 文件指針結(jié)構(gòu)體FILE的頭文件 | putchar() */#include /* for outportb function */void Init(void)/*以下為8250的初始化 */ outportb(0x3fb,0x80); /* 波特率的最高位置1 */ outportb(0x3f8,0x0c); /* 除數(shù)低位 */ outportb(0x3f9,0x00); /* 除數(shù)高位 */ outportb(0x3fb,0x0f); /* 設(shè)置幀格式 奇校驗,2停止位, 8字長*/ outportb(0x3f9,0x0f); /* 允許所有中斷 */ outportb(0x3fc,0x0b); /* 由于使用零modem連接使其恒有效 */void SendChar() unsigned char status; int i,c; int flag=1; printf(Input a character:(press ESC to back)n); while(flag) c=getch(); putchar(c); /* 將字符顯示輸出 */ if (c=27) flag=0; /* 按esc退出輸入 */ do status=inportb(0x3fd); /* 讀取通信線路狀態(tài)寄存器 */ status=status & 0x20; /* 測試發(fā)送保持寄存器是否為空(第5位) */ while (status=0); /*直到發(fā)送狀態(tài)寄存器為空*/ outportb(0x3f8,c);/* 發(fā)送字符到端口 */ printf(tsend out successful!n); void ReceiveChar() int i; char ch=0; unsigned char status; printf(Receiving .n); while(ch!=#) do status=inportb(0x3fd); /* 讀取線路狀態(tài)寄存器 */ status=status & 0x01; while (status=0); /* 直到接收數(shù)據(jù)就緒*/ ch=inportb(0x3f8); /* 從該口讀入數(shù)據(jù) */ putchar(ch); void Sendfile() FILE *in; char ch; char infile255; unsigned char status; int flag=1,i; printf(Enter the infile name :n); scanf(%s,infile); getchar(); if(in=fopen(infile,rb)=NULL)/*無法讀取文件*/ printf(cannot open infilen); exit(0); printf(Sending file.nn); while(flag) ch=fgetc(in); putchar(ch); if(ch=EOF) /* 讀到文件的結(jié)束符時退出 */ fclose(in); /*關(guān)閉文件*/ flag=0; /*標志位改為零*/ do status=inportb(0x3fd); /*線路狀態(tài)寄存器*/ status=status & 0x20; /* 測試發(fā)送保持寄存器是否為空 */ while (status=0); outportb(0x3f8,ch);/* 發(fā)送字符到端口*/ printf(nncompleten);void Receivefile() FILE *fp; int handle; int flag=1; char c; int i; unsigned char status; char fname255; /* 本地接收文件的名字 */ printf(please enter the file name!n); scanf(%s,fname); getchar(); handle=creat(fname, S_IREAD|S_IWRITE); /* 創(chuàng)建一個文件fname */ if(handle=-1) /*創(chuàng)建失敗*/ printf(Creat file Faild.n); exit(0); if(fp=fopen(fname,wb)=NULL) /*打開文件失敗*/ printf(Open file Faild.n); exit(0); printf(Receiving file.nn); while(flag) do status=inportb(0x3fd);/* 查詢是否接受到數(shù)據(jù) */ status=status & 0x01; while (status=0); c=inportb(0x3f8); /* 從該口讀入數(shù)據(jù) */ if(c!=EOF) /*不是最末*/ printf(%c,c); fputc(c,fp); /* 在文件的當前位置寫入一個字符*/ continue; fclose(fp); /* 關(guān)閉文件 */ flag=0; close(handle); /* 要關(guān)閉的文件句柄handle?創(chuàng)建文件時產(chǎn)生*/ printf(nn ok! n);void main() char ch; Init(); while(ch!=5) clrscr(); printf(*n); printf( The connection between two PC n); printf(*n); printf(n); printf(*n); printf( PRODUCER n); printf( panxinwei 3106006671 n); printf( AND n); printf( pengbo 3106006672 n); printf(*n); printf(n); printf(*n); printf(* 1.Send Char *n); printf(* 2.Send File *n); printf(* 3.Receive Char *n); printf(* 4.Receive File *n); printf(* 5.Exit *n); printf(*n); printf( n); printf(Please enter your choice :); ch=getchar(); getchar(); switch(ch) case1:SendChar(); break; case2:Sendfile(); break; case3:ReceiveChar(); break; case4:Receivefile(); break; case5: break; default: printf(Error!n); 第9頁
收藏
編號:2680878
類型:共享資源
大?。?span id="gdqjbnf" class="font-tahoma">114.05KB
格式:RAR
上傳時間:2019-11-28
15
積分
- 關(guān) 鍵 詞:
-
接口
通訊
通信
課程設(shè)計
- 資源描述:
-
接口通訊課程設(shè)計,接口,通訊,通信,課程設(shè)計
展開閱讀全文
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。