版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
網(wǎng)絡空間安全學院網(wǎng)絡安全基礎技術應用第四章中斷系統(tǒng)目錄CONTENT4.1.單片機中斷系統(tǒng)概述4.2.中斷執(zhí)行過程4.3.外部中斷實踐練習4.1.1.中斷的概念中斷:當CPU正在處理某件事的時候外界發(fā)生了緊急事件請求(中斷源),要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完以后,再回到原來被中斷的地方,繼續(xù)原來的工作,這樣的過程稱為中斷。實現(xiàn)這種功能的部件稱為中斷系統(tǒng)。向CPU發(fā)出中斷請求的信號源稱為中斷源。表4.1-1列出了傳統(tǒng)8051、STC8H、STC32G的中斷源。從表中我們可以看到,STC8H和STC32G因為外設功能豐富,所以中斷源也更多。4.1.1.中斷的概念中斷源傳統(tǒng)8051STC8H3K64S2STC8H8K64USTC32G8K系列外部中斷0(INT0)支持下降沿和邊沿中斷√√√√定時器0(Timer0)√√√√外部中斷1(INT1)√√√√定時器1(Timer1)√√√√串口1(UART1)√√√√模數(shù)轉換(ADC)
√√√低壓檢測(LVD)
√√√捕獲中斷(CCP/PWM)
√√√串口2(UART2)
√√√串行外設接口中斷(SPI)
√√√外部中斷2(INT2)支持下降沿中斷
√√√外部中斷3(INT3)支持下降沿中斷
√√√定時器2(Timer)
√√√外部中斷4(INT4)
√√√串口3中斷(UART3)
√√串口4中斷(UART4)
√√定時器3中斷(Timer3)
√√√定時器4中斷(Timer4)
√√√I2C總線中斷
√√√USB中斷
√表4.1-1中斷源列表4.1.1.中斷的概念與中斷有關的概念還有:中斷過程、中斷優(yōu)先級、中斷嵌套等。中斷過程:從中斷源發(fā)出請求到中斷被響應,再到中斷返回,這個過程被稱為中斷過程,對應圖4.1-1中斷請求、中斷執(zhí)行、中斷返回。中斷優(yōu)先級:單片機的中斷系統(tǒng)一般允許多個中斷源,當幾個中斷源同時向CPU請求中斷,并要求為它服務的時候,就存在優(yōu)先響應的問題。傳統(tǒng)8051單片機設置優(yōu)先級寄存器后,有兩個中斷優(yōu)先級,即高優(yōu)先級和低優(yōu)先級,可以實現(xiàn)兩級中斷嵌套。中斷優(yōu)先級的規(guī)則是:高優(yōu)先級的中斷請求可以打斷低優(yōu)先級的中斷,反之,低優(yōu)先級的中斷請求不可以打斷高優(yōu)先級的中斷。當兩個相同優(yōu)先級的中斷同時產(chǎn)生時,將由查詢次序來決定系統(tǒng)先響應哪個中斷。中斷嵌套:當CPU正在處理一個中斷源請求的時候,也就是在執(zhí)行相應的中斷服務程序,發(fā)生了另外一個優(yōu)先級比它還高的中斷源請求。如果CPU能夠暫停對原來中斷源的服務程序,轉而去處理優(yōu)先級更高的中斷請求源,處理完以后,再回到原低級中斷服務程序,這樣的過程稱為中斷嵌套。4.1.2.中斷嵌套中斷嵌套,俗稱中斷里的中斷,傳統(tǒng)8051單片機有兩個中斷優(yōu)先級,即高優(yōu)先級和低優(yōu)先級,STC8、STC32系列有四個中斷優(yōu)先級,稱4級嵌套,我們以圖4.1-1說明4級嵌套中斷響應過程。圖中CPU先響應了最低優(yōu)先級中斷,如果該中斷執(zhí)行過程中還有高一級中斷發(fā)出請求,那么CPU將暫停當前中斷執(zhí)行過程,去執(zhí)行高一級中斷請求,最多可以嵌套4次。圖4.1-1中斷響應過程和嵌套4.1.2.中斷嵌套CPU在執(zhí)行主程序的過程中,如果一個中斷源發(fā)起了中斷請求,那么CPU響應后,就將當前的操作數(shù)都壓入堆棧(保護現(xiàn)場),跳轉到中斷服務程序(表中的中斷入口地址),如果此時還有比它更高級別的中斷源發(fā)出請求,那么CPU就將進入到新的中斷服務程序,以此類推,對于STC8、STC32來說最多可以發(fā)生4次這樣的嵌套。當高一級的中斷執(zhí)行完畢,就會返回到級別低的中斷,直到所有的中斷都執(zhí)行完畢,繼續(xù)執(zhí)行主程序。好比這樣的場景,班級里有小組長、學習委員、生活委員、安全員,假設他們的嵌套優(yōu)先級依次是0、1、2、3,數(shù)字越大,優(yōu)先級越高。現(xiàn)在同學們都在自習,此時小組長發(fā)出通知,相繼又有學習委員、生活委員、安全員發(fā)出通知,那么最先執(zhí)行的是安全員的通知,然后依次執(zhí)行生活委員、學習委員、小組長的通知,最后回到正常自習流程。以上所述歸納為下面兩條基本規(guī)則:1.低優(yōu)先級中斷可被高優(yōu)先級中斷所中斷,反之不能;2.任何一種中斷(不管是高級還是低級),一旦得到響應,不會再被它的同級中斷所中斷。4.2.1.中斷寄存器單片機的中斷系統(tǒng)包含了很多特殊功能寄存器,單片機要開啟某個中斷,必須先進行相應的設置,比如中斷使能、中斷優(yōu)先級設置、中斷標志位的清除等。1.中斷使能寄存器:中斷首先要被使能,CPU才去響應它。單片機的中斷源一部分來自于單片機芯片內(nèi)部功能模塊如定時器模塊,一部分來自于IO管腳,單片機首先要管理的是中斷的開啟。中斷被使能后,CPU才去響應中斷。下面各個寄存器位的值為“1”時,中斷允許。我們以IE和IE2舉例說明:(1)IE:中斷使能寄存器(可位尋址)寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0IEA8HEAELVDEADCESET1EX1ET0EX04.2.1.中斷寄存器EA:總中斷允許,即各中斷源首先受EA控制,其次才受各中斷源自己的中斷允許控制位控制。0:CPU屏蔽所有的中斷,即所有中斷都不響應。1:CPU開放中斷。ELVD:低壓檢測中斷允許位,對應LVD中斷源。EADC:模數(shù)轉換中斷允許位,對應ADC中斷源。ES:串行口1中斷允許位,對應UART1中斷源。ET1:定時/計數(shù)器T1的溢出中斷允許位。對應Timer1中斷源。EX1:外部中斷1中斷允許位,對應INT1中斷源。ET0:定時/計數(shù)器T0的溢出中斷允許位,對應Timer0中斷源。EX0:外部中斷T0的溢出中斷允許位,對應INT0中斷源。4.2.1.中斷寄存器(2)IE2:中斷使能寄存器2(不可位尋址)寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0IE2AFHEUSBET4ET3ES4ES3ET2ESPIES2EUSB:USB中斷允許位。ET4:定時/計時器T4的溢出中斷允許位,對應Timer4中斷源。ET3:定時/計時器T3的溢出中斷允許位,對應Timer3中斷源。ES4:串行口4中斷允許位,對應UART4中斷源。ES3:串行口3中斷允許位,對應UART3中斷源。ET2:定時/計時器T2的溢出中斷允許位,對應Timer2中斷源。ESPI:SPI中斷允許位,對應SPI中斷源。ES2:串行口2中斷允許位,對應UART2中斷源。4.2.1.中斷寄存器2.中斷請求寄存器:單片機的各個中斷源發(fā)出中斷請求,這個“中斷請求”是一種什么行為呢?它不是人們生活中的電話鈴聲,也不是門鈴,更不是喊叫,它和中斷允許一樣,也是寄存器(中斷標志位)的值的變化。下表中當值為“1”的時候,表示有中斷請求,為“0”的時候表示沒有中斷請求。CPU在讀到該位“1”的時候,響應中斷。我們以TCON、AUXINTIF舉例說明:(1)TCON:定時器控制寄存器(可位尋址)寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TCON88HTF1TR1TF0TR0IE1IT1IE0IT04.2.1.中斷寄存器TF1:定時器1溢出中斷標志,當進入到中斷服務程序后,該位自動清零。TF0:定時器0溢出中斷標志,當進入到中斷服務程序后,該位自動清零。IE1:外部中斷1中斷請求標志,當進入到中斷服務程序后,該位自動清零。IE0:外部中斷0中斷請求標志,當進入到中斷服務程序后,該位自動清零。IT1:外部中斷0電平觸發(fā)控制位。IT1=0,上升沿或下降沿均可觸發(fā)外部中斷0;IT1=1,外部中斷0下降沿觸發(fā)方式。IT0:外部中斷0源觸發(fā)控制位,IT0=0,上升沿或下降沿均可觸發(fā)外部中斷0;IT0=1,外部中斷0下降沿觸發(fā)方式。TCON寄存器除了有中斷請求標志位外,還有定時器模塊啟動和外部中斷信號選擇的控制位:TR1令定時器1啟動計時,TR0令定時器0啟動計時。4.2.1.中斷寄存器(2)AUXINTIF:中斷標志輔助寄存器INT4IF:外部中斷4中斷請求標志,當中斷服務程序響應后,該位自動清零。INT3IF:外部中斷3中斷請求標志,當中斷服務程序響應后,該位自動清零。INT2IF:外部中斷2中斷請求標志,當中斷服務程序響應后,該位自動清零。T4IF:定時器4溢出中斷標志,當中斷服務程序響應后,該位自動清零(此位不可讀)。T3IF:定時器3溢出中斷標志,當中斷服務程序響應后,該位自動清零(此位不可讀)。T2IF:定時器2溢出中斷標志,當中斷服務程序響應后,該位自動清零(此位不可讀)。注意:STC8H系列單片機的定時器2~4,中斷標志字是不可讀的,也就是書寫定時器2~4程序
時,不能出現(xiàn)溢出標志的查詢語句。寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TCONEFH-INT4IFINT3IFINT2IF-T4IFT3IFT2IF4.2.1.中斷寄存器3.中斷優(yōu)先寄存器:STC8、STC32系列是四級嵌套,優(yōu)先級可在3、2、1、0變化。用戶給中斷源安排的優(yōu)先次序在中斷優(yōu)先級控制寄存器里設置。中斷優(yōu)先InterruptPriority,所以其寄存器通常是IP開頭。IPH和IP說明如下:寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0IPHB7H-PLVDHPADCHPSHPT1HPX1HPT0HPX0HIPB8H-PLVDPADCPSPT1PX1PT0PX0對應的中斷源-LVDADCUart1Timer1INT1Timer0INT04.2.1.中斷寄存器IPH和IP相同位置的二進制位構成了四級嵌套,以PX0H,PX0為例:PX0H,PX0:外部中斷0中斷優(yōu)先級控制位00:INT0中斷優(yōu)先級為0級(最低級)01:INT0中斷優(yōu)先級為1級(較低級)10:INT0中斷優(yōu)先級為2級(較高級)11:INT0中斷優(yōu)先級為3級(最高級)其它中斷源的中斷優(yōu)先級設置類似。傳統(tǒng)8051單片機沒有IPH,只有IP寄存器,因此只能設置0和1兩級中斷。4.2.2.中斷控制過程中斷控制過程如圖4.2-1所示,圖中展示了INT0、Timer0、UART1、ADC四種中斷源的中斷控制過程。圖4.2-1中斷控制過程4.2.2.中斷控制過程1.INT0:當CPU總中斷允許、外部中斷0允許后(IE寄存器相應位置“1”,既EX0、EA開關關閉),事先在TCON.0設置好中斷觸發(fā)方式(電平還是邊沿)并設置好中斷優(yōu)先級,只要INT0外部管腳有信號,就會發(fā)出中斷請求。2.Timer0當CPU總中斷允許、定時器0允許后(IE寄存器相應位置“1”,既ET0、EA開關關閉),事先設置好定時器的工作模式和定時時間,只要TF0溢出標志位置1,就會發(fā)出中斷請求。3.UART1當CPU總中斷允許、串口中斷1允許后(IE寄存器相應位置“1”,既ES、EA開關關閉),事先設置好通信波特率,只要接收標志位RI和發(fā)送標志位TI有一個為1,就會發(fā)出中斷請求。4.2.2.中斷控制過程4.ADC當CPU總中斷允許、ADC中斷允許后(IE寄存器相應位置“1”,既EADC、EA開關關閉),只要ADC轉換結束,ADCFlag置1,就會發(fā)出中斷請求。STC8、STC32等各型號單片機常用中斷的觸發(fā)行為總結在表4.2-1中。中斷源觸發(fā)行為中斷請求標志位中斷允許控制位中斷清除INT0IT0=1時,下降沿觸發(fā);IT0=0時,上升沿和下降沿均可觸發(fā)。IE0EX0/EA當外部中斷服務程序被響應后,中斷標志位IE0會被硬件自動清零,重新設置為0Timer0定時器0溢出TF0ET0/EA當定時器中斷被執(zhí)行時,定時器的溢出標志位TF0被硬件清零。INT1IT0=1時,下降沿觸發(fā);IT0=0時,上升沿和下降沿均可觸發(fā)。IE1EX1/EA當外部中斷服務程序被響應后,中斷標志位IE1會被硬件自動清零.Timer1定時器1溢出TF1ET1/EA當定時器中斷被執(zhí)行時,定時器的溢出標志位TF1被硬件清零。UART1發(fā)送或接收完成RI/TIES/EARI和TI要由軟件清零.ADCA/D轉換完成ADC_FLAGEADC/EAADC_FLAG由軟件清除,重新設置為0。表4.2-1常用中斷的觸發(fā)行為4.2.2.中斷控制過程中斷源觸發(fā)行為中斷請求標志位中斷允許控制位中斷清除LVD電源電壓下降到低于LVD檢測電壓LVDFELVD/EALVDF由軟件清除。UART2出口2發(fā)送或接收完成RI2/TI2ES2/EARI2和TI2要由軟件清零.SPISPI數(shù)據(jù)傳輸完成SPIFESPI/EASPIF由軟件清除。INT2下降沿觸發(fā)INT2IFEX2/EA中斷標志位被隱藏起來了,對用戶不可見。當中斷服務程序被響應后,中斷請求標志位自動清零.INT3下降沿觸發(fā)INT3IFEX3/EATimer2定時器2、3、4溢出T2IF、T3IF、T4IFET2/EA、ET3/EA、ET4/EA注意:系統(tǒng)每個時鐘對外部中斷管腳采樣1次,所以為了確保被檢測到,輸入信號應該至少維持2個時鐘。4.2.3.中斷服務函數(shù)當單片機CPU接收到中斷請求后,要去響應中斷,執(zhí)行過程是:CPU停止主函數(shù)語句的執(zhí)行,保存當前狀態(tài),形成斷點保護,然后自動進入中斷函數(shù),執(zhí)行中斷函數(shù)中的語句,在中斷函數(shù)語句執(zhí)行完畢后返回到之前保護的斷點處,繼續(xù)執(zhí)行主函數(shù)語句。如上所述,單片機執(zhí)行中斷,其實執(zhí)行的是中斷函數(shù)里的語句。要讓中斷系統(tǒng)工作起來,除了設置中斷寄存器外,還要書寫中斷函數(shù)。中斷函數(shù)的格式如下:void中斷函數(shù)名()interrupt中斷編號中斷函數(shù)的特點:中斷函數(shù)沒有返回值,中斷函數(shù)的返回值都是void空。中斷函數(shù)名由用戶自定義,函數(shù)名后面一定要有括號()表明這是函數(shù)。Interrupt是中斷函數(shù)的關鍵字,表明這個函數(shù)是中斷函數(shù)。中斷編號與中斷入口地址對應,中斷編號是固定的。中斷編號也是優(yōu)先級查詢,編號的數(shù)字越小,查詢優(yōu)先級越高,如果沒有設置優(yōu)先級寄存器,中斷優(yōu)先級按照表4.2-2中斷編號逐漸降低。4.2.3.中斷服務函數(shù)表4.2-2列出了STC系列單片機的中斷源、中斷編號以及推薦的中斷函數(shù)名。從表中可以看出:不同型號單片機的中斷源數(shù)量是不一樣的,STC8H8K/STC32G12K的中斷源多于傳統(tǒng)8051單片機,也多于STC15F系列單片機。外部中斷2~3、定時器2的優(yōu)先級默認是0,無法通過優(yōu)先級設置位進行設置,因此它們的優(yōu)先級始終是最低的。傳統(tǒng)8051單片機/STC15F系列/STC8H8K系列/STC32G12K系列中斷編號中斷源中斷函數(shù)舉例0外部中斷0(INT0)voidInt0_serve()interrupt01定時器0(Timer0)voidTimer0_serve()interrupt12外部中斷1(INT1)voidInt1_serve()interrupt23定時器1(Timer1)voidTimer1_serve()interrupt34串口1(UART1)voidUART1_serve()interrupt4表4.2-2STC單片機的中斷編號、中斷源對應列表4.2.3.中斷服務函數(shù)STC15F2系列/STC8H8K系列/STC32G12K系列5AD轉換(ADC)voidADC_serve()interrupt56低壓檢測(LVD)voidLVD_serve()interrupt67捕獲中斷(CCP/PWM)voidPWM_serve()interrupt78串口2(UART2)voidUART2_serve()interrupt89SPI中斷voidSPI_serve()interrupt910外部中斷2(INT2)voidInt2_serve()interrupt1011外部中斷3(INT3)voidInt3_serve()interrupt1112定時器2(Timer2)voidTimer2_serve()interrupt1216外部中斷4——INT4voidInt4_serve()interrupt16STC8H8K系列/STC32G12K系列17串口3中斷(UART3)voidUART3_serve()interrupt1718串口4中斷(UART4)voidUART4_serve()interrupt1819定時器3(Timer3)voidTimer3_serve()interrupt1920定時器4(Timer4)voidTimer4_serve()interrupt2021比較器中斷(CMP)voidcmp_serve()interrupt2124I2C總線中斷voidI2C_serve()interrupt2425USB中斷voidUSB_serve()interrupt2526PWMAvoidPWMA_serve()interrupt2627PWMBvoidPWMB_serve()interrupt27Keil軟件只支持到中斷號(0~31)的32個中斷,超過31的中斷編號要查找芯片手冊。4.3.外部中斷實踐練習本章介紹了中斷相關概念和中斷的工作過程,參考圖4.2-1,說說看,單片機要執(zhí)行一個外部中斷過程,要滿足哪些控制條件?完成下面的任務。任務1.檢測外部中斷,led燈顯示任務要求:單片機P32、P33連接按鍵,請利用單片機外部中斷功能檢測按鍵狀態(tài),要求當按鍵按下,就讓P60、P61連接的led燈亮滅狀態(tài)取反一次。任務分析:電路圖如圖4.3-1所示。1.按鍵連接單片機P32、P33,這兩個管腳也是單片機的INT0、INT1管腳。2.按鍵SW17/SW18釋放時,P32/P33管腳高電平;SW17/SW18按下時,P32/P33低電平,理想波形如圖4.3-2所示,是中斷信號源。3.單片機開啟外部中斷功能后,管腳上的信號變化向CPU發(fā)出中斷請求。在程序中書寫中斷函數(shù),當中斷請求成功后,程序自動跳轉到中斷函數(shù)入口,中斷語句執(zhí)行完畢后返回到斷點。任務1.檢測外部中斷,led燈顯示圖4.3-1按鍵和LED電路電路圖4.3-2按鍵理想波形任務1.檢測外部中斷,led燈顯示程序書寫要點:(1)開啟外部中斷;(2)書寫外部中斷函數(shù)。中斷處理的優(yōu)點是不占用main函數(shù),由中斷源觸發(fā)CPU自動進入中斷函數(shù)。任務程序:#include<stc8h.h>//包含此頭文件后,不需要再包含"reg51.h"頭文件typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/***********端口設置的初始化函數(shù)***********************/voidGPIO_PxMxSet(){任務1.檢測外部中斷,led燈顯示P0M1=0x00;P0M0=0x00;//設置為準雙向口P1M1=0x00;P1M0=0x00;//設置為準雙向口P2M1=0x00;P2M0=0x00;//設置為準雙向口P3M1=0x00;P3M0=0x00;//設置為準雙向口P4M1=0x00;P4M0=0x00;//設置為準雙向口P5M1=0x00;P5M0=0x00;//設置為準雙向口P6M1=0x00;P6M0=0x00;//設置為準雙向口P7M1=0x00;P7M0=0x00;//設置為準雙向口P40=0;}/**********************主函數(shù)************************/voidmain(void)任務1.檢測外部中斷,led燈顯示{GPIO_PxMxSet();IE1=0;//外中斷1標志位IE0=0;//外中斷0標志位EX1=1;//INT1EnableEX0=1;//INT0EnableIT0=1;//INT0下降沿中斷IT1=1;//INT1下降沿中斷EA=1;//總中斷Enablewhile(1)//主程序空,不執(zhí)行任何語句{}任務1.檢測外部中斷,led燈顯示}/*********************INT0中斷函數(shù)*************************/voidINT0_int(void)interrupt0//進中斷時IE0已經(jīng)被清除{P60=!P60;}/*********************INT1中斷函數(shù)*************************/voidINT1_int(void)interrupt2//進中斷時IE1已經(jīng)被清除{P61=!P61;}任務2.檢測外部中斷,數(shù)碼管顯示任務要求:同任務15,單片機P32、P33連接按鍵,請利用單片機外部中斷功能記錄按鍵次數(shù),按鍵次數(shù)顯示在數(shù)碼管,可使用兩個數(shù)碼管分別顯示這兩個按鍵的次數(shù),按鍵次數(shù)最大15次。1.任務分析:電路圖如圖4.3-1所示。(1)按照任務15的方法,啟用中斷處理。(2)按照任務14的方法,書寫數(shù)碼管顯示代碼。(3)兩個按鍵的顯示格式如圖4.3-3所示,分別在8位數(shù)碼管的兩端,靜態(tài)顯示。(a)
按鍵SW17的次數(shù)顯示(b)按鍵SW18的次數(shù)顯示圖4.3-3
任務15的顯示圖示任務2.檢測外部中斷,數(shù)碼管顯示2.任務代碼:/******************************************/#include<stc8h.h>//包含此頭文件后,里面聲明的寄存器不需要再手動輸入,避免重復定義#defineMAIN_Fosc24000000L//定義主時鐘#defineDIS_BLACK0x10typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/**********************本地常量聲明段碼共陰數(shù)碼管顯示字形編碼*************/u8codetab[]={//0123456789ABCDEF任務2.檢測外部中斷,數(shù)碼管顯示0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//black-HJKLNoPUtGQrMy0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e, //0.1.2.3.4.5.6.7.8.9.-10xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};/***************************位碼,8位數(shù)碼管com7~com0獨立選中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};/*************************本地變量聲明***************************************/u8dspbuf[8];//顯示緩沖u8display_index;//顯示位索引u8INT0_cnt,INT1_cnt;//測試用的計數(shù)變量voidDisplayScan(void);//按鍵掃描函數(shù)任務2.檢測外部中斷,數(shù)碼管顯示/*******************************延時函數(shù)****************************************/voiddelay_ms(u8ms);//函數(shù)體見任務6/**********************主函數(shù)************************/voidmain(void){u8i=0; P6M1=0x00;P6M0=0x00;//設置為準雙向口P7M1=0x00;P7M0=0x00;//設置為準雙向口 INT0_cnt=0;INT1_cnt=0;IE1=0;//外中斷1標志位IE0=0;//外中斷0標志位任務2.檢測外部中斷,數(shù)碼管顯示EX1=1;//INT1EnableEX0=1;//INT0EnableIT0=1;//INT0下降沿中斷IT1=1;//INT1下降沿中斷EA=1;//允許總中斷for(i=0;i<8;i++)dspbuf[i]=DIS_BLACK;//全部消隱,黑屏while(1){ delay_ms(2);//視覺停留 DisplayScan();}}任務2.檢測外部中斷,數(shù)碼管顯示/*********************INT0中斷函數(shù)*************************/voidINT0_int(void)interrupt0//進中斷時已經(jīng)清除標志{INT0_cnt++;//中斷+1display_index=0;dspbuf[display_index]=INT0_cnt;}/*********************INT1中斷函數(shù)*************************/voidINT1_int(void)interrupt2//進中斷時已經(jīng)清除標志{INT1_cnt++;//中斷+1display_index=7;任務2.檢測外部中斷,數(shù)碼管顯示dspbuf[display_index]=INT1_cnt;}/**********************顯示掃描函數(shù)************************/voidDisplayScan(void){ P7=~dspcom[display_index];//位選 P6=~tab[dspbuf[display_index]];//段選
}}任務2.檢測外部中斷,數(shù)碼管顯示說明:任務16的編譯結果文件下載到單片機后,按鍵每按下一次,數(shù)碼管顯示內(nèi)容就增加一次。兩個按鍵次數(shù)分別顯示在數(shù)碼管左右兩側。任務16的main函數(shù)完成數(shù)碼管刷新功能,中斷函數(shù)記錄中斷次數(shù),按鍵掃描程序實現(xiàn)數(shù)碼管動態(tài)顯示過程,顯示內(nèi)容實時更新。任務15、16操作視頻見二維碼4.3-1二維碼4.3-1任務15-16的程序實現(xiàn)謝謝&提問網(wǎng)絡空間安全學院網(wǎng)絡安全基礎技術應用第五章定時器系統(tǒng)目錄CONTENT5.1.定時器工作原理5.2.定時器配置5.3.PWM定時器5.1.1.定時器內(nèi)部結構定時器通過記錄單位時間發(fā)生的次數(shù)完成定時、延時等功能,所以定時器的核心是一個計數(shù)寄存器組,記錄脈沖發(fā)生的次數(shù)。以定時器0為例,定時器0自動重裝載內(nèi)部結構及工作原理如圖5.1-1所示。圖5.1-1定時器0自動重裝載內(nèi)部結構圖SYSclk在第二章圖2.3-2已經(jīng)說明。定時器內(nèi)部結構的核心是計數(shù)寄存器TH0、TL0。在這兩個寄存器前面,有兩個選擇開關,分別受到AUXR.7、C/T控制;在這兩個計數(shù)寄存器下面,有2個重裝寄存器RL_TH0、RL_TL0,是TH0和TL0的預裝值。定時器的工作過程說明如下。5.1.1.定時器內(nèi)部結構(1)TH0、TL0:定時器0的計數(shù)寄存器,從初值開始往上計數(shù),是向上計數(shù)器。當定時器工作在16位模式時,TH0和TL0組合成為一個16位寄存器,TL0是低字節(jié),TH0是高字節(jié);如果定時器工作在8位模式,TL0和TH0是兩個獨立的8位寄存器。(2)當TR0=1,TH0、TL0開始對輸入振蕩器信號計數(shù),計滿后讓TF0=1,向CPU發(fā)出中斷請求。(3)TH0、TL0溢出后,一方面TF0置1,發(fā)出中斷請求;另一方面自動重新載入RL_TH0、RL_TL0的值,開始新一輪的計數(shù)。(4)RL_TH0、RL_TL0是TH0和TL0的影子寄存器,當用戶第一次給TH0、TL0賦值的時候,這個初值就被寫入到RL_TH0、RL_TL0,一旦TH0、TL0計滿溢出不僅置位TF0,而且會自動將影子寄存器的內(nèi)容重新載入到TH0、TL0。5.1.1.定時器內(nèi)部結構(5)定時器可以由軟件啟動,也可以由硬件啟動。當GATE=0時無需外部條件只要TR0=1就可以讓定時器計時;當GATE=1時需要INT0管腳為1,此時TR0=1才有效。(6)當C/T=0時,多路開關連接到系統(tǒng)內(nèi)部系統(tǒng)時鐘,是定時器的方式。定時器對內(nèi)部系統(tǒng)時鐘SYSclk周期計數(shù),AUXR.7決定了SYSclk是否分頻,如果AUXR.7=0,那么12個SYSclk定時器才計數(shù)一次,如果AUXR.7=1,那么1個SYSclk計數(shù)一次。(7)當C/T=1時,多路開關連接到芯片外部的T0管腳,是計數(shù)器的方式,不計算時間,只記錄脈沖發(fā)生次數(shù),當計數(shù)達到規(guī)定的值就溢出,發(fā)出中斷請求。(8)當T0CLKO=1時,定時器0在P3.5管腳輸出脈沖波形,為外圍電路提供時鐘信號源。5.1.2.定時器的工作模式不同的單片機型號提供的定時器數(shù)量是不一樣的。傳統(tǒng)8051單片機只有定時器0和1,且只有定時器1可做串口通信的波特率發(fā)生器。現(xiàn)代單片機定時器數(shù)量大大增加,STC8、STC32系列內(nèi)置5個16位定時器。定時器的核心是計數(shù)寄存器,計數(shù)寄存器到底怎么工作,決定了定時器的工作模式。按照計數(shù)寄存器的位數(shù),分為8位定時器、16位定時器;按照計數(shù)器初值是否能自動重裝,分為自動重裝載和不可重裝兩種。表5.1-1列出了STC單片機各定時器的工作模式。從列表5.1-1可知,定時器0和定時器1有四種工作模式,定時器2~4只有一種工作模式。下面分別介紹這四種工作模式。定時器x(Tx)定時器0(T0)定時器1(T1)定時器2~4(T2、T3、T4)模式016位自動重裝載16位自動重裝載模式模式116位不可重裝模式28位自動重裝模式3不可屏蔽中斷的16位自動裝載無效表5.1-1STC系列單片機定時器的工作模式5.1.2.定時器的工作模式1.模式0——16位自動重裝:圖5.1-2是定時器0的16位自動重裝內(nèi)部結構圖,定時器的兩個計數(shù)器THx、TLx都參與計數(shù),當計數(shù)溢出后,單片機自動把影子寄存器的初始值賦值給它們,重新從初值開始計數(shù)。圖5.1-2定時器的16位自動重裝載模式5.1.2.定時器的工作模式2.模式1——16位不可重裝:圖5.1-3是定時器0的16位不可重裝結構圖,定時器的兩個計數(shù)器THx、TLx都參與計數(shù),當計數(shù)溢出后,THx和TLx向高位進位產(chǎn)生TF0信號,自身清零。因為沒有自動重裝初值,所以TH0、TL0從0開始重新計數(shù),為了與上次定時時間一致,程序要對THx、TLx再次賦值。16位不可重裝的工作過程如圖5.1-3所示。圖5.1-3定時器0的16位不可重裝載模式5.1.2.定時器的工作模式3.模式2——8位自動重裝:圖5.1-4是定時器0的8位自動重裝結構圖,定時器只有TLx參與計數(shù),當TLx計數(shù)溢出后,單片機自動把THx中的值裝進TLx,從初值開始加1計數(shù)。圖5.1-4定時器0的8位自動重裝載模式4.模式3——不可屏蔽中斷的16位自動裝載:內(nèi)部結構同模式0的圖5.1-2完全一致,但是該模式中斷處理特殊,只要中斷開啟,中斷請求將不可屏蔽,既無法禁止該中斷,此功能可作為系統(tǒng)節(jié)拍器或系統(tǒng)監(jiān)控使用。任務1.理解定時器工作原理任務要求:理解定時器的核心部件——計數(shù)器寄存器TH、TL,其記錄輸入脈沖的過程。要求①設置定時器0的工作模式是8位自動重裝(模式2);要求②讀出計數(shù)寄存器的值;要求③當它溢出后蜂鳴器鳴叫。1.任務分析:(1)圖5.1-4是定時器T0模式2工作原理圖,根據(jù)任務要求,定時器工作在計數(shù)器模式。(2)設置T0管腳(P3.4)是計數(shù)器輸入管腳,按鍵每按下一次,計數(shù)寄存器TL0值就增加1。(3)當TL0溢出后,TF0值會被置1。(4)令TL0值顯示在數(shù)碼管,TF0使得蜂鳴器響。(5)按鍵電路參考圖5.1-6,電路沒有上拉電阻,因此需要設置P34、P35是內(nèi)部上拉。(6)蜂鳴器電路參考圖5.1-7,P5.4管腳是可編程管腳,當它低電平時,三極管T2導通,蜂鳴器上電開始鳴叫。(7)查詢TF0的狀態(tài),根據(jù)TF0的狀態(tài)控制P5.4管腳電平。任務1.理解定時器工作原理圖5.1-5定時器0、定時器1外部管腳連接按鍵圖5.1-6蜂鳴器電路任務1.理解定時器工作原理2.任務參考代碼:/*************功能說明******************************************讀計數(shù)寄存器內(nèi)容,了解定時器工作原理由于按鍵是機械按鍵,按下有抖動,本例程沒有去抖動處理,所以按一次可能連續(xù)計數(shù)./*---------------------------------------------------------------------*/ #include<STC8.H>#defineMAIN_Fosc12000000UL//定義主時鐘typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;/***********本地常量聲明段碼共陰數(shù)碼管顯示字形編碼*************/任務1.理解定時器工作原理 //0123456789u8codetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, //ABCDEFblack 0x77,0x7C,0x39,0x5E,0x79,0x71, 0x00};/************位碼,8位數(shù)碼管com7~com0獨立選中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};u8dspbuf[8]={16,16,16,16,16,16,16,16};//顯示緩沖,初始化黑屏u8display_index=0;//顯示位索引voiddelay_ms(u8ms);//聲明延時函數(shù)voidDisplayScan(void);//數(shù)碼管顯示掃描/***********端口設置的初始化函數(shù)***********************/voidGPIO_PxMxSet()任務1.理解定時器工作原理{ P0M1=0x00;P0M0=0x00;//設置為準雙向口P1M1=0x00;P1M0=0x00;//設置為準雙向口P2M1=0x00;P2M0=0x00;//設置為準雙向口//P3M1=0x00;P3M0=0x00;//設置為準雙向口P4M1=0x00;P4M0=0x00;//設置為準雙向口P5M1=0x00;P5M0=0x00;//設置為準雙向口P6M1=0x00;P6M0=0x00;//設置為準雙向口P7M1=0x00;P7M0=0x00;//設置為準雙向口P40=0;}voidTimer0Init(void) //計數(shù)10次@12.000MHz任務1.理解定時器工作原理{ AUXR&=0x7F; //定時器時鐘12T模式 TMOD&=0xF0; //設置定時器模式 TMOD|=0x06; //設置定時器模式 TL0=0xF5; //設置定時初始值,為了減少按鍵次數(shù),從245開始計數(shù) TH0=0xF5; //設置定時重載值 TF0=0; //清除TF0標志 TR0=1; //定時器0開始計數(shù)}voidmain(){GPIO_PxMxSet()任務1.理解定時器工作原理P3M1=0x30;P3M0=0x00;//P3.4,P3.5設置為輸入口 P_SW2|=0x80; //使能擴展RAMP3PU=0x30;//P3.4,P3.5使能內(nèi)部4.1K上拉電阻P_SW2&=0x7f;Timer0Init(); while(1){ if(TF0)//查詢定時器是否溢出 { P54=0; delay_ms(200);//鳴叫一段時間 P54=1; TF0=0;
任務1.理解定時器工作原理 } DisplayScan(); }}//========================================================================//函數(shù):voiddelay_ms(u8ms)//描述:延時函數(shù)。//參數(shù):ms,要延時的ms數(shù),這里只支持1~255ms.自動適應主時鐘.//返回:none.//========================================================================任務1.理解定時器工作原理voiddelay_ms(u8ms){u16i;do{i=MAIN_Fosc/10000;while(--i);//10Tperloop}while(--ms);}/**********************數(shù)碼管動態(tài)顯示掃描函數(shù)************************/voidDisplayScan(void){ //顯示內(nèi)容 dspbuf[6]=TL0>>4;//顯示高四位任務1.理解定時器工作原理 dspbuf[7]=TL0&0x0f;//顯示低四位 //位選 P7=~dspcom[display_index];//從最左邊開始 //段選 P6=~tab[dspbuf[display_index]]; //延時,穩(wěn)定顯示 delay_ms(2); //動態(tài)數(shù)碼管掃描if(++display_index>=8)//與靜態(tài)顯示相比,數(shù)碼管顯示位是變化的{display_index=0;//8位結束回0}}任務1.理解定時器工作原理總結:P34,T0按鍵每按下一次,TL0計數(shù)值就增加1,當TL0=0xff,再次按下按鍵,定時器溢出,并將TH0的值自動重裝給TL0。任務17操作視頻見二維碼5.1-1。二維碼5.1-1任務17的程序實現(xiàn)5.2.定時器配置現(xiàn)代單片機有多個定時器,其中定時器0、1和傳統(tǒng)8051完全兼容,定時器2及以上都是擴展定時器,這兩類定時器的功能及使用稍有不同,因此分別講述其配置方法。5.2.1.定時器0、1配置單片機的定時器0有4種工作模式,定時器1有3種工作模式。定時器模塊是單片機重要資源,要開啟定時器,首先要給它權限,允許定時器工作,即將允許標志位置“1”;其次要設置定時器的工作模式,即設定單片機工作在16位還是8位,是自動重裝還是非重裝模式。定時器配置,既給特殊功能寄存器賦值。有兩個寄存器非常重要:控制寄存器(TCON)——允許標志位所在的寄存器;工作模式寄存器(TMOD)——設置定時器工作模式的寄存器。除了TCON、TMOD,其它與定時器0和1有關的寄存器一并說明如下。(1)TCON:定時器控制寄存器,可位尋址寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TCON88HTF1TR1TF0TR0IE1IT1IE0IT05.2.1.定時器0、1配置TF1:定時器T1的溢出中斷標志,當計數(shù)寄存器從初值加1計數(shù),到0xffff(16位計數(shù)器)或0xff(8位計數(shù)器)后,進位產(chǎn)生溢出,硬件將TF1置“1”,向CPU發(fā)出中斷請求,一直保持到CPU響應中斷時,由硬件清“0”,如果單片機沒有開啟定時器中斷,要軟件清“0”TR1:定時器T1的運行控制位(TimerRunning),TR1=1,允許Timer1開始計數(shù),TR1=0時停止Timer1計數(shù)。TF0:定時器T0的溢出中斷編址,功能及使用同TF1。TR0:定時器T0的運行控制位,功能及使用同TR1。IE1:外部中斷1(管腳INT1/P33)請求標志,當IE1=1,意味著有外部中斷源信號向CPU發(fā)出請求,當CPU響應該中斷時單片機自動清除該標志位。IT1:外部中斷1觸發(fā)控制位,當IT1=0,上升沿或下降沿都可觸發(fā)外部中斷1,當IT1=1,外部中斷源的下降沿觸發(fā)中斷。IE0:外部中斷0(管腳INT0/P32)請求標志,功能及使用同IE1。IT0:外部中斷0觸發(fā)控制位,功能及使用同IT1。5.2.1.定時器0、1配置(2)TMOD:定時器工作模式寄存器,可位尋址寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TMOD89HGATEC/TM1M0GATEC/TM1M0for:定時器1定時器0TMOD可以控制Timer0和Timer1兩個定時器的工作模式。高四位控制Timer1,低四位控制Timer0。GATE:當Gate=1,硬件開啟定時器;Gate=0,定時器開啟與外部管腳無關。C/T:定時器的作用域,當C/T=1,此時定時器的功能是個計數(shù)器,對外部中斷的管腳脈沖進行計數(shù)。當C/T=0,是定時器,可以實現(xiàn)us、ms定時。5.2.1.定時器0、1配置M1M0:定時器工作模式選擇。定時器0、1都有四個工作模式,這兩個定時器的模式0~2完全一致,模式3不一樣。如表5.2-1所示。M1M0定時器0定時器100模式0:16位自動重裝定時器,當溢出時將RL_TH1/RL_TH0、RL_TL1/RL_TL0存放的值自動重裝入TH1/TH0和TL1/TL001模式1:16位不可重裝載模式,TH1/TH0、TL1/TL0溢出歸零后要手動裝入初值10模式2:8位自動重裝載模式,當溢出時將TH1/TH0存放的值自動重裝入TL1/TL011模式3:不可屏蔽中斷的16位自動重載模式。與模式0相同,但是中斷要無條件相應,是最高優(yōu)先級,可用作操作系統(tǒng)的節(jié)拍定時器或者系統(tǒng)監(jiān)控定時器。定時器無效,停止計數(shù)。表5.2-1定時器0和1的工作模式5.2.1.定時器0、1配置(3)TH0、TL0、TH1、TL1:計數(shù)寄存器,不可位尋址符號地址bit7bit6bit5bit4bit3bit2bit1bit0TL0/TL18AH/8BH--------TH0/TH18CH/8DH--------計數(shù)寄存器不可位尋址,只能整個寄存器讀和寫。當定時器工作在16位模式時,THx和TLx組合成一個16位寄存器,THx是高8位,TLx是低8位;若為8位模式,THx和TLx是兩個獨立的8位寄存器。5.2.1.定時器0、1配置(4)AUXR:輔助寄存器1,可位尋址”符號地址bit7bit6bit5bit4bit3bit2bit1bit0AUXR8EHT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMSIST2T0x12:定時器0速度控制位。T0x12=0,12T模式,定時器時鐘是晶振的1/12(FOSC/12);T0x12=1,1T模式,定時器時鐘不分頻(FOSC/1)。T1x12:定時器1速度控制位,功能及使用同T0x12,當復位后,T0x12、T1x12的值都為0,定時器時鐘是12T模式,與傳統(tǒng)8051兼容。UART_M0x6:串口1模式0的通訊速度控制。T2R:定時器2的運行控制位,T2R=0,定時器2停止計數(shù);T2R=1,定時器2開始計數(shù)。T2_C/T:控制定時器2用作定時器或計數(shù)器,清“0”用作定時器(對內(nèi)部系統(tǒng)時鐘進行計數(shù)),置“1”用作計數(shù)器(對管腳T2/P1.2外部脈沖進行計數(shù))。T2x12:定時器2速度控制位,T2x12=0,12T模式,系統(tǒng)時鐘12分頻;T2x12=1,1T模式,系統(tǒng)時鐘不分頻。EXTRAM:擴展RAM訪問控制,EXTRAM=0,訪問內(nèi)部擴展RAM;EXTRAM=1,內(nèi)部擴展RAM被禁用。5.2.2.定時器計算公式定時器0、1的計算公式見表5.2-2。定時器計數(shù)器定時器速度周期時間計算公式16位1T
12T
8位1T
12T表5.2-2定時器0、1定時時間計算公式:從在上面的計算公式可以看到,定時器的計數(shù)寄存器其實是個向上計數(shù)器。所謂“向上”就是從THx、TL初值開始,每來一個時鐘源脈沖,就自動+1,直到計數(shù)滿為止。定時器的定時時間和THx、TLx的初值有關系,初值越大,定時時間就越短。另外,系統(tǒng)時鐘頻率越快,最大定時時間越短。設單片機晶振12MHz,定時器設置在12T,那么定時器最大定時時間65.536ms。定時器設置在1T,最大定時時間只有5.46ms。5.2.2.定時器計算公式在單片機應用開發(fā)中通常已知定時時間,定時器初值是未知數(shù),即需要計算定時器從何值開始計數(shù),初值計算公式如表5.2-3所示。定時器位數(shù)定時器速度計數(shù)寄存器初值計算公式16位1T12T
8位1T
12T
表5.2-3定時器0、1的計數(shù)寄存器初值計算公式:5.2.2.定時器計算公式例1:已知STC8H8K單片機時鐘電路頻率是12MHz,單片機定時T0工作在12T,16位自動重裝模式,現(xiàn)在要定時50ms,請問T0的TH0、TL0初值裝載多少合適?思路1:按照表5.2-3的公式計算,可以得到TH0和TL0的初值,注意計算的時候數(shù)量單位要統(tǒng)一,時間如果用秒,頻率就要用Hz。256=(65536-50000)/256=60=(65536-50000)%256=176思路2:單片機的SYSclk是12MHz,定時器12T,因此定時器輸入時鐘周期是1us,現(xiàn)在定時50ms即50000us,要經(jīng)過50000個時鐘周期達到定時時間,因此從65536-50000=15536開始計數(shù)。15536轉換成16進制為0x3CB0,因此TH0=0x3C,TL0=0xB0,與思路1的計算結果一致。5.2.2.定時器計算公式例2:例1的定時器T0如果設定在1T,定時還是50ms,TH0、TL0初值又該如何設定?思路:12MHz單片機的定時器如果在1T工作模式,50ms已經(jīng)超過了它的最大定時時間,可以將50ms分解為10個5ms,或者50個1ms,定時器先設定為5ms或1ms溢出,然后記錄溢出次數(shù),達到次數(shù)后說明定時時間到。令T0的定時時間1ms,得到:256=(65536-12000)/256=209=(65536-12000)%256=32當定時器溢出50次后,達到定時時間50ms。5.2.2.定時器計算公式下面介紹使用輔助工具STC-ISP獲得定時器初值的方法,圖5.2-1示意了工具使用方法。圖5.2-1STC-ISP軟件定時器初始化5.2.2.定時器計算公式步驟如下:(1)選擇系統(tǒng)時鐘(2)選擇定時器(3)設置定時長度(4)選擇定時器模式(5)定時器時鐘選擇1T(6)點擊生成C代碼,得到THx、TLx。(7)復制代碼,粘貼到Keil程序書寫框。任務3.定時器1定時1s任務要求:設置1秒定時器。通過LED燈的閃爍彰顯定時器效果。1.任務資訊及分析:(1)LED電路原理圖如圖5.2-2所示。(2)單片機晶振選擇12MHz。單片機工作在1T方式下。(3)由任務要求可知,定時器周期是1秒,根據(jù)表5.2-2定時器周期的計算公式,對于16位定時器1T工作方式,當THx和TLx是最小值0的時候,定時器的定時時間最多只有5個毫秒,現(xiàn)在要定時1秒,讓定時器只溢出一次肯定是不夠的。解決辦法是定時器先定時1毫秒,然后記錄定時器溢出次數(shù),當定時器溢出1000次后,就是1秒定時。(4)開啟定時器1,利用STC-ISP軟件獲得定時器的設置語句,過程如圖5.2-1所示。(5)開啟單片機中斷工作模式,當定時器1溢出后,CPU執(zhí)行中斷。(6)書寫定時器中斷函數(shù),在中斷里記錄定時器時間,控制led狀態(tài)。任務3.定時器1定時1s圖5.2-2LED電路任務3.定時器1定時1s2.任務參考代碼:#include<STC8.H>//包含此頭文件后,里面聲明的寄存器不需要再手動輸入,避免重復定義/********************************************************定時器初始化函數(shù)*********************************************************/voidTimer1Init(void) //1毫秒@12.000MHz1T模式{ AUXR|=0x40; //定時器時鐘1T模式 TMOD&=0x0F; //設置定時器模式 TL1=0x20; //設置定時初始值 TH1=0xD1; //設置定時初始值任務3.定時器1定時1s TF1=0; //清除TF1標志 TR1=1; //定時器1開始計時 ET1=1;//打開定時器1中斷EA=1;//打開總中斷}/********************************************************主函數(shù)*********************************************************/ voidmain(void){GPIO_PxMxSet();//見任務15Timer1Init();任務3.定時器1定時1s{ ;}}//========================================================================//函數(shù):voidTimer1_Isr(void)interruptTIMER1_VECTOR//描述:timer1中斷函數(shù).//參數(shù):none.//返回:none.//========================================================================任務3.定時器1定時1svoidTimer1_Isr(void)interrupt3{staticintcnt=0;cnt++;//記錄定時器中斷溢出的次數(shù)if(cnt==1000)//1s時間到{ cnt=0; P60=~P60;}}任務18操作視頻見二維碼5.2-1。二維碼5.2-1任務18的程序實現(xiàn)5.2.3.定時器2~4的配置現(xiàn)代單片機都提供多個定時器,與定時器0和1不同,定時器2、3、4的工作模式只有一種既16位自動重載模式。定時器可以定時、計數(shù)復用,可以設置為串口波特率發(fā)生器或可編程時鐘輸出。以定時器2為例其內(nèi)部結構如圖5.2-3所示。圖5.2-3定時器2內(nèi)部結構5.2.3.定時器2~4的配置(1)T2H、T2L:定時器2計數(shù)寄存器,是定時器工作的核心寄存器,T2H、T2L合成為一個16位寄存器,T2H是高字節(jié),T2L是低字節(jié)。(2)RL_T2H、RL_T2L是T2H和T2L的影子寄存器。(3)只要T2R=1,T2H、T2L就開始計數(shù)。(4)當T2_C/T=0時,多路開關連接到系統(tǒng)內(nèi)部系統(tǒng)時鐘,是定時器的方式。當T2_C/T=1時,多路開關連接到芯片外部的T2管腳,是計數(shù)器的方式,對管腳脈沖計數(shù)。(5)增加了8位預分頻寄存器TM2PS,定時器2的時鐘=系統(tǒng)時鐘SYSclk÷(TM2PS+1)。所以系統(tǒng)時鐘是可以編程的。(6)AUXR.2決定是否對定時器2的時鐘再次12分頻或不分頻。5.2.3.定時器2~4的配置(7)TM2PS:定時器2的8位預分頻寄存器,不可位尋址。TM2PS、TM3PS、TM4PS的寄存器地址和內(nèi)部位結構如表5.2-4所示。寄存器名稱地址bit7bit6bit5bit4bit3bit2bit1bit0TM2PSFEA2H--------TM3PSFEA3H--------TM4PSFEA4H--------表5.2-4預分頻寄存器內(nèi)部不可位尋址結構示意(8)定時器2~4的定時器周期計算公式列于表5.2-5中。定時器速度周期計算公式1T
12T表5.2-5定時器2~4的計算公式:注:上式中x=2,3,4,對應定時器2、3、4。SYSclk是系統(tǒng)時鐘,如果芯片連接外部時鐘,則為外部晶振頻率,如果是內(nèi)部時鐘,則為內(nèi)部晶振頻率。任務4.定時器2掃描數(shù)碼管動態(tài)顯示任務要求:使8位數(shù)碼管顯示時間。顯示格式如下:小時(十位)小時(個位)-分(十位)分(個位)-秒(十位)秒(個位)1.任務資訊:(1)數(shù)碼管電路參考第3章任務8圖3.4-1。數(shù)碼管的段選連接P6端口,位選連接P7端口。(2)數(shù)碼管動態(tài)掃描原理:人眼有視覺停留效應。光信號進入人眼后,在視網(wǎng)膜上產(chǎn)生影像,光信號消失后,影像并不會立即消失,這個過程就稱為視覺暫留效應,暫留時間約為0.05~0.2秒。動畫片、電影的播放都是利用這個原理將靜止的畫面變換為連續(xù)畫面。(3)圖3.4-1中八位數(shù)碼管的顯示段都連接在一起,要讓每位數(shù)碼管顯示不同的字型,必須利用人眼視覺停留效應。方法是輪流向各位數(shù)碼管送出要顯示的字型,每次只有一個數(shù)碼管顯示。每位數(shù)碼管獨立顯示的時間都很短,因為視覺停留效應,看上去這些數(shù)碼管同時在顯示不同字型。如果把數(shù)碼管當做“靶子”,這些靶子每隔一段時間就要掃射一遍,所以稱為動態(tài)掃描,也稱動態(tài)刷新。任務4.定時器2掃描數(shù)碼管動態(tài)顯示3.任務參考代碼:#include<STC8.H>//包含此頭文件后,里面聲明的寄存器不需要再手動輸入,避免重復定義typedefunsignedcharu8;typedefunsignedintu16;typedefunsignedlongu32;#defineDIS_0x11//顯示“-”/*********************本地常量聲明段碼共陰數(shù)碼管顯示字形編碼*************/u8codetab[]={//0123456789ABCDEF0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,//black-HJKLNoPUtGQrMy0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,任務4.定時器2掃描數(shù)碼管動態(tài)顯示//0.1.2.3.4.5.6.7.8.9.-10xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};/***********************位碼,8位數(shù)碼管com7~com0獨立選中****************/u8codedspcom[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};/*************本地變量聲明**************/u8dspbuf[8];//顯示緩沖u8display_index=0;//顯示位索引u8second_cnt,minute_cnt,hour_cnt;/*******************************顯示函數(shù)****************************************/voidDisplayScan(void);/********************************************************定時器初始化函數(shù)任務4.定時器2掃描數(shù)碼管動態(tài)顯示*********************************************************/voidTimer0Init(void) //1毫秒@12.000MHz1T模式,定時器0{ AUXR|=0x80; //定時器時鐘1T模式 TMOD&=0xF0; //設置定時器模式 TL0=0x20; //設置定時初始值 TH0=0xD1; //設置定時初始值 TF0=0; //清除TF0標志 TR0=1; //定時器0開始計時}voidTimer2Init(void) //2毫秒@12.000MHz{任務4.定時器2掃描數(shù)碼管動態(tài)顯示 AUXR|=0x04; //定時器時鐘1T模式 T2L=0x40; //設置定時初始值 T2H=0xA2; //設置定時初始值 AUXR|=0x10; //定時器2開始計時}/********************************************************主函數(shù)*********************************************************/ voidmain(void){GPIO_PxMxSet(); ET0=1;//打開定時器0中斷任務4.定時器2掃描數(shù)碼管動態(tài)顯示IE2=IE2|0x04;//打開定時器2中斷,ET2=1,IE2不可位尋址EA=1;//打開總中斷 Timer0Init();Timer2Init();while(1){ ;}}///========================================================================任務4.定時器2掃描數(shù)碼管動態(tài)顯示//函數(shù):voidtimer0_int(void)interruptTIMER0_VECTOR//描述:timer0中斷函數(shù).//參數(shù):none.//返回:none.//========================================================================voidtimer0_int(void)interrupt1{staticintcnt=0;cnt++;//記錄定時器中斷溢出的次數(shù)if(cnt==1000)//1s時間到{任務4.定時器2掃描數(shù)碼管動態(tài)顯示 cnt=0; P60=~P60; second
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度360有錢聯(lián)盟(拓展版)數(shù)字貨幣交易服務合作協(xié)議2篇
- 2024有試用期勞動合同范本與試用期管理策略解析3篇
- 2025年數(shù)字貨幣支付系統(tǒng)合作協(xié)議模板3篇
- 二零二四年度餐飲采購合同某酒店與某咖啡機供應商之間的供需協(xié)議
- 2024影視制作公司與網(wǎng)絡視頻平臺版權購買協(xié)議
- 2025年度文化娛樂產(chǎn)業(yè)財產(chǎn)保全擔保協(xié)議3篇
- 紡織品基本知識培訓課件
- 2024年物聯(lián)網(wǎng)安全保密協(xié)議3篇
- 2024年黃金交易平臺運營協(xié)議
- 2024年薪酬管理服務外包協(xié)議范本版B版
- 穿脫隔離衣專業(yè)知識講座培訓課件
- 全二年級下冊數(shù)學北師大版教材習題參考答案
- 腔鏡下腹股溝區(qū)解剖課件
- 氫氧化鋰MSDS危險化學品安全技術說明書
- 四年級小學英語答題卡模板1
- 電視綜藝娛樂類節(jié)目主持精選課件
- 合唱與指揮課程教學大綱
- 航空服務禮儀ppt課件(PPT 20頁)
- 性格色彩培訓-ppt課件
- 胸腔積液小講課PPT課件
- TPM之成本損失分析
評論
0/150
提交評論