PIC单片机中断嵌套
W_TEMP EQU 20H ; 实际上20H、A0H、120H和1A0H
STATUS_TEMP EQU 21H ;在体0中建立保护单元
PCLATH_TEMP EQU 22H ;在体0中建立保护单元
ORG 000H
GOTO A1
ORG 04H;中断入口地址
GOTO ZD01
A1 BSF STATUS,RP0
BCF STATUS,RP1;体1
MOVLW 00H;1:2TMRO比例
MOVWF OPTION_REG;分频1/2
MOVLW 0H
MOVWF TRISA;设置A口为输出口
MOVLW 06H
MOVWF ADCON1;设置A口为普通I/O口模式
movlw 0FFH
movwf TRISB;设定RB为输入
BCF STATUS,RP0
BCF STATUS,RP1;体0
MOVLW 0FFH;
MOVFW TMR0;初值
MOVLW 0FFH
MOVWF PORTA;A口输出高电平
MOVLW 1;位1显示数
MOVWF 50H;
MOVLW 2;位2显示数
MOVWF 51H;
MOVLW 3;位3显示数
MOVWF 52H;
MOVLW 4;位4显示数
MOVWF 53H;
MOVLW 4;显示位数
MOVWF 40H;
MOVLW B00000001;位码
MOVWF 41H;
MOVLW 50H;
MOVWF FSR ;间接寻址
BCF INTCON,INTF;清中断标志
BSF INTCON,INTE;开外部中断
BCF INTCON,T0IF;清定时中断标志
BSF INTCON,T0IE;开定时中断
BSF INTCON,GIE;开总中断
GOTO $
ZD01
BTFSS INTCON,INTF;判断是否发生外部中断
GOTO ZD02
BCF INTCON,INTE;关闭外部中断避免2次中断
BSF INTCON,GIE;开总中断允许定时中断嵌套进来
BCF INTCON,INTF;清中断标志
BTFSS PORTB,0;;判断触发中断键是否抬起避免产生2次中断
GOTO $-1;
COMF PORTA,1;取反A口
BSF INTCON,INTE;开外部中断
RETFIE ;中断标志结束
ZD02 BTFSS INTCON,T0IF;判断是否产生定时中断
GOTO ZD04;否跳出是继续执行
;***************************************************
; 保护现场
MOVWF W_TEMP;W备份到W_TEMP中
SWAPF STATUS,0;STATUS半字交换后送W
CLRF STATUS;选择体0为当前体备份
MOVWF STATUS_TEMP;将原来的STATUS送体0上的
MOVF PCLATH,0;PCLATH送W
MOVWF PCLATH_TEMP;W送备份寄存器中
CLRF PCLATH ;设置为0页
;***************************************************
BCF INTCON,T0IF
BSF STATUS,RP0;体1
BCF STATUS,RP1;
MOVLW 0;
MOVWF TRISC;RB口设为输出口
MOVWF TRISD;RD口设为输出口
BCF STATUS,RP0;体0
BCF STATUS,RP1;
MOVLW 0FFH;
MOVWF PORTC;RB口输出高电平
MOVLW 0
MOVWF PORTD;RD口输出低电平起清屏作用
MOVFW INDF;间接寻址显示数据
CALL Q1;查数据表
MOVWF PORTC;显示断码输出到RB口
INCF FSR,1;间接寻址地址加1
MOVFW 41H ;位码
MOVWF PORTD;位码输出到RD口
RLF 41H,0;处理C
RLF 41H,1;左移位码
DECFSZ 40H,1;判断是否显示完4位
GOTO ZD03;否则继续显示
MOVLW 4;显示位数
MOVWF 40H;
MOVLW B00000001;位码
MOVWF 41H;
MOVLW 50H;
MOVWF FSR ;间接寻址
ZD03
;***************************************************
; 恢复现场
CLRF STATUS;恢复到体0
MOVF PCLATH_TEMP,0;开始恢复数据
MOVWF PCLATH;恢复PCLATH
SWAPF STATUS_TEMP,0
MOVWF STATUS;恢复STATUS
SWAPF W_TEMP,1;半字交换后放回
SWAPF W_TEMP,0;再半字交换后送W
;***************************************************
MOVLW 0FFH;
MOVFW TMR0;重装初值
ZD04
RETFIE ;中断结束
;********************************************
; 数据表
;********************************************
Q1 ADDWF PCL,1
RETLW 00C0H ;0
RETLW 00F9H ;1
RETLW 00A4H ;2
RETLW 00B0H ;3
RETLW 0099H ;4
RETLW 0092H ;5
RETLW 0082H ;6
RETLW 00F8H ;7
RETLW 0080H ;8
RETLW 0090H ;9
RETLW 0088H ;A
RETLW 0083H ;B
RETLW 00C6H ;C
RETLW 00A1H ;D
RETLW 0086H ;E
RETLW 008EH ;F
END
PIC单片机中断嵌 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)