⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr.asm

📁 凌阳单片机实现时钟并语音报时的源代码 很有趣 当毕业设计不错
💻 ASM
字号:
.INCLUDE	hardware.inc						// INCLUDE io information
.INCLUDE	A2000.inc
.DEFINE		C_IRQ_1024Hz            0x0010;     //1024Hz IRQ4
.DEFINE		C_IRQ_2048Hz            0x0020;     //2048 IRQ4
.DEFINE		C_IRQ_4096Hz            0x0040;     //4096 IRQ4

.TEXT
.PUBLIC		_FIQ;
.PUBLIC		_IRQ5;
.EXTERNAL	_G_TimeCount;
.EXTERNAL 	_G_SecTime;
.EXTERNAL 	_Clear_WatchDog;   

//============================================================================================
//函数: FIQ()
//语法:void FIQ(void)
//描述:FIQ中服务断函数
//参数:无
//返回:无
//===============================================================================================
_FIQ:                                  
    PUSH r1,r4 TO [sp];
    CALL _Clear_WatchDog;
    r1 = C_FIQ_TMA;						// 
	TEST r1,[P_INT_Ctrl];				//
	JNE	L_FIQ_TimerA;					// 进入Timer A FIQ 
	r1 = C_FIQ_TMB;						//
	TEST r1,[P_INT_Ctrl];				//
	JNE L_FIQ_TimerB;					// 进入Timer B FIQ 
L_FIQ_PWM:								// 进入PWM FIQ 
	r1 = C_FIQ_PWM;
    [P_INT_Clear] = r1;
	POP r1,r4 FROM [sp];
    RETI;
L_FIQ_TimerA:	
    CALL _Clear_WatchDog; 
	             	
    r1 = [_G_TimeCount];				   //中断计数变量加1,即每0.25秒计数加1	
    r1 += 1
   [_G_TimeCount] = r1;
    r1 =[_G_SecTime];
    r1 += 1;
    [_G_SecTime] = r1;
    call 	F_FIQ_Service_SACM_A2000; 
    CALL _Clear_WatchDog;
    r1 = C_FIQ_TMA;
	[P_INT_Clear] = r1;                //清中断
	POP r1,r4 FROM [sp];
   RETI;
L_FIQ_TimerB:   
	[P_INT_Clear] = r1;
	POP r1,r4 FROM [sp];
    RETI; 
    


//============================================================================================
//函数: IRQ5()
//语法:void IRQ5(void)
//描述:FIQ中服务断函数
//参数:无
//返回:无
//============================================================================================
_IRQ5:                                 //定时0.5秒的中断程序
	PUSH r1,r4 TO [sp];
	r1 =0x0008;			 
	TEST r1,[P_INT_Ctrl];			
	JNZ	L_4Hz;			               // 开Timer A FIQ 	
	r1 = 0x0004;
    [P_INT_Clear] = r1;                //清中断
L_Loop0: 
    r1 = 1;
    [_G_TimeCount] = r1;
    r1 = [_G_SecTime];
    r1 += 1;
    [_G_SecTime] = r1;
	POP r1,r4 FROM [sp];
    RETI;     
L_4Hz:  
 	r1 = 0x0008;
    [P_INT_Clear] = r1;               //清中断
    POP r1,r4 FROM [sp];
    RETI; 


        

⌨️ 快捷键说明

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