工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

Pic16f877 中断控制电路

作者:dolphin时间:2011-05-05



程序范例:
1.外部中断LED 方向控制
2.计时中断LED 方向控制
3.计时加外部中断LED 方向控制
4.计时中断时钟 ─ 分:秒(使用七段显示器)
5.计时中断 ─ 改写8led22.asm 程序
外部中断LED 方向控制
范例一:int1.*
LIST P=16F877,R=DEC
#INCLUDE
;
CBLOCK 0X20
R0,USRFLAG
ENDC
;
ORG 0
NOP
GOTO MAIN
ORG 4
BTFSS USRFLAG,0
GOTO INT1
BCF USRFLAG,0
GOTO INT2
INT1: BSF USRFLAG,0
INT2: BTFSS PORTB,0
GOTO INT2
BCF INTCON,INTF
RETFIE
;
MAIN:
BANKSEL TRISD
MOVLW 0
MOVWF TRISD
BANKSEL PORTD
BSF INTCON,GIE
BSF INTCON,INTE
MOVLW B'11111110'
MOVWF R0
BCF USRFLAG,0
MLOOP: MOVF R0,0
MOVWF PORTD
CALL DELAY250
BTFSC USRFLAG,0
GOTO RIGHT
LEFT: CLRC
BTFSC R0,7
SETC
RLF R0,1
GOTO MLOOP
RIGHT: CLRC
BTFSC R0,0
SETC
RRF R0,1
GOTO MLOOP
;
#INCLUDE
;
END

计时中断LED 方向控制
范例一:int2.*
LIST P=16F877,R=DEC
#INCLUDE
;
CBLOCK 0X20
R0,WBAK,SBAK,USRFLAG
DCONT
ENDC
;
TBUF EQU 256-250
;
ORG 0
NOP
GOTO MAIN
ORG 4
MOVWF WBAK
SWAPF STATUS,0
MOVWF SBAK
MOVLW TBUF
ADDWF TMR0
DECF DCONT
MOVF DCONT,1
SKPZ
GOTO T2INT
MOVLW .200
MOVWF DCONT
BTFSS USRFLAG,0
GOTO T1INT
BCF USRFLAG,0
GOTO T2INT
T1INT: BSF USRFLAG,0
T2INT: BCF INTCON,T0IF
SWAPF SBAK,0
MOVWF STATUS
SWAPF WBAK,1
SWAPF WBAK,0
RETFIE
;
MAIN:
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
MOVLW 0
MOVWF TRISD
BANKSEL TMR0
MOVLW TBUF
MOVWF TMR0
BSF INTCON,GIE
BSF INTCON,T0IE
MOVLW .200
MOVWF DCONT
MOVLW B'11111110'
MOVWF R0
BCF USRFLAG,0
MLOOP: MOVF R0,0
MOVWF PORTD
CALL DELAY250
BTFSC USRFLAG,0
GOTO RIGHT
LEFT: CLRC
BTFSC R0,7
SETC
RLF R0,1
GOTO MLOOP
RIGHT: CLRC
BTFSC R0,0
SETC
RRF R0,1
GOTO MLOOP
;
#INCLUDE
;
END


计时加外部中断LED方向控制
范例一:int3.*
LIST P=16F877,R=DEC
#INCLUDE
;
CBLOCK 0X20
R0,WBAK,SBAK,USRFLAG
DCONT
ENDC
;
TBUF EQU 256-250
;
ORG 0
NOP
GOTO MAIN
ORG 4
BTFSS INTCON,T0IF
GOTO INT0
BCF INTCON,INTE
MOVWF WBAK
SWAPF STATUS,0
MOVWF SBAK
MOVLW TBUF
ADDWF TMR0
DECF DCONT
MOVF DCONT,1
SKPZ
GOTO T2INT
MOVLW .200
MOVWF DCONT
BTFSS USRFLAG,0
GOTO T1INT
BCF USRFLAG,0
GOTO T2INT
T1INT: BSF USRFLAG,0
T2INT: BCF INTCON,T0IF
BSF INTCON,INTE
SWAPF SBAK,0
MOVWF STATUS
SWAPF WBAK,1
SWAPF WBAK,0
GOTO RIGHT
LEFT: CLRC
BTFSC R0,7
SETC
RLF R0,1
GOTO MLOOP
RIGHT: CLRC
BTFSC R0,0
SETC
RRF R0,1
GOTO MLOOP
;
#INCLUDE
;
END
RETFIE
;
INT0: BCF INTCON,T0IE
BTFSS USRFLAG,0
GOTO INT01
BCF USRFLAG,0
GOTO INT02
INT01: BSF USRFLAG,0
INT02: BTFSS PORTB,0
GOTO INT02
BCF INTCON,INTF
MOVLW TBUF
MOVWF TMR0
MOVLW .200
MOVWF DCONT
BSF INTCON,T0IE
RETFIE
;
MAIN:
BANKSEL OPTION_REG
MOVLW B'00000111'
MOVWF OPTION_REG
MOVLW 0
MOVWF TRISD
BANKSEL TMR0
MOVLW TBUF
MOVWF TMR0
BSF INTCON,GIE
BSF INTCON,T0IE
BSF INTCON,INTE
MOVLW .200
MOVWF DCONT
MOVLW B'11111110'
MOVWF R0
BCF USRFLAG,0
MLOOP: MOVF R0,0
MOVWF PORTD
CALL DELAY250
BTFSC USRFLAG,0


计时中断时钟 ─ 分:秒(使用七段显示器)
范例一:intclock.*
LIST P=16F877,R=DEC
#INCLUDE
;
CBLOCK 0X20
DB0,DB1,WBAK,SBAK,DCONT
C1,C2,TIMS,TIMM
ENDC
;
TBUF EQU 256-250
;
ORG 0
NOP
GOTO MAIN
ORG 4
MOVWF WBAK
SWAPF STATUS,0
MOVWF SBAK
MOVLW TBUF
ADDWF TMR0
DECF DCONT
MOVF DCONT,1
SKPZ
GOTO T2INT
MOVLW .125
MOVWF DCONT


关键词: Pic16f877 中断 控制

评论

技术专区