一直困扰我的一个51问题
51定时器初值计算比如TH0=(65536-50000)/256;TL0=(65536-50000)%256;以前我从来没这样用过,我直接用计算器算的,但是很久以前我看过别人这么算!我就郁闷了好久,后来没多想,就忘记了,但是今天我突然看就又有人这么写。。所以想问个彻底明白。。。为何/256就得高8位??%256就得第八位??。。。。/256还好理解:相当于右移8位,当然得到高8位。。。但是%256为何就能直接得到低8位??原理是什么?谁能解释一下?比画比画一下。。。 %是取余数吧? 回复【1楼】catwill-----------------------------------------------------------------------
但是为什么要选择256求余?其实最不明白的是为何对256求余就会得到低8位?它的过程是怎么样的??、、、这点难理解。。。/256倒是比较好理解。。右移8位..直接得到高8位。。。 说通俗点,一个字节最大可以表示0XFF,即255,从0-255共256个数,那么51的定时器是16位的,也就是2个字节,我们暂用H表示高字节,L表示低字节,用HL表示一个16位的整数;那么当L递增到255+1时,就会向H进位,这时L==0, H==1, 可以看出H是以每256加1的,以此类推 当 H=255,L=255,再递增就都溢出变成0了,H==0,L==0;HL/256整除就得到了高位的字节H,相当于表示有多少个256, HL%256求余数就得到了 低位字节L. 逆过程就是 HL==H*256+L,也可以像你理解的这种形式,HL=H, HL=HL<<8|L,说得很罗嗦, 不知道你理解没有。 POW(2,8)=256 ① TH0,TL0是八位的寄存器 最大值为0xFF(255)
② 对于任意一个数 Num它的个位数是Num%10
它的十位数是Num/10
如果理解这些就会理解上面的 回复【3楼】yoko
-----------------------------------------------------------------------
O.O...这就有点明了了。。。。 回复【5楼】YL_L
① th0,tl0是八位的寄存器 最大值为0xff(255)
② 对于任意一个数 num它的个位数是num%10
它的十位数是num/10
如果理解这些就会理解上面的
-----------------------------------------------------------------------
ls解释的太透彻了 这个不困惑吧,很直白了 hehe 3楼解释的清晰明了,so good 新手 努力!! 是编译器预处理时就计算了的,没什么秘密的 说明你对2进制,8进制,16进制理解和使用习惯还没到像10进制的那种地步
忘记10进制吧 取余是得到不足256的部分即后8位 一个数对2^8(既256)进行求余,余数不是那个数的低8位吗 yoko 发表于 2011-6-28 07:44 static/image/common/back.gif
说通俗点,一个字节最大可以表示0XFF,即255,从0-255共256个数,那么51的定时器是16位的,也就是2个字节, ...
解释得真好,学习了!
页:
[1]