




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
9.6 中斷功能的應(yīng)用舉例 由于中斷功能是一種應(yīng)用比較廣發(fā)的功能,在絕大多數(shù)的單片機(jī) 控制項(xiàng)目中幾乎都會用到此功能,因此,我們在本節(jié)中盡量利用ICD 配套演示板上不算很多的硬件資源,通過靈活配置和輔以必要的附 加條件,盡可能多樣化的設(shè)計(jì)幾個(gè)實(shí)驗(yàn)范例,以便充分展現(xiàn)中斷功 能的不同用法和編程技巧。 下面的3個(gè)范例中,第1個(gè)范例中著重應(yīng)用的一個(gè)中斷源是TMR0 ; 第2個(gè)實(shí)驗(yàn)中則重應(yīng)用的中斷源是外部中斷INT;第3個(gè)實(shí)驗(yàn)中著重應(yīng) 用RB端口電平變化中斷,并且有2個(gè)中斷源(外部INT和端口RB)同時(shí) 在活動. 9.6.1 TMR0溢出中斷 如何以中斷方式利用模塊產(chǎn)生延時(shí)?與查詢方式相比,以中斷 方式利用TMR0模塊產(chǎn)生延時(shí)是如何分解CPU負(fù)擔(dān)的?下面的實(shí)驗(yàn)范 例會使讀者得到答案。 例9.1閃爍跑馬燈 實(shí)驗(yàn)項(xiàng)目實(shí)現(xiàn)的功能 把演示板上的8只LED發(fā)光二極管,規(guī)劃為跑馬等方式輪流閃爍 發(fā)光。也就是8只LED中只有一只點(diǎn)亮,亮燈的位置以循環(huán)方式不停 的移動,移動的速度取決于在各個(gè)位置上停留的時(shí)間,即在兩步之 間插入一個(gè)約96ms的延時(shí),并且在每一個(gè)位置上LED都保持快速閃 爍。 硬件電路規(guī)劃 流水燈電路如圖9.3所示(電路圖總各個(gè)元器件的標(biāo)號保持與M APLABICD用戶指南中提供的電路圖中各元器件標(biāo)號一致)。利 用端口RC上現(xiàn)有的8只發(fā)光二極管LED作為顯示部件,各只LED均有 限流電阻,主要為的是對單片機(jī)端口引腳內(nèi)部電路起保護(hù)作用。單 片機(jī)的時(shí)鐘振蕩器工作模式選用RC阻容振蕩方式(將跳線JP1插接到 演示板標(biāo)有RC一側(cè)的接線針上),根據(jù)電路中給定的R3和R4阻容值 , 時(shí)鐘頻率大約為4MHz。萬一單片機(jī)脫離正常工作狀態(tài),而進(jìn)入失控 狀態(tài)(或出現(xiàn)非正?,F(xiàn)象),就可以利用復(fù)位按鈕SW2,對單片機(jī)實(shí)施 人工強(qiáng)行復(fù)位。利用片內(nèi)的定時(shí)器/計(jì)數(shù)器TMR0模塊和中斷邏輯功 能部件,讓TMR0工作于定時(shí)器模式,并且在超時(shí)溢出時(shí)向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 閃爍式跑馬燈電路 軟件設(shè)計(jì)思路 驅(qū)動8只LED的顯示碼的形成,采用一次性向端口寄存器賦初值 , 然后循環(huán)移動的方式。在本例的程序中,需要加入2段延時(shí),一個(gè)使 LED燈每向前移動一步都要延遲一會(記為T1),另一個(gè)是LED還要亮 、 滅頻繁切換形成閃爍,在亮態(tài)和滅態(tài)上都保留一個(gè)延時(shí)(記為T2)。我 們打算T1延時(shí)用軟件手段實(shí)現(xiàn),T2延時(shí)以硬件措施完成,分頻器配 置給TMR0使用,并且分頻比設(shè)定為最大(1:256),利用TMR0編制一 段大約66ms的延時(shí)子程序。 TMR0延時(shí)時(shí)長的計(jì)算式為256*(256-0)指令周期=65536指令周期 =65536 s =65.536ms。 其中,前面的256是分頻比,括號內(nèi)的256是TMR0的最大技術(shù) 值;0是每次循環(huán)累加計(jì)數(shù)開始時(shí)需要向TMR0填寫的初始值,直到 計(jì)數(shù)到256時(shí)產(chǎn)生溢出。即從00H開始經(jīng)過256次加1后,累計(jì)到100H 便產(chǎn)生高位溢出,并且發(fā)出中斷請求。 程序流程圖 如圖9.4所是,包含主程序和中斷服務(wù)子程序的流程圖,延時(shí)子 程序再次不再贅述,可以參見“PIC匯編語言程序設(shè)計(jì)基礎(chǔ)”一部分 中關(guān)于巖石子程序的介紹。 主程序 設(shè)定C口全部輸出 設(shè)分頻器歸TMR0,分頻比為1:256 開放TMR0中斷使能位和總使能位 消除TMR0中斷標(biāo)志位 給TMR0賦初值啟動定時(shí)器 顯示緩沖器賦初始顯示碼 調(diào)用延時(shí)子程序 顯示緩沖器帶進(jìn)位標(biāo)志循環(huán)右移 中斷服務(wù)子程序 保護(hù)W寄存器 清除TMR0溢出標(biāo)志位 亮滅標(biāo)志位=1 ? 中斷返回 YN 修改亮滅標(biāo)志位 顯示緩沖器送顯令燈LED熄滅 TMR0賦初值重新啟動 恢復(fù)W寄存器 圖 9.4 程序流程圖 程序清單 ;* ;閃爍式跑馬燈 ;程序文件名為“INTEXP.ASM ” ;* tmr0 equ 01h ;定義定時(shí)器/計(jì)數(shù)器0寄存器地址 pcl equ 02h ;定義程序計(jì)數(shù)器低字節(jié)寄存器地址 status equ 3h ;定義狀態(tài)寄存器地址 option_reg equ 81h ;定義選項(xiàng)寄存器地址 intcon equ 0bh ;定義中斷控制寄存器地址 portc equ 07h ;定義端口C的數(shù)據(jù)寄存器地址 trisc equ 87h ;定義端口C的方向控制寄存器地址 tmer0_b equ 0 ;定義TMR0寄存器初始值(256=256-0) dly1 equ 20h ;定義一個(gè)延時(shí)變量寄存器 dly2 equ 21h ;定義另一個(gè)延時(shí)變量寄存器 w equ 0 ;定義傳送目標(biāo)寄存器為W的指示位 f equ 1 ;定義傳送目標(biāo)寄存器為RAM的指示位 rp0 equ 5 ;定義狀態(tài)寄存器中的預(yù)選位RP0 t0if equ 2 ;定義TMR0的中斷標(biāo)志位 w_temp equ 7fh ;在體0上定義臨時(shí)備份寄存器 portc_c equ 23h ;定義一個(gè)顯示緩沖區(qū)寄存器 flag equ 24h ;定義一個(gè)亮滅標(biāo)志位(只用寄存器的末位) ;*復(fù) 位 向 量* org 000h ;定義程序存放區(qū)域的啟示地址 nop ;設(shè)置一條ICD必需的空操作指令 goto main ; ;*中斷向量和中斷服務(wù)子程序* org 004h ;中斷向量,中斷服務(wù)程序入口地址 tmr0serv ;中斷服務(wù)程序名稱 movwf w_temp ;復(fù)制W到他的臨時(shí)備份寄存器W_TEMP bcf intcon, t0if ;清除TMR0溢出中斷標(biāo)志位 incf flag, f ;亮滅標(biāo)志位(寄存器末位)反轉(zhuǎn) btfss flag, 0 ;標(biāo)志位=1?是!跳一步到“熄滅” goto jump0 ;否!跳到“點(diǎn)亮” clrf portc ;熄滅 goto jump1 ;跳過下面的程序 jump0 movf portc_b ;點(diǎn)亮,即將緩沖區(qū)內(nèi)容先傳入W movwf portc ;再由W轉(zhuǎn)入端口寄存器,送顯 jump1 movlw tmr0_b ;TMR0賦初值 movwf tmr0 ;并(重新)啟動定時(shí)計(jì)算 movf w_temp, w :恢復(fù)現(xiàn)場 retfie :中斷返回 ;*主程序* main bsf status, rp0 ;設(shè)置文件寄存器的體1 movlw 0 ;將端口C的方向控制00h碼先送W movwf trisc ;再轉(zhuǎn)到方向寄存器,RC全部設(shè)為輸出 movlw 07h ;設(shè)置選項(xiàng)寄存器內(nèi)容:分頻器給TMR0 movwf option_reg ;分頻比值設(shè)為1:256 bcf status, rp0 ;恢復(fù)到文件寄存器的體0 movlw 0a0h ;開放TMR0中斷使能位 movwf intcon ;開放全局中斷使能位 bcf intcon, t0if ;清除TMR0溢出中斷標(biāo)志位 movlw tmr0_b ;TMR0賦初值 movwf tmr0 ;并啟動定時(shí)計(jì)數(shù) movlw b10000000 ;顯示驅(qū)動碼送入W movwf portc_b ;將驅(qū)動碼送入顯示緩沖區(qū)寄存器 loop cal l delay ;調(diào)用延時(shí)子程序 rrf portc_b, f ;帶進(jìn)位標(biāo)志位右移緩沖區(qū)寄存器 goto loop ;跳轉(zhuǎn)回去 ;*軟件延時(shí)子程序* delay ;子程序名,也是子程序入口地址 movlw 0fh ;將外層循環(huán)參數(shù)值經(jīng)過W movwf dly1 ;送入用作外循環(huán)變量的dly1 lp0 movlw offh ;將內(nèi)層循環(huán)參數(shù)值FFH送入W movwf dly2 ;送入用作內(nèi)循環(huán)變量的dly2 lp1 decfsz dly2, f ;內(nèi)層變量dly2內(nèi)容遞減,若為0跳躍 goto lp1 ;跳轉(zhuǎn)到lp1處 decfsz dly1, f ;外層變量dly1內(nèi)容遞減,若為0跳躍 goto lp0 ;跳轉(zhuǎn)到lp0處 return ;返回主程序 end ;源程序結(jié)束 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) 空運(yùn)行周期 空運(yùn)行周期 指令(0004H) 指令(0005H) 指令(0004H) 潛伏期 指令周期 始終OSC1 指令周期 INT引腳 INTF標(biāo)志位 (INTCON) GIE比特 (INTCON) PC 提取指令 執(zhí)行指令 指 令 流 圖9.2 INT外部中斷時(shí)序圖 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當(dāng) 前的程序 喚醒CPU(如果 處于模式) 中斷源第二梯隊(duì)中斷源第一梯隊(duì) (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當(dāng) 前的程序 喚醒CPU(如果 處于模式) 中斷源第二梯隊(duì)中斷源第一梯隊(duì) (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當(dāng) 前的程序 喚醒CPU(如果 處于模式) 中斷源第二梯隊(duì)中斷源第一梯隊(duì) TXIF TXIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中斷CPU當(dāng) 前的程序 喚醒CPU(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年稅法考試的吸收要素試題及答案
- 中小學(xué)生校服采購與供應(yīng)管理
- 小說中的空間與細(xì)節(jié)描寫試題及答案
- 2025精準(zhǔn)醫(yī)療時(shí)代:靶點(diǎn)技術(shù)引領(lǐng)創(chuàng)新藥物研發(fā)驗(yàn)證方法深度解析報(bào)告
- 風(fēng)電市場需求分析與未來發(fā)展前景
- WPS文件共享與協(xié)作的最佳實(shí)踐試題及答案
- 法學(xué)概論回顧知識試題及答案
- 2025年有色金屬行業(yè)資源循環(huán)利用產(chǎn)業(yè)鏈產(chǎn)業(yè)生態(tài)構(gòu)建與可持續(xù)發(fā)展
- 文學(xué)與歷史試題及答案研究
- 浙江專用版2025版高考政治大一輪復(fù)習(xí)第四單元發(fā)展社會主義市抄濟(jì)第九課走進(jìn)社會主義市抄濟(jì)講義
- 福州市歷史建筑保護(hù)管理辦法(試行)
- JHA及SCL風(fēng)險(xiǎn)評價(jià)方法講解(參考)
- DB11T 1933-2021 人乳庫建立與運(yùn)行規(guī)范
- 1.3.1動量守恒定律課件(共13張PPT)
- 國網(wǎng)北京市電力公司授權(quán)委托書(用電)
- 白黑白裝飾畫欣賞黑白裝飾畫的特點(diǎn)黑白裝飾畫的表現(xiàn)形式黑白裝飾 bb
- 中小學(xué)教育懲戒規(guī)則(試行)全文解讀ppt課件
- 調(diào)度指揮與統(tǒng)計(jì)分析課程教學(xué)設(shè)計(jì)
- 常暗之廂(7規(guī)則-簡體修正)
- 終端塔基礎(chǔ)預(yù)偏值(抬高值)計(jì)算表格
- 海外醫(yī)療服務(wù)委托合同協(xié)議書范本模板
評論
0/150
提交評論