永发信息网

各位大牛,我想问:我把51单片机的定时器TO出于计数器模式,但是计数值的高八位,为什么要乘以256呢?

答案:3  悬赏:0  手机版
解决时间 2021-02-02 00:13
  • 提问者网友:浩歌待明月
  • 2021-02-01 09:11
这是,我在网上看见别人写的程序
while(1)
{
th1=TH0;
tl=TL0;
th2=TH0;
if(th1=th2) 这里判断是否相同
break;
val=th1*256+tl;
}
我的疑问是:计数器到底是先从高八位开始计数,还是第八位?在我的印象中不是第八位记满以后,才开始从高八位开始记吗?为什么他却去判断高八位,前后两次是否是相同的电平呢?
我还不理解的就是,高八位为啥要乘以256,难道这是2进制转换为16进制吗?
希望有知道的朋友可以告诉我,非常感谢!!!
最佳答案
  • 五星知识达人网友:佘樂
  • 2021-02-01 10:17
乘以256是左移八位的意思吧,256=2^8
数据是优先存储在低八位,程序的意思是th1低位存储的内容向左移八位和tl数字相加,直到高八位和th2相同的话,中断。
全部回答
  • 1楼网友:过活
  • 2021-02-01 10:58
外部脉冲接t0或t1,看你用哪个计数器。 你用的是查询方式,用中断的话,要打开中断(总中断和定时中断还有启动定时器),溢出 时,中断产生,程序会自动转到中断入口地址, 进入中断子程序 。 初始化和你c一样的,只是程序 开头要有个入口地址,指向中断子程序 org 00h ajmp main org 0bh ;定时器t0中断 ajmp t0int main: ...
  • 2楼网友:千夜
  • 2021-02-01 10:51
T0的计数值,是16位数。 读出时,只能每次读出8位。 需要读出两次。 而T0的计数值,是动态的。 先、后读出的,难保是同一个16位数字。 为此,要读出一遍,再读出一遍。。。。 当,先后两次相同时,才能认为读出了同一个数,BREAK,退出读数的操作。 高八位乘以256,加上低八位,就是合成为16位数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