找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1558|回复: 2
打印 上一主题 下一主题
收起左侧

51单片机手动设置波特率收发数据不对

[复制链接]
跳转到指定楼层
楼主
ID:878906 发表于 2021-2-27 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <intrins.h>
#include "config.h"
#include "stdio.h"//用于调用printf函数原型

/* 串口配置函数,baud-通信波特率 */
void ConfigUART(unsigned int baud)
{
    RS485_DIR = 0; //RS485设置为接收方向
   
    g_rs485_uart_pop_ptr = 0; //当 g_uart_pop_ptr + 1 = g_uart_push_ptr 时缓存为空
    g_rs485_uart_push_ptr = 1;  //此处加1是指针加1,即计算下一个指针

    rs485_sbuf.out_index = 0;  //----
    rs485_sbuf.in_index = 1;
    rs485_sbuf.send_runing = FALSE;
   
    ACC = P_SW1;
    ACC &= ~(S1_S0 | S1_S1);    //S1_S0=0 S1_S1=0
     P_SW1 = ACC;                //(P3.0/RxD, P3.1/TxD)
   
    SCON  = 0x50;  //配置串口为模式1
    AUXR = 0x40;    //定时器1为1T模式   
    AUXR &= 0xFE;        
    TMOD = 0x00;    //定时器1为模式0(16位自动重载)
    TL1 = (65536 - (FOSC/4/baud));   //设置波特率重装值
    TH1 = (65536 - (FOSC/4/baud))>>8;
    ET1 = 0;       //禁止T1中断
    ES  = 1;       //使能串口中断
    TR1 = 1;       //启动T1
    EA=1;

}

当调用这个ConfigUART(unsigned int baud);写入9600、57600时通过串口助手接收发关送数据正确,当写入115200时通过串口助手接收发关送数据不对
如果把上面的   

     TL1 = (65536 - (FOSC/4/baud));   //设置波特率重装值
    TH1 = (65536 - (FOSC/4/baud))>>8;
改为:   

    TL1 = (65536 - (FOSC/4/115200));   //设置波特率重装值
    TH1 = (65536 - (FOSC/4/115200))>>8;
时通过串口助手接收发关送数据正确。

请各位大神指教函数那里错了!!!!!


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:887024 发表于 2021-2-28 13:34 | 只看该作者
你好,51单片机unsigned int大小是2字节吧,最大值65535,设置的115200超过了最大值被截止导致最终传入的值不对,改用long long试试呢?
回复

使用道具 举报

板凳
ID:887024 发表于 2021-2-28 13:36 | 只看该作者
51单片机的unsigned int大小为2字节吧,最大值65535,传入115200超了被截止,改用long long试试呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表