久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 51單片機中斷系統詳解(定時器、計數器) [打印本頁]

作者: z1013996320    時間: 2018-11-4 16:13
標題: 51單片機中斷系統詳解(定時器、計數器)
51單片機中斷級別
中斷源
默認中斷級別
序號(C語言用)
INT0---外部中斷0
最高
0
T0---定時器/計數器0中斷
2
1
INT1---外部中斷1
3
2
T1----定時器/計數器1中斷
4
3
TX/RX---串行口中斷
5
4
T2---定時器/計數器2中斷
最低
5
中斷允許寄存器IE
位序號
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
符號位
EA
-------
ET2
ES
ET1
EX1
ET0
EX0
EA---全局中允許位。
EA=1,打開全局中斷控制,在此條件下,由各個中斷控制位確定相應中斷的打開或關閉。
EA=0,關閉全部中斷。
-------,無效位。
ET2---定時器/計數器2中斷允許位。 EA總中斷開關,置1為開;
ET2=1,打開T2中斷。 EX0為外部中斷0INT0)開關,……
ET2=0,關閉T2中斷。 ET0為定時器/計數器0T0)開關,……
ES---串行口中斷允許位。 EX1為外部中斷1INT1)開關,……
ES=1,打開串行口中斷。 ET1為定時器/計數器1T1)開關,……
ES=0,關閉串行口中斷。 ES為串行口(TX/RX)中斷開關,……
ET1---定時器/計數器1中斷允許位。 ET2為定時器/計數器2T2)開關,……
ET1=1,打開T1中斷。
ET1=0,關閉T1中斷。
EX1---外部中斷1中斷允許位。
EX1=1,打開外部中斷1中斷。
EX1=0,關閉外部中斷1中斷。
ET0---定時器/計數器0中斷允許位。
ET0=1,打開T0中斷。
ET0=0,關閉T0中斷。
EX0---外部中斷0中斷允許位。
EX0=1,打開外部中斷0中斷。
EX0=0,關閉外部中斷0中斷。
中斷優先級寄存器IP
位序號
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
位地址
---
---
---
PS
PT1
PX1
PT0
PX0
-------,無效位。
PS---串行口中斷優先級控制位。
PS=1,串行口中斷定義為高優先級中斷。
PS=0,串行口中斷定義為低優先級中斷。
PT1---定時器/計數器1中斷優先級控制位。
PT1=1,定時器/計數器1中斷定義為高優先級中斷。
PT1=0,定時器/計數器1中斷定義為低優先級中斷。
PX1---外部中斷1中斷優先級控制位。
PX1=1,外部中斷1中斷定義為高優先級中斷。
PX1=0,外部中斷1中斷定義為低優先級中斷。
PT0---定時器/計數器0中斷優先級控制位。
PT0=1,定時器/計數器0中斷定義為高優先級中斷。
PT0=0,定時器/計數器0中斷定義為低優先級中斷。
PX0---外部中斷0中斷優先級控制位。
PX0=1,外部中斷0中斷定義為高優先級中斷。
PX0=0,外部中斷0中斷定義為低優先級中斷。
定時器/計數器工作模式寄存器TMOD
位序號
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
位符號
GATE
C/T
M1
M0
GATE
C/T
M1
M0
|-----------------定時器1------------------------|--------------------定時器0----------------------|
GATE---門控制位。
GATE=0,定時器/計數器啟動與停止僅受TCON寄存器中TRX(X=0,1)來控制
GATE=1,定時器計數器啟動與停止由TCON寄存器中TRX(X=0,1)和外部中斷引腳(INT0INT1)上的電平狀態來共同控制。
C/T---定時器和計數器模式選擇位。
C/T=1,為計數器模式;C/T=0,為定時器模式。
M1M0---工作模式選擇位。
M1
M0
工作模式
0
0
方式0,為13位定時器/計數器
0
1
方式1,為16位定時器/計數器
1
0
方式28位初值自動重裝的8位定時器/計數器
1
1
方式3,僅適用于T0,分成兩個8位計數器,T1停止工作
定時器/控制器控制寄存器TCON
位序號
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
符號位
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TF1---定時器1溢出標志位。
當定時器1記滿溢出時,由硬件使TF11,并且申請中斷。進入中斷服務程序后,由硬件自動清0。需要注意的是,如果使用定時器中斷,那么該位完全不用人為去操作,但是如果使用軟件查詢方式的話,當查詢到該位置1后,就需要用軟件清0
TR1---定時器1運行控制位。
由軟件清0關閉定時器1。當GATE=1,且INIT為高電平時,TR11啟動定時器1;當GATE=0時,TR11啟動定時器1
TF0---定時器0溢出標志,其功能及其操作方法同TF1
TR0---定時器0運行控制位,其功能及操作方法同TR1
IE1---外部中斷1請求標志。
IT1=0時,位電平觸發方式,每個機器周期的S5P2采樣INT1引腳,若NIT1腳為定電平,則置1,否則IE10
IT1=1時,INT1為跳變沿觸發方式,當第一個及其機器周期采樣到INIT1為低電平時,則IE11IE1=1,表示外部中斷1正向CPU中斷申請。當CPU響應中斷,轉向中斷服務程序時,該位由硬件清0
IT1外部中斷1觸發方式選擇位。
IT1=0,為電平觸發方式,引腳INT1上低電平有效。
IT1=1,為跳變沿觸發方式,引腳INT1上的電平從高到低的負跳變有效。
IE0---外部中斷0請求標志,其功能及操作方法同IE1
IT0---外部中斷0觸發方式選擇位,其功能及操作方法同IT1
從上面的知識點可知,每個定時器都有4種工作模式,可通過設置TMOD寄存器中的M1M0位來進行工作方式選擇。
方式1的計數位數是16位,對T0來說,由TL0寄存器作為低8TH0寄存器作為高8位,組成了16位加1計數器。
關于如何確定定時器T0的初值問題定時器一但啟動,它便在原來的數值上開始加1計數,若在程序開始時,我們沒有設置TH0TL0,它們的默認值都是0,假設時鐘頻率為12MHz12個時鐘周期為一個機器周期,那么此時機器周期為1us,記滿TH0TL0就需要216 -1個數,再來一個脈沖計數器溢出,隨即向CPU申請中斷。因此溢出一次共需65536us,約等于65.6ms,如果我們要定時50ms的話,那么就需要先給TH0TL0裝一個初值,在這個初值的基礎上記50000個數后,定時器溢出,此時剛好就是50ms中斷一次,當需要定時1s時,我們寫程序時當產生2050ms的定時器中斷后便認為是1s,這樣便可精確控制定時時間啦。要計50000個數時,TH0TL0中應該裝入的總數是65536-50000=15536.,把15536256求模:15536/256=60裝入TH0中,把15536256求余:15536/256=176裝入TL0中。
以上就是定時器初值的計算法,總結后得出如下結論:當用定時器的方式1時,設機器周期為TCY,定時器產生一次中斷的時間為t,那么需要計數的個數為N=t/TCY ,裝入THXTLX中的數分別為:
THX=(65536-N)/256 , TLX=(65536-N)%256 <x為01>
中斷服務程序的寫法
void 函數名()interrupt 中斷號 using 工作組
{
中斷服務程序內容
}
在寫單片機的定時器程序時,在程序開始處需要對定時器及中斷寄存器做初始化設置,通常定時器初始化過程如下:
1)對TMOD賦值,以確定T0 T1的工作方式。
2)計算初值,并將初值寫入TH0TL0TH1TL1
3)中斷方式時,則對IE賦值,開放中斷。
4)使TR0TR1置位,啟動定時器/計數器定時或計數。
例:利用定時器0工作方式1,實現一個發光管以1s亮滅閃爍。
程序代碼如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
uchar num;
void main()
{
TMOD=0x01; //設置定時器0位工作模式1M1,M001
TH0=(65536-45872)/256; //裝初值11.0592M晶振定時50ms數為45872
TL0=(65536-45872)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
while(1)
{
if(num==20) //如果到了20次,說明1秒時間
{
led1=~led1; //讓發光管狀態取反
num=0;
}
}
}
void T0_time()interrupt 1
{
TH0=(65536-45872)/256; //重新裝載初值
TL0=(65536-45872)%256;
num++;
}


