如何用tmr0做中断
bsf status,5 ;选中bank1 movlw 0d5 ;11010101,tmr0预定标器倍率为1:64movwf option_reg
bcf status,5 ;返回bank0
movlw 00
movwf tmr0 ;tmr0初值为0
movlw 0a0 ;10100000(D5:为1允许tmr0中断;D7:为1开放所有中断;D2:tmr0内计数器计满溢出时该位被置1)
movwf intcon
;中断服务子程序,现场保护
intserv movwf w_temp
swapf status,w
clrf status
movwf status_temp
btfss intcon,5 ;是否为tmr0中断
goto out
bcf intcon,2 ;清tmr0中断溢出标志,64us中断一次
incf in0,1 ;中断溢出单元+1
movlw 7d ;该单元为125吗?
subwf in0,0
btfss status,0
goto out ;未到,恢复现场
clrf in0 ;是,清该单元
incf in1,1 ;计时单元1+1
movlw 7d ;该单元为125吗?
subwf in1,0
btfss status,0
goto out ;未到,恢复现场
clrf in1 ;是,清该单元
incf in2,1 ;计时单元2+1
movlw 3c
subwf in2,0
btfss status,0
goto out
bsf flag,0 ;置1分钟到标志,1分=64us*125*125*60
clrf in2
out swapf status_temp,w ;现场恢复
movwf status
swapf w_temp,f
swapf w_temp,w
retfie
页:
[1]