?? exandtimerint.asm
字號:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;實(shí)例十五:外部中斷與Timer中斷同時存在實(shí)驗(yàn) external and timer interrupts (《51單片機(jī)應(yīng)用從零開始》 11.5小節(jié)實(shí)例)
;
;現(xiàn)象:當(dāng)外部中斷模擬開關(guān)INT1(模擬外部中斷INT1)向系統(tǒng)產(chǎn)生外部中斷(邊沿觸發(fā)),單片機(jī)將優(yōu)先服務(wù)外部中斷1--閃爍5次
;,從而打斷用于流水燈的延時控制的Timer 0中斷
;
;作者:楊欣,劉長煥,張延強(qiáng) 電路飛翔網(wǎng) eedesign@163.com
;
; http://www.circuitfly.com
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 00H ; 起始地址00H
JMP MAIN ; 跳轉(zhuǎn)到MAIN
ORG 0BH ; Timer 0中斷向量地址
JMP TIM0 ; 跳轉(zhuǎn)到TIM0
ORG 13H ; 外部中斷1向量地址
JMP EXT1 ; 跳轉(zhuǎn)到EXT1
; 這里是主程序段,使能中斷、中斷優(yōu)先級、裝載計(jì)數(shù)初始值等
MAIN:
MOV IE, #86H ; 使能Timer 0中斷和外部中斷1
SETB TCON.2 ; 設(shè)置 中斷的邊沿觸發(fā)方式
MOV IP, #04H ; 設(shè)置外部中斷1優(yōu)先級較高
MOV TMOD, #01H ; 使用Timer 0工作在模式1下
MOV TH0, #0D8H ; 裝載計(jì)數(shù)初始值,10000?s延時
MOV TL0, #0F0H ;
MOV R1, #100 ; Timer 0中斷次數(shù)為100次,即延時1秒
MOV R2, #0FEH ; 流水燈初始值
SETB TR0 ; 啟動Timer 0
LOOP:
; 這里可放置主程序的執(zhí)行功能
JMP LOOP ; 循環(huán)
; 這里是Timer 0中斷服務(wù)子程序
TIM0:
MOV TH0, #0D8H ; 重新裝載計(jì)數(shù)初始值
MOV TL0, #0F0H ;
DJNZ R1, WAIT_SEC ; 如果中斷沒到100次,則跳到WAIT_SEC返回
MOV R1, #100 ; 如果到達(dá)100次,重新設(shè)置中斷次數(shù)為100次
MOV A, R2 ; 流水燈初始值載入ACC
MOV P1, A ; 從P0口輸出顯示
RL A ; 向左流動一位
MOV R2, A ; 將流水燈值保存在R2中
WAIT_SEC:
RETI ; 返回主程序
; 這里是外部中斷1服務(wù)子程序
EXT1:
MOV A, #00H ; ACC=00H
MOV R3, #10 ; 亮+滅共10次
FLASH:
MOV P1, A ; P0=00H,全亮
CALL DELAY ; 調(diào)延時子程序
CPL A ; ACC反相
DJNZ R3, FLASH ; 如果R3=0,閃爍完成,否則循環(huán)
RETI ; 返回主程序
DELAY: MOV R4, #20 ; 延時200ms子程序
D1: MOV R5, #20
D2: MOV R6, #248
DJNZ R6, $
DJNZ R5, D2
DJNZ R4, D1
RET
END ; 程序結(jié)束
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -