找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5248|回复: 6
打印 上一主题 下一主题
收起左侧

关于51单片机16位计数器的值的读取问题

[复制链接]
跳转到指定楼层
楼主
ID:248705 发表于 2018-3-28 00:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问大家51单片机16位计数器的计数值在内存里是怎么存在的,我知道分高八位和低八位,但是读取计数值的时候这一句uint num;num=(8<<TH1)+TL1;TH1左移八位,那高八位的值不就是0了吗。。。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:164602 发表于 2018-3-28 07:29 | 只看该作者
语句好像不对吧?!
num=TH1;
num=num<<8;//移到高8位去
num=num+TL1;
可能我这样写,复杂了,但思路就是这样的。两个8位合并为16位。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:287575 发表于 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,这样好理解了吧

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:280682 发表于 2018-3-28 09:51 | 只看该作者
本帖最后由 51hei520 于 2018-3-28 10:37 编辑

num = (uint)TH1 << 8 + TL1

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:248705 发表于 2018-3-28 10:54 | 只看该作者
HC6800-ES-V2.0 发表于 2018-3-28 07:29
语句好像不对吧?!
num=TH1;
num=num

确实有些不严谨,我知道问题所在了,谢谢你的帮助!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:248705 发表于 2018-3-28 10:55 | 只看该作者
zhangxiaozi 发表于 2018-3-28 08:52
假设num=0000000000000000,TH1=0X55=01010101
num=TH1
num=0000000001010101

明白了,大神级回答,谢谢啦!
回复

使用道具 举报

7#
ID:297224 发表于 2018-3-28 20:19 | 只看该作者
num = (uint)TH1 << 8 + TL1
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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