




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
9.6 中斷功能的應用舉例 由于中斷功能是一種應用比較廣發(fā)的功能,在絕大多數的單片機 控制項目中幾乎都會用到此功能,因此,我們在本節(jié)中盡量利用ICD 配套演示板上不算很多的硬件資源,通過靈活配置和輔以必要的附 加條件,盡可能多樣化的設計幾個實驗范例,以便充分展現中斷功 能的不同用法和編程技巧。 下面的3個范例中,第1個范例中著重應用的一個中斷源是TMR0 ; 第2個實驗中則重應用的中斷源是外部中斷INT;第3個實驗中著重應 用RB端口電平變化中斷,并且有2個中斷源(外部INT和端口RB)同時 在活動. 9.6.1 TMR0溢出中斷 如何以中斷方式利用模塊產生延時?與查詢方式相比,以中斷 方式利用TMR0模塊產生延時是如何分解CPU負擔的?下面的實驗范 例會使讀者得到答案。 例9.1閃爍跑馬燈 實驗項目實現的功能 把演示板上的8只LED發(fā)光二極管,規(guī)劃為跑馬等方式輪流閃爍 發(fā)光。也就是8只LED中只有一只點亮,亮燈的位置以循環(huán)方式不停 的移動,移動的速度取決于在各個位置上停留的時間,即在兩步之 間插入一個約96ms的延時,并且在每一個位置上LED都保持快速閃 爍。 硬件電路規(guī)劃 流水燈電路如圖9.3所示(電路圖總各個元器件的標號保持與M APLABICD用戶指南中提供的電路圖中各元器件標號一致)。利 用端口RC上現有的8只發(fā)光二極管LED作為顯示部件,各只LED均有 限流電阻,主要為的是對單片機端口引腳內部電路起保護作用。單 片機的時鐘振蕩器工作模式選用RC阻容振蕩方式(將跳線JP1插接到 演示板標有RC一側的接線針上),根據電路中給定的R3和R4阻容值 , 時鐘頻率大約為4MHz。萬一單片機脫離正常工作狀態(tài),而進入失控 狀態(tài)(或出現非正?,F象),就可以利用復位按鈕SW2,對單片機實施 人工強行復位。利用片內的定時器/計數器TMR0模塊和中斷邏輯功 能部件,讓TMR0工作于定時器模式,并且在超時溢出時向CPU發(fā)送 中斷請求信號。 PIC16F87X RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 470 *8 D1 D0 D2 D3 D4 D5 D6 D7 LED *8 _ MCLR VDD VDD VDD C422pF 47KR3 R13 R2047K 470 R5 R6 R7 R8 R9 R10 R11 R12 VSS OSC1 圖9.3 閃爍式跑馬燈電路 軟件設計思路 驅動8只LED的顯示碼的形成,采用一次性向端口寄存器賦初值 , 然后循環(huán)移動的方式。在本例的程序中,需要加入2段延時,一個使 LED燈每向前移動一步都要延遲一會(記為T1),另一個是LED還要亮 、 滅頻繁切換形成閃爍,在亮態(tài)和滅態(tài)上都保留一個延時(記為T2)。我 們打算T1延時用軟件手段實現,T2延時以硬件措施完成,分頻器配 置給TMR0使用,并且分頻比設定為最大(1:256),利用TMR0編制一 段大約66ms的延時子程序。 TMR0延時時長的計算式為256*(256-0)指令周期=65536指令周期 =65536 s =65.536ms。 其中,前面的256是分頻比,括號內的256是TMR0的最大技術 值;0是每次循環(huán)累加計數開始時需要向TMR0填寫的初始值,直到 計數到256時產生溢出。即從00H開始經過256次加1后,累計到100H 便產生高位溢出,并且發(fā)出中斷請求。 程序流程圖 如圖9.4所是,包含主程序和中斷服務子程序的流程圖,延時子 程序再次不再贅述,可以參見“PIC匯編語言程序設計基礎”一部分 中關于巖石子程序的介紹。 主程序 設定C口全部輸出 設分頻器歸TMR0,分頻比為1:256 開放TMR0中斷使能位和總使能位 消除TMR0中斷標志位 給TMR0賦初值啟動定時器 顯示緩沖器賦初始顯示碼 調用延時子程序 顯示緩沖器帶進位標志循環(huán)右移 中斷服務子程序 保護W寄存器 清除TMR0溢出標志位 亮滅標志位=1 ? 中斷返回 YN 修改亮滅標志位 顯示緩沖器送顯令燈LED熄滅 TMR0賦初值重新啟動 恢復W寄存器 圖 9.4 程序流程圖 程序清單 ;* ;閃爍式跑馬燈 ;程序文件名為“INTEXP.ASM ” ;* tmr0 equ 01h ;定義定時器/計數器0寄存器地址 pcl equ 02h ;定義程序計數器低字節(jié)寄存器地址 status equ 3h ;定義狀態(tài)寄存器地址 option_reg equ 81h ;定義選項寄存器地址 intcon equ 0bh ;定義中斷控制寄存器地址 portc equ 07h ;定義端口C的數據寄存器地址 trisc equ 87h ;定義端口C的方向控制寄存器地址 tmer0_b equ 0 ;定義TMR0寄存器初始值(256=256-0) dly1 equ 20h ;定義一個延時變量寄存器 dly2 equ 21h ;定義另一個延時變量寄存器 w equ 0 ;定義傳送目標寄存器為W的指示位 f equ 1 ;定義傳送目標寄存器為RAM的指示位 rp0 equ 5 ;定義狀態(tài)寄存器中的預選位RP0 t0if equ 2 ;定義TMR0的中斷標志位 w_temp equ 7fh ;在體0上定義臨時備份寄存器 portc_c equ 23h ;定義一個顯示緩沖區(qū)寄存器 flag equ 24h ;定義一個亮滅標志位(只用寄存器的末位) ;*復 位 向 量* org 000h ;定義程序存放區(qū)域的啟示地址 nop ;設置一條ICD必需的空操作指令 goto main ; ;*中斷向量和中斷服務子程序* org 004h ;中斷向量,中斷服務程序入口地址 tmr0serv ;中斷服務程序名稱 movwf w_temp ;復制W到他的臨時備份寄存器W_TEMP bcf intcon, t0if ;清除TMR0溢出中斷標志位 incf flag, f ;亮滅標志位(寄存器末位)反轉 btfss flag, 0 ;標志位=1?是!跳一步到“熄滅” goto jump0 ;否!跳到“點亮” clrf portc ;熄滅 goto jump1 ;跳過下面的程序 jump0 movf portc_b ;點亮,即將緩沖區(qū)內容先傳入W movwf portc ;再由W轉入端口寄存器,送顯 jump1 movlw tmr0_b ;TMR0賦初值 movwf tmr0 ;并(重新)啟動定時計算 movf w_temp, w :恢復現場 retfie :中斷返回 ;*主程序* main bsf status, rp0 ;設置文件寄存器的體1 movlw 0 ;將端口C的方向控制00h碼先送W movwf trisc ;再轉到方向寄存器,RC全部設為輸出 movlw 07h ;設置選項寄存器內容:分頻器給TMR0 movwf option_reg ;分頻比值設為1:256 bcf status, rp0 ;恢復到文件寄存器的體0 movlw 0a0h ;開放TMR0中斷使能位 movwf intcon ;開放全局中斷使能位 bcf intcon, t0if ;清除TMR0溢出中斷標志位 movlw tmr0_b ;TMR0賦初值 movwf tmr0 ;并啟動定時計數 movlw b10000000 ;顯示驅動碼送入W movwf portc_b ;將驅動碼送入顯示緩沖區(qū)寄存器 loop cal l delay ;調用延時子程序 rrf portc_b, f ;帶進位標志位右移緩沖區(qū)寄存器 goto loop ;跳轉回去 ;*軟件延時子程序* delay ;子程序名,也是子程序入口地址 movlw 0fh ;將外層循環(huán)參數值經過W movwf dly1 ;送入用作外循環(huán)變量的dly1 lp0 movlw offh ;將內層循環(huán)參數值FFH送入W movwf dly2 ;送入用作內循環(huán)變量的dly2 lp1 decfsz dly2, f ;內層變量dly2內容遞減,若為0跳躍 goto lp1 ;跳轉到lp1處 decfsz dly1, f ;外層變量dly1內容遞減,若為0跳躍 goto lp0 ;跳轉到lp0處 return ;返回主程序 end ;源程序結束 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 PCPC+PC+10004H0005H 指令(PC) 指令(PC-1)指令(PC) 指令(PC+1) 空運行周期 空運行周期 指令(0004H) 指令(0005H) 指令(0004H) 潛伏期 指令周期 始終OSC1 指令周期 INT引腳 INTF標志位 (INTCON) GIE比特 (INTCON) PC 提取指令 執(zhí)行指令 指 令 流 圖9.2 INT外部中斷時序圖 TXIF TXIE SSPIF SSPIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE PSPIF PSPIE EEIF EEIE TMR1IF TMR1IE CCP2IF CCP1IE BCLIF BCLIE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中斷CPU當 前的程序 喚醒CPU(如果 處于模式) 中斷源第二梯隊中斷源第一梯隊 (a) PIC16F874/877中斷邏輯 TXIF TXIE SSPIF SSPIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE CCP2IF CCP1IE BCLIF BCLIE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中斷CPU當 前的程序 喚醒CPU(如果 處于模式) 中斷源第二梯隊中斷源第一梯隊 (b) PIC16F873/876中斷邏輯 (c) PIC16F872中斷邏輯 SSPIF SSPIE TMR2IF TMR2IE CCPIF CCPIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE BCLIF BCLIE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中斷CPU當 前的程序 喚醒CPU(如果 處于模式) 中斷源第二梯隊中斷源第一梯隊 TXIF TXIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中斷CPU當 前的程序 喚醒CPU(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承接車掛牌合同協議書
- 奶茶店培訓合同協議書
- 草場整治協議書
- 樣板房買賣合同協議書
- 聯合理財協議書
- 通訊原理協議書
- 草原租憑協議書
- 未交房房屋轉讓協議書
- 美甲培訓協議書
- 混凝土罐車司機協議書
- 安徽省合肥一中2025屆高三5月回歸教材讀本 解答
- 2025年福建福州左海供應鏈集團有限公司招聘筆試參考題庫附帶答案詳解
- 2024年棗莊市滕州市中小學招聘教師筆試真題
- 2025年工程財務分析試題及答案
- 小學校園文化方案
- 財政與金融練習試卷1(共230題)
- 2025年醫(yī)院管理培訓考試試題及答案
- 大學生思想政治教育課件教學
- 北京市公路貨運車輛不停車檢測系統設施設備運維定額2025
- 生產經營單位事故隱患內部報告獎勵機制實踐
- 全國縣中頭雁教師崗位計劃人員推表
評論
0/150
提交評論