TH0,TL0 是 2 个 8 位的寄存器,组成一个 16 位的定时寄存器
TH0 存放 15536 的高 8 位
可以这样写 TH0 = 15536/256
也可以这样写 TH0 = 15536 >> 8
TL0 存放 15536 的低 8 位
可以这样写 TL0 = 15536%256
也可以这样写 TL0 = 15536 & 0xff
甚至还能这样写 TL0 = 15536
效果都一样,只要把 15536 高8位给 TH0 ,15536 低8位给 TL0 就行
15536 mod 256指求出15536除256得出的余数,15536/256=60......176
因为单片机的寄存器是8位的,要把一个16位整形变量拆成两个字节分别填入高位字节和低位字节。
这就是一个简单的数学问题。
实际上对这种寄存器来说,还有一种更省事的方法,keil支持定义sfr16,
你定义个sfr16 TIMER0_LOAD = XXX;
然后直接写TIMER0_LOAD = 15536;即可,keil会自动转成两个字节操作。
c语言 int,char long short型数据均是整数,除以(/)一个数,会舍去余数,例如5/2=2.取余(%)得到余数,例如5%2=1。
TH0 TL0均为8位寄存器,TH0存放高8位数据,TL0存放低8位数据,2^8=256,TH0里面放除后的结果,TL0放取余的结果。
所以有
TL0 = value % 256;
TH0 = value / 256;
写法有很多,都是通用的。
TH0 = value / 256;
TH0 = value >> 8;
TL0 = value%256
TL0 = value&0xFF;
TL0 = value; // 会自动截取,取低8位