微控制器 中斷系統和定時器

2021-09-02 18:57:34 字數 4217 閱讀 1466

1.cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理(中斷發生);

2.cpu暫時中斷當前的工作,轉去處理事件b(中斷響應和中斷服務);

3.待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a(中斷返回),這一過程稱為中斷

其中一些說明:

說明:

t0(tcon.0),外部中斷0觸發方式控制位。

當it0=0時,為電平觸發方式。

當it0=1時,為邊沿觸發方式(下降沿有效)。

ie0(tcon.1),外部中斷0中斷請求標誌位。

it1(tcon.2),外部中斷1觸發方式控制位。

ie1(tcon.3),外部中斷1中斷請求標誌位。

tf0(tcon.5),定時/計數器t0溢位中斷請求標誌位。

tf1(tcon.7),定時/計數器t1溢位中斷請求標誌位。

有關中斷的說明:

void int0()interrupt 0 using 1

interrupt 0 指明是外部中斷0;

interrupt 1 指明是定時器中斷0;

interrupt 2 指明是外部中斷1;

interrupt 3 指明是定時器中斷1;

interrupt 4 指明是序列口中斷;

using 0 是第0組暫存器;using 1 是第1組暫存器;

using 2 是第2組暫存器;

using 3 是第3組暫存器;

51微控制器內的暫存器是r0–r7(不是r0-r3)

r0-r7在資料儲存器裡的實際位址是由特殊功能暫存器psw裡的rs1、rs0位決定的。

using 0時設定 rs1=0,rs0 =0,用第0組暫存器,r0–r7的在資料儲存區里的實際位址是00h-07h。r0(00h)…r7(07h)

using 1時設定 rs1=0,rs0 =1,用第1組暫存器,r0–r7的在資料儲存區里的實際位址是00h-07h。r0(08h)…r7(0fh)

using 2時設定 rs1=1,rs0 =0,用第2組暫存器,r0–r7的在資料儲存區里的實際位址是08h-0fh。r0(10h)…r7(17h)

using 3時設定 rs1=1,rs0 =1,用第3組暫存器,r0–r7的在資料儲存區里的實際位址是00h-07h。r0(18h)…r7(1fh)

實驗相應暫存器:

實驗電路

實驗對應**:

#include

//包含特殊功能暫存器的定義

#define led p1

//巨集定義 led 代表 p1

void

main()

}void

key_int

(void

) interrupt 2 using 1

//實驗結果,按下按鍵,led燈全部點亮.

基礎介紹

定時器的本質原理就是:每經過1個機器週期,計數儲存器的值就加1。因此當使用定時器時,就必須掌握時鐘週期和機器週期的關係。

(1)時鐘週期

每個機器週期的長度是 12 個振盪器週期。因為實驗系統的晶振是 11.0592mhz,所以定時常數的設定可按以下方法計算:

機器週期=12÷11.0592mhz=1.08507μs

(65536-定時常數)*1.08507μs =50ms(50ms 中斷一次)

定時常數=4c00h

(2)機器週期

機器週期 :標準51下,機器週期 =12倍的時鐘週期。即:12 / (11.0592x10^6) 秒 。有的增強51微控制器,1個機器週期等於4倍的時鐘週期,還有的更短。

實驗相應暫存器

gate----門控制位;

gate=0,定時器啟動與停止僅受 tcon 暫存器中 trx(x=0,1)來控制;

gate=1,定時器啟動與停止受 tcon 暫存器中 trx(x=0,1)和外部中斷引

腳(int0 或 int1)的電平狀態共同控制;

c/t—定時器模式和計數器模式選擇位;

c/t=1,為計數器模式;

c/t=0,為定時器模式;

tf1-定時器 1 溢位標誌位;(定時器 1 計滿溢位,tf=1)

tr1-定時器 1 執行控制位(tr1=1,開啟定時器,tr1=0 關閉定時器);

tf0-定時器 0 溢位標誌位;

tr0-定時器 0 執行控制位;

ie1-外部中斷 1 請求標誌;

it1-外部中斷 1 觸發方式選擇位;

ie0-外部中斷 0 請求請求標誌位;

ie1-外部中斷 0 觸發方式選擇位;

#include

#define led p1

//巨集定義led代表p1

void

init()

;void

main()

void

init()

void

time

(void

) interrupt 1 using 1

#include

#define uchar unsigned char;

#define uint unsigned int;

uchar code ledtable=

;//十六進製制形式,p1可位操作,依次為點亮乙個燈,點亮兩個燈......

void

init()

;static

int count=0;

int times=0;

void

main()

}void

init()

//定時器中斷..

void

time

(void

) interrupt 1 using 1

}

#include

#define uint unsigned int

#define uchar unsigned char

sbit wela1=p1^0;

sbit wela2=p1^1;

//定義位選

sbit wela3=p1^2;

uint ge=0;

uint times=0;

uchar code table=

;//不帶小數點的共陰數碼管段值

/***********************延時程式******************/

void

init()

void

time

(void

) interrupt 1 using 1

}void

delayms

(uint x)

}void

display()

if((ge/

100)!=0

)}/************************主程式******************/

void

main

(void

)}

鑑於網上**良莠不齊,因此有必要總結一下,為了更好的學習…

由於本人剛入門,如有一些文章上的不足之處,還請各位大牛指點指點。

我的github,雖然目前沒什麼東西.

51微控制器 定時器

定時 計數器的結構和工作原理 定時 計數器的實質是加1計數器 16位 由高8位和低8位兩個暫存器組成。80c51 微控制器定時 計數器的工作是由兩個特殊功能暫存器控制的。tmod是定時 計數器的工 作方式暫存器,確定工作方式和功能,低四位用於t0,高四位用於t1。t con是控制寄 存器,控制t0和...

51微控制器 定時器

標準的51微控制器內部有t0和t1兩個定時器。定時器的計數值儲存在暫存器中。th0 tl0用於t0,th1 tl1用於t1.定時器儲存暫存器 名稱描述 sfr位址 復位值th0 t0高位元組 0x8c 0x00 tl0t0低位元組 0x8a 0x00 th1t1高位元組 0x8d 0x00 tl1t...

微控制器的定時器

定時器則是由微控制器自身提供的乙個非常穩定的計數器,這個穩定的計數器就是微控制器上連線的晶振部件,晶振經過12分頻之後提供給微控制器的只有1mhz的穩定脈衝 晶振的頻率是非常準確的,所以微控制器的計數脈衝之間的時間間隔也是非常準確的,這個準確的時間間隔是1微秒 12mhz晶振內部的工作頻率 時鐘脈衝...