項(xiàng)目9_串口通信_(tái)第1頁(yè)
項(xiàng)目9_串口通信_(tái)第2頁(yè)
項(xiàng)目9_串口通信_(tái)第3頁(yè)
項(xiàng)目9_串口通信_(tái)第4頁(yè)
項(xiàng)目9_串口通信_(tái)第5頁(yè)
已閱讀5頁(yè),還剩30頁(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、項(xiàng)目9 串口通信9.1 RS-232接口原理RS232接口是1970年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算生產(chǎn)機(jī)終端廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接 術(shù)標(biāo)準(zhǔn)”該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25個(gè)腳的DB25連接 器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定。DB25的串口一般只用到的管腳只有2(RXD)、3(TXD)、7(GND)這三個(gè)。隨著設(shè)備的不斷改進(jìn),現(xiàn)在DB25針很少看到了,代替它的是DB9的接口,DB9所用到的管腳比DB25有所變化,是2(RXD)、3(TXD)、

2、5(GND)這三個(gè)。被廣泛用于計(jì)算機(jī)的串行接口(COM1、COM2等)與單片機(jī)或其它終端之間的近地連接。因此現(xiàn)在都把RS232接口叫做DB9。該標(biāo)準(zhǔn)在數(shù)據(jù)傳輸速率20Kbps時(shí),最長(zhǎng)的通信距離為15米。由于RS232接口標(biāo)準(zhǔn)出現(xiàn)較早,難免有不足之處,主要有以下四點(diǎn):1. 接口的信號(hào)電平值較高,易損壞接口電路的芯 片,又因?yàn)榕cTTL電平不兼容故需使用電平轉(zhuǎn)換電路方能與TTL電路連接。2. 傳輸速率較低,在異步傳輸時(shí),波特率為0Kbps; 因此在“南方的老樹(shù)51CPLD開(kāi)發(fā)板”中,綜合程序波特率只能采用19200bps,也是這個(gè)原因。3. 接口使用一根信號(hào)線和一根信號(hào)返回線而構(gòu)成共地的傳輸形式,這

3、種共地傳輸容易產(chǎn)生共模干擾,所以抗噪聲干擾性弱。VS+C1-C1+C1 30PIC STC89C51CY 12MHz 19C2 30P18XTAL1XTAL2R1 1K39 38 37 36 35 34 33 32 9P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7RESETVCCC3 10 29 30 ALEPSEN31EAP2.0/A8 P2.1/A9 P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A1521 22 23 24 25 26 27 28 C

4、4 10 C5 1012VCC 1 P1.02 P1.13 P1.24 P1.35 P1.46 P1.57 P1.68 P1.7P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD101112 13 14 15 16 17 1314871211910DB9-2 DB9-34 56C7 10C6 10 T2OUTT2INR1INR1OUTT1OUTT1INR2INR2OUT34. 傳輸距離有限,最大傳輸距離標(biāo)準(zhǔn)值為50英尺, 實(shí)際上也只能用在50米左右。VS-C2- C2+圖9-1 單片機(jī)RS-232接口805

5、1系列單片機(jī)上有UART(Universal Asynchronous Receiver/Transmitter通用異步接收/發(fā)送)用于串行通信,發(fā)送數(shù)據(jù)時(shí)由TXD(P3.1)端送出,接收數(shù)據(jù)時(shí)由于RXD(P3.0)端輸入。單片機(jī)內(nèi)部有兩個(gè)數(shù)據(jù)傳輸緩沖器SCON是串行口控制和狀態(tài)寄存器,其格式如下:SBUF,一個(gè)作為發(fā)送,一個(gè)作為接收。UART是可編程的全雙工串行口,短距離單片機(jī)之間通行可以直接互聯(lián),使用接口芯片MAX232可以接成RS-232接口與計(jì)算機(jī)COM口進(jìn)行通行。圖7-1是單片機(jī)常用的RS-232接口電路原路。9.3 單片機(jī)串行口設(shè)置一、串行口通信有關(guān)的SFR1. 串行口控制寄存器S

