搜索
bottom↓
回复: 8

KEIL C51中对常数的宏定义计算错误

[复制链接]

出70入145汤圆

发表于 2012-6-30 19:00:15 | 显示全部楼层 |阅读模式
#define                Fosc 22118400
#define                Tim1num2        940//xxus延时   1ms中断,也是1ms时间基准       
#define                Tim1Temp2TH1   (uchar)((65535-(uint)(Tim1num2*Fosc/1000000))/256) //
#define                Tim1Temp2TL1   (uchar)((65535-(uint)(Tim1num2*Fosc/1000000))%256)       

       
TH1=Tim1Temp2TH1;
                TL1=Tim1Temp2TL1; //T1计数xms

软件仿真得到的TH1=0X02; TL1=0XAA
而我的计算值本来为0XAE 0XC8
请教各位应该如何写这种关系式计算

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-6-30 19:31:53 | 显示全部楼层
#define                Fosc 22118400L
#define                Tim1num2        940L

这样试试!!

出0入0汤圆

发表于 2012-6-30 20:16:56 | 显示全部楼层
1、改成 #define Fosc 22118400UL(UL 即 unsigned long)
2、此外要保证 “两数乘积” < “2的32次方(即 unsigned long)”,否则会产生溢出,
     像你上面22118400*940 > 2的32次方

正确写法:
#define Fosc           22118400UL
#define Tim1num2   940      
#define Tim1Temp2TH1   ((65535-(Tim1num2*(Fosc/100)/10000))/256)
#define Tim1Temp2TL1    ((65535-(Tim1num2*(Fosc/100)/10000))%256)

另:LZ是用定时器的1T模式?看到是除以1000000而不是12000000

出0入0汤圆

发表于 2012-6-30 20:36:41 | 显示全部楼层
编译器对常数默认是按照int类型处理的,你这个显然是溢出了,所以要加ul这样的修饰符告诉编译器。
keil的c51的int型是16位的,最大32767,倒是keil的arm编译器int类型是32位的。

出70入145汤圆

 楼主| 发表于 2012-7-1 09:29:29 | 显示全部楼层
明白了,原来是这样。
在数字后面加UL,L等编译器知道含义,但是我试了下UC,C,I等想表示char int等编译器好像不认。但是U也认的。
to 3L,我使用的的STC的1T模式。
另外昨天使用PL2303线对STC下载时发现一个有趣的现象:默认的最高和最低波特率无法下载。两个都设为2400是能下载,但是速度很慢,把两个都设为115200反而能下载了,成功率很高,不能下载的话把连片子的串口插拔下再上电就能下载了。

出0入0汤圆

发表于 2012-7-1 22:29:59 | 显示全部楼层
你还用PL2303线???
这个我不敢用,经常蓝屏.尤其是发送串口数据的时候.

出70入145汤圆

 楼主| 发表于 2012-7-1 23:01:08 | 显示全部楼层
可能是概率的问题吧。我用PL2303倒没碰到蓝屏,最多时间长了串口死掉了再插拔下USB转232线。不过我不是一直在通讯,下载时或看串口数据时才用。

出0入0汤圆

发表于 2012-7-1 23:15:11 | 显示全部楼层
学习

出0入0汤圆

发表于 2012-7-2 09:12:46 | 显示全部楼层
hailing 发表于 2012-7-1 09:29
明白了,原来是这样。
在数字后面加UL,L等编译器知道含义,但是我试了下UC,C,I等想表示char int等编译器好 ...

老问题了!应该是上电顺序问题
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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