導航:首頁 > 操作系統 > 單片機初值計算

單片機初值計算

發布時間:2022-06-01 08:53:23

㈠ 51單片機各種位數定時器初值計算方法

對12MHz ,1個機器周期 1us ,12/fosc = 1us


方式0是13位定時器,最大時間間隔 = 2^13 = 8.192ms

方式1是16位定時器,最大時間間隔 = 2^16 = 65.536ms

方式2是8位定時器,最大時間間隔 = 2^8 = 0.256ms =256 us

方式3 僅適用於T0,此時T0分成兩個8位計數器,T1停止計數

當選用定時器的方式1時,設機器周期為Tcy,定時器產生一次中斷的時間為t,那麼需要計數的個數N=t/Tcy,裝入THX和TLX中的數分別為:

THX = (2^16 - N)/256 TLX = (2^16 -N )%256(此處的X為定時器0或定時器1)

公式為:(2^y - X)*Tcy = t

Tosc= 1/ fosc

一個機器周期 = 12個時鍾周期 = 12/fosc

溢出速率 = 1 / 溢出時間
故:初值X = 2^y – t/Tcy

THX = 高八位
TLX = 低八位

註:

X:定時器初值

N:計數值

y:定時器工作方式

fosc:晶振頻率

Tcy:機器周期,Tosc:時鍾周期
Tcy = 1/Tosc

㈡ 單片機中 定時器/計數器 的計數初值是怎麼計算得出的(計數和定時計算方式是否不同)--初學單片機

計數初值的計算:

定時或計數方式下計數初值如何確定:定時器選擇不同的工作方式,不同的操作模式其計數值均不相同。若設最大計數值為M,各操作模式下的M值為:

模式0:M=2^13=8192

模式1:M=2^16=65536

模式2:M=2^8=256

模式3:M=256,定時器T0分成2個獨立的8位計數器,所以THO、TLO的M均為256。

因為MCS-51的兩個定時器均為加1計數器,當初值到最大值(00H或0000H)時產生溢出,將TF位置1,可發出溢出中斷,因此計數器初值X的計算式為:X=M-計數值。

式中的M由操作模式確定,不同的操作模式計數器的長不相同,故M值也不相同。而式中的計數值與定時器的工作方式有關。

1、計數工作方式時

計數工作方式時,計數脈沖由外部引入,是對外部沖進行計數,因此計數值根據要求確定。其計數初值:X=M-計數值。

2、定時工作方式時

定時工作方式時,計數脈沖由內部供給,對機器周期進行計數,計數脈沖頻率fcont=fosc*1/12、計數周期T=1/fcont=12/fosc定時工作方式的計數初值X等於:

X=M-計數值=M-t/T=M-(fosc*t)/12

式中:fosc為振盪器的振盪頻率,t為要求定吋的時間。

(2)單片機初值計算擴展閱讀:

定時器工作方式的設定:

定時器有兩種工作方式:定時和計數。由TMOD的D6位和D2位決定,其中D6位決定T1的工作方式,D2位決定T0的工作方式。值為0時工作在定時方式,值為1時工作在計數方式。並且有四種操作模式:

1、模式0:13位計數器,TLi只用低5位。

2、模式1:16位計數器。

3、模式2:8位自動重裝計數器,THi的值在計數中不變, TLi 溢出時,THi中的值自動裝入TLi中。

4、模式3:T0分成2個獨立的8位計數器,T1停止計數。

㈢ 單片機定時器初值計算方法

T=(2的N次方-X)12/單片機晶振頻率
2 N為定時器的工作方式:
方式0時,N=13
方式1時,N=16
方式2時,N=8
注意晶振頻率,晶振頻率的十二分之一是機器頻率,再取倒數是機器周期,把定時時間換算成多少個機器周期,當作T代入上式求出X,然後把X化為二進制數,(以方式1定時器0為例)高八位存入TH1,低八位存入TL1

㈣ 51單片機定時器初值怎樣計算

首先要知道一個計時脈沖的周期,計時脈沖頻率是晶振頻率的1/12,晶振12M時,計時脈沖頻率是1MHz,周期是1us,因此定時1mS就是1000個脈沖,由於51定時器是加法計數,計數到最大值65536溢出,定時結束,產生中斷,因此初值應該寫為65536-1000,計數器分高8位和低8位,高8位的1代表256,低8位是不足256的那一部分,因此高8位初值為TH=(65536-1000)/256,低8位TL=(65536-1000)%256。

