51 機(jī)器周期 時(shí)鐘周期 晶振頻率 定時(shí)器初值計(jì)算
1 機(jī)器周期
本文引用地址:http://butianyuan.cn/article/201611/318662.htm在計(jì)算機(jī)中,為了便于管理,常把一條指令的執(zhí)行過程劃分為若干個(gè)階段,每一階段完成一項(xiàng)工作。例如,取指令、存儲(chǔ)器讀、存儲(chǔ)器寫等,這每一項(xiàng)工作稱為一個(gè)基本操作。完成一個(gè)基本操作所需要的時(shí)間稱為機(jī)器周期(如單片機(jī)中“計(jì)數(shù)器”完成加1這個(gè)過程也是一個(gè)機(jī)器周期)。一般情況下,一個(gè)機(jī)器周期由若干個(gè)S周期(時(shí)鐘周期)組成。通常用內(nèi)存中讀取一個(gè)指令字的最短時(shí)間來規(guī)定CPU周期,(也就是 計(jì)算機(jī)通過內(nèi)部或外部總線進(jìn)行一次信息傳輸從而完成一個(gè)或幾個(gè)微操作所需要的時(shí)間)),它一般由12個(gè)時(shí)鐘周期組成。
2 時(shí)鐘周期
時(shí)鐘周期=1秒/晶振頻率,晶振頻率的值即為時(shí)鐘頻率的值。因此單片機(jī)的機(jī)器周期=12秒/晶振頻率。
3 晶振頻率
單片機(jī)開發(fā)板、學(xué)習(xí)板成型之時(shí)相應(yīng)的晶振頻率也已經(jīng)被確定了。51單片機(jī)常用的晶振頻率有11.059 2MHz、12MHz或其它值,^-^。
4 定時(shí)器初值計(jì)算
定時(shí)器一旦被啟動(dòng),它就會(huì)在原來初值的基礎(chǔ)之上加1,當(dāng)計(jì)滿時(shí)重新歸0。51單片機(jī)的定時(shí)器寄存器為16位,假設(shè)此51單片機(jī)的晶振頻率為12MHZ,則根據(jù)機(jī)器周期概念及機(jī)器周期、時(shí)鐘周期、晶振頻率關(guān)系可知機(jī)器周期(即計(jì)數(shù)一次的時(shí)間)= 12 * (1 / 12MHZ) = 1us。這就表明,此51單片機(jī)的定時(shí)寄存器實(shí)現(xiàn)加1操作這個(gè)過程將要花1us的時(shí)間[ “計(jì)數(shù)這個(gè)硬件結(jié)構(gòu)”達(dá)到加1的結(jié)果需要12個(gè)脈沖(或高電平) 么],如果此16位寄存器從0開始計(jì)數(shù),則計(jì)到此寄存器下次為0時(shí)需要計(jì)2的16次方(65536)個(gè)數(shù)(計(jì)滿只需要65535個(gè)數(shù)),所以定時(shí)器一次最多可以計(jì)時(shí)65536us。
如果現(xiàn)在需要定時(shí)器每次定時(shí)時(shí)間T少于65536us,則需要給定時(shí)器寄存器設(shè)一個(gè)初值N。根據(jù)計(jì)m個(gè)數(shù)就對應(yīng)m us可得N = (65536 - T)。得到的N值就是需要裝入定時(shí)器寄存器的值。
咱們的51單片機(jī)定時(shí)器寄存器為16位,分高8位THn和低8位TLn(n=0, 1, 2).....,一般咱還得以8位為單位進(jìn)行裝值。將高8位THn裝入N / 256(取模),將低8位TLn裝入 N % 256即可,這兩種運(yùn)算得到的結(jié)果都是10進(jìn)制的,將得到的值換算為二進(jìn)制(或16)再裝入高、低8位。得到定時(shí)器初值計(jì)算公式:
THn = (65536 - T) / 256
TLn = (65536 - T) % 256
其中THn,TLn表示響應(yīng)定時(shí)器寄存器的高低8位。T表示需要被定時(shí)的微秒數(shù), ‘/’表示取模運(yùn)算, ‘%’表示取余運(yùn)算
為什么對高8位取模對低8位取余就可以呢?
圖1. N 取模 取余原理圖
圖中將8個(gè)二進(jìn)制位看成一個(gè)單位,低8位表示數(shù)的范圍[0, 255],高8位表示數(shù)的范圍[0, 255 * 256],得到高8位是低8位的256倍。不防將此16位表示的十進(jìn)制數(shù)看成256進(jìn)制數(shù)。,然后對數(shù)的求模值放在256位(此位的值等于實(shí)際值(8位二進(jìn)制換算得來)乘以權(quán)值256),對數(shù)的求余放在個(gè)位(此位的值等于實(shí)際值(8位二進(jìn)制換算得來)乘以權(quán)值1),然后將得來的數(shù)求和就是此數(shù)了。就相當(dāng)于一個(gè)十進(jìn)制數(shù)K一樣,K取10 的模得到十位的值,K取10的余得到個(gè)位的值。沒注意就想到了這點(diǎn),忽悠出來一個(gè)256進(jìn)制數(shù)的求模求余算法。
我猜一下:我覺得關(guān)于十進(jìn)制數(shù)的算法應(yīng)該是符合任意一種進(jìn)制數(shù)的算法的,小學(xué)的數(shù)學(xué)只是以十進(jìn)制為載體,思想可用于任意進(jìn)制數(shù),然后數(shù)也可以是任意進(jìn)制的,看此進(jìn)制數(shù)在現(xiàn)實(shí)生活中的用途來決定其出現(xiàn)的頻率了
評論