完整的Word格式文檔51黑下載地址:
中斷1.docx (27.98 KB, 下載次數: 359)



作者: zerojhy    時間: 2019-4-2 19:51
verygood
作者: 紫色的云    時間: 2019-4-3 08:44
這個資料找了很久,謝謝分享
作者: yueliangshang    時間: 2019-5-5 14:11
感謝分享!
作者: 今晚月色真美20    時間: 2019-5-13 20:53
理解了 很有用
作者: afeiaa    時間: 2019-6-10 18:33
可以設置中斷優先級  使外部中斷1中斷外部中斷0嘛?
作者: abc111111    時間: 2019-6-12 00:22
感謝樓主,學習了
作者: ypcgoal    時間: 2019-7-15 10:59
牛逼的資料
作者: lengf    時間: 2019-10-26 14:06
感謝分享
作者: zhangjinming    時間: 2019-10-30 23:46
感謝分享~
作者: 836219677    時間: 2019-11-3 20:56
感謝樓主分享  很贊  學到了
作者: eagleking    時間: 2019-11-4 09:31
寫的相當好了啊,非常支持。也是單片機的幾大難點之一,尤其是 裝處置和設置工作模式。還有就是存儲器擴展,串行并行通訊,模擬量轉換。輸入輸出,LED和LCD 相對要簡單的。
作者: 王咸魚    時間: 2019-11-12 21:21
正好用到
作者: w1685188403    時間: 2019-11-17 18:27
感謝樓主,學習了

