微機(jī)原理課程設(shè)計(jì)報(bào)告書-兩臺(tái)PC機(jī)之間進(jìn)行串口通信_(tái)第1頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告書-兩臺(tái)PC機(jī)之間進(jìn)行串口通信_(tái)第2頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告書-兩臺(tái)PC機(jī)之間進(jìn)行串口通信_(tái)第3頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告書-兩臺(tái)PC機(jī)之間進(jìn)行串口通信_(tái)第4頁(yè)
微機(jī)原理課程設(shè)計(jì)報(bào)告書-兩臺(tái)PC機(jī)之間進(jìn)行串口通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、課程設(shè)計(jì)題目?jī)膳_(tái)pc機(jī)之間進(jìn)行串口通信。二、課程設(shè)計(jì)目的與要求通過(guò)本次實(shí)訓(xùn),加強(qiáng)學(xué)生們對(duì)微機(jī)原理與接口技術(shù)這門課程的理解和掌握,同時(shí) 了解并掌握8250串口芯片和中斷管理芯片8259的初始化編程和使用。1. 目的:倆個(gè)pc機(jī)通過(guò)串行口互聯(lián),實(shí)現(xiàn)文件的無(wú)差錯(cuò)傳輸。2. 基本要求:(1) pc機(jī)使用8250串口芯片。中斷管理芯片使用8259(2) 要求用c語(yǔ)言或匯編語(yǔ)言完成程序的設(shè)計(jì)。(3) 程序必須用中斷方式來(lái)實(shí)現(xiàn)。(4) 在u盤上自備turbo c2.0編譯壞境。因?yàn)闄C(jī)房的計(jì)算機(jī)(c和d盤要 還原)安裝有還原卡。(5) 自購(gòu)db9p公插頭二個(gè),2, 3腳交叉連線,5腳直接連接,焊接。電纜長(zhǎng)

2、 度一米。(6) 不準(zhǔn)帯電拔插串行口插頭。三、實(shí)現(xiàn)方法1. 8250的初始化依據(jù)8250 (16550)的寄存器如下表所示:pc機(jī)支持1-4個(gè)串行口,即com1-com4,其基地址在bios數(shù)據(jù)區(qū)0000: 0400-0000: 0406中描 述,對(duì)應(yīng)地址分別為3f8/2f8/3e8/2e8, co ml及com3使用pc機(jī)中斷4, com2及com4使用中 斷3。在上表中,8250共有12個(gè)寄存器,使用了8個(gè)地址,其中部分寄存器共用一個(gè)地址,由dla b=0/l來(lái)區(qū)分,在dlabj用于設(shè)定通訊所需的波特率。常用的波特率參數(shù)見(jiàn)下表:以下幾個(gè)表格為8250的寄存器的功能描述:中斷允許寄存器(ie

3、r):bito置1將允許接收到數(shù)據(jù)時(shí)產(chǎn)牛中斷,bitl置1時(shí)允許發(fā)送保持寄存器空時(shí)產(chǎn)牛中斷,bit2 置1將在lsr變化時(shí)產(chǎn)生屮斷,相應(yīng)的bit3置位將在msr變化時(shí)產(chǎn)生屮斷。中斷識(shí)別寄存器(iir):ii r為只讀寄存器,bi t6:7用來(lái)指示fifo的狀態(tài),均為0時(shí)則無(wú)fifo,此時(shí)為8250或16450芯片, 為01時(shí)有fifo但不可以使用,為口時(shí)fifo有效并可以正常工作。bit3用來(lái)指示超時(shí)中斷( 16550/16750)obi t0用來(lái)指示是否有中斷發(fā)生,bitl:2標(biāo)識(shí)具體的中斷類型,這些中斷具有不同的優(yōu)先級(jí)別, 其中l(wèi)sr中斷級(jí)別最高,其次是數(shù)據(jù)就緒中斷,然后是發(fā)送寄存器空中斷

