常用串口通信-2(RS485)
1.RS485
RS485是RS422A的变型,区别是RS485可用于半双工通信。两线通信,最多可使用32对查分驱动器/接收器。抗干扰性好,传输距离远(1200米),传输速率达1Mbps。更多介绍请看上一篇常用串口通信-1
2.单片机与PC通信
单片机通过MAX485芯片实现RS485/TTL电平转换
PC通过RS-232C/RS485转换器
单片机MAX485引脚:DIR、TXD、RXD
DIR用来控制收发,为高电平时发送,低电平接收
2.1通信过程
- PC端串口通信助手发送数据
- 单片机DIR设置0,在接收状态
- 单片机SBUF接收PC过来的数据进行存储
- 清除中断标志位
- 延时1毫秒
- 单片机DIR设置1,在发送状态
- 单片机从SBUF发送返回到PC
- 单片机DIR设置0,恢复到接收状态
3.程序编写
单片机P3.0 / P3.1引脚作为TXD / RXD串口,P1.0引脚作为DIR控制接收还是发送。
sbit RS485DIR = P1^0;//定义P1.0引脚
void delay(u16 i){
while(i--);
}
//串口初始化函数
void UsartInint(){
TMOD=0x20; //0010 0000
TH1=0XF3; //1111 0011
TL1=0XF3; //1111 0011
PCON=0X80; //1000 0000
TR1=1; //打开TCON的T1定时器
SCON=0X50; //0101 0000
ES=1; //打开串口中断
EA=1; //打开总中断
RS485DIR = 0;//初始低电平接收状态
}
解释以上代码:
与前一篇内容同理,做相应的设置,在这里增加一个DIR引脚的设置,RS485DIR = 0;//初始低电平接收状态
//串口中断函数
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;
RI=0;
delay(100); //增加代码
RS485DIR = 1;//增加代码
SBUF=receiveData;
while (!TI);
TI=0;
RS485DIR = 0;//增加代码
}
解释以上代码:
与前一篇内容同理,在这里增加一个DIR引脚的高低电平来控制收发状态。
4.通信效果
PC端串口通信助手发送数据,单片机收到后就会返回这些数据。
这是单字节发送,需要多字节发送就要在中断函数中做数据处理。