時鐘週期:
時鐘週期也叫振盪週期或晶振週期,即晶振的單位時間發出的脈衝數,一般有外部的振晶產生,比如12mhz=12×10的6次方,即每秒發出12000000個脈衝訊號,那麼發出乙個脈衝的時間就是時鐘週期,也就是1/12微秒。通常也叫做系統時鐘週期。是計算機中最基本的、最小的時間單位。
在8051微控制器中把乙個時鐘週期定義為乙個節拍(用p表示),二個節拍定義為乙個狀態週期(用s表示)。
機器週期:
在計算機中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、儲存器讀、儲存器寫等,這每一項工作稱為乙個基本操作。完成乙個基本操作所需要的時間稱為機器週期。一般情況下,乙個機器週期由若干個s週期(狀態週期)組成。8051系列微控制器的乙個機器週期同6個s週期(狀態週期)組成。前面已說過乙個時鐘週期定義為乙個節拍(用p表示),二個節拍定義為乙個狀態週期(用s表示),8051微控制器的機器週期由6個狀態週期組成,也就是說乙個機器週期=6個狀態週期=12個時鐘週期。
在標準的51微控制器中,一般情況下,乙個機器週期等於12個時鐘週期,也就是機器週期=12*時鐘週期,(上面講到的原因)如果是12mhz,那麼機器週期=1微秒。微控制器工作時,是一條一條地從rom中取指令,然後一步一步地執行。微控制器訪問一次儲存器的時間,稱之為乙個機器週期,這是乙個時間基準。
機器週期不僅對於指令執行有著重要的意義,而且機器週期也是微控制器定時器和計數器的時間基準。例如乙個微控制器選擇了12mhz晶振,那麼當定時器的數值加1時,實際經過的時間就是1us,這就是微控制器的定時原理。
但是在8051f310中,cip-51 微控制器核心採用流水線結構,與標準的 8051 結構相比指令執行速度有很大的提高。在乙個標準的 8051 中,除 mul和 div以外所有指令都需要 12 或 24 個系統時鐘週期,最大系統時鐘頻率為 12-24mhz。而對於 cip-51 核心,70%的指令的執行時間為 1 或2個系統時鐘週期,只有 4 條指令的執行時間大於 4 個系統時鐘週期。 所以在計算定時器的
值時要注意這裡的變化。
指令週期
指令週期是執行一條指令所需要的時間,一般由若干個機器週期組成。指令不同,所需的機器週期數也不同。對於一些簡單的的單位元組指令,在取指令週期中,指令取出到指令暫存器後,立即解碼執行,不再需要其它的機器週期。對於一些比較複雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器週期。
系統時鐘:
系統時鐘:系統時鐘就是cpu指令執行的頻率,這個才是cpu真正的頻率。 微控制器內部所有工作,都是基於由晶振產生的同乙個觸發訊號源,由這個訊號來同步協調工作步驟,我們把這個訊號稱為系統時鐘,系統時鐘一般由晶振產生,但在微控制器內部系統時鐘不一定等於晶振頻率,有可能小於晶振頻率,也有可能大於晶振頻率,具體是多少由微控制器內部結構決定,正常情況和晶振頻率會存在乙個整數倍關係。系統時種是整個微控制器工作節奏的基準,它每振盪一次,微控制器就被觸發執行一次操作。
一般來說,微控制器只有乙個時鐘源.用了外部晶振,就不用內部rc,用了內部rc,就不用外部晶振.振盪器振盪,產生週期波.微控制器在這樣的週期波的作用一下有規律的一拍一拍的工作,波的頻率越高,單片工作得就越快,波的頻率越低,微控制器工作得就越慢。
有了以上的概念以後,就可以正確的理解定時器的工作原理了,在8051f310微控制器中,有3個定時器,如果定時器1工作在模式1下,如工作模式1下,是16位的計時器,最大數值是65535,當再加1時(=65536),就會發生溢位,產生中斷,所以如果我們要它計1000個數, 那麼定時初值就是65536-1000,結果就是64536,這個值送給th、tl,因為是16進製制的,所以高位是64536/256取商,低位是64536%256取餘。
再者,就是每一計數的時間是多久?一般我們取12m晶振時,乙個週期剛好是1us,計數1000個就是1ms,這是因為標準的51微控制器是12時鐘週期的(stc有6時鐘和1時鐘方式)。那麼,如果我們晶振是12m,就比較好算,如果是其它的,就用12去除好了。比如是6m的,那麼就是12/6=2,每個計數是2us,
那麼你要定時1ms就只要計數500個即可以。
定時器的初值跟定時器的工作方式,跟晶振頻率都有關係。乙個機器週期tcy=晶振頻率x12,計數次數n=定時時間t/機器週期tcy,那麼初值就x=65536-n,得出的數化成十六進製制就行了。這裡是用定時器o工作方式1做例子,如果是其它工作方式,就不能是65535了。工作方式0是8192,方式2,3是256。這裡有乙個公式:
th=(65536-time/(12/ft))/256
其中,time就是要延時的100ms(要取100000us),ft是晶振頻率。這個式子又可以簡化成
th=(65536-time*ft/12)/256
tl=(65536-time*ft/12)%256
在一本書上還看到了這樣計算定時初值的:
th0=-(50235/256); //重灌100ms定時初值
tl0=-(50235%256); ///這裡使用的6m晶體,
這裡是6m晶體,延時100ms,那麼按上面講的原理,6m是每個計數為2us,100ms定時就是計數50000個。
那麼,定時器初值要 65536-50000=15536,轉成16進是3cb0。這就是要送給th(=3c) 和tl(=b0)的值。
程式中寫 th0=-(50235/256);其實它是這樣的th0=0x100-(50235/256); 在51中,取負數,其結果就是它的值取反+1,也可以用0x100(十進位制的256)去減,結果是多少呢?結果就是3c。
51微控制器 51系列微控制器的開發模板
這個是微控制器開發的模板,下面給些注釋和思路,開發的時候其實是經常使用的,之前也不懂,參加藍橋杯之後學習到的,如果有時間和機會,會結合前輩的這些思路,再寫個stm32和嵌入式下的開發模板,這個很有利於專案的設計開發。說明 適用於stc15f2k60s2微控制器,其他的類似,只需要改動相關的定時器設定...
新系列 51微控制器
考慮到部落格內容的太單調,我就新開了乙個系列 51微控制器系列 微控制器的控制方法還是使用c語言來控制所以在c語言這裡新開乙個系列 和c語言的程式相比,51微控制器的執行更加趨向於過程而非結果,也就是說微控制器輸出結果的方法使用執行程式的過程,也就是說一次一次的執行這個程式,來體現所需要的結果 和只...
51微控制器系列 基礎指令
這學期開始學習51微控制器,感覺比彙編簡單,關鍵是51的彙編有乙個好的ide,練習起來也比較方便,這個系列主要記錄51的學習經驗。下面是基礎指令的練習 org 0000h ljmp main org 0030h main clr c cy 0 setb c cy 1 mov a,1111 0000b...