㈤ 51單片機我要產生一個0.5ms的中斷 初值是多少 怎麼計算

51單片機的晶振都要經過12分頻後給單片機執行指令的。
所以指令周期=1/(11.0592mhz/12)=1.085us。
如果定時器工作在方式1,也就是16位定時模式。那麼計數的值為0.5ms/1.085us=460.
那麼初值為2^16-1-460=65536-1-460=65075,轉換成十六進制也就是fe33。
分別加到高低8位,th0=0xfe;tl0=0x33。(假設是定時器0,工作方式1)

㈥ 單片機定時器初值計算

呵呵 幫你分析一下啊
定時時間2ms=(2的16次方-時間常數X)12/f 即晶振為12M f=12*1000000
2ms=(2的16次方-時間常數X)12/(12*1000000)
2*0.001=(2的16次方-時間常數X)12/(12*1000000)
2*0.001=(2的16次方-時間常數X)/(1000000)
2000=65536-時間常數X
時間常數X=65536-2000

TH0=(65536-2000)/256; 就是轉換成十六進制 再除以256 取整數 即高8位送時間常數寄存器的高8位計數器
TL0=(65536-2000)%256; 就是轉換成十六進制 再除以256 取余數 即低8位送時間常數寄存器的低8位計數器

哈哈 滿意就選滿意回答吧

㈦ 單片機,一秒的定時器初值怎麼算不要結果要過程謝了哈!

一。10MS定時器初值的計算:1.晶振12M12MHz除12為1MHz,也就是說一秒=1000000次機器周期。10ms=10000次
機器周期。65536-10000=55536(d8f0)TH0=0xd8,TL0=0xf02.晶振11.0592M11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。65536-9216=56320(dc00)TH0=0xdc,TL0=0x00二。50MS定時器初值的計算:1.晶振12M12MHz除12為1MHz,也就是說一秒=1000000次機器周期。50ms=50000次
機器周期。65536-50000=15536(3cb0)TH0=0x3c,TL0=0xb02.晶振11.0592M11.0592MHz除12為921600Hz,就是一秒921600次機器周期,50ms=46080次機器周期。65536-46080=19456(4c00)TH0=0x4c,TL0=0x00同理1MS定時器初值的計算:1.晶振12M12MHz除12為1MHz,也就是說一秒=1000000次機器周期。1ms=1000次
機器周期。65536-1000=15536(fc18)TH0=0xfc,TL0=0x182.晶振11.0592M11.0592MHz除12為921600Hz,就是一秒921600次機器周期,50ms=922次機器周期。65536-922=19456(fc66)TH0=0xfc,TL0=0x66

㈧ 單片機如何計算初值

一般最直接的想法就是,指定一個計時值x,然後從0開始累加計數,計數到x表示時間到,可以處理事務了。這種處理方法,需要一個數值比較器,每計一次數,就比較一下。這對單片機或者說硬體電路來講,一個8位計數器就需要包含一個8位數值比較器,實在不夠簡便。

第二種想法,是指定一個計時值x,然後進行減計數,減計數到0表示時間到。這也要一個比較器,只不過是個0值比較器,硬體電路上比上一種要簡單一些,但減計數器還是不常用。我們知道累加器才是最簡便的硬體電路之一。

上面兩種方法,都是軟體實現的定時器的合理想法。那麼硬體電路實現定時最簡便的方法是什麼呢?

那就是用累加器來實現。比如一個8位的累加器,可以從0累加計數,計數到256時溢出,產生溢出信號,就可以觸發事務處理了。

要是我們只需要計數10次就夠了,則可以將計數初值定義為246。那樣,計數10次後就可以達到256,產生溢出信號了。

所以就有了(2^n-x)。n是計數器的位數;2^n就是最大計數值;x是計數初值。整個這段,表示我們需要的計時次數。

計數器每次計數的時間間隔是t,及計數周期。那麼總的計時時長m=計數周期×計數次數=t×(2^n-x),也就是m=(2^n-x)×t。

計數位數n由選用的單片機確定,通常等於8,12,16或32等等,即8位、12位等計數器。計數周期t由定時器基礎時鍾確定,可通過設置定時器時鍾源和選擇時鍾分頻數確定。這兩項靈活性不大,一般在程序初始化時就應設定。

