基于串口的波特率计算代码(纯C代码)

 根据还款时钟频率,以及期望波特率期间,计算出当前期间误码率为0的波特率。

#include <stdint.h>
int main()
{
    uint32_t InputClockHz = 100000000;    //时钟设置
    uint32_t Divisor;
    uint32_t TargetRate;
    uint32_t Error;
    uint32_t PercentError;

    for (uint32_t BaudRate = 500000; BaudRate < 1500000; BaudRate += 1)    //期望波特率期间
    {
        Divisor = (InputClockHz + ((BaudRate * 16) / 2)) / (BaudRate * 16);

        TargetRate = Divisor * BaudRate * 16UL;
        if (TargetRate < InputClockHz) {
            Error = InputClockHz - TargetRate;
        }
        else {
            Error = TargetRate - InputClockHz;
        }
        PercentError = (Error * 1000000000000000000UL) / InputClockHz;
       if (PercentError == 0)
           printf("BaudRate %d\r\n", BaudRate);

    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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+串口通信模块的设置方法,可以根据实际需要进行相应的设置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值