org 0X0000
goto START_BEGIAN ; On power-up begin at label "START_BEGIAN"
nop
nop
nop
movwf acc_bak ;现场保护
swapf STATUS,W ;用SWAPF才不会影响标志位
movwf status_bak ;将W和STATUS存入各保护寄存器
goto ISR ;Int. vector @ loc'n STARTUP+4
START_BEGIAN: ;I/O口初始化
banksel OPTION_REG
movlw 0X08
movwf OPTION_REG ;分频器给WDT用,且分频比1:1,INT下降沿触发,GPIO带上拉
bcf STATUS,RP0 ;bank0
clrf GPIO ;初始化端口引脚电平为0
movlw 07h ;关闭比较器功能
movwf CMCON
bsf STATUS,RP0 ;bank1
clrf ANSEL ;端口设置为数字I/O
movlw 0x04
movwf WPU ;GP2带上拉电阻,其他I/O口不带
movlw 0ch
movwf TRISIO ;GP2(INT),GP3(MCLR)为输入,GP1(负载2),GP0(负载1),GP4,GP5为输出
clrf STATUS ;bank0
movlw 0X20
movwf FSR
clrram_loop:
clrf INDF ;变量初始化
incf FSR,f
btfss FSR,4
goto clrram_loop
banksel INTCON
clrf INTCON
movlw 0x85 ;133(16进制是85H)=256-125+2---125是定是器tmr0每隔125us中断一次
movwf TMR0
bsf INTCON,T0IE ;开启tmr0中断允许位
bsf INTCON,INTE ;开启INT中断允许位
bsf INTCON,GIE ;开启全局中断允许位
bsf temp,f_heat
movlw 10
movwf ten_sec_test
;************************************
;***********主程序区*****************
main:
btfss t_125us,3 ;到了1ms吗?
goto main ;没到,则返回到main处
clrf t_125us ;到了,则清t_125us变量
;CLRWDT
;call rtc_man ;实时检测流量信号时间管理
call time_man ;标准时间管理
goto main
;************************************
;***********中断判断区***************
ISR:
btfss INTCON,T0IE ;测试是否tmer0中断允许
goto other_int ;T0IE=0,不可能是tmer0中断进入
btfss INTCON,T0IF ;测试是否tmer0中断
goto other_int ;非tmer0中断,判断其它中断标志
bcf INTCON,T0IF ;清除T0IF标志
incf t_125us
movlw 0x85
addwf TMR0,f
btfss temp,f_heat ;f_heat=1?
goto off_all_load ;没有的话,则关闭所有负载.
movlw 0
xorwf ten_sec_test,W
btfss STATUS,Z ;有延时功能吗?
goto isr_out_last ;是的,则退出中断子程序
movlw 0x03 ;没有,则直接方波驱动:Frelay=4kHZ
xorwf GPIO,f
goto isr_out_last
off_all_load:
bcf GPIO,relay1
bcf GPIO,relay2
isr_out_last:
swapf status_bak,W ;用SWAPF才不会影响标志位
movwf STATUS
swapf acc_bak,F
swapf acc_bak,W
RETFIE
other_int:
btfss INTCON,INTE ;测试是否外部中断允许
goto isr_out_last ;INTE=0,不可能是外部中断进入,退出中断子程序
btfss INTCON,INTF ;测试是否外部中断
goto isr_out_last ;非外部中断,退出中断子程序
bcf INTCON,INTF
incf zero_n ;脉冲次数加一
btfsc temp,f_start ;f_start为0吗?
goto isr_out_last
bsf temp,f_start ;不是,则置流量信号有的标志位(f_start=1)
clrf t_4ms
goto isr_out_last
goto main |