案例5_串口通信及其應用_第1頁
案例5_串口通信及其應用_第2頁
案例5_串口通信及其應用_第3頁
案例5_串口通信及其應用_第4頁
案例5_串口通信及其應用_第5頁
已閱讀5頁,還剩61頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、案例5-串口通信及其應用2014.11案例5-串口通信及其應用 遠程監控(監測與控制)系統上位機實現:編輯、查詢、統計、報表打印等管理功能;下位機實現: 監測:信號與數據采集等 控制等通信應用案例-多點溫度采集通信應用案例-多點溫度采集案例5-串口通信及其應用通信有線: RS232 、RS485、RS422、 CAN、 USB、以太網實驗室調試:RS232工業上采用差分方式傳輸(RS485、CAN、以太網)無線:低速紅外,高速紅外(IrDA)、藍牙(Bluetooth)、ZigBee 、無線局域網(WLAN)、蜂窩網絡(GSM、CDMA、TD-SCDMA、WCDMA、 CDMA2000RS23

2、2 MAX232:5V MAX3232I:3.3VRS422/RS485 MAX485:5V MAX3485:3.3VCAN A82C250、 TJA1050 、 TJA1040 :5V SN65HVD230:3.3VUSB以太網差分傳輸(RS485/422、CAN、以太網)無線數據傳輸無線數據傳輸無線模塊 433M無線收發模塊 CC1101傳輸距離: 開闊地200m以上2.4G nRF24L01P無線模塊 收發模塊傳輸距離:1000m以上串口轉zigbee 無線模塊 CC2530 傳輸距離: 1.6km MG323 GPRS/GSM模塊IrDA無線紅外-IrDA案例5-串口通信及其應用串行通

3、信標準RS232(RS232電平,通信距離10m)RS422/RS485(差分傳輸,傳輸距離5km,自定義通信機制)CAN(差分傳輸,傳輸距離5km,完善的通信機制)通信方式點對點點對多通信可靠性通信協議 多字節定長不定長校驗方式 和校驗 CRC校驗RS232通信接口通信接口臺式機:含RS232串口(COM1:9 Pin)筆記本:基本沒有RS232,可通過USB轉串口線實現DB9公頭DB9母頭RS232串口引腳RS232串口引腳功能腳位(Pin)簡寫功 能1CD載波偵測(Carrier Detect)2RXD接收字符(Receive)3TXD傳送字符(Transmit)4DTR數據端備妥(Da

4、ta Terminal Ready)5GND地線(Ground)6DSR數據備妥(Data Set Ready)7RTS要求傳送(Request To Send)8CTS清除以傳送(C1ear To Send)9RI響鈴偵測(Ring Indicator)三線制:交叉線PC機串口地址標準串口地址串口號串口地址中斷號COM13F82COM22F81COM33E84COM42E8380518051串口串口AT89S51/52有一個可編程的全雙工串口。可實現數據的異步收發:TXD端發送數據RXD端接收數據雙工:即能發送又能接收 全雙工:即能發送又能接收,且收發可同時進行 半雙工:即能發送又能接收,但

5、收發不能同時進行單工:只能發或只能收RS232、RS422是全雙工RS485、CAN是半雙工串口通信格式-異步TTL、CMOS電平異步通信格式(通過一根信號線實現數據傳輸)串口線無數據時,保持高電平(1)START BIT :起始位(0),發送基準信號DATA WORD :發送數據位(8位),低位先發PARITY BIT :奇偶校驗位(1位)STOP BIT :停止位(12位高電平)如圖發送數據為:11001011B 即0 xCB波特率(bps:bit per second):每位發送的時間相等:這與通信波特率有關提高傳輸距離措施-RS232電平傳輸TTL、CMOS電平傳輸距離1m,超出1m容

6、易受干擾。可提高傳輸電壓或差分方式提高抗干擾能力,有效提高傳輸距離。RS232電平:提高傳輸電壓,在波特率為9600bps時,有效傳輸距離為10m左右。Ch1:CMOS電平 Ch2:RS232電平RS232電平定義0電平: +3V+15V1電平:-3V-15VCMOS電平定義0電平: 0V1電平:5V問題:如圖所發數據?0011 0101B 0 x35波特率約為多少?RS232邏輯電平的定義0電平: +3V+15V1電平:-3V-15V TTL、CMOSRS232電平轉換TTL、CMOSRS232電平轉換電路RS232_RXDRS232_TXDTTL_CMOS_RXDTTL_CMOS_TXD提

7、高傳輸距離措施-差分傳輸將TTL、CMOS電平轉成雙路差分信號,通過雙絞線傳輸,有效抑制共模干擾信號(提高傳輸距離)采用專用芯片實現電平轉換。RS422、RS485、CAN都是采用該方式傳輸;在波特率為9600bps時,有效傳輸距離為5kmRS485/RS422接口電路MAX485驅動芯片引腳 DI:接收 RO:發送 RE#:接收使能 DE: 發送使能 A:差分同相 B:差分反相RE#、DE接在一起后接3V3:表示固定發送RE#、DE接RS485_C,可控發送接收 RS485_C=0:接收 RS485_C=1:發送CAN接口電路SJA1000T:CAN接口芯片,實現并行數據與CAN串行數據的互

8、轉;A82C250 :CAN電平轉換芯片,實現TTL電平與差分電平互換A82C250、 TJA1050 、 TJA1040 :5V SN65HVD230:3.3V若處理器內含CAN接口功能,則可省略SJA1000T差分保護電路由于差分傳輸距離長,容易受雷電的影響,造成電平轉換芯片、甚至CPU損壞,因此現場應用時要有一定的硬件保護措施電壓保護:TVS瞬態保護二極管SMBJ65CA(6.5V)電流保護:自恢復保險絲匹配電阻:在差分的最后一個終端信號間加一120歐姆的電阻,以解決串擾。RS485差分保護電路-光隔離RS485差分保護電路-光隔離差分保護電路-光隔離B0505S-1W:DC-DC模塊D

9、C-DC電源電路信號與電源全隔離同步通信同步(synchronous):多一路同步時鐘信號,傳輸速率高異步(asynchronous)8051串口 對應有兩個緩沖器SBUF。(共用一個地址)串口數據接收b=SBUF;/取串口數據串口數據發送SBUF=a;/開始發送8051 串口發送SBUF=a;/串口發送開始,發送完成需要一段時間 以9600bps為例,1位數據的發送時間為1/9600秒=0.104ms,若按上圖的11位格式發送完成一字節需11.5ms左右,因此發送后必須等待11.5ms以上才能執行下一次發送,否則會丟失數據;等待發送完成方法:可采用delay(N);方式延時,但此種方式對于N

10、的確定較困難,且不同的波特率,N的值又不一樣;為此8051單片機引入了TI(發送完成標志),當發送完成后硬件自動使TI=1,這樣只要等到TI標志即可認為發送完成。8051 串口發送與接收-查詢方式串口發送SBUF=0 x35;while(TI=0);/等待發送完成TI=0;/清發送標志SBUF=0 x35;while(TI=0);/等待發送完成TI=0; /清發送標志TI:transfer interrupt發送結束標志串口接收while(RI=0);/等待接收完成RI=0;/清接收標志b=SBUF;/接收數據RI:receive interrupt接收結束標志8051 串口發送與接收-中斷方

11、式8051串口發送與接收也可采用中斷方式當串口接收完成或發送完成后,硬件自動產生中斷標志(RI=1或TI=1) 此時若中斷允許(ES=1且EA=1),程序會立即停止當前主程序,自動跳轉到中斷號為n=4的中斷入口地址(8n+3=0 x0023)處執行中斷服務程序,因為進入該中斷有兩種可能(TI=1或RI=1),因此不能自動對中斷標志清零(需判斷是TI=1還是RI=1引起的中斷); 此時若中斷不允許(ES=0或EA=0),則不執行中斷服務程序。8051 串口發送與接收-中斷方式8051 串口編程-查詢方式 【例1】如圖所示上位機發送數據a,下位機接收后回a+1/串口初始化函數void Sbuf_I

12、nit(void) void main(void)unsigned char a; Sbuf_Init(); /串口初始化while(1)/串口數據接收while(RI=0); /等待接收完成RI=0; /清接收標志a=SBUF; /接收數據/串口數據發送SBUF=a+1; /串口發送while(TI=0); /等待發送完成TI=0; /清發送標志/KbScan();/LedDisplay();查詢方式存在問題:下位機不知上位機何時發串口數據,若上位機一直不發,則之后的鍵盤掃描、數碼顯示程序無法執行。因此下位機應采用中斷方式接收。8051 串口編程-中斷方式 【例1】如圖所示上位機發送數據a,

13、下位機接收后回a+1/中斷服務程序void UART_ISR(void) interrupt 4 unsigned char a;if(RI)/接收產生的中斷RI=0;/清接收標志a=SBUF; /接收數據/串口數據發送SBUF=a+1; /串口發送while(TI=0); /等待發送完成TI=0; /清發送標志 void main(void) Sbuf_Init(); /串口初始化while(1)/KbScan();/LedDisplay();8051 串口編程-中斷方式 【例1】如圖所示上位機發送數據a,下位機接收后回a+1在串口中斷內采用查詢方式發送,按9600bps算,需等待1ms左右

14、才能發送完成,占用中斷時間較長,可將串口發送部分移到主程序執行。/中斷服務程序unsigned char Rxd_Data;/串口接收數據unsigned char Rxd_Over;/串口接收完成標志void UART_ISR(void) interrupt 4 if(RI)/接收產生的中斷RI=0;/清接收標志Rxd_Data=SBUF; /接收數據Rxd_Over=1;/置Rxd_Over標志 void main(void) Sbuf_Init(); /串口初始化while(1)if(Rxd_Over) /若接收完成/串口數據發送SBUF=a+1; /串口發送while(TI=0); /

15、等待發送完成TI=0;/清發送標志Rxd_Over=0; /清Rxd_Over標志/KbScan();/LedDisplay();8051 串口編程-初始化串口初始化 串口工作方式 SCON 波特率設置 TMOD TH1、TL1 ES、EA TR1/串口初始化函數void Sbuf_Init(void) SCON=; /串口工作方式/波特率設置 TMOD=;/T1工作方式 TH1=0 xfd; /T1計數初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 8051 串口編程-初始化SM0、SM1:方式設置位 方式0:移位寄存器輸入輸出方式。數據通過RXD輸

16、入出,TXD輸出同步脈沖CP。該方式下,收發數據為8位,低位在前。波特率固定為fosc/12 方式1、方式3:波特率可設置,所不同是10位或11位(1位起始位+8位或9位數據位+1位停止位) 方式2、方式3:都是11位格式,但方式2波特率固定,方式3波特率可變。 波特率分析見下SM0SM1方式說 明波特率(bps)000同步移位寄存器fosc1201110位異步收發Baud=2SMOD(T1溢出率/32)10211位異步收發Baud=2SMODfosc6411311位異步收發Baud=2SMOD(T1溢出率/32)8051 串口編程-初始化SM2:多機方式控制位SM2=0:點對點SM2=1:點

17、對多REN(Receive Enable):串行接收允許控制位TB8(Transmit Bit 8):在方式2、3中,將被發送數據的第9位(奇偶校驗位等);RB8(Receive Bit 8) :接收數據第9位 在方式0中,該位不起作用; 在方式1中該位為接收數據的停止位; 在方式2、3中為接收數據的第9位;TI、RI發送/接收結束標志位,中斷內需手工清零。8051 串口編程-初始化SCON定義示例【例1】定義8051串口為10位波特率可設置的點對點方式 SCON=0 x50;/0101*00B【例2】定義8051串口為11位波特率可設置的點對點方式 SCON=0 xd0;/1101*00BS

18、M0SM1方式說 明波特率(bps)000同步移位寄存器fosc1201110位異步收發Baud=2SMOD(T1溢出率/32)10211位異步收發Baud=2SMODfosc6411311位異步收發Baud=2SMOD(T1溢出率/32)8051 串口編程-初始化波特率設置典型波特率 1200bps、2400bps、4800bps、9600bps、19200bps、57600bps、115200bps常用波特率 9600bps、19200bps、115200bps【例1】波特率位9600bps、115200bps,傳輸一位所需時間?傳輸一字節(10位)需時間? 9600bps : 0.104

19、ms/位,1字節約1.04ms 115200bps: 8.68us/位, 1字節約86.8us【例2】若有1張1.44M字節的軟盤,采用9600bps按10位方式進行傳輸,傳輸完成共需多少時間? t1=1.44*1024*1024*10/9600秒=1570秒=26分鐘 若采用115200bps t2= 1.44*1024*1024*10/115200秒=130秒8051 串口編程-初始化特特率設置8051單片機串口方式1、3為波特率可設置,計算公式為Baud=2SMOD(T1溢出率/32) / T1溢出率=1/ T1定時時間SM0SM1方式說 明波特率(bps)000同步移位寄存器fosc1

20、201110位異步收發Baud=2SMOD(T1溢出率/32)10211位異步收發Baud=2SMODfosc6411311位異步收發Baud=2SMOD(T1溢出率/32)foscnTTbaudSMODSMOD12*321*21*321*2321*2SMOD定時時間溢出率nfoscnfoscbaudSMODSMOD*384*212*32*2nfoscbaudSMOD*384:0 時nfoscbaudSMOD*192:1 時8051 串口編程-初始化特特率設置8051單片機串口方式1、3為波特率可設置,計算公式為nfoscbaudSMOD*384:0 時nfoscbaudSMOD*192:1

21、時n:定時器1計數次數以fosc=11.0592MHz為例,要實現9600bps的波特率,n=?n=fosc/384/9600=11059200/384/9600=3(整數)因此fosc=11.0592Mhz晶振的存在是合理的。8051 串口編程-初始化/串口初始化函數void Sbuf_Init(void) SCON=0 x50; /10位方式/波特率設置 TMOD=(TMOD&0 x0f)|0 x20;/T1方式2 TH1=0 xfd; /T1計數初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 注意:T1方式2具有將TH1的8位計數初值自動

22、載入到TL1中功能;該自動載入是在溢出時由硬件自動完成的;T1必須要啟動T1中斷無需允許,這樣溢出時就不進入Timer1_ISR()8051 串口編程-初始化特特率設置8051單片機串口方式1、3為波特率可設置,計算公式為nfoscbaudSMOD*384:0 時nfoscbaudSMOD*192:1 時以fosc=11.0592MHz為例,能否實現19200bps的波特率?n=fosc/384/19200=11059200/384/19200=1.5(小數)/不能因此8051單片機提供了PCON(電源控制寄存器),其SMOD為波特率倍增控制位。注意:PCON不能位尋址。8051 串口編程-串

23、口初始化/fosc=11.0592MHz,9600bps/串口初始化函數9600bpsvoid Sbuf_Init(void) SCON=0 x50; /10位方式/波特率設置PCON=0 x00; /波特率不倍增 TMOD=(TMOD&0 x0f)|0 x20;/T1方式2 TH1=0 xfd; /T1計數初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 /fosc=11.0592MHz,19200bps/串口初始化函數19200bpsvoid Sbuf_Init(void) SCON=0 x50; /10位方式/波特率設置PCON=0 x80

24、; /波特率倍增 TMOD=(TMOD&0 x0f)|0 x20;/T1方式2 TH1=0 xfd; /T1計數初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 8051 串口編程-波特率計算/【問題】若8051單片機fosc=11.0592MHz,則其能實現的波特率有哪些?采用C語言編程實現。#include stdio.hvoid main(void) float baud;float fosc=11059200;int i;for(i=0;i8);uchCRCHi =crcvalueuIndex&0 xff;return (uchC

25、RCHi8 | uchCRCLo);void main(void)unsigned char Rxd_buf8=0 x01,0 x03,0 x02,0 x00,0 x00,0 x00,0 x00,0 x00;unsigned short int crc_value;crc_value=CRC16_S(Rxd_buf,6);/對Rxd_buf的前6字節求CRC16printf(%xt%xn,crc_value/256,crc_value%256);查表法CRC16校驗CRC校驗實現方法查表法(浪費空間)即時計算法(浪費時間)#include stdio.h/CRC16:即時計算法unsigned