6、CON(1)SM0,SM1:串行口工作方式控制位具體工作方式見(jiàn)表3-6-1。fOSC為單片機(jī)外接晶體振蕩頻率。表9-1 串行口工作方式控制D7D6D5D4D3D2D1D0SM 0SM 1SM 2RE NTB8RB 8TIRISM0SM1工作方式應(yīng)用波特率00方式0同步移位寄存器fOSC/1201方式110位異步收發(fā)由定時(shí)器控制101方式211位異步收發(fā)fOSC/32或fOSC/6411方式311位異步收發(fā)由定時(shí)器控制(2)SM2:多機(jī)通信控制位。用于工作方式2、3。SM2 = 1時(shí),只有接收到第九位(RB8)為1時(shí),RI才置位;SM2 = 0時(shí),只要接收到數(shù)據(jù)RI就置位。(3)REN:串行口接

7、收允許位。REN = 1,允許串行口接收數(shù)據(jù);REN = 0,禁止串行口接收數(shù)據(jù)。(4) TB8:工作在方式2、3時(shí),為發(fā)送數(shù)據(jù)的第九位,也可以作奇偶校驗(yàn)位。(5) RB8:工作在方式2、3時(shí),為接收數(shù)據(jù)的第九位,在工作方式1時(shí),為接收數(shù)據(jù)的停止位。(6) TI:發(fā)送中斷標(biāo)志位,當(dāng)數(shù)據(jù)向外發(fā)送(SBUF=DATE,數(shù)據(jù)寫(xiě)入SBUF)后,TI 自動(dòng)置位,必須軟件清零。(7)RI:接收中斷標(biāo)志位,當(dāng)數(shù)據(jù)向外發(fā)送(a = SBUF,數(shù)據(jù)從SBUF讀出, a為變量)后,RI 自動(dòng)置位,必須軟件清零。2. 電源控制寄存器PCOND7D6D5D4D3D2D1D0SMODGF1GF0PDIDL這里只用到了P

8、CON的第七位SMOD,它是與串行通信波特率設(shè)置有關(guān),SMOD也叫串行口通信波特率的加倍位。當(dāng)SMOD = 1時(shí),工作方式1、3時(shí)的波特率為定時(shí)器1 溢出率/16;工作方式2時(shí)的波特率為fOSC/32。當(dāng)SMOD= 0時(shí),工作方式1、3時(shí)的波特率為定時(shí)器1溢出率/32; 工作方式2時(shí)的波特率為fOSC/64。GF0、GF1:通用標(biāo)志位,PD、IDL:CHMOS器件類(lèi)型的單片機(jī)的低功耗控制位。二、串行口的工作方式1. 方式0方式0為移位寄存器輸入/輸出方式。串行數(shù)據(jù)通過(guò)RXD端輸入輸出,TXD則用于輸出移位同步脈沖。此時(shí)收發(fā)的數(shù)據(jù)為8位,低位在前,且波特率為fOSC/12,數(shù)據(jù)發(fā)送以寫(xiě)入SBUF

9、指令開(kāi)始,8位數(shù)據(jù)輸出結(jié)束后,TI置位。數(shù)據(jù)接收是在REN = 1、RI = 0同時(shí)滿足時(shí)開(kāi)始,接收的數(shù)據(jù)從SBUF讀出結(jié)束后,RI置位。移位寄存器工作方式對(duì)節(jié)省硬件資源很有用,串行口外接移位寄存器芯片74HC164就可以構(gòu)成輸出接口,接74HC165可以工程輸入接口,在如果晶體振蕩頻率為12MHz,8為數(shù)據(jù)通過(guò)串行口傳輸大約10微秒就可以完成。移位寄存器工作方的另一種用法是直接構(gòu)成兩個(gè)單片機(jī)的數(shù)據(jù)通信,晶體振蕩頻率為12MHz,數(shù)據(jù)傳輸波特率為1M,只是通信距離較短。2. 方式1方式1為10位異步通信方式,由1位起始位(第0位, 默認(rèn)為0)、8位數(shù)據(jù)位和1位停止位(第9位,由TB8決 定,默

10、認(rèn)為1)組成,起始位和停止位在發(fā)送數(shù)據(jù)(數(shù)據(jù)寫(xiě)入SBUF)時(shí)自動(dòng)插入。任何1條寫(xiě)入SBUF指令都啟動(dòng)1次發(fā)送中斷,發(fā)送的前提是寄存器SCON中的TI = 0,發(fā)送結(jié)束后TI置位。方式1接收數(shù)據(jù)的前提是REN = 1,同時(shí)RI = 0且SM2=0或接收停止位為1。如果接收有效,將接收數(shù)據(jù)裝入SBUF和寄存器SCON的RB8(接收數(shù)據(jù)的第9位),否則舍棄接收結(jié)果。方式1的波特率由一下公式計(jì)算得到,即: 方式1波特率= 2SMOD(定時(shí)器溢出率)/32其中SMOD是PCON的第7位,定時(shí)器的溢出率為定時(shí)定時(shí)時(shí)間的倒數(shù),定時(shí)器工作模式0、1和2都可以使用。3. 方式2和方式3這兩種方式都是11位異步接

