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

📄 sys.asm

📁 进行16位单片机基于其上的交通灯系统设计 来实现其功能
💻 ASM
字号:
.include	spce061.inc
.include 	s480.inc
.external 	_uiQuarterSecondCnt;
.DATA
    C_Address: .DW 0x3fcf,0x06cf,0x5bcf,0x4fcf, 0x66cf,0x6dcf,0x7ccf,0x07cf,0x7fcf,0x6fcf;//'0''1''2''3''4''5''6''7''8''9'的代码
    C_Dig:     .DW 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;//选中LED数码管
    
    
.CODE
//========================================================================================================
//函数: IO_Initial
//语法:void IO_Initial()
//描述:初始化 
//参数:无
//返回:无 
//========================================================================================================
.external R_InterruptStatus
.PUBLIC _IO_Initial;
_IO_Initial: .PROC
	PUSH r1 TO [sp];
	r1=0xffff							
	[P_IOB_Dir]=r1
	[P_IOB_Attrib]=r1
	[P_IOB_Data]=r1	

	r1=0x0000							
	[P_IOA_Dir]=r1
	[P_IOA_Attrib]=r1
	[P_IOA_Data]=r1	
	
	r1 = C_IRQ5_4Hz|C_IRQ4_4KHz;
	[R_InterruptStatus] = r1;
	[P_INT_Ctrl] = r1;
	INT IRQ
	POP r1 FROM [sp];
	RETF;
	.ENDP;

//============================================================================================
//函数: F_Show()
//语法:void F_Show(int A,int B)
//描述:点亮LED
//参数:A,LED的位数(C_Dig),B,LED的显示值
//返回:无
//============================================================================================  
.PUBLIC _F_Show;
_F_Show: .PROC
    PUSH bp TO  [sp];  		      //弹出入口参数共两个入口参数
    bp = sp + 1   
?L_Loop: 
    r1 = [bp+3]                   //取出第一个入口参数
    r3 = [bp+4]                   //取出第二个入口参数
    r2 =  r1 + C_Dig;             //取LED管的片选地址    
    r2  = [r2]   
    r4 =  r3 + C_Address          //取显示数据的地址 
    r4 = [r4] 
    r2 |= r4     
    [P_IOB_Data] = r2;            //显示数据  
    POP bp FROM [sp]
    RETF;
.ENDP



.text
.external _g_uiResetIO
.public	_IRQ5
_IRQ5:
	push	r1 to [sp]
	r1 = 0x0001;
	[P_Watchdog_Clear] = r1;			//清看门狗
	r1 = [_uiQuarterSecondCnt];
	r1 += 1;
	[_uiQuarterSecondCnt] = r1;
	
	r1 = [_g_uiResetIO];
	r1 += 1;
	[_g_uiResetIO] = r1;
	
	r1 = C_IRQ5_4Hz;
	[P_INT_Clear] = r1;
	pop r1 from [sp]
	reti


//============================================================================================
//函数: FIQ()
//语法:void FIQ(void)
//描述:FIQ中服务断函数
//参数:无
//返回:无
//===============================================================================================
.PUBLIC _FIQ
_FIQ:
	PUSH R1,R5 TO [SP]
	R1 = [P_INT_Ctrl]
	R1 &= 0x2000
	JZ ?L_notTimerA						//当不为TIQ_TMA,则转
	CALL F_FIQ_Service_SACM_S480;		//为0,播放480
	R1 = 0x2000
	[P_INT_Clear] = R1
	POP	R1,R5 FROM [SP];
	reti;
?L_notTimerA:
	R1 = 0x8800;
    [P_INT_Clear] = R1;
	POP	R1,R5 FROM [SP];
	RETI;
	

⌨️ 快捷键说明

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