电子说
TL0=(65536-50000)%256; 这两个是什么意思呢??为什么要是256,是固定的吗???在知道里看到了答案,可是还是不大懂,
这是网上的:
标准答案:定时器0设置于模式1时,计数寄存器为16位模式,由高8位TH0和低8位TL0两个8位寄存器组成,当设定计算值为65536-50000=15536(D)时,转换为十六进制就是3CB0(H),此时,TH0=3C,TL0=B0分别装入即可,为了免除这些计算步骤,很多编程者采用“TH0=(65536-50000)/256;TL0=(65536-50000)%256“的编程方式,去让单片机自己去计算结果,那么为什么要介入256呢?其实并不难理解,做一下10——16进制的换算就知道了,256(D)=0100(H),这里01就是高8位的数据,00就是低8位的数据,通俗点说,15536(D)里有多少个256,就相当于高8位有多少数值,就是除的关系了,商存入高8位寄存器后余下的数存入低8位即可,取商计算就是TH0=(65536-50000)/256;而取余计算就是TL0=(65536-50000)%256 。
答案:定时器工作于模式一时,计数器是16位的,16位的二进制可以表示0~2^16(65535),计数器时向上计数的,一个一个数的加,首先要设置它的计数初值(不设置默认为0),如果要它每数50000次溢出一次产生中断,那么初值就是2^16-50000+1=15536,现在将15536这个初值装到TH0和TL0中就行了,但是由于51是8位单片机,每次只能处理8位数据,所以就要将15536分成高8位和低8位分别给TH0和TL0,15536/256就是将高八位取出,15536%256就是将低八位取出,类似于十进制中25/10=2.。..。.5,将十位2和个位5取出一样。说白了就是数制的转换。
全部0条评论
快来发表一下你的评论吧 !