




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、案例5-串口通信及其應用2014.11案例5-串口通信及其應用 遠程監(jiān)控(監(jiān)測與控制)系統(tǒng)上位機實現(xiàn):編輯、查詢、統(tǒng)計、報表打印等管理功能;下位機實現(xiàn): 監(jiān)測:信號與數(shù)據采集等 控制等通信應用案例-多點溫度采集通信應用案例-多點溫度采集案例5-串口通信及其應用通信有線: RS232 、RS485、RS422、 CAN、 USB、以太網實驗室調試:RS232工業(yè)上采用差分方式傳輸(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、以太網)無線數(shù)據傳輸無線數(shù)據傳輸無線模塊 433M無線收發(fā)模塊 CC1101傳輸距離: 開闊地200m以上2.4G nRF24L01P無線模塊 收發(fā)模塊傳輸距離:1000m以上串口轉zigbee 無線模塊 CC2530 傳輸距離: 1.6km MG323 GPRS/GSM模塊IrDA無線紅外-IrDA案例5-串口通信及其應用串行通
3、信標準RS232(RS232電平,通信距離10m)RS422/RS485(差分傳輸,傳輸距離5km,自定義通信機制)CAN(差分傳輸,傳輸距離5km,完善的通信機制)通信方式點對點點對多通信可靠性通信協(xié)議 多字節(jié)定長不定長校驗方式 和校驗 CRC校驗RS232通信接口通信接口臺式機:含RS232串口(COM1:9 Pin)筆記本:基本沒有RS232,可通過USB轉串口線實現(xiàn)DB9公頭DB9母頭RS232串口引腳RS232串口引腳功能腳位(Pin)簡寫功 能1CD載波偵測(Carrier Detect)2RXD接收字符(Receive)3TXD傳送字符(Transmit)4DTR數(shù)據端備妥(Da
4、ta Terminal Ready)5GND地線(Ground)6DSR數(shù)據備妥(Data Set Ready)7RTS要求傳送(Request To Send)8CTS清除以傳送(C1ear To Send)9RI響鈴偵測(Ring Indicator)三線制:交叉線PC機串口地址標準串口地址串口號串口地址中斷號COM13F82COM22F81COM33E84COM42E8380518051串口串口AT89S51/52有一個可編程的全雙工串口。可實現(xiàn)數(shù)據的異步收發(fā):TXD端發(fā)送數(shù)據RXD端接收數(shù)據雙工:即能發(fā)送又能接收 全雙工:即能發(fā)送又能接收,且收發(fā)可同時進行 半雙工:即能發(fā)送又能接收,但
5、收發(fā)不能同時進行單工:只能發(fā)或只能收RS232、RS422是全雙工RS485、CAN是半雙工串口通信格式-異步TTL、CMOS電平異步通信格式(通過一根信號線實現(xiàn)數(shù)據傳輸)串口線無數(shù)據時,保持高電平(1)START BIT :起始位(0),發(fā)送基準信號DATA WORD :發(fā)送數(shù)據位(8位),低位先發(fā)PARITY BIT :奇偶校驗位(1位)STOP BIT :停止位(12位高電平)如圖發(fā)送數(shù)據為:11001011B 即0 xCB波特率(bps:bit per second):每位發(fā)送的時間相等:這與通信波特率有關提高傳輸距離措施-RS232電平傳輸TTL、CMOS電平傳輸距離1m,超出1m容
6、易受干擾。可提高傳輸電壓或差分方式提高抗干擾能力,有效提高傳輸距離。RS232電平:提高傳輸電壓,在波特率為9600bps時,有效傳輸距離為10m左右。Ch1:CMOS電平 Ch2:RS232電平RS232電平定義0電平: +3V+15V1電平:-3V-15VCMOS電平定義0電平: 0V1電平:5V問題:如圖所發(fā)數(shù)據?0011 0101B 0 x35波特率約為多少?RS232邏輯電平的定義0電平: +3V+15V1電平:-3V-15V TTL、CMOSRS232電平轉換TTL、CMOSRS232電平轉換電路RS232_RXDRS232_TXDTTL_CMOS_RXDTTL_CMOS_TXD提
7、高傳輸距離措施-差分傳輸將TTL、CMOS電平轉成雙路差分信號,通過雙絞線傳輸,有效抑制共模干擾信號(提高傳輸距離)采用專用芯片實現(xiàn)電平轉換。RS422、RS485、CAN都是采用該方式傳輸;在波特率為9600bps時,有效傳輸距離為5kmRS485/RS422接口電路MAX485驅動芯片引腳 DI:接收 RO:發(fā)送 RE#:接收使能 DE: 發(fā)送使能 A:差分同相 B:差分反相RE#、DE接在一起后接3V3:表示固定發(fā)送RE#、DE接RS485_C,可控發(fā)送接收 RS485_C=0:接收 RS485_C=1:發(fā)送CAN接口電路SJA1000T:CAN接口芯片,實現(xiàn)并行數(shù)據與CAN串行數(shù)據的互
8、轉;A82C250 :CAN電平轉換芯片,實現(xiàn)TTL電平與差分電平互換A82C250、 TJA1050 、 TJA1040 :5V SN65HVD230:3.3V若處理器內含CAN接口功能,則可省略SJA1000T差分保護電路由于差分傳輸距離長,容易受雷電的影響,造成電平轉換芯片、甚至CPU損壞,因此現(xiàn)場應用時要有一定的硬件保護措施電壓保護:TVS瞬態(tài)保護二極管SMBJ65CA(6.5V)電流保護:自恢復保險絲匹配電阻:在差分的最后一個終端信號間加一120歐姆的電阻,以解決串擾。RS485差分保護電路-光隔離RS485差分保護電路-光隔離差分保護電路-光隔離B0505S-1W:DC-DC模塊D
9、C-DC電源電路信號與電源全隔離同步通信同步(synchronous):多一路同步時鐘信號,傳輸速率高異步(asynchronous)8051串口 對應有兩個緩沖器SBUF。(共用一個地址)串口數(shù)據接收b=SBUF;/取串口數(shù)據串口數(shù)據發(fā)送SBUF=a;/開始發(fā)送8051 串口發(fā)送SBUF=a;/串口發(fā)送開始,發(fā)送完成需要一段時間 以9600bps為例,1位數(shù)據的發(fā)送時間為1/9600秒=0.104ms,若按上圖的11位格式發(fā)送完成一字節(jié)需11.5ms左右,因此發(fā)送后必須等待11.5ms以上才能執(zhí)行下一次發(fā)送,否則會丟失數(shù)據;等待發(fā)送完成方法:可采用delay(N);方式延時,但此種方式對于N
10、的確定較困難,且不同的波特率,N的值又不一樣;為此8051單片機引入了TI(發(fā)送完成標志),當發(fā)送完成后硬件自動使TI=1,這樣只要等到TI標志即可認為發(fā)送完成。8051 串口發(fā)送與接收-查詢方式串口發(fā)送SBUF=0 x35;while(TI=0);/等待發(fā)送完成TI=0;/清發(fā)送標志SBUF=0 x35;while(TI=0);/等待發(fā)送完成TI=0; /清發(fā)送標志TI:transfer interrupt發(fā)送結束標志串口接收while(RI=0);/等待接收完成RI=0;/清接收標志b=SBUF;/接收數(shù)據RI:receive interrupt接收結束標志8051 串口發(fā)送與接收-中斷方
11、式8051串口發(fā)送與接收也可采用中斷方式當串口接收完成或發(fā)送完成后,硬件自動產生中斷標志(RI=1或TI=1) 此時若中斷允許(ES=1且EA=1),程序會立即停止當前主程序,自動跳轉到中斷號為n=4的中斷入口地址(8n+3=0 x0023)處執(zhí)行中斷服務程序,因為進入該中斷有兩種可能(TI=1或RI=1),因此不能自動對中斷標志清零(需判斷是TI=1還是RI=1引起的中斷); 此時若中斷不允許(ES=0或EA=0),則不執(zhí)行中斷服務程序。8051 串口發(fā)送與接收-中斷方式8051 串口編程-查詢方式 【例1】如圖所示上位機發(fā)送數(shù)據a,下位機接收后回a+1/串口初始化函數(shù)void Sbuf_I
12、nit(void) void main(void)unsigned char a; Sbuf_Init(); /串口初始化while(1)/串口數(shù)據接收while(RI=0); /等待接收完成RI=0; /清接收標志a=SBUF; /接收數(shù)據/串口數(shù)據發(fā)送SBUF=a+1; /串口發(fā)送while(TI=0); /等待發(fā)送完成TI=0; /清發(fā)送標志/KbScan();/LedDisplay();查詢方式存在問題:下位機不知上位機何時發(fā)串口數(shù)據,若上位機一直不發(fā),則之后的鍵盤掃描、數(shù)碼顯示程序無法執(zhí)行。因此下位機應采用中斷方式接收。8051 串口編程-中斷方式 【例1】如圖所示上位機發(fā)送數(shù)據a,
13、下位機接收后回a+1/中斷服務程序void UART_ISR(void) interrupt 4 unsigned char a;if(RI)/接收產生的中斷RI=0;/清接收標志a=SBUF; /接收數(shù)據/串口數(shù)據發(fā)送SBUF=a+1; /串口發(fā)送while(TI=0); /等待發(fā)送完成TI=0; /清發(fā)送標志 void main(void) Sbuf_Init(); /串口初始化while(1)/KbScan();/LedDisplay();8051 串口編程-中斷方式 【例1】如圖所示上位機發(fā)送數(shù)據a,下位機接收后回a+1在串口中斷內采用查詢方式發(fā)送,按9600bps算,需等待1ms左右
14、才能發(fā)送完成,占用中斷時間較長,可將串口發(fā)送部分移到主程序執(zhí)行。/中斷服務程序unsigned char Rxd_Data;/串口接收數(shù)據unsigned char Rxd_Over;/串口接收完成標志void UART_ISR(void) interrupt 4 if(RI)/接收產生的中斷RI=0;/清接收標志Rxd_Data=SBUF; /接收數(shù)據Rxd_Over=1;/置Rxd_Over標志 void main(void) Sbuf_Init(); /串口初始化while(1)if(Rxd_Over) /若接收完成/串口數(shù)據發(fā)送SBUF=a+1; /串口發(fā)送while(TI=0); /
15、等待發(fā)送完成TI=0;/清發(fā)送標志Rxd_Over=0; /清Rxd_Over標志/KbScan();/LedDisplay();8051 串口編程-初始化串口初始化 串口工作方式 SCON 波特率設置 TMOD TH1、TL1 ES、EA TR1/串口初始化函數(shù)void Sbuf_Init(void) SCON=; /串口工作方式/波特率設置 TMOD=;/T1工作方式 TH1=0 xfd; /T1計數(shù)初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 8051 串口編程-初始化SM0、SM1:方式設置位 方式0:移位寄存器輸入輸出方式。數(shù)據通過RXD輸
16、入出,TXD輸出同步脈沖CP。該方式下,收發(fā)數(shù)據為8位,低位在前。波特率固定為fosc/12 方式1、方式3:波特率可設置,所不同是10位或11位(1位起始位+8位或9位數(shù)據位+1位停止位) 方式2、方式3:都是11位格式,但方式2波特率固定,方式3波特率可變。 波特率分析見下SM0SM1方式說 明波特率(bps)000同步移位寄存器fosc1201110位異步收發(fā)Baud=2SMOD(T1溢出率/32)10211位異步收發(fā)Baud=2SMODfosc6411311位異步收發(fā)Baud=2SMOD(T1溢出率/32)8051 串口編程-初始化SM2:多機方式控制位SM2=0:點對點SM2=1:點
17、對多REN(Receive Enable):串行接收允許控制位TB8(Transmit Bit 8):在方式2、3中,將被發(fā)送數(shù)據的第9位(奇偶校驗位等);RB8(Receive Bit 8) :接收數(shù)據第9位 在方式0中,該位不起作用; 在方式1中該位為接收數(shù)據的停止位; 在方式2、3中為接收數(shù)據的第9位;TI、RI發(fā)送/接收結束標志位,中斷內需手工清零。8051 串口編程-初始化SCON定義示例【例1】定義8051串口為10位波特率可設置的點對點方式 SCON=0 x50;/0101*00B【例2】定義8051串口為11位波特率可設置的點對點方式 SCON=0 xd0;/1101*00BS
18、M0SM1方式說 明波特率(bps)000同步移位寄存器fosc1201110位異步收發(fā)Baud=2SMOD(T1溢出率/32)10211位異步收發(fā)Baud=2SMODfosc6411311位異步收發(fā)Baud=2SMOD(T1溢出率/32)8051 串口編程-初始化波特率設置典型波特率 1200bps、2400bps、4800bps、9600bps、19200bps、57600bps、115200bps常用波特率 9600bps、19200bps、115200bps【例1】波特率位9600bps、115200bps,傳輸一位所需時間?傳輸一字節(jié)(10位)需時間? 9600bps : 0.104
19、ms/位,1字節(jié)約1.04ms 115200bps: 8.68us/位, 1字節(jié)約86.8us【例2】若有1張1.44M字節(jié)的軟盤,采用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位異步收發(fā)Baud=2SMOD(T1溢出率/32)10211位異步收發(fā)Baud=2SMODfosc6411311位異步收發(fā)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計數(shù)次數(shù)以fosc=11.0592MHz為例,要實現(xiàn)9600bps的波特率,n=?n=fosc/384/9600=11059200/384/9600=3(整數(shù))因此fosc=11.0592Mhz晶振的存在是合理的。8051 串口編程-初始化/串口初始化函數(shù)void Sbuf_Init(void) SCON=0 x50; /10位方式/波特率設置 TMOD=(TMOD&0 x0f)|0 x20;/T1方式2 TH1=0 xfd; /T1計數(shù)初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 注意:T1方式2具有將TH1的8位計數(shù)初值自動
22、載入到TL1中功能;該自動載入是在溢出時由硬件自動完成的;T1必須要啟動T1中斷無需允許,這樣溢出時就不進入Timer1_ISR()8051 串口編程-初始化特特率設置8051單片機串口方式1、3為波特率可設置,計算公式為nfoscbaudSMOD*384:0 時nfoscbaudSMOD*192:1 時以fosc=11.0592MHz為例,能否實現(xiàn)19200bps的波特率?n=fosc/384/19200=11059200/384/19200=1.5(小數(shù))/不能因此8051單片機提供了PCON(電源控制寄存器),其SMOD為波特率倍增控制位。注意:PCON不能位尋址。8051 串口編程-串
23、口初始化/fosc=11.0592MHz,9600bps/串口初始化函數(shù)9600bpsvoid Sbuf_Init(void) SCON=0 x50; /10位方式/波特率設置PCON=0 x00; /波特率不倍增 TMOD=(TMOD&0 x0f)|0 x20;/T1方式2 TH1=0 xfd; /T1計數(shù)初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 /fosc=11.0592MHz,19200bps/串口初始化函數(shù)19200bpsvoid Sbuf_Init(void) SCON=0 x50; /10位方式/波特率設置PCON=0 x80
24、; /波特率倍增 TMOD=(TMOD&0 x0f)|0 x20;/T1方式2 TH1=0 xfd; /T1計數(shù)初值 TL1=0 xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 8051 串口編程-波特率計算/【問題】若8051單片機fosc=11.0592MHz,則其能實現(xiàn)的波特率有哪些?采用C語言編程實現(xiàn)。#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字節(jié)求CRC16printf(%xt%xn,crc_value/256,crc_value%256);查表法CRC16校驗CRC校驗實現(xiàn)方法查表法(浪費空間)即時計算法(浪費時間)#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字節(jié)求CRC16printf(%xt%xn,crc_value/256,crc_value%256);即時計算法類ModBus通信協(xié)議-定長8字節(jié)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通信協(xié)議-定長8字節(jié)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串口調試工具發(fā)送數(shù)據,看是否有接收2、單片機硬件問題用示波器連接單片的TXD引腳,程序發(fā)送數(shù)據,看是否有CMOS、RS232波形,從而判斷是否為硬件故障。3、軟件問題串口通信方式串口通信方式 串口通信方式串口通信方式點對點點對點 PCPC機與機與MCUMCU(PCPC與智能儀表間的通信)與智能儀表間的通信) MCUMCU與與MCUMCU點對多:多機通信點對多:多機通信串口通信模式-單字節(jié)發(fā)送 單字節(jié)通信,上位機主動 上位機程序 串口通信工具:scomm32 自己編程
31、: 控件實現(xiàn)(VB) API函數(shù)實現(xiàn)(VC) 下位機程序 接收:中斷方式 發(fā)送:查詢方式PC機串口通信實現(xiàn) 兩種方式實現(xiàn)控件MSCOMM32.OCX應用程序接口函數(shù):API(OpenFile()PC機串口通信(MSCOMM32.OCX)首先為工程添加MSCOMM32.ocx等控件添加如下代碼:包括串口初始化,發(fā)送、接收等操作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 設置每次從輸入緩沖區(qū)取出的字節(jié)數(shù) 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程師崗位安全培訓試題及答案
- 如何通過家具設計提升小空間的使用效率與美觀性試題及答案
- 電商與農業(yè)資源有效配置的研究試題及答案
- 2025教育學面試題目及答案
- 網易社區(qū)面試題及答案
- 航空航天零部件加工2025年高精度加工技術產業(yè)鏈分析報告
- 家具設計中的環(huán)保材料應用與實際案例分析試題及答案
- 2025年智能家居研發(fā)生產基地建設智能化家居產品市場推廣策略報告
- 搬遷資產處置計劃書
- 生態(tài)恢復試題及答案詳解
- 排球比賽規(guī)則與裁判法
- 中考生物二輪復習實驗突破課件:花生果實大小的變異探究實驗(含答案)
- 決策樹在飼料技術推廣中的應用研究
- 空管自動化系統(tǒng)的基本組成與功能課件
- 安寧療護之舒適護理
- 2023年杭州市規(guī)劃局拱墅規(guī)劃分局編外人員招考考前自測高頻難、易考點模擬試題(共500題)含答案詳解
- 品牌國際化對企業(yè)出口競爭力和品牌價值的影響研究
- 大模型的因果推理與可解釋性
- 《圓柱與圓錐》單元整體教學設計展示
- journal of affective disorders投稿格式要求
- 大白菜收獲機的設計
評論
0/150
提交評論