4、,而msr中斷級(jí)別 最低。fifo控制寄存器(fcr):fcr可寫但不可以讀,該寄存器用來(lái)控制16550或16750的fifo寄存器。bito置1將允許發(fā)送/接收的fifo工作,bitl和bit 2置1分別用來(lái)清除接收及發(fā)送fifo。清除接收及發(fā)送fifo并不影響移位寄存器。bitl:2可自行復(fù)位,因此無(wú)需使用軟件對(duì)其清零。bit6:7用來(lái)設(shè)定產(chǎn)生中斷的級(jí) 別,發(fā)送/接收中斷將在發(fā)送/接收到對(duì)應(yīng)字節(jié)數(shù)時(shí)產(chǎn)生。線路控制寄存器(lcr ):lcr用來(lái)設(shè)定通訊所需的一些基本參數(shù)。bit7為1指定波特率因子寄存器冇效,為0則指定發(fā) 送/接收及ier有效。bit6置1會(huì)將發(fā)送端置為0,這將會(huì)使接收端產(chǎn)生

5、一個(gè)“間斷。bit3-5用來(lái)設(shè) 定是否使用奇偶校驗(yàn)以及奇偶校驗(yàn)的類型,bit3=l時(shí)使用校驗(yàn),bit4為0則為奇校驗(yàn),1為偶校驗(yàn), 而bit5則強(qiáng)制校驗(yàn)為1或0,并山bit4決定具體為0或1。bit2用來(lái)設(shè)定停止位的長(zhǎng)度,0表示1位 停止位,為1則根據(jù)數(shù)據(jù)長(zhǎng)度的不同使用1.5-2位停止位。b it0:l用來(lái)設(shè)定數(shù)據(jù)長(zhǎng)度。mode m控制寄存器(mcr ):mcr寄存器可讀可寫,bi t4=l進(jìn)入環(huán)路測(cè)試模式。bit3-0用來(lái)控制對(duì)應(yīng)的管腳。線路狀態(tài)寄存器(lsr):lsr為只讀寄存器,當(dāng)發(fā)牛錯(cuò)誤時(shí)bit7為1, bit6為1時(shí)標(biāo)示發(fā)送保持及發(fā)送移位寄存器均空, bit5為1時(shí)標(biāo)示僅發(fā)送保持寄存

6、器空,此時(shí),可以由軟件發(fā)送下一數(shù)據(jù)。當(dāng)線路狀態(tài)為0時(shí)bi t4 置位為1,幀格式錯(cuò)時(shí)bit3置位為1,奇偶錯(cuò)和超越錯(cuò)分別將bit2及bitl置位為bito置位為1表 示接收數(shù)據(jù)就緒。modem狀態(tài)寄存器(msr):msr寄存器的高4位分別對(duì)應(yīng)m odem的狀態(tài)線,低4位表示modem的狀態(tài)線是否發(fā)生了 變化。以上我們?cè)敿?xì)介紹了 pc機(jī)的串行通訊硬件環(huán)境,以下將分別給出使用查詢及中斷驅(qū)動(dòng)的方法 編寫的串行口驅(qū)動(dòng)程序。這些程序僅使用rxd/txd ,無(wú)需硬件握手信號(hào)。2. 程序源代碼和部分注釋wind h>#include#inelude#math h>win nio. h>#d

7、ef ine#def ine#def ine#d cfincdefine#d efine#de fineser_r br ser_t hr ser_i er ser iir ser_lcrser _mcrser lsr0012/*中斷識(shí)別寄存器iir (讀)*/*接收緩沖寄存器rbr (讀)/*發(fā)送保持寄存器th r (寫)/*屮斷允許寄存器ie r (讀/寫)dl ab二0*/dl ab二0*/dlab二0*/3/*通信線路控制寄存器lcr (讀/寫)4 amodel控制寄存器mcr (讀/寫)*/5 /*通信線路狀態(tài)寄存器lsr/*mo dem狀態(tài)寄存器ms r*/(讀)*/(讀)*/#d

8、efine serj1sr 6 ttdcfinc ser dll 0/*除數(shù)鎖存器(波特率低8位)d ll (讀/寫)lab二1*/#de fine ser_dlh 1/*除數(shù)鎖存器(波特率高8位)dlh (讀/寫)dlab二1*/*8250使用1 . 8432mhz的基準(zhǔn)時(shí)鐘輸入,所以除數(shù)二1843200/(b*16)*/#dc fine ser baud 1200 96 /*波特率為120 0時(shí),波特率因子(除數(shù))為96*/#de fine48*/#de fine 12*/#de fine 6*/#de f ine#defin eser_baud_2400 48 /*波特率為 240 0

