原创 Keil数据类型

2011-3-8 19:00 2114 7 8 分类: MCU/ 嵌入式

对单片机感兴趣可以看下,以下是在KEIL C51程序,是否看出有问题。
#define BAUD_RATE 9600
#define CPU_CLOCK 27000000
TH2 =(65536-(CPU_CLOCK/(BAUD_RATE*32))&0xFF00)>>8;
TL2 =(65536-(CPU_CLOCK/(BAUD_RATE*32))&0x00FF)>>0;
它丫的就是算不对。这个是在串口初始时设置波特率的。开始没想到这个运算会有问题,就在其它设置的地方找啊找。弄得非常郁闷。后来手工赋了个初始值给TH2和TL2结果就可以了。才知道是这里的问题。不知有没有高手已经看出问题在哪里了。如果有请留个言,说不定哪天还有其它问题想请教一下,大家交个朋友。将运算换成以下方式也不会有问题了。现在就应该比较明了了。不知大家有没有想到了。我在看法在页尾,说得不对欢迎砸砖头。哈哈。
TH2 =(65536-(CPU_CLOCK/BAUD_RATE/32)&0xFF00)>>8;
TL2 =(65536-(CPU_CLOCK/BAUD_RATE/32)&0x00FF)>>0;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

总而言之就是数据类型的问题。9600*32已经已经是0x4B000了。因为9600和32都是常量且小于0xFFFF,编译器给它们运算的结果分配的空间是2个字节的。多余部分就被扔掉了,只剩下0xB000。丫的,应该就是这么回事了。要是把BAUD_RATE变在一个4字节的变量再去做运算是可以得到正确的结果的。

文章评论1条评论)

登录后参与讨论

用户518079 2011-3-9 23:10

看看keil C51的头文件里面对TH2和TL2的定义可知,他们的数据类型应该是2个字节的。
相关推荐阅读
天空的回忆 2021-03-26 10:50
技术与财富
做技术真的太艰辛,各位做技术的兄弟不要只想着技术,将技术转化为财富是非常重要的。多了解产品卖到哪去了?卖给谁了?产品生产流程? 总之就是整个产品的来龙去脉都要去了解。技术之外,不必深入,只求了解。我一...
天空的回忆 2014-05-28 15:40
办公室一开空调就头晕
  不知是我的问题还是空调有问题, 总之开空调超过半小时就会头晕, 跟同事说开空调我头晕,但他开了窗,离窗近, 总之空调还是开着,晕得也不是严重,只是没法工作, 在家里吹空调是...
天空的回忆 2014-01-17 18:31
回归生活
      又过一年,人已近三十,幸而买了房,虽每月需还两千贷款.但总也比之前孤魂野鬼的感觉要好一点点.怎么说呢,心里还是有些许的小闷.毕竟人都不会满足现状.遗憾的是驾照还没考到.要不然明年可...
天空的回忆 2013-10-12 16:09
毕业6年多了
  毕业6年多了,曾经痛不欲生的感觉离好远了,却依旧仿佛在昨天,这些年过得好辛苦.别了,曾经被压榨的岁月.离开了冷血台湾公司,现在一家小公司写写AVR软件,基本也不用加班,而且也不记迟到,只是...
天空的回忆 2012-06-05 11:02
又过一年
    又过了一年,我还在这家公司。忍受着不具备一点电子工程师素质的主管对我指手画脚。他没技术其实也很正常。但别自以为自己很懂啊。有时候感觉简直像个笑话。     唉,为了这5500块的工资。...
天空的回忆 2011-07-12 17:23
低电复位
    单片机基本都有低电压复位功能。本人前几天遇到非常头痛的问题。     公司有一个日本ISDB-T的机顶盒项目。用的是SHARP的数字电视模组的,单片机只负责跟模组通信控制其启动及把接收到的按键...
我要评论
1
7
关闭 站长推荐上一条 /2 下一条