1,RS232串口通信基本知识
(1)目前较为常用的串口是9针串口(DB9。
通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口;若距离较远,需附加调制解调器(MOD EM)。
(2)RS232C串口通信接线方法(三线制)
接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接
(3)DB9接口三线引脚定义
2 ---- RXD 接收数据
3 ---- TXD 发送数据
5 ---- GND 信号地
(4)串行通信方式
1)单工:信息只能单向传送
2)半双工:信息可双向传送但不能同时进行
3)全双工:信息可同时进行双向传送
(5)RS232逻辑电平
逻辑0电平规定为+5 ~ +15V之间;逻辑1是电平为-5 ~ -15V之间,因此在与单片机进行通信时需要进行电平转换
(6)RS232串行通信接口电路设计
(7)51单片机串行通信接口软件设计
1)两个重要指标:可靠性和速度,可靠性是第一位。
2)与串口通信相关的几个寄存器和控制位
TMOD:可以用它来设置定时器工作方式(如果在MCU中使用的是定时器来产生波特率,就需要对这个寄存器进行设置,通常设为0x20,即设置定时器1为8位自动重装定时器,即工作方式1)
TH1和TL1:定时器1初始值(可通过波特率计算软件获得)
TR1:开启定时器1
SCON:串口控制寄存器,通常设为0x50,即10位异步传输,由定时器1
产生波特率,无奇偶校验位,允许接收
PCON:这个寄存器主要用到它的最高位SMON,当最高位设为1时,原波特率加倍
ES:串口中断使能位
EA:全局中断使能位
3)波特率计算方法(使用一个名为“51波特率初值计算.exe”的小软件)第1步:选择定时器工作方式(方式2)
第2步:输入晶振值(11.0592)
第3步:选择波特率(9600)
第4步:设置SMOD值(0)
第5步:点击确定
第6步:将软件上显示值赋给TH1和TL1
4)串口初始化程序
void Initial_RS232(unsigned char rate)
{ //默认晶振值为11.0592MHz
unsigned char Reload1;
switch(rate) //根据拨码器设置波特率
{
case 0:
Reload1 = 0xE8; //2400bps
break;
case 1:
Reload1 = 0xF4; //4800bps
break;
case 2:
Reload1 = 0xFA; //9600bps
break;
case 3:
Reload1 = 0xFD; //19200bps
break;
default:
Reload1 = 0x00;
break;
}
PCON = PCON|0x80; //SMOD = 1 ;波特率加倍
TMOD = 0x20; //0011,00010设置定时器1为8位自动重装计数器
SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位
TH1 = Reload1; //设置定时器1自动重装数
TL1 = Reload1;
TR1 = 1; //开定时器1
ES = 1; //允许串口中断
EA = 1; //开总中断
}
5)串口发送程序
void Send_RS232(unsigned char i)
{
ES = 0; //关串口中断
TI = 0; //清零串口发送完成中断请求标志 SBUF = i;
while(TI ==0); //等待发送完成
TI = 0; //清零串口发送完成中断请求标志 ES = 1; //允许串口中断
}
6)串口接收程序
void Receive_RS232(void) interrupt 4
{
unsigned char temp= 0;
ES = 0;
if(RI==1)
{
RI = 0;
temp = SBUF;
}
ES = 1;
}。