单片机程序TH0=(65536-50000)/256;是什么意思?

电子说

1.2w人已加入

描述

  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取出一样。说白了就是数制的转换。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分