Stc89c52rd+的串口波特率等等设置
时间: 2023-07-31 17:09:46 浏览: 141
51单片机之串口波特率配置
5星 · 资源好评率100%
STC89C52RD+是一款基于8051架构的单片机,它具有多种外设,其中包括UART串口通信模块。串口模块可以通过设置波特率、数据位、停止位、校验位等参数来实现数据的传输。
以下是STC89C52RD+串口通信模块的设置方法:
1. 设置波特率:串口通信的速度是通过波特率来控制的。STC89C52RD+的串口模块支持多种波特率,包括2400、4800、9600、19200、38400、57600、115200等。波特率设置的方法如下:
```
//初始化串口函数
void UART_Init(unsigned int baudrate)
{
TMOD = 0x20; //定时器1工作在模式2,8位自动重载计数器
TH1 = 256 - FOSC / (12 * 32 * baudrate); //计算定时器重载值,其中FOSC为晶振频率
TL1 = TH1; //将计算得到的值赋给定时器初值
TR1 = 1; //启动定时器1
SM0 = 0; //设置串口工作在模式1,8位数据位,无校验位,1位停止位
SM1 = 1;
REN = 1; //使能串口接收
EA = 1; //开启总中断
ES = 1; //开启串口中断
}
```
在此函数中,通过计算定时器重载值来实现波特率的设置。
2. 设置数据位、停止位、校验位:串口通信中还需要设置数据位、停止位和校验位等参数。STC89C52RD+的串口模块默认为8位数据位、无校验位、1位停止位,如果需要设置其他参数,可以通过以下代码实现:
```
void UART_Init(unsigned int baudrate, unsigned char data_bit, unsigned char stop_bit, unsigned char parity)
{
TMOD = 0x20;
TH1 = 256 - FOSC / (12 * 32 * baudrate);
TL1 = TH1;
TR1 = 1;
SM0 = 0;
SM1 = 1;
REN = 1;
EA = 1;
ES = 1;
switch (data_bit)
{
case 7: //设置数据位为7位
SM0 = 0;
SM1 = 0;
break;
case 8: //设置数据位为8位
SM0 = 0;
SM1 = 1;
break;
default:
break;
}
switch (stop_bit)
{
case 1: //设置停止位为1位
PCON &= ~0x08;
break;
case 2: //设置停止位为2位
PCON |= 0x08;
break;
default:
break;
}
switch (parity)
{
case 'n': //无校验位
PS = 0;
break;
case 'o': //奇校验
PS = 1;
SM2 = 1;
break;
case 'e': //偶校验
PS = 1;
SM2 = 0;
break;
default:
break;
}
}
```
在此函数中,通过传入参数的方式设置数据位、停止位和校验位等参数。
以上就是STC89C52RD+串口通信模块的设置方法,可以根据实际需要进行相应的设置。
阅读全文