电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
51单片机手动设置波特率收发数据不对
已解决
73482
个问题
已帮助
5993
位优秀工程师
51单片机手动设置波特率收发数据不对
小葱拌豆腐
2021-03-08
浏览量:655
#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;
时通过串口助手接收发关送数据正确。
请各位大神指教函数那里错了!!!!!
显示全部
单片机
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
yhj416606438
由于是51单片机,int这个类型参数只能16位的,也就是到65535,115200大于这个数,所以会出错,解决办法把参数的int改成long就可以了
发布于
2021-03-08
举报
评论 0
0
0
其他答案
数量:
3
一笔之名也
这说明,传入函数的值不是115200,你可以用串口输出这个值,并输出TL1与TH1的值看一下大小
发布于
2021-03-08
举报
评论 0
0
0
沃尔夫斯堡的羊
51单片机unsiged int是16位的,最大65535,,,当你入参是115200时超过了。。。可以单步看下这个值...
发布于
2021-03-09
举报
评论 0
0
0
莱克迷KW
51应该没有32位的数据,最大是16位的,115200超过了65535了
发布于
2021-03-09
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
51单片机手动设置波特率收发数据不对
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: