微控制器應試 定時器 計數器 占空比 脈衝週期總結

2021-09-02 00:15:04 字數 3496 閱讀 2938

**題型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...