51单片机C编程中关于计数器的问题

[复制链接]
查看11 | 回复3 | 2008-11-4 10:56:23 | 显示全部楼层 |阅读模式
下面的程序是利用定时器1中断服务程序计数并用数码管显示数值部分
tmp=TH0*256+TL0和tmp=TH0|(TH0<<8)分别是什么意思
不好意思笔误了后面是tmp=TL0|(TH0〈〈8)

回复

使用道具 举报

千问 | 2008-11-4 10:56:23 | 显示全部楼层
我有些看明白了,不过按照通常的思维,这里的第二句是有问题的,首先看了“tmp=TH0*256+TL0”,可以一般推断tmp为无符号的int类型的数据,这里应该是定时器的初值,如果tmp声明为“unsigned int”类型的数据的话,应该是没有问题的。至于第二句“tmp=TH0|(TH0<<8)”,估计原来作者的意思是想把一次性把tmp的值赋完(高8位和低8位都为TH0的值),,可是,有一点没有注意到,这里的TH0是8位的,即使tmp声明为“unsigned int”类型的数据,其值还是为TH0中的数据,如果作者的意图被我猜对的话,可以这样进行(已经声明tmp为“unsigned int”类型的数据):tmp=TH0;
/...
回复

使用道具 举报

千问 | 2008-11-4 10:56:23 | 显示全部楼层
前一句就是让tmp=T0的值,TH0*256中的256用HEX表示就是0x100,假如TH0=0x56那*0x100就是等于0x5600了,然后再加上TL0的部分那tmp就是T0的值。后一句不大明白为什么这样写,TH0<<8 左移8次那任何一个一字节的数都应该变0了,TH0再|上0那还是等于TH0的值,所以tmp就等于TH0了。...
回复

使用道具 举报

千问 | 2008-11-4 10:56:23 | 显示全部楼层
tmp应该是一个unsigned int类型tmp=TH0*256+TL0是取定时器当前值,tmp=TH0|(TH0<<8)相当于tmp = TH0 * 256 + TH0...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行