51单片机 自动重装载值计算
單片機在不同的方式下,有不同的最大值。咱們現在針對單片機的方式1,設最大值為M。那么M的值應該是:
M=2^16 = 65535
因為定時器是在一直加1計數的,并且在達到并且超過M的值的時候產生一個中斷,因此咱們的初值可以這樣定義:
X=M-計數值
何為計數值。可以這樣理解,我們如果想定時1ms,那么在這1ms內,計數值就是單片機定時器一直加1的次數(加了多少個1)。
?
在舉一個具體的例子:
單片機頻率F=11059200,利用定時器0,模式1產生一個5ms定時中斷。
?
首先咱們應該得到單片機的實際運行的頻率,咱們知道,默認是經過了12分頻的,所以:
f = F / 12 = 921600 (Hz)
在f下,單片機定時器每次加1的時間是
T = 1/ f = 1.085 X 10-6(S)
已知總的時間(5ms),已知定時器每次加1的時間(T),那么在5ms內,定時器可以加多少個1呢?
G = 5ms / T = 4608 (個)
這個G=4608就是計數值,初值
X= 65535 – 4608 = 60927
然后:
TH0 = X >> 8 ;
TL0 = X ;
?
至此關于自動重裝載值(TH0,TL0)的計算已經全部計算完了。
?
下面咱們再來驗證一下,初值為60927是否真的可以定時5ms。
?
首先,計算需要加多少個1,才會產生溢出。
Y = 65535 – 60927 = 4608(個)
然后,根據前面的計算,已知每次加1的時間為
T = 1/ f = 1.085 X 10-6(S)
那么初值為60927產生的定時時間應該是:
Time = T X Y
?? = 4608 X 1.085 X 10-6 (S
?? = 4.999 ms
?
?
綜上所述,前面推論完全正確
總結
以上是生活随笔為你收集整理的51单片机 自动重装载值计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++——指针2
- 下一篇: C++——类访问修饰符