新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51 機器周期 時鐘周期 晶振頻率 定時器初值計算

51 機器周期 時鐘周期 晶振頻率 定時器初值計算

作者: 時間:2016-11-20 來源:網絡 收藏
背景:51單片機引出的概念。

1 機器周期

本文引用地址:http://2s4d.com/article/201611/318662.htm

在計算機中,為了便于管理,常把一條指令的執(zhí)行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期(如單片機中“計數器”完成加1這個過程也是一個機器周期)。一般情況下,一個機器周期由若干個S周期(時鐘周期)組成。通常用內存中讀取一個指令字的最短時間來規(guī)定CPU周期,(也就是 計算機通過內部或外部總線進行一次信息傳輸從而完成一個或幾個微操作所需要的時間)),它一般由12個時鐘周期組成。

2 時鐘周期

時鐘周期=1秒/晶振頻率,晶振頻率的值即為時鐘頻率的值。因此單片機的機器周期=12秒/晶振頻率。

3 晶振頻率

單片機開發(fā)板、學習板成型之時相應的晶振頻率也已經被確定了。51單片機常用的晶振頻率有11.059 2MHz、12MHz或其它值,^-^。

4 定時器初值計算

定時器一旦被啟動,它就會在原來初值的基礎之上加1,當計滿時重新歸0。51單片機的定時器寄存器為16位,假設此51單片機的晶振頻率為12MHZ,則根據機器周期概念及機器周期、時鐘周期、晶振頻率關系可知機器周期(即計數一次的時間)= 12 * (1 / 12MHZ) = 1us。這就表明,此51單片機的定時寄存器實現加1操作這個過程將要花1us的時間[ “計數這個硬件結構”達到加1的結果需要12個脈沖(或高電平) 么],如果此16位寄存器從0開始計數,則計到此寄存器下次為0時需要計2的16次方(65536)個數(計滿只需要65535個數),所以定時器一次最多可以計時65536us。

如果現在需要定時器每次定時時間T少于65536us,則需要給定時器寄存器設一個初值N。根據計m個數就對應m us可得N = (65536 - T)。得到的N值就是需要裝入定時器寄存器的值。

咱們的51單片機定時器寄存器為16位,分高8位THn和低8位TLn(n=0, 1, 2).....,一般咱還得以8位為單位進行裝值。將高8位THn裝入N / 256(取模),將低8位TLn裝入 N % 256即可,這兩種運算得到的結果都是10進制的,將得到的值換算為二進制(或16)再裝入高、低8位。得到定時器初值計算公式:

THn = (65536 - T) / 256

TLn = (65536 - T) % 256

其中THn,TLn表示響應定時器寄存器的高低8位。T表示需要被定時的微秒數, ‘/’表示取模運算, ‘%’表示取余運算

為什么對高8位取模對低8位取余就可以呢?

圖1. N 取模 取余原理圖

圖中將8個二進制位看成一個單位,低8位表示數的范圍[0, 255],高8位表示數的范圍[0, 255 * 256],得到高8位是低8位的256倍。不防將此16位表示的十進制數看成256進制數。,然后對數的求模值放在256位(此位的值等于實際值(8位二進制換算得來)乘以權值256),對數的求余放在個位(此位的值等于實際值(8位二進制換算得來)乘以權值1),然后將得來的數求和就是此數了。就相當于一個十進制數K一樣,K取10 的模得到十位的值,K取10的余得到個位的值。沒注意就想到了這點,忽悠出來一個256進制數的求模求余算法。

我猜一下:我覺得關于十進制數的算法應該是符合任意一種進制數的算法的,小學的數學只是以十進制為載體,思想可用于任意進制數,然后數也可以是任意進制的,看此進制數在現實生活中的用途來決定其出現的頻率了



評論


技術專區(qū)

關閉