定時器與中斷概念

2021-04-12 12:20:22 字數 3245 閱讀 9018

定時/計數器學習筆記

一、基本概念

1、 89c51有兩個計數器t0和t1,89c52還有乙個t2。每個計數器都是由兩個8位的ram 單元組成的,即每個計數器都是16 位的計數器,最大的計數容量是2

16=65536,記住是從0-65535。

2、 提供給定時器的計數源又是從**來的呢?就是由微控制器的晶振經過12 分頻後獲得的乙個脈衝源。乙個12m 的晶振,它提供給計數器的脈衝時間間隔是就是1us。

3、 預置數計數法。如果每個脈衝是1微秒,則計滿65536個脈衝需時65.536毫秒。但是如果只需要10毫秒就可以了,怎麼辦?只要在計數器裡預先放進55536,這樣只需要計數65536-55536=10000次,也就是10毫秒了。

二、控制字

1、特殊功能暫存器

tmod

89h

用於

t1

用於

t0

gate

c/t

m1

m0

gate

c/t

m1

m0

gate:0用於內部脈衝;1用於外部脈衝。

c/t:0用於定時器;1用於計數器。

m1m0:工作方式

範圍

特性

工作方式0

13位,8192次

為了和51 的前輩48系列相容

工作方式1

16位,65536

16位,其他特性與工作方式0相同,比較常用

工作方式2

8位,256次

自動再裝入預置數,預置數放在t0(或t1)的高8位中,只有低8 位參與計數,通常用於波特率發生器

工作方式3

8位,256次

th0只能作為定時器用,tl0可作定時器或計數器。溢位標記:tl0 還是用原來的t0的標記,而th0則借用t1的標記,因此只有在t1 以工作方式2 執行時,才讓t0 工作於方式3。

2、特殊功能暫存器

tcon

88h

用於定時

/計數器

用於中斷

tf1

tr1

tf0

tr0

ie1

it1

ie0

it0

tr0/tr1:定時器的開關。

tf0/tf1:計數溢位後由0變為1。

3、t2定時器。

89c52支援

t2定時

/計數器。

t2操作模式

rclk+tclk

cp/rl2

mode

0

0

16-bit auto-reload,tl2增量溢位

0

1

16-bit capture

1

x

baud rate generator

中斷學習筆記

一、基本概念

1、 89c51微控制器中共有5 個中斷源:兩個外部中斷,兩個定時/計數器中斷(溢位),乙個序列口中斷。

2、 微控制器中斷系統中有兩種不同型別的中斷:一種稱為非遮蔽中斷,使用者不能用軟體方法加以禁止;另一種稱為遮蔽中斷,本文描述的都是這種型別。

3、  

二、控制字

1、 外部中斷。微控制器的12、13(p3.2、p3.3)腳引入,名稱為int0、int1。以上的tcon暫存器用於控制外部中斷。

it0:int0的觸發方式。0表示低電平觸發;1表示負跳變觸發。

ie0:有外部中斷進入時,該位置1。cpu響應後自動清0。

2、 內部中斷。tcon暫存器,定時器中已描述。

3、 序列口中斷。

4、 中斷允許暫存器

中斷允許暫存器

ea

x

et2

es

et1

ex1

et0

ex0

ea:總開關

et2:定時/計數器2控制位,89c52支援。

其他:定時/計數器0、1和外部中斷0、1控制位。

5、 中斷入口位址

² 外中斷0(int0):0003h

² 定時器0(t0) :000bh

² 外中斷1(int1):0013h

² 定時器1(t1) :001bh

² 串列埠中斷 :0023h

6、 中斷函式。比如t0的中斷函式示例如下:

void t0() interrupt 1 using 0{};

定時器中斷

系統初始化的時候在預設的系統初始化函式 systeminit 函式裡面已經初始化 apb1 的時鐘為 2 分頻,所以 apb1 的時鐘為 36m。當 apb1 的時鐘分頻數為 1 的時候,tim2 7 的時鐘為 apb1 的時鐘,而如果 apb1 的時鐘分頻數不為 1,那麼 tim2 7 的時鐘頻率...

定時器中斷

tmod 0x01 th0 65536 50000 256 tl0 65536 50000 6 ea 1 et0 1 tr0 1 void timer0 interrupt 1 ea 1 開總中斷允許 et0 1 開定時器0允許 tmod 0x01 定時器選擇軟體啟動,工作方式為1 th0 6553...

定時器 中斷

1 實現電視劇集中的10s定時炸彈功能 炸彈炸了用蜂鳴器模擬 include unsigned char code smgduan 17 unsigned int ms,sec 10,s sbit p1 0 p1 0 void delay unsigned int n void isr timer0...