




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川国际标榜职业学院《影视文学欣赏》2023-2024学年第二学期期末试卷
- 山东省济南市章丘四中2025年协作体高三暑假联考英语试题含解析
- 林区数字公安顶层设计方案
- 2025年云南省楚雄彝族自治州双柏县中考二模语文试题(含答案)
- 山东省日照市莒县文心高中2025届高三第三次模拟考试英语试卷含答案
- 2025年吉林省长春市九台区师范高中、实验高中高三一诊考试英语试卷含答案
- 江苏省泰州市兴化一中2025年高三最后一模英语试题含答案
- 叶徐版《语言学纲要》重点
- 2025设备租赁合同范本 设备租赁合同样本
- 远程医疗服务模式在医疗扶贫中的实践与2025年市场分析报告
- 六上 Unit 1 Part A 课件人教版六年级英语
- 苏教版高中数学必修第一册第1章1.1第2课时集合的表示【授课课件】
- DL∕T 5161.17-2018 电气装置安装工程质量检验及评定规程 第17部分:电气照明装置施工质量检验
- DL-T5344-2018电力光纤通信工程验收规范
- 2024年上海市公安机关文职辅警、公安机关勤务辅警、检察系统辅助文员招聘笔试参考题库含答案解析
- 2024年四川省南充市中考生物试卷真题(含官方答案)
- 新时代大学生劳动教育智慧树知到期末考试答案章节答案2024年江西中医药大学
- 成人高尿酸血症与痛风食养指南(2024年版)
- 2024年首都机场集团招聘笔试参考题库附带答案详解
- 2022金融科技SDL安全设计Checklist-v1.0
- 2023年山东省专升本考试高等数学Ⅲ试题和答案
评论
0/150
提交评论