26、 int CRC16_C(unsigned char *buf,unsigned char length)unsigned int crc_result=0 xffff;unsigned char i;while(length -)crc_result=*(buf+);for(i=0;i1)0 xa001;elsecrc_result=crc_result1;return (crc_result);void main(void)unsigned char Rxd_buf8=0 x01,0 x03,0 x02,0 x00,0 x00,0 x00,0 x00,0 x00;unsigned shor

27、t int crc_value;crc_value=CRC16_C(Rxd_buf,6);/對Rxd_buf的前6字節求CRC16printf(%xt%xn,crc_value/256,crc_value%256);即時計算法類ModBus通信協議-定長8字節CRC16通信#define MODBUS_ADDR 0 x01#define MODBUS_RD 0 x03#define MODBUS_WDATA1 0 x02unsigned char RxD_buf8;unsigned char RX_OVER;void UART_ISR(void) interrupt 4 static unsi

28、gned char count=0;static unsigned char pre_data=0;static unsigned char mid_data=0;static unsigned char now_data=0;/if(RI)now_data=SBUF;if(pre_data=MODBUS_ADDR & mid_data=MODBUS_RD & now_data=MODBUS_WDATA1)RxD_buf0 = pre_data;RxD_buf1 = mid_data;RxD_buf2 = now_data;count=3;elseRxD_bufcount =

