迪文科技论坛

 找回密码
 立即注册
搜索
查看: 556|回复: 8

【提问】T5L0芯片,C51部分 除法计算结果不对

[复制链接]

13

主题

17

回帖

222

积分

中级会员

Rank: 3Rank: 3

积分
222
发表于 2022-5-24 22:21:04 | 显示全部楼层 |阅读模式
具体代码如下:
void Uart2_test(uint32_t baud_rate)
{
    uint16_t baud = 0;
    uint32_t Baud = 0;
    Baud = 115200;
    baud = (uint16_t)(3225600/Baud);
    // baud=(uint16_t)(1024-(FOSC/64/baud_rate));
    printf("baud:%d\n", baud);
}

打印结果为 baud:64
计算机计算结果为:28
不知为什么这个除法运算出的结果不对


回复

使用道具 举报

2

主题

680

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
13215
发表于 2022-5-25 09:27:31 | 显示全部楼层
您好,修改下Baud的命名,应该是编译器不区分大小写,把Baud当成了u16,导致Baud溢出。
回复

使用道具 举报

0

主题

1276

回帖

5390

积分

论坛元老

Rank: 8Rank: 8

积分
5390
发表于 2022-5-25 09:28:53 | 显示全部楼层
这样计算能得到正常的结果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

13

主题

17

回帖

222

积分

中级会员

Rank: 3Rank: 3

积分
222
 楼主| 发表于 2022-5-25 09:51:45 | 显示全部楼层
是的 原因找到了,实际上自己定义的uint32_t长度为16位,计算时被转换为long int使用,导致结果不对
回复

使用道具 举报

0

主题

1276

回帖

5390

积分

论坛元老

Rank: 8Rank: 8

积分
5390
发表于 2022-5-26 11:01:37 | 显示全部楼层
大boy 发表于 2022-5-25 09:51
是的 原因找到了,实际上自己定义的uint32_t长度为16位,计算时被转换为long int使用,导致结果不对 ...

问题处理好了就行
回复

使用道具 举报

2

主题

20

回帖

153

积分

注册会员

Rank: 2

积分
153
发表于 2022-6-27 08:33:00 | 显示全部楼层
在C51开发模式中,如何使用硬件除法器?编译器自动识别?
回复

使用道具 举报

0

主题

1276

回帖

5390

积分

论坛元老

Rank: 8Rank: 8

积分
5390
发表于 2022-6-27 09:14:01 | 显示全部楼层
xiaofangzi 发表于 2022-6-27 08:33
在C51开发模式中,如何使用硬件除法器?编译器自动识别?

请参考这个文档

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

3

主题

22

回帖

162

积分

注册会员

Rank: 2

积分
162
发表于 2022-7-26 15:09:17 | 显示全部楼层
那我如果要定义32位数据应该怎么定义,unsigned long int?
回复

使用道具 举报

0

主题

1276

回帖

5390

积分

论坛元老

Rank: 8Rank: 8

积分
5390
发表于 2022-7-27 08:38:16 | 显示全部楼层
hao_basis 发表于 2022-7-26 15:09
那我如果要定义32位数据应该怎么定义,unsigned long int?

unsigned long  就可以
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-4-5 22:22 , Processed in 0.042601 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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