**題型2:**
**題型3**:
解法:這種題目上來先算由晶振頻率得到的機器週期:
三個重要的公式:
步驟1:
機器週期=(1/12mhz)*12=1us;
步驟2:
現在看下題目:產生頻率為20hz的方波脈衝。這又是什麼鬼?查了很多資料,現在方便大家o(∩_∩)o~
解答:乙個脈衝週期=20hz對應的週期=1s/20hz=0.05s=50ms
也就是需要定時25ms(個人理解是50ms/2),即25000us;
上面得知機器週期=1us,而乙個指令週期=1、2、4個機器週期,在這裡指令週期為1個機器週期,所以計數值=25000/1=25000;
步驟3:
- (插曲)看一下初值的計算:
●c/t=0時為定時功能: 加1計數器對脈衝f進行計數,每來乙個脈衝,計數器加1,直到計時器tfx滿溢位;
●c/t=1時為計數功能: 加1計數器對來自輸入引腳t0(p3.4)和t1(p3.5)的外訊號脈衝進行計數,每來乙個脈衝,計數器加1,直到計時器tfx滿溢位;
●gate=1時,「與門」的輸出訊號k由intx輸入電平和trx位的狀態一起決定(即此時k=trx·intx),當且僅當trx=1,intx=1(高電平)時,計數啟動;否則,計數停止。
當int0引腳為高電平時且tr0置位,tr0=1;啟動定時器t0;
當int1引腳為高電平時且tr1置位,tr1=1;啟動定時器t1。
●gate=0時,「或門」輸出恒為1,「與門」的輸出訊號k由trx決定(即此時k=trx),定時器不受intx輸入電平的影響,由trx直接控制定時器的啟動和停止。
當tr0=1,啟動定時器t0。
當tr1=1,啟動定時器t1。
定時器1,則後四位為0;模式2(m1m2=10,計數器c/t=1,gate預設為0.除非送1)即:0110=6
yanshen
下面介紹一下確定定時器/計數器初值的具體方法。
因為在不同工作方式下計數器位數不同,因而最大計數值也不同。
現假設最大計數值為m,那麼各方式下的
最大值m值如下:
方式0:m=2 ^13=8 192
方式1:m=2^16=65 536
方式2:m=2^8=256
方式3:定時器0分成兩個8位計數器,所以兩個m均為256。
因為定時器/計數器是作「加1」計數,並在計數滿溢位時產生中斷,因此初值x可以這樣計算:
*在計數方式下:x=m-計數值
在定時方式下:x=(m-定時值)機器週期
例子:tmod=0x01; //0000 0001
th0=(65536-45872)/256;
tl0=(65536-45872)%256;
程式是採用定時器0工作方式1,th0=(65536-45872)/256;tl0=(65536-45872)%256;這是定時的時間,定時時間一到就進入中斷程式執行。
回到題目
再看題目:
定時器t0,工作方式1,(m=2^16=65 536)
gate一般預設為0,除非題目額外告訴你別的資訊。所以這裡:
tmod=0000 0001=0x01h;
定時方式下初值的計算:
th0=(65536-25000)/256;//h
tl0=(65536-25000)%256;//l
簡單總結一下:
方波訊號,就是在乙個週期內產生一次跳變。頻率是20hz說明1s時間有20個週期,則每個週期50ms,乙個方波訊號經過25ms跳變,又晶振週期是按照1us計算,固按照方式1的話,是65536-25000。
下面程式設計就簡單了:
#include 「regh1.h」
sbit pwm = p2^0;
unsigned char t_cnt;
void t0_init(void)
void t0_int(void) interrupt 1
void main(void)
解答:這個題目沒有頻率方波了。老套路,先算機器週期,能那一分是一分。
機器週期=(1/6)*12=2us
這道題目直接告訴你輸出1000個脈衝了,所以計數初值直接是1000;
再看脈衝週期:2ms,砍一半(除2),1ms=1000us
而脈寬為脈衝週期的一般,1000us/2=500us
定時初值,根據你設定的方式按照上面說的計算方法計算。
在本題中,我們設定tmod=50h,即用t0定時,t1計數。
看**:
org 0000h
ljmp main
org 000bh;定時器t0中斷開始位址
ljmp tos
org 1000h
main:mov tmod,#50h;0101 0000 t1模式1計數,t0模式0定時
mov tl0,#0ch;設定定時初值(2的13次方-500us)高八位賦給th0,低8位給tl0;
mov th0,#0f0h
mov tl1,#18h;設定計數初值(2的16次方-1000)
mov th1,#0fch
setb tr1;setb是讓後面的數置1
wait:jnb tf1,wait; 當tf1為0時,轉到wait,代表未溢位
clr ea;tf1溢位,計滿則執行
clr et0
anl tcon,#0fh ;定時器t0t1關閉;
sjmp $
tos: mov tl0,#0ch
mov th0,#0f0h
cpl p10;邏輯去反
reti
end。
ps:如果時6mhz,則高電平需要除2去計算。
**:#include 「regh1.h」
sbit pwm = p1^0;
unsigned char t_cnt=0;
void t0_init(void)
void t0_int(void) interrupt 1 //中斷源是定時器0
void main(void)
微控制器 定時器 計數器
一 簡述 mcs 51系列微控制器內部有兩個16位定時器 計數器,即定時器t0和定時器t1。它們都具有定時和計數功能,可用於定時或延時控制,對外部事件進行檢測 計數等。定時器 計數器是乙個加 1 計數器,來一脈衝即做加1計數,直至暫存器各位全為1,再來一脈衝,計數器回0且使tf0 定時器t0 tf1...
搞懂51微控制器定時器 計數器
搞懂51定時器 計數器 步驟 1 第1步 先設定好定時器的時鐘源 如果需要的話 2 第2步 初始化時鐘相關暫存器 3 第3步 設定定時時間 計數個數 4 第4步 設定中斷處理程式 5 第5步 開啟定時器 5 執行時 定時器計數到後產生中斷,然後執行中斷isr 中斷服務處理,interrupt ser...
微控制器的定時器與計數器
從乙個生活中的例程看起 乙個水盆在水龍頭下,水龍沒關緊,水一滴滴地滴入盆中。水滴持續落下,盆的容量是有限的,過一段時間之後,水就會逐漸變滿。那麼微控制器中的計數器有多大的容量呢?8031微控制器中有兩個計數器,分別稱之為t0和t1,這兩個計數器分別是由兩個8位的ram單元組成的,即每個計數器都是16...