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啦 所以才有了 不行了 累了 不寫了 拉倒 哈哈哈哈
以後有時間在完善吧
最後 宣告一下 :上文中很多術語說的不得當 有的純粹為了好理解