这是,我在网上看见别人写的程序
while(1)
{
th1=TH0;
tl=TL0;
th2=TH0;
if(th1=th2) 这里判断是否相同
break;
val=th1*256+tl;
}
我的疑问是:计数器到底是先从高八位开始计数,还是第八位?在我的印象中不是第八位记满以后,才开始从高八位开始记吗?为什么他却去判断高八位,前后两次是否是相同的电平呢?
我还不理解的就是,高八位为啥要乘以256,难道这是2进制转换为16进制吗?
希望有知道的朋友可以告诉我,非常感谢!!!
各位大牛,我想问:我把51单片机的定时器TO出于计数器模式,但是计数值的高八位,为什么要乘以256呢?
答案:3 悬赏:0 手机版
解决时间 2021-02-02 00:13
- 提问者网友:浩歌待明月
- 2021-02-01 09:11
最佳答案
- 五星知识达人网友:佘樂
- 2021-02-01 10:17
乘以256是左移八位的意思吧,256=2^8
数据是优先存储在低八位,程序的意思是th1低位存储的内容向左移八位和tl数字相加,直到高八位和th2相同的话,中断。
数据是优先存储在低八位,程序的意思是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位数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