一直困扰我的一个51问题

2020-02-03 10:08发布

51定时器初值计算比如TH0=(65536-50000)/256;TL0=(65536-50000)%256;以前我从来没这样用过,我直接用计算器算的,但是很久以前我看过别人这么算!我就郁闷了好久,后来没多想,就忘记了,但是今天我突然看就又有人这么写。。所以想问个彻底明白。。。为何/256就得高8位??%256就得第八位??。。。。/256还好理解:相当于右移8位,当然得到高8位。。。但是%256为何就能直接得到低8位??原理是什么?谁能解释一下?比画比画一下。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
catwill
1楼-- · 2020-02-03 12:04
%是取余数吧?
myqiang1990
2楼-- · 2020-02-03 13:00
回复【1楼】catwill  
-----------------------------------------------------------------------

但是为什么要选择256求余?其实最不明白的是为何对256求余就会得到低8位?它的过程是怎么样的??、、、这点难理解。。。/256倒是比较好理解。。右移8位..直接得到高8位。。。
yoko
3楼-- · 2020-02-03 15:16
说通俗点,一个字节最大可以表示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,说得很罗嗦, 不知道你理解没有。
geniuskim
4楼-- · 2020-02-03 16:50
 精彩回答 2  元偷偷看……
YL_L
5楼-- · 2020-02-03 19:06
① TH0,TL0是八位的寄存器 最大值为0xFF(255)
② 对于任意一个数 Num  它的个位数是Num%10
                       它的十位数是Num/10

如果理解这些就会理解上面的
myqiang1990
6楼-- · 2020-02-03 21:07
回复【3楼】yoko  
-----------------------------------------------------------------------

O.O...这就有点明了了。。。。

一周热门 更多>