




已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
9.6 中斷功能的應(yīng)用舉例 由于中斷功能是一種應(yīng)用比較廣發(fā)的功能,在絕大多數(shù)的單片機(jī) 控制項(xiàng)目中幾乎都會(huì)用到此功能,因此,我們?cè)诒竟?jié)中盡量利用ICD 配套演示板上不算很多的硬件資源,通過(guò)靈活配置和輔以必要的附 加條件,盡可能多樣化的設(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í) 在活動(dòng). 9.6.1 TMR0溢出中斷 如何以中斷方式利用模塊產(chǎn)生延時(shí)?與查詢方式相比,以中斷 方式利用TMR0模塊產(chǎn)生延時(shí)是如何分解CPU負(fù)擔(dān)的?下面的實(shí)驗(yàn)范 例會(huì)使讀者得到答案。 例9.1閃爍跑馬燈 實(shí)驗(yàn)項(xiàng)目實(shí)現(xiàn)的功能 把演示板上的8只LED發(fā)光二極管,規(guī)劃為跑馬等方式輪流閃爍 發(fā)光。也就是8只LED中只有一只點(diǎn)亮,亮燈的位置以循環(huán)方式不停 的移動(dòng),移動(dòng)的速度取決于在各個(gè)位置上停留的時(shí)間,即在兩步之 間插入一個(gè)約96ms的延時(shí),并且在每一個(gè)位置上LED都保持快速閃 爍。 硬件電路規(guī)劃 流水燈電路如圖9.3所示(電路圖總各個(gè)元器件的標(biāo)號(hào)保持與M APLABICD用戶指南中提供的電路圖中各元器件標(biāo)號(hào)一致)。利 用端口RC上現(xiàn)有的8只發(fā)光二極管LED作為顯示部件,各只LED均有 限流電阻,主要為的是對(duì)單片機(jī)端口引腳內(nèi)部電路起保護(hù)作用。單 片機(jī)的時(shí)鐘振蕩器工作模式選用RC阻容振蕩方式(將跳線JP1插接到 演示板標(biāo)有RC一側(cè)的接線針上),根據(jù)電路中給定的R3和R4阻容值 , 時(shí)鐘頻率大約為4MHz。萬(wàn)一單片機(jī)脫離正常工作狀態(tài),而進(jìn)入失控 狀態(tài)(或出現(xiàn)非正?,F(xiàn)象),就可以利用復(fù)位按鈕SW2,對(duì)單片機(jī)實(shí)施 人工強(qiáng)行復(fù)位。利用片內(nèi)的定時(shí)器/計(jì)數(shù)器TMR0模塊和中斷邏輯功 能部件,讓TMR0工作于定時(shí)器模式,并且在超時(shí)溢出時(shí)向CPU發(fā)送 中斷請(qǐng)求信號(hào)。 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ū)動(dòng)8只LED的顯示碼的形成,采用一次性向端口寄存器賦初值 , 然后循環(huán)移動(dòng)的方式。在本例的程序中,需要加入2段延時(shí),一個(gè)使 LED燈每向前移動(dòng)一步都要延遲一會(huì)(記為T(mén)1),另一個(gè)是LED還要亮 、 滅頻繁切換形成閃爍,在亮態(tài)和滅態(tài)上都保留一個(gè)延時(shí)(記為T(mén)2)。我 們打算T1延時(shí)用軟件手段實(shí)現(xiàn),T2延時(shí)以硬件措施完成,分頻器配 置給TMR0使用,并且分頻比設(shè)定為最大(1:256),利用TMR0編制一 段大約66ms的延時(shí)子程序。 TMR0延時(shí)時(shí)長(zhǎng)的計(jì)算式為256*(256-0)指令周期=65536指令周期 =65536 s =65.536ms。 其中,前面的256是分頻比,括號(hào)內(nèi)的256是TMR0的最大技術(shù) 值;0是每次循環(huán)累加計(jì)數(shù)開(kāi)始時(shí)需要向TMR0填寫(xiě)的初始值,直到 計(jì)數(shù)到256時(shí)產(chǎn)生溢出。即從00H開(kāi)始經(jīng)過(guò)256次加1后,累計(jì)到100H 便產(chǎn)生高位溢出,并且發(fā)出中斷請(qǐng)求。 程序流程圖 如圖9.4所是,包含主程序和中斷服務(wù)子程序的流程圖,延時(shí)子 程序再次不再贅述,可以參見(jiàn)“PIC匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)”一部分 中關(guān)于巖石子程序的介紹。 主程序 設(shè)定C口全部輸出 設(shè)分頻器歸TMR0,分頻比為1:256 開(kāi)放TMR0中斷使能位和總使能位 消除TMR0中斷標(biāo)志位 給TMR0賦初值啟動(dòng)定時(shí)器 顯示緩沖器賦初始顯示碼 調(diào)用延時(shí)子程序 顯示緩沖器帶進(jìn)位標(biāo)志循環(huán)右移 中斷服務(wù)子程序 保護(hù)W寄存器 清除TMR0溢出標(biāo)志位 亮滅標(biāo)志位=1 ? 中斷返回 YN 修改亮滅標(biāo)志位 顯示緩沖器送顯令燈LED熄滅 TMR0賦初值重新啟動(dòng) 恢復(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 ;跳過(guò)下面的程序 jump0 movf portc_b ;點(diǎn)亮,即將緩沖區(qū)內(nèi)容先傳入W movwf portc ;再由W轉(zhuǎn)入端口寄存器,送顯 jump1 movlw tmr0_b ;TMR0賦初值 movwf tmr0 ;并(重新)啟動(dòng)定時(shí)計(jì)算 movf w_temp, w :恢復(fù)現(xiàn)場(chǎng) 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 ;開(kāi)放TMR0中斷使能位 movwf intcon ;開(kāi)放全局中斷使能位 bcf intcon, t0if ;清除TMR0溢出中斷標(biāo)志位 movlw tmr0_b ;TMR0賦初值 movwf tmr0 ;并啟動(dòng)定時(shí)計(jì)數(shù) movlw b10000000 ;顯示驅(qū)動(dòng)碼送入W movwf portc_b ;將驅(qū)動(dòng)碼送入顯示緩沖區(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)過(guò)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年六級(jí)試題卷子及答案
- 2025年光與色彩測(cè)試試題及答案
- 2025年中毒理論知識(shí)試題及答案
- Unit+5+Celebrations+語(yǔ)法現(xiàn)在完成時(shí)教學(xué)設(shè)計(jì)-2024-2025學(xué)年高一上學(xué)期+中職英語(yǔ)高教版(2023修訂版)基礎(chǔ)模塊1
- 2025年新兵物理考試題及答案
- 2025年八年物理下冊(cè)試題及答案
- 2025年全國(guó)三模語(yǔ)文試題及答案
- 2025年調(diào)測(cè)崗位面試題及答案
- 2025年管理思想史試題及答案5
- 2025年中藥藥師考試試題及答案
- 小學(xué)人教版四年級(jí)下冊(cè)數(shù)學(xué)租船問(wèn)題25題
- 大連市小升初手冊(cè)
- 醫(yī)療垃圾管理及手衛(wèi)生培訓(xùn)PPT課件
- 放射物理與防護(hù)全套ppt課件
- 嚇數(shù)基礎(chǔ)知識(shí)共20
- 鋰電池安全知識(shí)培訓(xùn)-課件
- 鋼桁架與屋蓋結(jié)構(gòu)課件
- 電子產(chǎn)品高可靠性裝聯(lián)工藝下
- 越南北部工業(yè)區(qū)資料(1060707)
- 東亞文明的歷史進(jìn)程課件
- 三洋波輪洗衣機(jī)說(shuō)明書(shū)
評(píng)論
0/150
提交評(píng)論