irq.asm

来自「2005年全国大学生电子设计竞赛论文集」· 汇编 代码 · 共 116 行

ASM
116
字号

.INCLUDE hardware.inc				
.EXTERNAL	F_Key_Scan;
.TEXT
.PUBLIC _BREAK;
.PUBLIC _FIQ;
.PUBLIC _IRQ0;
.PUBLIC _IRQ1;
.PUBLIC _IRQ2;
.PUBLIC _IRQ3;
.PUBLIC _IRQ4;
.PUBLIC _IRQ5;
.PUBLIC _IRQ6;
.PUBLIC _IRQ7;

//============================================================================================
//函数: FIQ(),IRQ0(),IRQ1(),IRQ2(),IRQ3(),IRQ4(),IRQ5(),IRQ6(),IRQ7()
//语法:void FIQ(void ),void IRQ0(void ),void IRQ1(void ),void IRQ2(void ),void IRQ3(void ),
//      void IRQ4(void ),void IRQ5(void ),void IRQ6(void ),void IRQ7(void )
//描述:FIQ(),IRQ0(),IRQ1(),IRQ2(),IRQ3(),IRQ4(),IRQ5(),IRQ6(),IRQ7()中断服务子程序
//参数:无
//返回:无
//=============================================================================================               
_FIQ:
    PUSH R1,R5 TO [SP];
    R1 = C_FIQ_PWM;
    TEST R1,[P_INT_Ctrl];
    JNE    L_FIQ_PWM;
    R1 = C_FIQ_TMA;
    TEST R1,[P_INT_Ctrl];
    JNE L_FIQ_TimerA;
L_FIQ_TimerB:
    POP R1,R5 FROM[SP];
    RETI;
L_FIQ_PWM:                                     
   [P_INT_Clear] = R1;
   POP R1,R5 FROM[SP];
   RETI;
L_FIQ_TimerA:
   [P_INT_Clear] = R1;
   POP R1,R5 FROM[SP];
   RETI;

_BREAK:        
    PUSH R1,R4 TO [SP];
    POP R1,R4 FROM[SP];
    RETI;
_IRQ0:        
    PUSH R1,R4 TO [SP];
    POP R1,R4 FROM[SP];
    RETI;
_IRQ1:        
    PUSH R1,R4 TO [SP];
    POP R1,R4 FROM[SP];
    RETI;
_IRQ2:        
    PUSH R1,R5 TO [SP];
    
    [P_INT_Clear] = R1;
    POP R1,R5 FROM[SP];
    RETI;
_IRQ3:
    PUSH R1,R4 TO [SP];
    POP R1,R4 FROM[SP];
    RETI;
_IRQ4:        
    PUSH R1,R1 TO [SP];
    [P_INT_Clear] = R1;
    POP R1,R1 FROM[SP];
    RETI;
_IRQ5:        
    PUSH R1,R4 TO [SP];
    POP R1,R4 FROM[SP];
    RETI;
_IRQ6:        
   	PUSH R1,R4 to [SP];
	R1=0x0001;
	TEST R1,[P_INT_Ctrl];
	JNZ  _IRQ6_TMB2;
	R1=0x0002;
	[P_INT_Clear]=R1;
	POP R1,R4 FROM [SP];
    RETI;         
_IRQ6_TMB2:
	[P_INT_Clear]=r1;
	CALL	F_Key_Scan;
	POP R1,R4 FROM [SP];
    RETI;  
_IRQ7:        
    PUSH R1,R4 TO [SP];
    POP R1,R4 FROM[SP];
    RETI;
    
.public _SP_INT_128Hz;
 _SP_INT_128Hz:
     R1 = 0x0000;
     [P_TimeBase_Setup]=R1        // TMB2选择128Hz //TMB1选择8Hz,但不起作用 
     R1 = 0x0001 				  //开中断IRQ6_TMB2
   	 [P_INT_Ctrl]= r1 
	 INT IRQ
     RETF;
.PUBLIC _SP_Init_IOB;              
_SP_Init_IOB: .PROC
   	R1 = 0x00f0;      
    [P_IOB_Attrib] = R1;    
    [P_IOB_Dir] = R1;
    [P_IOB_Data] = R1;
    RETF
.ENDP;

     
//========================================================================================        
//  isr.asm结束
//========================================================================================
        
       

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?