标题: 关于51单片机16位计数器的值的读取问题 [打印本页]

作者: 的花朵    时间: 2018-3-28 00:02
标题: 关于51单片机16位计数器的值的读取问题
请问大家51单片机16位计数器的计数值在内存里是怎么存在的,我知道分高八位和低八位,但是读取计数值的时候这一句uint num;num=(8<<TH1)+TL1;TH1左移八位,那高八位的值不就是0了吗。。。


作者: HC6800-ES-V2.0    时间: 2018-3-28 07:29
语句好像不对吧?!
num=TH1;
num=num<<8;//移到高8位去
num=num+TL1;
可能我这样写,复杂了,但思路就是这样的。两个8位合并为16位。
作者: zhangxiaozi    时间: 2018-3-28 08:52
假设num=0000000000000000,TH1=0X55=01010101
num=TH1
num=0000000001010101
左移一位
num=00000000101010
再移动一位
num=00000001010100
移动8次后
num=0101010100000000=0x5500
低八位全零,留给TL0了,再一加tl0,就可以把两个八位的单字节变成一个16位的整形了
左移8位相当于乘了256
uint num;num=(8<<TH1)+TL1等同于 uint num;num=TH1*256+TL1,这样好理解了吧
作者: 51hei520    时间: 2018-3-28 09:51
本帖最后由 51hei520 于 2018-3-28 10:37 编辑

num = (uint)TH1 << 8 + TL1
作者: 的花朵    时间: 2018-3-28 10:54
HC6800-ES-V2.0 发表于 2018-3-28 07:29
语句好像不对吧?!
num=TH1;
num=num

确实有些不严谨,我知道问题所在了,谢谢你的帮助!
作者: 的花朵    时间: 2018-3-28 10:55
zhangxiaozi 发表于 2018-3-28 08:52
假设num=0000000000000000,TH1=0X55=01010101
num=TH1
num=0000000001010101

明白了,大神级回答,谢谢啦!
作者: tstzyk    时间: 2018-3-28 20:19
num = (uint)TH1 << 8 + TL1




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1