初值x可以在應用時,根據定時需求進行修改確定。

協調好n,t和x三者的設定,就可以完美實現定時功能了。

㈨ 51定時器初值計算有什麼簡便演算法

51單片機定時器初值計算:

void main(void)

{

s1=1;

TMOD=0x01; //使用定時器T0的模式1

TH0=(65536-46083)/256; //定時器T0的高8位設置初值

TL0=(65536-46083)%256; //定時器T0的低8位設置初值

函數功能:定時器T0的中斷服務函數

void Time0(void ) interrupt 1 using 0 //定時器T0的中斷編號為1,使用第1組工作寄存器

{

count++; //每產生1次中斷,中斷累計次數加1

if(count==20) //如果中斷次數計滿20次

count=0; //中斷累計次數清0

s++; //秒加1

定時器初值 46083 是怎麼計算出來的? 一般我們如用 AT892051的話 定時50MS 就是 TH0=(65536-50000)/256。使用的12M晶體 ,20次為1S。

(9)單片機初值計算擴展閱讀:

使用說明

以12M晶振為例:每秒鍾可以執行1000000次機器周期個機器周期。而T 每次溢出最多65536 個機器周期。我們盡量應該讓溢出中斷的次數最少(如50ms),這樣對主程序的干擾也就最小。

開發的時候可能會根據需要更換不同頻率的晶振(比如c51單片機,用11.0592M的晶振,很適合產生串口時鍾,而12M晶振很方便計算定時器的時間),使用插接式比較方便。

對12MHz 1個機器周期 1us 12/fosc = 1us,方式0 13位定時器最大時間間隔 = 2^13 = 8.192ms,方式1 16位定時器最大時間間隔 = 2^16 = 65.536ms,方式2 8位定時器最大時間間隔 = 2^8 = 0.256ms =256 us。

定時5ms,計算計時器初值 M = 2^K-X*Fosc/12 12MHz。方式0: K=13,X=5ms,Fosc=12MHz 則 M = 2^13 - 5*10^(-3)*12*10^6/12= 3192 = 0x0C78。

THx = 0CH,TLx = 78H,方式1: K=16,X=5ms,Fosc=12MHz 則 M = 2^16 - 5*10^(-3)*12*10^6/12= 60536 = 0xEC78。

THx = ECH,TLx = 78H,50ms 12MHz THx = 3CH,TLx = B0H,10ms THx = D8H,TLx = F0H。

㈩ 單片機定時器初值計算方法有哪些

呵呵 正確為你解答:
1 可以按定時時間的計算公式, 計算出定時器的時間常數X:
定時時間T=(2的N次方-X)12/單片機晶振頻率
2 N為定時器的工作方式:
方式0時,N=13
方式1時,N=16
方式2時,N=8
3 根據定時時間和工作方式,計算出時間常數X
把X轉換成二進制數,高8位送給TH1,低8位送給TL1,就可以啟動定時器開始定時了。

例如: 工作在方式1,定時時間為1000微秒 晶振頻率=12MHZ
則 定時時間T=(2的16次方-X)12/12MHZ=1000 解出 X=64536=FC18H

呵呵 如滿意 請選擇滿意回答

閱讀全文

與單片機初值計算相關的資料

熱點內容
自己購買雲主伺服器推薦 瀏覽:419
個人所得稅java 瀏覽:761
多餘的伺服器滑道還有什麼用 瀏覽:189
pdf劈開合並 瀏覽:27
不能修改的pdf 瀏覽:751
同城公眾源碼 瀏覽:488
一個伺服器2個埠怎麼映射 瀏覽:297
java字元串ascii碼 瀏覽:78
台灣雲伺服器怎麼租伺服器 瀏覽:475
旅遊手機網站源碼 瀏覽:332
android關聯表 瀏覽:945
安卓導航無聲音怎麼維修 瀏覽:332
app怎麼裝視頻 瀏覽:430
安卓系統下的軟體怎麼移到桌面 瀏覽:96
windows拷貝到linux 瀏覽:772
mdr軟體解壓和別人不一樣 瀏覽:904
單片機串列通信有什麼好處 瀏覽:340
游戲開發程序員書籍 瀏覽:860
pdf中圖片修改 瀏覽:288
匯編編譯後 瀏覽:491