作者: zimin    時間: 2020-1-7 10:00
感謝樓主,學習了
作者: jifengjianwu    時間: 2020-1-9 09:27
感謝分享,如果程序中多次使用不同定時時間,該怎樣寫?
作者: sinper122    時間: 2020-1-9 11:25
感謝分享,對於初學者,真的是太好了!
作者: 帥氣德志    時間: 2020-2-5 11:55
請問一下,c51得話還是th0=(65536-45872)/256嘛
作者: aoli    時間: 2020-2-7 10:01
很仔細!
作者: 891558534    時間: 2020-2-8 13:56
寫的非常好,學習了,謝謝
作者: 不吃草的牛    時間: 2020-2-8 17:30
精準延時程序好
作者: 956491513    時間: 2020-2-9 09:04
verygood
作者: 956491513    時間: 2020-2-9 09:05
這個資料找了很久,謝謝分享
作者: studystudy1234    時間: 2020-2-23 21:13
寫得好,非常感謝!但是
if(num==20) //如果到了20次,說明1秒時間
{
led1=~led1; //讓發光管狀態取反
num=0;
}

更保險的應該是
if(num>=20) //如果到了20次,說明1秒時間
{
led1=~led1; //讓發光管狀態取反
num=0;
}

作者: youziwb    時間: 2020-2-24 09:57
學習了,感謝樓主分享
作者: wsh791    時間: 2020-2-24 17:41
學習一下
作者: wang_00008    時間: 2020-3-1 01:38

感謝分享!
作者: 玉子屋    時間: 2020-3-2 18:41
十分感謝大佬
作者: hbcqd    時間: 2020-3-2 19:51
講述很好,很實用,謝謝分享。
作者: lcw996    時間: 2020-3-4 15:56
感謝分享
作者: robotaaa    時間: 2020-4-9 13:52
學到了,贊!
作者: 將B還給牛    時間: 2020-4-10 09:15

學到了,贊!
作者: iceicebear    時間: 2020-6-6 10:54
謝謝分享!!!
作者: 00一一    時間: 2020-7-28 14:29
那個裝載初值應該是46080吧,不是45872,否則會有0.001秒左右延時誤差




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品一区二区久久久久久久网站 | av国产精品 | 日韩视频在线免费观看 | av免费网站在线观看 | 日韩欧美在线观看 | www日本高清 | 亚洲精品2| 日韩1区 | 欧美一级黑人aaaaaaa做受 | 日韩久草| av香蕉 | 久久一区二区视频 | 日日噜噜噜夜夜爽爽狠狠视频97 | 久草免费在线视频 | 日韩高清www | 亚洲欧美视频 | 久久国产精品色av免费观看 | 岛国av一区二区三区 | 综合色导航| jav成人av免费播放 | 中文字幕日韩欧美一区二区三区 | 91最新在线视频 | 日韩一区二区三区在线视频 | 国产精品自产拍 | 成人精品一区二区三区 | 综合久久av | 99免费精品视频 | 日韩高清国产一区在线 | 91看片在线观看 | 成人午夜在线 | 亚洲精品久久久久久久久久久久久 | 81精品国产乱码久久久久久 | 一区二区不卡视频 | 日韩图区 | 色婷婷国产精品综合在线观看 | 久久99视频免费观看 | а√中文在线8 | 日韩三级一区 | 热久久性| 毛片区 | 国产精品揄拍一区二区久久国内亚洲精 |