11、收/發(fā)送方式,操作方式完全一樣,只是波特率有所區(qū)別,方式3波特率同方式1, 方式1波特率為:方式2波特率 = 2SMOD(定時(shí)器溢出率)/64方式2和方式3的發(fā)送起始于數(shù)據(jù)寫(xiě)入SBUF指令,當(dāng)?shù)?位數(shù)據(jù)TB8輸出之后,TI置位。方式2和方式3接收數(shù)據(jù)的前提也是REN = 1,在第9位數(shù)據(jù)接收到之后,如果下列提條件滿足,即RI = 0且SM2= 0或接收到的第9位數(shù)據(jù)為1,則將已經(jīng)接受的數(shù)據(jù)裝SBUF和RB8,并置位RI,如果條件不滿足,則接收無(wú)效。三、串行口通信初始化1. 串行口的波特率與定時(shí)器設(shè)置單片機(jī)的晶體振蕩頻率比較固定,常用的有6MHz、12 MHz、11.0592 MHz,單片機(jī)串行

12、口用于和計(jì)算機(jī)通信。選用的波特率也相對(duì)固定,可以通過(guò)查表獲得相應(yīng)置,表7-2給出了單片機(jī)常用的波特率與定時(shí)器設(shè)置。表7-2單片機(jī)常用的波特率與定時(shí)設(shè)置2. 初始化步驟下面以波特率為9600bps,串口工作方式3,允許發(fā)送/ 接收數(shù)據(jù)的初始化步驟程序舉例:/*/TMOD = 0x20;/第一步,編程TMODTL1 = 0xfd;/第二步,裝載定時(shí)器1的初值TH1 = 0xfd;TR1 = 1;/第三步,啟動(dòng)定時(shí)器1, TR1 = 1SCON = 0xd8;/第四步編程SCON,確定串行口工作方式3/SM2、TB8 = 1,TI、RI = 0PCON = 0x00;/第四步,編程PCON,SMOD

13、 = 0 SBUF = date1;/發(fā)送1字節(jié)數(shù)據(jù)date1,進(jìn)入串行中斷while(TI = 0);/等待發(fā)送,發(fā)送完畢后TI自動(dòng)置位 TI = 0;/ TI軟件清零date2 = SBUF;/接收1字節(jié)數(shù)據(jù)并保存date2,進(jìn)入串行中斷while(RI = 0);/等待接收,接收完畢后RI自動(dòng)置位RI = 0;/RI軟件清零/*/9.4 單片機(jī)與計(jì)算機(jī)之間通信本案例實(shí)現(xiàn)計(jì)算機(jī)鍵盤(pán)輸入的字符通過(guò)計(jì)算機(jī)的COM1向單片機(jī)發(fā)送,單片機(jī)接收后隨即把這個(gè)字符再向計(jì)算機(jī)發(fā)送,并在計(jì)算機(jī)的屏幕上顯示出來(lái)。電路原理見(jiàn)圖3-6-1,計(jì)算機(jī)和單片機(jī)之間通過(guò)串行電纜連接。一、 程序設(shè)計(jì)由于計(jì)算機(jī)作為上位機(jī)控制

14、,因此本案例程序包括計(jì)算機(jī)的發(fā)送/接收程序和單片機(jī)的數(shù)據(jù)接收/發(fā)送程序。上位機(jī)程序采用BASIC編寫(xiě),編寫(xiě)的文件后保存為RS232.BAS。單片機(jī)串口通信采用同樣的參數(shù)設(shè)置。1. 上位機(jī)程序/*/10 OPEN”COM1:9600,N,8,1,CS,DS,CD”AS#120 IF LOC(1)0 THEN GOSUB 100030 A$ = INKEY$:IF A$”THEN GOSUB 200040 GOTO 201000 A$ = INPUT$(LOC(1),#1)1010 PRINT A$;1020 RETURN2000 PRINT #1,A$2010 RETURN/*/2. 單片機(jī)通信

