● 半双工特性:RS-485 是一种差分串行通信标准,通常用于长距离和高噪声环境下的通信。RS-485 通信是半双工的,这意味着在任何时刻,只能进行发送或接收操作,而不能同时进行。
● 特别注意代码中的Ctrl_EN 控制数据方向的引脚。
/*-----------------------------------------------
硬件端口定义
------------------------------------------------*/
sbit Ctrl_EN = P2^0; //发送接收控制端 Ctrl_EN 用于控制数据方向。在 RS-485 通信中,需要通过控制端来选择是发送还是接收数据。Ctrl_EN 通常连接到一个控制 RS-485 驱动器的方向引脚上。
/*------------------------------------------------
函数声明
------------------------------------------------*/
void SendStr(unsigned char *s);
/*------------------------------------------------
串口初始化
------------------------------------------------*/
void InitUART (void)
{
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
//ES = 1; //打开串口中断
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
InitUART();
Ctrl_EN=1; //发送模式
while (1)
{
SendStr("UART test");
DelayMs(240);//延时循环发送
DelayMs(240);
}
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);//不断坚持TI是否被置1,来判断数据是否发送完毕。
TI = 0;
}
/*------------------------------------------------
发送一个字符串
------------------------------------------------*/
void SendStr(unsigned char *s)
{
while(*s!='\0')// \0 表示字符串结束标志,通过检测是否字符串末尾
{
SendByte(*s);
s++;
}
}