9、時(shí),ser_baud_9600 12 /*波特率為 960 0 時(shí),ser_bald_ 19200 6 /*波特率為 192 00 時(shí),波特率因子(除數(shù))波特率因子(除數(shù))波特率因子(除數(shù))com_1 0x3f8 /*com1 口 8250內(nèi)部寄存器基地址*/com_2 0x2f8 /*com2 口 825 0 內(nèi)部寄存器基地址*/*/ ttdcfinc c0m_3 0x3e8 /*c 0m3 口 8250 內(nèi)部寄存器 8250 基地址*/ ttdefin e c0m_4 0x2e8 /*c0m4 口 825 0 內(nèi)部寄存器 8250 基地址*/ #defi ne ser_st 0p_10 /

10、*1 位停止位*/4 /* 2位停止位*/*5位數(shù)據(jù)位*/*6位數(shù)據(jù)位*/2 /* 7位數(shù)據(jù)位*/3 /* 8位數(shù)據(jù)位*/ttdefine ser_stop _2 ttdefine ser bits 50#dcfine#de fine#defi nese r_bits_6 1ser_bits_7ser bi ts 8#define#dc fine#defin e#def ine#de f inedefinettdefine ser_pari ty_none 0 /*無(wú)校驗(yàn)*/parity_even 24div lato4_0n128 0x210x200s er_partty_odd8 /*奇校

11、驗(yàn)*/*偶校驗(yàn)*/*dl ab 二 1*/*中斷屏蔽寄存器*/*中斷控制寄存器*/oxoc /*com1與com3中斷向量編號(hào)*/*c0m2與com4屮斷向量編號(hào)*/serseri mricrser portpicpictnt ttdefine int_ser_port_1 oxob/*函數(shù)聲明*/void interrupt far seria l_isr ();vo id interru pt far ser ial file();ope n_ seri al (int por t_base, in t baud, in t conf igur at ion);clo sc_scrial

