| 
 
| 偶是个单片机初学者,昨晚上鼓捣单片机,惊现一段诡异的程序: TH0=-5000/256;
 TL0=-5000%256;
 上网一搜索,发现n多和我一样的初学者有这个疑问,后来一想,这应该是个常用的写法,查了几本基础知识的书,终于搞懂了,并且发现其中涉及很多有用的小知识。
 所以发帖记录一下,也为我在21IC发帖开个头,希望大家以后多多指教,论坛越办越好
 这里就以定时/计数器0为例吧,
 使用Tmer首先要依据定时时间给它赋初值X,n=8、13、16为定时寄存器位数
 定时时间Tout=(2^n-X)*机器周期T
 =(2^n-X)/机器频率f
 =(2^n-X)*(12/晶振频率fsos)
 这时,出现一个特例,就是选16位定时计数器,同时晶振12MHz,有这个公式:Tout=(2^16-X)*(1us)
 =(2^16-X)*(1us)
 =(25536-X)*(1us)
 在MCU中一个16位内存单元最大有效值为65535
 所以,Tout=(65536-X)*(1us)
 =(0-X)*(1us)=-X*(1us)=-X us
 又通过物理上关于单位的量纲可知:X即可以表示成单位为1的定时寄存器初值,也可以理解为单位为微妙的定时时间
 另外当将一个常数X赋值给一个16位单元时,若要求分高8位和低8位分别赋值时,可以用二进制的概念:
 TH0=X/256;TL0=X%256;
 这样就可以理解TH0=-5000/256; TL0=-5000%256;的含义了:就是定时5000微秒
 | 
 |