29、now_data;count+;if(count=8)count=0;RX_OVER=1;pre_data = mid_data;mid_data = now_data; RI=0; 類ModBus通信協議-定長8字節CRC16通信void main(void) unsigned short int crc_value;Sbuf_Init(); /串口初始化while(1)if(RX_OVER)crc_value=CRC16_C(RxD_buf,6);if(RxD_buf6=crc_value%256&RxD_buf7=crc_value/256)/CRC16校驗成功 RX_OVER=

30、0;通信調試方法-通信故障排查1、串口線連接問題沒連接計算機串口線壞用一根導線將DB9的Pin2與Pin3短接,采用Scomm32串口調試工具發送數據,看是否有接收2、單片機硬件問題用示波器連接單片的TXD引腳,程序發送數據,看是否有CMOS、RS232波形,從而判斷是否為硬件故障。3、軟件問題串口通信方式串口通信方式 串口通信方式串口通信方式點對點點對點 PCPC機與機與MCUMCU(PCPC與智能儀表間的通信)與智能儀表間的通信) MCUMCU與與MCUMCU點對多:多機通信點對多:多機通信串口通信模式-單字節發送 單字節通信,上位機主動 上位機程序 串口通信工具:scomm32 自己編程

31、: 控件實現(VB) API函數實現(VC) 下位機程序 接收:中斷方式 發送:查詢方式PC機串口通信實現 兩種方式實現控件MSCOMM32.OCX應用程序接口函數:API(OpenFile()PC機串口通信(MSCOMM32.OCX)首先為工程添加MSCOMM32.ocx等控件添加如下代碼:包括串口初始化,發送、接收等操作Private Sub Form_Load() If MSComm1.PortOpen Then MSComm1.PortOpen = False 關閉串口 MSComm1.CommPort = 1 設置串口1 MSComm1.Settings = 9600,N,8,1 設置串口波特率 MSComm1.InputMode = comInputModeBinary 設置串口通信模式-二進制模式 MSComm1.InputLen = 1 設置每次從輸入緩沖區取出的字節數 If MSComm1.PortOpen = False Then MSComm1.PortOpen = True 打開串口End SubPC機串口通信(MSCOMM32.OCX)Public Sub Command1_Click() Dim ao(0 To 0) As Byte Dim av A

溫馨提示

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

評論

0/150

提交評論