版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本章內容中斷系統定時/計數器C語言的函數第4章定時與中斷系統§4.3中斷系統
CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷發生);CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務);待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷。4.3.1什么是中斷MCS-51單片機的中斷系統結構執行主程序主程序繼續執行主程序斷點中斷請求中斷響應執行中斷處理程序中斷返回引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時中斷原來的事務A,轉去處理事件B。對事件B處理完畢后,再回到原來被中斷的地方(即斷點),稱為中斷返回。實現上述中斷功能的部件稱為中斷系統(中斷機構)。
隨著計算機技術的應用,人們發現中斷技術不僅解決了快速主機與慢速I/O設備的數據傳送問題,而且還具有如下優點:分時操作。CPU可以分時為多個I/O設備服務,提高了計算機的利用率;實時響應。CPU能夠及時處理應用系統的隨機事件,系統的實時性大大增強;可靠性高。CPU具有處理設備故障及掉電等突發性事件能力,從而使系統可靠性提高。2、INT1(P3.3)可由IT1(TCON.2)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.3引腳上出現有效的中斷信號時,中斷標志IE1(TCON.3)置1,向CPU申請中斷。3、T0(P3.4),片內定時/計數器T0溢出中斷請求標志。當定時/計數器T0發生溢出時,置位TF0,并向CPU申請中斷。返回4、T1(P3.5),片內定時/計數器T1溢出中斷請求標志。當定時/計數器T1發生溢出時,置位TF1,并向CPU申請中斷。5、RX(P3.0)或TX(P3.1),串行口中斷請求標志。當串行口接收完一幀串行數據時置位RI或當串行口發送完一幀串行數據時置位TI,向CPU申請中斷。二、中斷請求標志1、TCON的中斷標志IT0(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溢出中斷請求標志位。2、SCON的中斷標志RI(SCON.0):串行口接收中斷標志位。當允許串行口接收數據時,每接收完一個串行幀,由硬件置位RI。注意,RI必須由軟件清除。TI(SCON.1):串行口發送中斷標志位。當CPU將一個發送數據寫入串行口發送緩沖器時,就啟動了發送過程。每發送完一個串行幀,由硬件置位TI。CPU響應中斷時,不能自動清除TI,TI必須由軟件清除。當中斷源需要向CPU請求中斷時,相應中斷標志位由硬件自動置1。
三、中斷的開放和禁止CPU對中斷系統所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的。EX0(IE.0),外部中斷0允許位;ET0(IE.1),定時/計數器T0中斷允許位;EX1(IE.2),外部中斷0允許位;ET1(IE.3),定時/計數器T1中斷允許位;ES(IE.4),串行口中斷允許位;EA(IE.7),CPU中斷允許(總允許)位。80C51單片機有兩個中斷優先級,即可實現二級中斷服務嵌套。每個中斷源的中斷優先級都是由中斷優先級寄存器IP中的相應位的狀態來規定的
。PX0(IP.0),外部中斷0優先級設定位;PT0(IP.1),定時/計數器T0優先級設定位;PX1(IP.2),外部中斷0優先級設定位;PT1(IP.3),定時/計數器T1優先級設定位;PS(IP.4),串行口優先級設定位;PT2(IP.5),定時/計數器T2優先級設定位。
同一優先級中的中斷申請不止一個時,則有中斷優先權排隊問題。同一優先級的中斷優先權排隊,由中斷系統硬件確定的自然優先級形成,其排列如所示:80C51單片機的中斷優先級有三條原則:CPU同時接收到幾個中斷時,首先響應優先級別最高的中斷請求。正在進行的中斷過程不能被新的同級或低優先級的中斷請求所中斷。正在進行的低優先級中斷服務,能被高優先級中斷請求所中斷。為了實現上述后兩條原則,中斷系統內部設有兩個用戶不能尋址的優先級狀態觸發器。其中一個置1,表示正在響應高優先級的中斷,它將阻斷后來所有的中斷請求;另一個置1,表示正在響應低優先級中斷,它將阻斷后來所有的低優先級中斷請求。4.3.4中斷處理過程
中斷響應條件:中斷源發出中斷請求;此中斷源的中斷允許位為1;CPU開中斷(即EA=1)。以上三條同時滿足時,CPU才有可能響應中斷。中斷函數的完整語法:返回值函數名(【參數】)interruptnusingn{中斷處理程序}中斷編程:利用INT1作為外部中斷輸入線,每按一次開關K使P1口處的8個LED輪流點亮一次。#include<at89x51.h>#include<intrins.h>voidmain(){ EA=1; EX1=1; IT1=1; P1=0xfe;while(1);}voidint1()interrupt2using1{ P1=_crol_(P1,1);}任務9:可控霓虹燈控制正常情況下8個霓虹燈依次順序點亮,循環顯示,時間間隔為1S。當按下控制按鈕后,8個霓虹燈同時亮滅一次,時間間隔為0.5S。主程序:
8個霓虹燈依次循環點亮,時間間隔為1S中斷處理程序:
8個霓虹燈同時亮滅一次,時間間隔為0.5S延時子函數1、主程序:T0初始化,開中斷。8個霓虹燈依次循環點亮,時間間隔為1S。2、外部中斷INT0中斷處理程序:
8個霓虹燈同時亮滅一次,時間間隔為0.5S3、定時/計數器T0中斷處理程序:50ms定時時間到,num++;#include<reg51.h>#defineucharunsignedcharucharnum;voidmain(){ ucharnum1,w; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;EX0=1;IT0=1;PT0=1; TR0=1; while(1) { w=0x01; for(num1=0;num1<8;num1++) { P1=~w; w<<=1; while(num!=20); num=0; } } }voidint0()interrupt0using1{ uchartempt1,tempt2; tempt1=num; tempt2=P1; num=0; P1=0x00; while(num!=10); P1=0xff; while(num!=20); num=tempt1; P1=tempt2;}voidtimer0()interrupt1using0{ num++; TH0=(65536-50000)/256; TL0=(65536-50000)%256;}§4.1定時器/計數器實現定時功能,比較方便的辦法是利用單片機內部的定時/計數器。也可以采用下面三種方法:軟件定時:軟件定時不占用硬件資源,但占用了CPU時間,降低了CPU的利用率。采用時基電路定時:例如采用555電路,外接必要的元器件(電阻和電容),即可構成硬件定時電路。但在硬件連接好以后,定時值與定時范圍不能由軟件進行控制和修改,即不可編程。采用可編程芯片定時:這種定時芯片的定時值及定時范圍很容易用軟件來確定和修改,此種芯片定時功能強,使用靈活。在單片機的定時/計數器不夠用時,可以考慮進行擴展。4.1.1定時/計數器的結構和工作原理
一、定時/計數器的結構定時/計數器的實質是加1計數器(16位),由高8位和低8位兩個寄存器組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動和停止及設置溢出標志。二、定時/計數器的工作原理加1計數器輸入的計數脈沖有兩個來源,一個是由系統的時鐘振蕩器輸出脈沖經12分頻后送來;一個是T0或T1引腳輸入的外部脈沖源。每來一個脈沖計數器加1,當加到計數器為全1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使TCON中TF0或TF1置1,向CPU發出中斷請求(定時/計數器中斷允許時)。如果定時/計數器工作于定時模式,則表示定時時間已到;如果工作于計數模式,則表示計數值已滿。
可見,由溢出時計數器的值減去計數初值才是加1計數器的計數值。
設置為定時器模式時,加1計數器是對內部機器周期計數(1個機器周期等于12個振蕩周期,即計數頻率為晶振頻率的1/12)。計數值N乘以機器周期Tcy就是定時時間t
。設置為計數器模式時,外部事件計數脈沖由T0或T1引腳輸入到計數器。在每個機器周期的S5P2期間采樣T0、T1引腳電平。當某周期采樣到一高電平輸入,而下一周期又采樣到一低電平時,則計數器加1,更新的計數值在下一個機器周期的S3P1期間裝入計數器。由于檢測一個從1到0的下降沿需要2個機器周期,因此要求被采樣的電平至少要維持一個機器周期。當晶振頻率為12MHz時,最高計數頻率不超過1/2MHz,即計數脈沖的周期要大于2ms。
定時/計數器的控制
80C51單片機定時/計數器的工作由兩個特殊功能寄存器控制。TMOD用于設置其工作方式;TCON用于控制其啟動和中斷申請。一、工作方式寄存器TMOD
工作方式寄存器TMOD用于設置定時/計數器的工作方式,低四位用于T0,高四位用于T1。其格式如下:GATE:門控位。GATE=0時,只要用軟件使TCON中的TR0或TR1為1,就可以啟動定時/計數器工作;GATA=1時,要用軟件使TR0或TR1為1,同時外部中斷引腳或也為高電平時,才能啟動定時/計數器工作。即此時定時器的啟動條件,加上了或引腳為高電平這一條件。
:定時/計數模式選擇位。=0為定時模式;=1為計數模式。M1M0:工作方式設置位。定時/計數器有四種工作方式,由M1M0進行設置。
二、控制寄存器TCON
TCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時/計數器的啟動和中斷申請。其格式如下:TF1(TCON.7):T1溢出中斷請求標志位。T1計數溢出時由硬件自動置TF1為1。CPU響應中斷后TF1由硬件自動清0。T1工作時,CPU可隨時查詢TF1的狀態。所以,TF1可用作查詢測試的標志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時/計數器的啟動與停止。TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。TR0(TCON.4):T0運行控制位,其功能與TR1類同。
4.1.2定時/計數器的工作方式
一、方式0
方式0為13位計數,由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標志,向CPU發出中斷請求。定時器模式時有:N=t/Tcy計數初值計算的公式為:定時器的初值還可以采用計數個數直接取補法獲得。計數模式時,計數脈沖是T0引腳上的外部脈沖。門控位GATE具有特殊的作用。當GATE=0時,經反相后使或門輸出為1,此時僅由TR0控制與門的開啟,與門輸出1時,控制開關接通,計數開始;當GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外部中斷引腳信號和TR0共同控制。當TR0=1時,外中斷引腳信號引腳的高電平啟動計數,外部中斷引腳信號引腳的低電平停止計數。這種方式常用來測量外中斷引腳上正脈沖的寬度。
二、方式1方式1的計數位數是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計數器。計數個數與計數初值的關系為:
三、方式2方式2為自動重裝初值的8位計數方式。
工作方式2特別適合于用作較精確的脈沖信號發生器。計數個數與計數初值的關系為:
四、方式3方式3只適用于定時/計數器T0,定時器T1處于方式3時相當于TR1=0,停止計數。
工作方式3將T0分成為兩個獨立的8位計數器TL0和TH0。定時/計數器的初始化
一、初始化步驟程序應完成如下工作:對TMOD賦值,以確定T0和T1的工作方式。計算初值,并將其寫入TH0、TL0或TH1、TL1。中斷方式時,則對IE賦值,開放中斷。使TR0或TR1置位,啟動定時/計數器定時或計數。二、定時器的初值X定時方式:計數初值X=2^n–定時時間/機器周期。其中n=13、16、8、8分別對應方式0、1、2、3。1、求T1的方式控制字TMOD:01000000TMOD=0X01;××××例1:T0工作于定時方式1,定時時間T=10ms,系統主頻f=12MHZ,允許中斷,對T0進行初始化編程。2、計算計數初值Count:由于晶振為12MHz,振蕩周期=1/12MHZ,所以機器周期Tcy為1ms。所以:N=t/Tcy=10000/1=10000Count=65536-10000=55536=D8F0H
即應將0xD8送入TH0中,0xF0送入TL0中機器周期=(1/fosc)×12Count=2^n–定時時間/機器周期。=(1/12MHZ)×123、開中斷EA=1;ET0=1;4、啟動定時/計數器TR0=1;初始化程序:TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET1=1;TR1=1;定時器的應用舉例例2:設單片機晶振頻率f=6MHZ,使用定時器T1以方式1產生周期為500uS的等寬正方形脈沖,并由P1.0腳輸出。①確定TMOD寄存器的內容定時器/計數器1的工作方式為方式1,從而M1M0=01;實現定時功能,從而C/T=0;設通過給TR1置位來啟動定時器工作,從而GATE=0;另外,定時器/計數器0不用,從而低四位全為0;所以(TMOD)=10H。②計算計數初值要產生500us的等寬正方波脈沖,只需在P1.0端以250us為周期交替輸出高低電平即可實現,從而定時時間為250us,f=6MHz。則機器周期=2us,利用公式:定時時間t=計數個數N×機器周期T,可得N=t/T=250us/2us=125;計數初值X=2^16-125=65536-125;這樣: TH1=(65536-125)/256; TL1=(65536-125)%256。一、采用中斷方式#include<reg51.h>voidmain(){TMOD=0x10;TH1=(65536-125)/256;TL1=(65536-125)%256;ET1=1;EA=1;TR1=1;while(1);}voidtimer1_int()interrupt3{ P1_0=~P1_0;TH1=(65536-125)/256;TL1=(65536-125)%256;}系統電路圖二、采用查詢方式voidmain(){TMOD=0x10;TH1=(65536-125)/256;TL1=(65536-125)%256;TR1=1;While(1){While(TF1){ P10=~P10; TR1=0;TH1=(65536-125)/256;TL1=(65536-125)%256;TF1=0;TR1=1;}}}例3:設單片機晶振頻率f=12MHZ,在P1.0端接一個發光二極管,利用定時T0工作在方式0,使LED亮1s、滅1s,閃爍。(中斷/查詢)用T0、工作方式0實現1秒延時,晶振頻率為12MHz。因工作方式0是13位計數器,其最大定時時間為:2^13×1
s=8192
s=8.192ms,為實現1秒延時,可選擇定時時間為5ms,再循環200次。定時時間選定后,可確定計數值為5ms/1
s=5000,則T0的初值為:X=2^13
計數值=8192
5000。采用T0方式0工作,因此,TMOD=0x00。/*中斷方式*/#include<reg51.h>sbitP1_0=P1^0;unsignedcharnum=0;//全局變量voidmain(){TMOD=0x00;TH0=(8192-5000)%32;TL0=(8192-5000)/32;ET0=1;EA=1;TR0=1;While(1){if(num==200){num=0;P1_0=~P1_0;}}}voidtimer0_int()interrupt1{ num++; TH0=(8192-5000)%32;TL0=(8192-5000)/32;}/*查詢方式*/#include<reg51.h>sbitP1_0=P1^0;unsignedcharnum=0;voidmain(){TMOD=0x00;TH0=(8192-5000)%32;TL0=(8192-5000)/32;TR0=1;While(1){ while(TF0) { num++; if(num==200){num=0;P1_0=~P1_0;}
TR0=0; TH0=(8192-5000)%32; TL0=(8192-5000)/32; TF0=0; TR0=1; } }}1、利用定時/計數器T0從P1.0輸出周期為1s的方波,讓發光二極管以1HZ閃爍,設晶振頻率為12MHz。試設計程序。2、采用晶振12MHz,在P1.0引腳上輸出周期為2.5S,占空比為20%的脈沖信號。3、利用定時/計數器T1產生定時時鐘,由P1口控制8個發光二極管。編一個程序,使8個指示燈依次一個一個閃動,閃動頻率為10次/秒(8個燈依次亮一遍為一個周期)。
習題1、MCS-51系列單片機的五個中斷源是哪些?請按自然優先級的順序寫出。2、允許外部中斷源INT1開中斷,IE=__________。3、采用定時/計數器T1計數,工作方式0,軟硬結合啟動,TMOD=__________。4、利用定時/計數器T1的方式1,產生10ms的定時,并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式,設系統時鐘頻率為12MHz。定時/計數器
設置定時/計數器工作方式通過對方式寄存器TMOD的設置,確定相應的定時/計數器是定時功能還是計數功能,工作方式以及啟動方法。定時/計數器工作方式有四種:方式0、方式1、方式2和方式3。定時/計數器啟動方式有兩種:軟件啟動和硬軟件共同啟動。除了從控制寄存器TCON發出的軟件啟動信號外,還有外部啟動信號引腳,這兩個引腳也是單片機的外部中斷輸入引腳。定時/計數器
設置計數初值T0、T1是16位加法計數器,分別由兩個8位專用寄存器組成,T0由TH0和TL0組成,T1由TH1和TL1組成。TL0、TL1、TH0、TH1的訪問地址依次為8AH
8DH,每個寄存器均可被單獨訪問,因此可以被設置為8位、13位或16位計數器使用。在計數器允許的計數范圍內,計數器可以從任何值開始計數,對于加1計數器,當計到最大值時(對于8位計數器,當計數值從255再加1時,計數值變為0),產生溢出。定時/計數器允許
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026全地形輪胎接地印模設計磨損性能試驗文件
- 2026年小升初數學思維訓練:第七章求組合圖形面積典例精講
- 自貢市自流井區2026年社會工作服務領域增量政策性崗位招募的(5人)筆試題庫及完整答案詳解(各地真題)
- 自貿區川南臨港片區(瀘州綜合保稅區)產業發展服務專員公開招聘筆試題庫及參考答案詳解(突破訓練)
- 濕疹特點專項試題 高中生成敗在此一舉 附答案
- 2026葉黃素酯國際標準對比與出口市場機遇深度研究報告
- 2026中國物流配送行業市場需求與競爭格局研究報告
- 達州市2026年公開考試招聘足球教練員的(10人)筆試題庫及答案詳解【考點梳理】
- 達州高新區2026年公開招聘社會工作服務崗位的(3人)考前沖刺密卷【真題匯編】附答案詳解
- 鄱陽縣2026年城區義務教育學校選調公辦教師【130人】考前沖刺試卷及完整答案詳解(歷年真題)
- 水產苗種生產技術操作規程
- 高等數學各專業復習資料大全
- 2025年山東省煙臺市輔警招聘公安基礎知識考試題庫及答案
- 拉力試驗機安全操作規程及維護手冊
- 《裝配式公路鋼橋墩》
- (正式版)DB23∕T 221-2002 《規模化養蜂技術規程》
- 選煤廠安全規程培訓課件
- BSL-1生物安全實驗室備案審核表
- 基于STM32的室內花卉自動澆灌系統設計
- 韓語入門考試題庫及答案
- 遼寧護士注冊管理辦法
評論
0/150
提交評論