偶是个单片机初学者,昨晚上鼓捣单片机,惊现一段诡异的程序:
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微秒 |