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

2020-02-05 08:56发布

#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
请教各位应该如何写这种关系式计算
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
jackielau
1楼-- · 2020-02-05 13:26
#define                Fosc 22118400L
#define                Tim1num2        940L

这样试试!!
BXAK
2楼-- · 2020-02-05 17:32
 精彩回答 2  元偷偷看……
i55x
3楼-- · 2020-02-05 22:53
编译器对常数默认是按照int类型处理的,你这个显然是溢出了,所以要加ul这样的修饰符告诉编译器。
keil的c51的int型是16位的,最大32767,倒是keil的arm编译器int类型是32位的。
hailing
4楼-- · 2020-02-06 02:01
明白了,原来是这样。
在数字后面加UL,L等编译器知道含义,但是我试了下UC,C,I等想表示char int等编译器好像不认。但是U也认的。
to 3L,我使用的的STC的1T模式。
另外昨天使用PL2303线对STC下载时发现一个有趣的现象:默认的最高和最低波特率无法下载。两个都设为2400是能下载,但是速度很慢,把两个都设为115200反而能下载了,成功率很高,不能下载的话把连片子的串口插拔下再上电就能下载了。
614229816
5楼-- · 2020-02-06 04:45
你还用PL2303线???
这个我不敢用,经常蓝屏.尤其是发送串口数据的时候.
hailing
6楼-- · 2020-02-06 08:50
可能是概率的问题吧。我用PL2303倒没碰到蓝屏,最多时间长了串口死掉了再插拔下USB转232线。不过我不是一直在通讯,下载时或看串口数据时才用。

一周热门 更多>