15、程序#includevoid main(void)unsigned char date; TMOD = 0x20;TL0 = 0xfd;TL1 = 0xfd; SCON = 0xd8;PCON = 0x00; TR1 = 1;While(1)while(RI = 0);/等待接收RI = 0;date = SBUF;/接收數(shù)據(jù)保存在date中 SBUF = date;/再保存在date的數(shù)據(jù)向外發(fā)送while(TI = 0);/等待發(fā)送TI = 0;3. 程序說(shuō)明(1) 計(jì)算機(jī)串行口發(fā)送/接收數(shù)據(jù)的波特率為9600,1 位停止位,無(wú)奇偶校驗(yàn)。其設(shè)置參考有關(guān)書(shū)籍。(2) 也可以采用VB編寫(xiě),也可

16、以直接使用51單片機(jī)的串行通信調(diào)試助手ComAssistant等小軟件。9.5 單片機(jī)串口中斷應(yīng)用使用8051串行口實(shí)現(xiàn)中斷驅(qū)動(dòng)串行I/O。中斷程序使用8字節(jié)的環(huán)形緩沖器處理發(fā)送中斷和接收中斷。#include #include#define XTAL11059200/CPU振蕩器頻率#define baudrate9600/9600通信波特率#define OLEN8/串行發(fā)送緩沖區(qū)的大小unsigned char ostart;/發(fā)送緩沖區(qū)起始索引unsigned char oend;/發(fā)送緩沖區(qū)結(jié)束索引char idata outbufOLEN;/發(fā)送緩沖區(qū)的存儲(chǔ)#define ILEN

17、8/串行接收緩沖區(qū)的大小unsigned char istart;/接收緩沖區(qū)起始索引unsigned char iend;/接收緩沖區(qū)結(jié)束索引char idata inbufILEN;/接收緩沖區(qū)的存儲(chǔ)bit sendfull;/標(biāo)志:標(biāo)識(shí)發(fā)送緩沖區(qū)滿bit sendactive;/標(biāo)志:標(biāo)識(shí)發(fā)送器激活/* 串行中斷服務(wù)程序 */static void com_isr(void)interrupt 4char c;/ * 接收數(shù)據(jù)中斷 * / if(RI)c=SBUF;/讀字符RI=0;/清零中斷請(qǐng)求標(biāo)志if(istart+ILEN!=iend inbufiend+&(ILEN-1=c;字符

18、送入緩沖區(qū)/ * 發(fā)送數(shù)據(jù)中斷 * /if(TI!=0) TI=0;/清零中斷請(qǐng)求標(biāo)志if(ostart!=oend) /若字符在緩沖區(qū)SBUF=outbufostart+ &(OLEN-1;/則發(fā)送字符sendfull=0;/清零sendfull標(biāo)志else/若所有字符發(fā)送sendactive=0;/則清零sendactive/ *初始化串行口和UART波特率函數(shù) */ void com_initiaize(void)istart=0;/清空接收緩沖區(qū)iend = 0;ostart=0;/清空發(fā)送緩沖區(qū)iend=0;sendactive=0;/發(fā)送器未激活sendfull=0;/清零send

19、full標(biāo)志/配置定時(shí)器1作為波特率發(fā)生POCN |= 0x80;/0x80=SMOD:設(shè)置波特率加倍TMOD |= 0x20;/置定時(shí)器1為方式2 TH1=(unsigned char)(16L*12L*baudrate);TR1=1;/啟動(dòng)定時(shí)器1SCON=0x50;/串行口方式1,允許串行接收ES=1;/允許串行中斷/* putbuf:寫(xiě)字符到SBUF或發(fā)送緩沖區(qū) */void putbuf(char c)if(!sendactive)/若發(fā)生器未激活sendactive=1;/則直接傳送第一字符到SBUF = 0;/SBUF啟動(dòng)發(fā)生器elseES=0;/在緩沖區(qū)更新期間禁止串行中斷outbufoend+&(OLEN-1)=c; /放字符到發(fā)送緩沖區(qū)if(oend ostart)&(OLEN

溫馨提示

  • 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)論