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

📄 system.asm

📁 SpeechClock是在凌阳提供的电子钟的范例的基础之上实现的电子时钟的源程序 调试环境:unSPIDE184 运行设备:SPCE061A+LED&KEY模板 功能:时钟显示(日期与时间) L
💻 ASM
字号:
//********************system.asm****************************//
//_System_Initial 	系统初始化
//_Clear_WatchDog	看门狗清0
//_SP_GoSleep 		进入睡眠模式 
//_Start256HzRTC	打开256Hz中断 ?P_TimeBase_Clear会不会影响时基信号触发的中断?
//_Stop256HzRTC     关闭256Hz中断
//*********************************************************//
.INCLUDE hardware.inc  
.DEFINE	 	CPU_FRIQUENCY	0x0000
.EXTERNAL   _LED_ss;
.EXTERNAL   _LED_mm;
.EXTERNAL   _LED_hh;
.EXTERNAL   _LED_DD;
.EXTERNAL   _LED_MM;
.EXTERNAL   _LED_YY;
.PUBLIC		Year; 
.PUBLIC		MonDayHr; 
.PUBLIC		MinSec; 
//*********************RAM空间占用*************************//
.RAM
.VAR		Year          //年 b15--if leap year
.VAR		MonDayHr      //月日时  b13--b10(month) b9--b5(day)  b4--b0(hour) 
.VAR		MinSec        //分秒    b12--b7(minute) b6--b1(second) b0--500ms
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

//********************* C O D E ***************************//
.CODE
//*********************************************************//
//函数:System_Initial()
//描述:系统初始化
//参数:无
//返回:无
//*********************************************************//
.PUBLIC _System_Initial;
_System_Initial: .PROC
//******************系统时钟、中断*************************//
     r1=CPU_FRIQUENCY			//r1=0
     [P_SystemClock]=r1  //Fosc=49MHz,n=1 //[P_SystemClock]=r1
     r1=0
     [R_InterruptStatus] = r1
     [P_INT_Ctrl]=r1
     IRQ OFF
     FIQ OFF

//*********************I/O口*******************************//
	r1=0xff00
	[P_IOA_Attrib] = r1						//A7--A0  输入
	[P_IOA_Dir] = r1						//A15--A8 输出
	r1 = 0x0000				
	[P_IOA_Data] = r1
	r1=0xffff								//B15--B0  输出
	[P_IOB_Attrib]  =r1
	[P_IOB_Dir] = r1
	r1= 0x0000
	[P_IOB_Data] = r1 
     
//*********************万年历******************************//
     r1=2005
     [Year]=r1     							//2005年  b15--not leap year
     r1=0x1C46
     [MonDayHr]=r1  						//7月2日6时 
                    						// b13--b10(month) b9--b5(day)  b4--b0(hour)
     r1=0x0ee8      
     [MinSec]=r1      						//0分0秒    
                   							//b12--b7(minute) b6--b1(second) b0--500ms 
     //LED显示缓冲区初始化
     CALL _LED_ss;
     CALL _LED_mm;
     CALL _LED_hh;
     CALL _LED_DD;
     CALL _LED_MM;
     CALL _LED_YY;  
//*******************中断**********************************//    		
     r1 = C_IRQ5_2Hz+C_IRQ4_1KHz    		  //IRQ5_2Hz Time_Count & Calendar_Count
     										  //IRQ4_1KHz LED_Display
     										  //FIQ_TimA F_FIQ_Service_SACM_A2000 由SACM_A2000_Initial()设置并启用
     										  //IRQ6_TMB2 TimeChangeCount变量 	由 Start256HzRTC()设置并启用
     r1|=[R_InterruptStatus] 
	 [R_InterruptStatus] = r1
     [P_INT_Ctrl]=r1
     IRQ ON 								  //FIQ 由SACM_A2000_Initial()打开
     
     retf;
	.ENDP;
//----------------System_Initial() ENDS--------------------//

//*********************************************************//
//函数:Clear_WatchDog()
//描述:看门狗清0
//参数:无
//返回:无
//*********************************************************//
.PUBLIC _Clear_WatchDog;
_Clear_WatchDog: 	.PROC
		r1=0x0001;                      	// Clear watch dog
		[P_Watchdog_Clear]=r1;       		
		retf;
		.ENDP
//--Clear_WatchDog() ENDS-----------------------------------//

//*********************************************************//
//函数:SP_GoSleep()
//描述:进入睡眠模式 
//参数:无
//返回:无
//*********************************************************//
.EXTERNAL  Key_Scan_Init
.PUBLIC _SP_GoSleep
_SP_GoSleep: .PROC
	    r1=0x00ff;	           				//等待键释放
        r1 &= [P_IOA_Data];	
        jnz    WaitKeyUp;
        call Key_Scan_Init
       
        r1 = [P_IOA_Latch];     			//锁存数据
		r1 = [P_IOA_Latch];	 
		r1 = 0x0017;            			//弱振、进入睡眠
		[P_SystemClock] = r1;				
	      r1=32           					//延时,睡眠后PC停在这条指令上,唤醒后从这儿继续执行
  WakeUpWaitDelay:      
          r1-=1
          jnz WakeUpWaitDelay 	
          r1=CPU_FRIQUENCY	
          [P_SystemClock]=r1				//关闭32768H时钟、CPUCLK为Fosc
WaitKeyUp:   
		retf;  	              
		.ENDP
//----_SP_GoSleep() ENDS--------------------------------//

.PUBLIC _Start256HzRTC        				//打开256Hz中断
_Start256HzRTC: .PROC
      r1=0
      [P_TimeBase_Clear]=r1
      r1=0x0004
      r1|=[P_TimeBase_Setup]
      [P_TimeBase_Setup]=r1      			//TMB2 CLKsour=256Hz
    
      r1 = C_IRQ6_TMB2 ;  					//256Hz
      r1|=[R_InterruptStatus] 
	  [R_InterruptStatus] = r1
      [P_INT_Ctrl]=r1
      retf
    .ENDP
     
.PUBLIC _Stop256HzRTC           			//关闭256Hz中断
_Stop256HzRTC: .PROC
     r1 = C_IRQ6_TMB2 ;  					//256Hz
     r1^=0xFFFF        						//取反 
     r1&=[R_InterruptStatus] 
	 [R_InterruptStatus] = r1
     [P_INT_Ctrl]=r1  
     retf
     .ENDP    

⌨️ 快捷键说明

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