版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 課程名稱(chēng)__接口與通信 _____</p><p> 題目名稱(chēng)___兩機(jī)通訊 _______</p><p> 學(xué)生學(xué)院___計(jì)算機(jī)學(xué)院_________</p><p> 專(zhuān)業(yè)班級(jí)___計(jì)科4班 _</
2、p><p> 學(xué) 號(hào)___3108006589_________</p><p> 2011 年 1 月 12 日</p><p> 一. 課程設(shè)計(jì)的內(nèi)容</p><p> 設(shè)計(jì)一套系統(tǒng),要求能在兩臺(tái)計(jì)算機(jī)之間以中斷方式和查詢(xún)方式實(shí)現(xiàn)串行通信,數(shù)據(jù)可以采用ASCII字符方式和二進(jìn)制方式傳送</p><p
3、><b> 二.相關(guān)技術(shù):</b></p><p> 利用8250可編程異步通信接口實(shí)現(xiàn)兩臺(tái)PC機(jī)的數(shù)據(jù)傳送。</p><p> 用C語(yǔ)言的編程,實(shí)現(xiàn)對(duì)PC機(jī)的8250的寄存器尋址,以及對(duì)其控制字的初始化,實(shí)現(xiàn)發(fā)送字符和文件的功能。對(duì)通信線(xiàn)路控制寄存器(端口地址 3F8H/2F8H)的初始化,實(shí)現(xiàn)控制發(fā)送的方式,對(duì)可編程波特率發(fā)生器( 3F9H,3F8H或
4、者2F9H,2F8H )的設(shè)置可以自由調(diào)節(jié)波特率,調(diào)節(jié)發(fā)送的速率。對(duì)中斷允許寄存器(3F9H/2F9H,且DLAB = 0)的設(shè)置可以用中斷的方式來(lái)控制數(shù)據(jù)的發(fā)送。</p><p> 各個(gè)寄存器的數(shù)據(jù)位所代表的意思如下:</p><p> 通信線(xiàn)路控制寄存器(端口地址 3F8H/2F8H )</p><p> 可編程波特率發(fā)生器( 3F9H,3F8H或者2F9
5、H,2F8H )</p><p> DLAB = 1時(shí),向3F9H/2F9H(高八位),3F8H/2F8H(低八位)寫(xiě)入----16位數(shù),即可對(duì)1.8432Mhz的時(shí)鐘分頻,使得串行口的波特率。</p><p> 公式為:波特率 = 1843200 ÷(分頻值 × 16)</p><p> 輸入頻率1.8432MHz</p>
6、<p> 中斷允許寄存器(3F9H/2F9H,且DLAB = 0)</p><p> MODEM控制寄存器(3FCH/2FCH)</p><p> MODEM狀態(tài)寄存器(3FEH/2FEH)</p><p><b> 連接說(shuō)明:</b></p><p> 芯RS-232C的零MODEM的連接方法如下
7、:</p><p> 引腳1:CD,載體檢測(cè)</p><p> 引腳2:RXD,接受數(shù)據(jù)</p><p> 引腳3:TXD,發(fā)送數(shù)據(jù)</p><p> 引腳4:DTR,終端準(zhǔn)備好</p><p><b> 引腳5:終端準(zhǔn)備好</b></p><p> 引腳6:D
8、SR,MODEM準(zhǔn)備好</p><p> 引腳7:RTS,請(qǐng)求發(fā)送</p><p> 引腳8:CTS,清除發(fā)送</p><p> 引腳9:RI,響鈴指示</p><p><b> 三. 方案設(shè)計(jì)</b></p><p><b> 程序流程圖:</b></p&g
9、t;<p><b> 四. 實(shí)現(xiàn)與測(cè)試</b></p><p> 1、程序的源代碼如下:</p><p> #include <stdio.h></p><p> #include <dos.h></p><p> #include <conio.h></
10、p><p> #include <stdlib.h></p><p> #include <time.h ></p><p> #define IRQ4 0x0c</p><p> void interrupt far Interrupt_Receive(void); /*¶¨Ò
11、29;ÖжϷþÎñ³ÌÐò*/</p><p> void interrupt (*oldIrq4)(void); /*IRQ4ÖжÏÏòÁ¿µØÖ
12、3;*/</p><p><b> FILE *fp;</b></p><p> int flag=1; /*FLAG±êÖ¾·û£¬ÓÃÀ´Åжϵ±Ç°
13、ÎļþÊÇ·ñΪ¿Õ,µÈÓÚ1ÔòΪ¿Õ,0Ϊ·Ç¿Õ*/</p><p> long length;</p>
14、<p> unsigned char stringtemp,temp;</p><p><b> union</b></p><p> { char c[sizeof(long)];</p><p><b> long len;</b></p><p> }filelength
15、;</p><p> void Sendstring() /*·¢ËÍ×Ö·ûº¯Êý*/</p><p><b> { </b></p><p> char send;</p><p&g
16、t; printf("\n\n----------Press 'ESC' to end sending string-------------\n");</p><p> printf("\n please input the characters here:\n\n");</p><p><b> while(1)&
17、lt;/b></p><p><b> {</b></p><p> temp=inportb(0x3fd);/*¼ì²âÏß·״̬¼Ä´æÆ÷*/</p>&
18、lt;p><b> if(kbhit)</b></p><p> send=getch(); /*ÊäÈë×Ö·û·¢ËÍ*/</p><p> if(send=='\r')</p><p>
19、send='\n';</p><p> putchar(send);</p><p> if((temp&0x20)!=0)</p><p><b> {</b></p><p> if(send=='\x1B')</p><p><b>
20、 {</b></p><p> outportb(0x3f8,send);</p><p><b> return;</b></p><p><b> }</b></p><p> outportb(0x3f8,send);</p><p><b&
21、gt; }</b></p><p><b> }</b></p><p><b> }</b></p><p> void Acceptstring() /*½ÓÊÕ×Ö·ûº¯Ê
22、;ý*/</p><p><b> {</b></p><p> char receive;</p><p> printf("The output characters are:\n\n"); /*Êä³ö½ÓÊÕµ&
23、#189;µÄ×Ö·û*/</p><p><b> while(1)</b></p><p><b> {</b></p><p> temp=inportb(0x3fd);/*Ïß·״
24、04;¬¿ØÖƼĴæÆ÷*/</p><p> if((temp&0x01)!=0)</p><p><b> {</b></p><p> receive=inportb(0x3f8);/*½Ó&
25、#202;ÕÊý¾Ý¼Ä´æÆ÷*/</p><p> if(receive=='\x1B')</p><p><b> {</b></p><p> printf("\n\n----------Char
26、acters_Rec end! Press Enter!-----------");</p><p><b> return;</b></p><p><b> }</b></p><p> putchar(receive); /*Êä³ö½Ó
27、202;Õµ½µÄ×Ö·û*/</p><p><b> }</b></p><p><b> }</b></p><p><b> return;</b></p><p><
28、b> }</b></p><p> void senddetect() /*¼ì²â·¢Ë͵ȴýº¯Êý,¼ì²âÊý¾ÝÊ
29、;Ç·ñÓз¢³öÈ¥*/</p><p><b> {</b></p><p><b> do</b></p><p><b> {</b></p><p>
30、 temp=inportb(0x3fd); /*¼ì²âÏß·״̬¼Ä´æÆ÷*/</p><p> temp=temp&0x20;</p><p><b> }</b>
31、</p><p> while(!temp); /*Åжϵ½·Ç¿Õ*/</p><p><b> }</b></p><p> void receivedetect() /*¼
32、36;²â½ÓÊյȴýº¯Êý£¬¼ì²âÊÇ·ñÓпɽÓÊÕµÄÊý&
33、#190;Ý*/</p><p><b> {</b></p><p><b> do</b></p><p><b> {</b></p><p> temp=inportb(0x3fd); /*¼ì²âÏ&
34、#223;·״̬¼Ä´æÆ÷*/</p><p> temp=temp&0x01;</p><p><b> }</b></p><p> while(!temp);</p><p>
35、;<b> }</b></p><p> long file_size(FILE *fpp) /*¼ÆËãÎļþ´óСº¯Êý*/</p><p><b> {</b>
36、;</p><p> long file_len;</p><p> fseek(fpp,0,SEEK_END);</p><p> file_len=ftell(fpp);</p><p> fseek(fpp,0,SEEK_SET);</p><p> return file_len;</p>
37、<p><b> }</b></p><p> void SendFile() /*·¢ËÍÎļþº¯Êý*/</p><p><b> {</b></p><
38、;p><b> int i;</b></p><p> char fname[30];</p><p> printf("Please input The send_file name and Press 'Enter'to send file:");</p><p> scanf("
39、%s",fname);</p><p> if((fp=fopen(fname,"rb"))==NULL) /*ÈôÎļþ·¾¶ÕÒ²»µ½*/</p><p> {
40、 </p><p> printf("\nError,Can't open the file.\n");</p><p><b> getch();</b></p><p><b> return;</b></p><p><
41、;b> } </b></p><p> filelength.len=file_size(fp);/*¼ÆËãÎļþ´óС*/</p><p> printf("\nThe File are %ld bytes.\n",fi
42、lelength.len);</p><p> senddetect(); /*µ÷Ó÷¢Ëͼì²âº¯Êý¼ì²â·¢ËÍ×´Ì&
43、#172;*/</p><p> outportb(0x3f8,'?');/* ÓÃÓÚ¿ªÊ¼ÊäËÍ£¬ÅжÏÊäËÍÊÇ·ñ
44、13;ý³£*/</p><p> for(i=0;i<4;i++) /*·¢ËÍÎļþµÄ´óС*/</p><p><b> {</b></p><p>
45、; senddetect(); /*µ÷Ó÷¢Ë͵ȴý¼ì²âº¯Êý¼ì²â*/</p><p> outportb(0x3f8,filelength.c[i]);
46、</p><p><b> }</b></p><p> receivedetect();</p><p> stringtemp=inportb(0x3f8);</p><p> if(stringtemp!='!') /*
47、ÎÕÊÖÐźÅ*/</p><p><b> {</b></p><p> printf("Error.can't connect\n");</p><p><b> return;</b></p>
48、;<p><b> }</b></p><p> printf("\n The return string : %c",stringtemp);</p><p> printf("\n Now sending! Please wait......");</p><p> for(l
49、ength=0;length<filelength.len;length++) /*µØÖ·Ìøת*/</p><p><b> {</b></p><p> stringtemp=fgetc(fp);</p><p> senddet
50、ect();</p><p> outportb(0x3f8,stringtemp);</p><p> } </p><p> printf("\n Send File Succeed !");</p><p> printf("\nThe Send
51、ed File is %ld Bytes!",length);</p><p> fclose(fp); /*½áÊøÎļþµÄ·¢ËÍ£¬¹Ø±ÕÎļþ*/
52、</p><p><b> }</b></p><p> void interrupt far Interrupt_Receive() /*×Ô¶¨ÒåÖжϷþÎñ³ÌÐ
53、ò*/</p><p><b> { </b></p><p> for(length=0;length<filelength.len;length++)</p><p><b> {</b></p><p> receivedetect();</p><
54、;p> stringtemp=inportb(0x3f8);</p><p> fputc(stringtemp,fp);</p><p><b> }</b></p><p><b> flag=0;</b></p><p> outportb(0x20,0x20);
55、 /*ÖØÖÃ8259 */</p><p><b> }</b></p><p> void Receive_File() /*½ÓÊÕÎļþº¯Ê
56、53;*/</p><p><b> {</b></p><p><b> int j;</b></p><p> char filename[30];</p><p> unsigned char al;</p><p> double rectime;</
57、p><p> receivedetect();</p><p> stringtemp=inportb(0x3f8);</p><p> if(stringtemp=='?') /*Í··ûºÅÊÕµ½£¬
58、91;ªÊ¼½ÓÊÕ*/</p><p> for(j=0;j<4;j++)</p><p><b> {</b></p><p> receivedetect(); /*µ÷ÓÃÊý¾
59、21;½ÓÊÕº¯Êý¼ì²â½ÓÊÕ״̬ÊÇ·ñ¿É½ÓÊÕ*/</p><p> filelength.c
60、[j]=inportb(0x3f8);</p><p><b> } </b></p><p> printf(" Please Enter The Receive_File name:"); /*½ÓÊÕÎļþÃû*/</p>
61、<p> scanf("%s",filename);</p><p> /*remove(filename);*/</p><p> if(!(fp=fopen(filename,"wb")))</p><p> printf(" Can't open output file.\n"
62、;); </p><p> senddetect();</p><p> outportb(0x3f8,'!'); /*×÷ΪÎÕÊÖÐźţ¬
63、03;µÃ÷¿ÉÒÔ·¢¹ýÀ´*/</p><p> printf("\nThe length of Receive_File is %ld Bytes.",filelength.len);</p><p> printf("
64、\nNow receiving! Please wait........");</p><p> oldIrq4 = getvect(IRQ4); /*³õʼ»¯ÖжÏ״̬ÃüÁî*/</p><
65、;p> disable();</p><p> outportb(0x3f9,0x01);</p><p> outportb(0x3fc,0x0b);</p><p> al=inportb(0x21);</p><p> al=al&0xef;</p><p> outportb(0x21
66、,al); </p><p> setvect(IRQ4, Interrupt_Receive);</p><p><b> enable();</b></p><p> while(flag) </p>
67、<p><b> {}</b></p><p> disable();</p><p> setvect(IRQ4, oldIrq4); /*ÖжϽÓÊÕ*/</p><p> outportb(0x3f9,0);</p><
68、;p> al=inportb(0x21); /*¶ÁÈëÏß·״̬*/</p><p> al=al|0x10;</p><p> outportb(0x21,al); /*¶Á³öÏß
69、94;·Êý¾ÝÐÅÏ¢*/</p><p><b> flag=1;</b></p><p><b> enable();</b></p><p> printf("\nEnd of receive!");
70、 </p><p> printf("\nReceived %ld Bytes/S!",length);</p><p> fclose(fp); /*¹Ø±ÕÎļþ*/</p><p><b> }</b></p><
71、;p> void Initial() /*8250³õʼ»¯ÉèÖú¯Êý*/</p><p><b> {</b></p><p> outportb(0x3fb,
72、0x80); /*Öò¨ÌØÂÊ*/</p><p> outportb(0x3f8,0x0c);</p><p> outportb(0x3f9,0x00);</p><p> outportb(0x3fb,0x0f);</p><p&
73、gt; outportb(0x3f9,0x0f); /*ÖжÏÔÊÐí*/</p><p> outportb(0x3fc,0x0f); /*MODEN¿ØÖƼĴæÆ÷*/</
74、p><p><b> }</b></p><p> void PrintfMenu() /*´òÓ¡²Ù×÷²Ëµ¥*/</p><p><b> {</b></p&g
75、t;<p><b> int n;</b></p><p><b> clrscr();</b></p><p> cprintf(" function of the computer interface \n ");&l
76、t;/p><p> printf(" main memu \n");</p><p> printf(" press 1---Characters send \n");</p><p> printf(
77、" press 2---characters receive \n");</p><p> printf(" press 3---File send \n");</p><p> printf("
78、 press 4---File receive \n");</p><p> printf(" press 0---Exit \n");</p><p> printf("
79、 \n");</p><p> printf("Please press the key:0--4: ");</p><p><b> }</b></p><p><b> main()</b><
80、/p><p><b> { </b></p><p> char name;</p><p> int operate;</p><p> Initial(); /* Ö÷º¯Êý */</p
81、><p><b> while(1)</b></p><p><b> { </b></p><p> PrintfMenu();</p><p> scanf("%d",&operate);</p><p> switch(oper
82、ate)</p><p><b> {</b></p><p> case 1: Sendstring();break;</p><p> case 2: Acceptstring();break;</p><p> case 3: SendFile(); break;</p><p>
83、 case 4: Receive_File();break;</p><p> case 0: exit(0); break;</p><p> default: break;</p><p><b> }</b></p><p> getch(); </p><
84、p><b> }</b></p><p><b> }</b></p><p> 2、運(yùn)行主界面如下:</p><p> 接收字符時(shí),只要一臺(tái)PC機(jī)上按“1”發(fā)送,另一臺(tái)上按“2”接收即可 界面如下:</p><p> 接收到字符時(shí),界面如下:</p><p&g
85、t; 發(fā)送文件時(shí),一臺(tái)PC機(jī)上按3,另一臺(tái)按4,然后在發(fā)送機(jī)上輸入要發(fā)送的文件的路徑和文件名,另一臺(tái)上輸入接收文件的文件名,界面如下:</p><p> 如果輸入的文件路徑有錯(cuò)時(shí),會(huì)自動(dòng)通知用戶(hù),界面如下:</p><p><b> 五、分析與總結(jié)</b></p><p> 做這個(gè)課程設(shè)計(jì),使我對(duì)PC機(jī)的硬件中的串行接口8250以及82
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電力系統(tǒng)穩(wěn)態(tài)分析課程設(shè)計(jì)--兩機(jī)五節(jié)點(diǎn)網(wǎng)絡(luò)潮流計(jì)算
- 單片機(jī)課程設(shè)計(jì)--單片機(jī)串行通訊
- 單片機(jī)課程設(shè)計(jì)報(bào)告--雙機(jī)串行通訊
- 電力系統(tǒng)穩(wěn)態(tài)分析課程設(shè)計(jì)---兩機(jī)五節(jié)點(diǎn)網(wǎng)絡(luò)潮流計(jì)算-牛拉法
- 單片機(jī)與pc機(jī)通訊課程設(shè)計(jì)--8251a可編程通訊接口與pc機(jī)通訊
- 通訊系統(tǒng)原理課程設(shè)計(jì)
- java課程設(shè)計(jì)---通訊簿
- 通訊管理系統(tǒng)課程設(shè)計(jì)報(bào)告
- 雙機(jī)并行通訊微機(jī)原理課程設(shè)計(jì)
- 8251串口通訊課程設(shè)計(jì)
- 兩機(jī)無(wú)等待流水車(chē)間調(diào)度問(wèn)題與仿真論文
- 雙機(jī)通訊課程設(shè)計(jì)報(bào)告--雙機(jī)通信的設(shè)計(jì)
- c++課程設(shè)計(jì)學(xué)生通訊管理系統(tǒng)
- c程序課程設(shè)計(jì) ---通訊庫(kù)管理系統(tǒng)
- jsp通訊簿管理系統(tǒng)-課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)---鍵盤(pán)接口課程設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--轉(zhuǎn)速測(cè)量課程設(shè)計(jì)
- 硬件課程設(shè)計(jì)報(bào)告---通訊設(shè)備人機(jī)接口設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)-單片機(jī)課程設(shè)計(jì)---電子時(shí)鐘
- 接口技術(shù)課程設(shè)計(jì)-雙機(jī)串行通訊
評(píng)論
0/150
提交評(píng)論