12、(int port_b asc);/*全局丟量定義,可在各區(qū)數(shù)間傳遞參數(shù)*/void interrupt far (*01d isr) () ; /* old lsr 保存原來(lái)的串口中斷向量*/ int old_int_mask;/*保存原來(lái)的中斷屏蔽寄存器的值*/int open_p ort ;/*當(dāng)前打開(kāi)的串口編號(hào)*/unsignc d char s8 0 ; int j=0 ;char ch=0 ;int done =0; main ()char pres s;cha r i;c har fname80;char fn80;/*初始化c0m1端口 */open_seri al(com_l

13、,s er_baud_12 00,ser_par 1ty_even|s er_bits_8 ser_stop_1 );pri ntf (com: 1 ;bps : 1200; pari ty: eve n;bi ts:8; stop bit: 1); pri ntf (pr ess any key to b egi n send i ngn);e nableo ;/*開(kāi)中斷*/memse t (s, 0, size of (s) ;/初始化s為零,指針指向swhile (1)printf (se rial commu nicationn );printf (/zl .send ch arnz,

14、);pri ntf (2 acc ept charn “); printf (,z3. send fi len); pri ntf (acc ept filen ); printf(5. exitn); printf ("please sol ect number !n); i=ge tcho ;prin tf ("%cn", i);switch (i)case , 1 ,:prin tf (zzplease enter a c har: n/z); press二g etch();serial wr ite (press);break ;case,2,:seria

15、l_l sr ();bre ak;case ' 3 ':prin tf ("please enter the f ile name t o be sen t:n); sea name);se rial_write _file (fnam e);break ;case ' 4,:prin tf ("please enter the fil e name t o preserve: n); scan );serial _file(fn);break;case ' 5':exit (0);closc_scr ial (com_1) ;/*關(guān)

16、閉串口 com 1*/break ;default:printf (enror! !);break;/*初始化串n*/ope n_serial (i nt port_ba se, int ba ud, int co nf igurati on) _ _op en port 二port base;di sab le() ;/* 關(guān)閉中斷*/outp(p ort_basc +ser_lcr, ser_div_la tci1_on) ;/*dlab二 1*/o utp(port_b ase + ser_dll, baud) ;/*通過(guò)設(shè)置波特率因子來(lái)確定波特率*/out p(port_bas e +

17、 ser dl h, 0);outp (port_base + serlcr , configur at ion) ; /* 通信方式設(shè)定,同時(shí) dlab二0*/ou tp(port_ba se + ser_i er, 1) ;/*允許接收數(shù)據(jù)就緒中斷,關(guān)閉其它中斷*/if (port b ase 二二 com _11 | port b ase二二com 3 )/*保存由口 1、3原來(lái)k勺中斷向量,以便在退岀程序吋恢復(fù)*/01d_i sr 二getvec t (int_ser_p0rt_0);/*為串口設(shè)置新的中斷商量,在發(fā)生中斷時(shí)就會(huì)調(diào)用執(zhí)行用戶所指定的中斷 服務(wù)程序*/setvect (i

18、nt ser po rt 0, seri al_isr);pri ntf (,zn0pe ning com p ort #1/3. n);else/*功能與上面的代碼類似,只是處理的對(duì)象是串口 2、4*/01d_tsr 二getvect (int_ser_port_1);sctv oct (int_se r_port_1, scrial_isr );p rintf (n0 pening com port #2/4 . n);old_i ntjnask二in p(pic_imr ) ;/*讀入中斷屏蔽寄存器的值*/*對(duì)應(yīng)冷為0則允許該中斷,允許3 (串口1中斷)、4 (串口 2中斷)而不影 響其

19、它屮斷的屏蔽狀態(tài)*/o utp(p!c_!m r, (port_b ase=c0m_l ) ? (old_i oxef) : (o ld_int_mas ); enable () ;/*允許中斷*/*關(guān)閉串口*/clos c_scrial (i nt port_ba sc)outp(port_base + ser mcr, 0);outp(port_base + ser _ier, 0) ;/*禁止所有串 口中斷*/outp(ptcmr, old_int_mask ) ;/*恢復(fù)原來(lái)的中斷屏蔽狀態(tài)*/if(port_base = com_1) " "setvect (int

20、_ser_p ort_o, 01d_isr) ;/*恢復(fù)原來(lái)的串口中斷向量*/ pr intf czncl osing com port #1. n “);elsesetvect(int_ser_p0 rt_1, 01d_isr);printf canclosing com port #2. n);/*寫串口*/serial wr ite (char c h)"while(! (inp(open _port + sex20)/*如串口不空閑,則循環(huán)等待*/ disable。;/*當(dāng)上宙條件不等,說(shuō)明串口空閑,退出循環(huán)*/ ou tp(open_po rt + sert hr, ch)

21、; /* 開(kāi)始發(fā)送數(shù)據(jù) */ enable() ;/*開(kāi)中斷*/*寫文件*/ser i a 1 _wr i t e_f i 1 e () ""file *f p;while(! (inp(open_p ort + ser_0)/*如串口不空閑,則循環(huán)等待*/ disable();fp=fopen(fname, "rb");if(fp二二nul l)printf ("failure to open the file! rt);return;wh ile(ch=fg etc(fp) !=eof ()outp (open _port + se r_t

22、i1r, ch); " "fclose (fp); enable ();/*串口中斷服務(wù)程序*/void int errupt far serial_ls r ()char c h;int x二in p(0x3fd);讀岀線路狀態(tài)寄存器的值給變量x int j=l;disabl e ();whx=inp (ox3fd);0x01)=1)ch二inp (ox 3f8) ; /*開(kāi)始接受數(shù)據(jù)*/sj 二ch;prin tf ("%d%cn", j, ch );j+; j=j %50;j=1 ;enable ();outp(pic_i cr, 0x20);main() ;/*寫入0cw2,向825 9發(fā)普通eoi指令*/void int crrupt far scrial_fi lc ()file *p;char ch;int x二i np(0x3fd);int j=l;p

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論