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

📄 fiq.asm

📁 SpeechClock是在凌阳提供的电子钟的范例的基础之上实现的电子时钟的源程序 调试环境:unSPIDE184 运行设备:SPCE061A+LED&KEY模板 功能:时钟显示(日期与时间) L
💻 ASM
字号:
//*********************************************************//
//函数:FIQ()
//语法:void  FIQ(void)
//描述:快速请求中断;
//		入口地址:_FIQ
//		功能:调用语音解码并播放API
//参数:无
//返回:无
//IRQ5_2Hz Time_Count & Calendar_Count 
//		 由System_Initial()设置并启用
//		 功能:1)调用万年历调整程序_Calendar_Counter
//			   2)_TimeCount自加1,以在main()中实现校时状态下多少时间无动作则退出的功能
//IRQ4_1KHz LED_Display					
//		 由System_Initial()设置并启用
//		 功能:调用LED显示程序  _Disp_Time
//FIQ_TimA F_FIQ_Service_SACM_A2000 	
//		 由SACM_A2000_Initial()设置并启用
//		 功能:调用F_FIQ_Service_SACM_A2000完成D/A转换
//IRQ6_TMB2 TimeChangeCount变量 		
//		 由Start256HzRTC()设置并启用
//		 功能:TimeChangeCount自加1,以在main()实现校时状态下增减后多少时间则单项报时的功能
//*********************************************************//
.INCLUDE a2000.inc;
.INCLUDE hardware.inc

.PUBLIC _FIQ, _IRQ4,_IRQ5, _IRQ6

.EXTERNAL	_TimeCount;        // 触发计时
.EXTERNAL   _TimeChangeCount;  //计时
.EXTERNAL   _LED_Disp		   //LED显示子程序    在IRQ4_1KHz中断中调用  
.EXTERNAL   _Calendar_Counter  //万年历调整子程序 在IRQ5_2Hz 中断中调用

.TEXT
//-------CALL  F_FIQ_Service_SACM_A2000--------//
_FIQ:
	push r1,r5 to [sp]
	r1 = 0x0800
	r1&=[P_INT_Ctrl] 
	jnz FIQ_is_TimB
	r1 = 0x2000
	r1&=[P_INT_Ctrl] 
	jnz FIQ_is_TimA
	r1 = 0x8000
	r1&=[P_INT_Ctrl] 
	jnz FIQ_is_PWM
  FIQ_is_PWM:
    [P_INT_Clear] = r1
	pop	r1,r5 from [sp];
	reti;
  FIQ_is_TimA:						
    call F_FIQ_Service_SACM_A2000;			//完成D/A转换
	r1 = 0x2000
	[P_INT_Clear] = r1
	pop	r1,r5 from [sp];
	reti;
  FIQ_is_TimB:    
    [P_INT_Clear] = r1;         
    pop r1,r5 from [sp];
    reti;             
	
//--------LED 显示 in 1Hz------//
_IRQ4: 
	push r1,r5 to [sp]
    r1=0x0010
    test r1,[P_INT_Ctrl]
    jnz IRQ4_1K
    r1=0x0020
    test r1,[P_INT_Ctrl]
    jnz IRQ4_2K 
    jmp IRQ4_4K
 IRQ4_1K:
 	CALL _LED_Disp;						//LED 显示
    r1=0x0010;
    [P_INT_Clear]=r1
	pop	r1,r5 from [sp];
	reti; 
 IRQ4_2K:
    [P_INT_Clear]=r1
	pop	r1,r5 from [sp];
	reti; 
 IRQ4_4K:
 	[P_INT_Clear]=r1
	pop	r1,r5 from [sp];
	reti;	

//--------2Hz and 4Hz------//
_IRQ5: 
	push r1,r5 to [sp]
	r1 = 0x0008;
	test r1,[P_INT_Ctrl];
	jnz	L_IRQ5_4Hz;

L_IRQ5_2Hz:
    r1 = [_TimeCount];    //计时
	r1 += 1;
	[_TimeCount] = r1;
	CALL _Calendar_Counter;	//万年历
    r1=0x0004
    [P_INT_Clear] = r1;
	pop	r1,r5 from [sp];
	reti;

L_IRQ5_4Hz:
    [P_INT_Clear] = r1;
	pop	r1,r5 from [sp];
	reti;

//-------- 256Hz RTC --------//
_IRQ6: 
    push r1,r5 to [sp]
    r1=0x0001
    test r1,[P_INT_Ctrl]
    jnz IRQ6_TMB2
 IRQ6_TMB1:
    [P_INT_Clear]=r1
	pop	r1,r5 from [sp];
	reti; 
 IRQ6_TMB2:
    r1=[_TimeChangeCount]
    r1+=1
    [_TimeChangeCount]=r1
    r1=0x0001   
    [P_INT_Clear]=r1
	pop	r1,r5 from [sp];
	reti;
	    
.END

⌨️ 快捷键说明

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