1. 程式人生 > >51微控制器的定時器扯淡

51微控制器的定時器扯淡

        今天有同學問起來微控制器定時器一些問題 索性寫來吧  哈哈 寫下來裝個X  各位不要介意  希望可以讓微控制器新手更好的理解一下定時器吧   哈哈哈 

首先 來說一下幾個幾個概念性的東西 可不要小瞧這個小玩意    如果不知道這些基本的真的很難理解好定時器這個東西  好了 扯淡完畢  進入正題

重點介紹一下   我們經常聽到的一些東西  比如 :  65536   1US   12MHZ   11.0592MHZ    (65536-N)/256   (65536-N)%256  增計數  減計數 大概就是這些玩意了   

好 第一個 首先來介紹 這個1US 到底怎麼回事哈    這樣直白的說點 1US就是微控制器的一個機器週期  我印象中所謂的機器週期就是微控制器執行一條單週期指令所花費的時間    那麼 為什麼一個機器週期是1US呢  這裡我直接拿出來這個 公式 大家只需要知道存在這個規律就可以了 如果想詳細瞭解一下的下 我最後會附上一個關於各個週期的詳細介紹 有興趣可以去看一下  

公式: 機器週期=6個狀態週期=12個時鐘週期(震盪週期)

這裡有必要說一下時鐘週期和你微控制器晶振頻率的關係哈   我說的再詳細點哈  請問週期的單位是什麼  是什麼?  是時間啊  S  MS   US  那麼頻率的單位是什麼  HZ啊   這裡HZ和S對應  一次類推

告訴我高中學的週期和頻率的關係是什麼?

就是那個那個那個   : 頻率的倒數是週期啊   即  時鐘週期=1/晶振頻率  T=1/f;

那麼對於51微控制器來說   我們假設他的晶振頻率是12MHZ  那麼:時鐘週期=(1/12 MHZ) (秒 S)=(1/12 000 000 HZ)(秒S)

 上面說過了  機器週期=12個時鐘週期  所以:

機器週期=12*(1/12 000 000 )(秒S)=1/1 000 000(S)  算出us就是1us了  這就是1us的來源  那我們經常聽到的11.0592MH又是怎回事呢  其實我們一般使用的51微控制器中晶振頻率都是11.0592MHZ的   至於為什麼使用這個   這裡不扯了  那你會發現大多數老師的課堂上喜歡拿12MHZ的說事   原因其實很簡單啦   就是因為用12MHZ來計算機器週期的時候恰好是1us這個整數啦   就這麼簡單  沒有別的原因啦 應該   那麼現在你自己可以計算一下你自己現實中使用的板子 的機器週期是多少了吧   都說到這樣了  應該能明白了吧  嘿嘿   好  繼續下一個問題 

2:65536 

這個數值是我們新手在使用定時器的時候幾乎無法避免的一個問題     我們都知道 51的定時器的其中一種計數方式是16位的  那麼16位是個什麼概念呢(其實這樣理解不是很合適  但是沒關係啦  )  其實就是16個二級制位  那麼16和二進位制位最大是多少?    最小是多少 ?

最大就是16和1啦 :  1111 1111 1111 1111

那麼 也就是這個16位的計數器最大可以裝到的值啦  根據二進位制的規律  你把這個數看成一個等比數列  分別是   2^0*1    2^1*1........2^16*1  好吧 這樣 根據那個等比數列求和就OK啦  就可以得到65535  哎呀 咋不是65536類 兄弟啊 這個自己去考慮吧  

那麼最小就都是0啦  

3:   (65536-N)/256   (65536-N)%256 

我們在寫定時器程式碼的時候 會經常看到  TH0=(65536-N)/256    TL0=(65536-N)%256 

這又是怎麼回事  上面 說了這個計數器啊 是一個16位的  他是由兩個八位的暫存器組成的比如8+8=16嘛   這兩個暫存器是有高低之分的   其中一個呢 叫高八位 另一個就叫低八位  就是這樣比如  11111111  11111111

  高八位       低八位

當定時器開始計數的時候  TH0(高八位)   和TL0(低八位)就開始計數了  那怎麼計數呢  首先是低八位 從你裝的那個初值 開始計數  比如你初值TL0=56;那麼開始計數後TL0每過一個機器週期就加1  因為TL0是八位的嘛  所以最大可以加到255 當在加的時候 就會向高八位進位啦  就是進1啦  所以才有了    不行了 累了 不寫了  拉倒 哈哈哈哈

以後有時間在完善吧 

最後 宣告一下 :上文中很多術語說的不得當   有的純粹為了好理解