📄 system.asm
字号:
//包含SP_Init_IOA();SP_Init_IOB(),SP_INT_128Hz()TurnOffLed(),void F_Show(int A,int B),
//void F_ClearWatchdog(void)
.INCLUDE hardware.inc
.RAM
.DATA
// C_Address: .DW 0x00bf,0x0086,0x00db,0x00cf, 0x00e6,0x00ed,0x00fc,0x0087,0x00ff,0x00ef;//'0''1''2''3''4''5''6''7''8''9'的代码
// C_Dig: .DW 0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000;//选中LED管
//数码管上数字编码,分别是0-F
C_Address: .dw 0x003f, 0x0006, 0x005b, 0x004f, 0x0066, 0x006d, 0x007d, 0x0007, 0x007f, 0x006f
.dw 0x0077,0x007f,0x0039,0x003f,0x0079,0x0071
//数码管显示控制编码,分别控制1-8个数码管显示
C_Dig:
.dw 0x0000,0x0100,0x0200,0x0300,0x0400,0x0500,0x0600,0x0700
.CODE
//============================================================================================
//函数: SP_Init_IOA()
//语法:void SP_Init_IOA(int A,int B,int C)
//描述:初始化A口
//参数:A,方向向量单元,B数据单元,C属性向量单元
//返回:无
//=============================================================================================
.PUBLIC _SP_Init_IOA; //初始化A口高8位为键盘输入,低8位为da传输数据通道
_SP_Init_IOA: .PROC
r1 = 0xf0FF;
[P_IOA_Attrib] = r1;
[P_IOA_Dir] = r1;
[P_IOA_Data] = r1;
RETF
.ENDP;
//============================================================================================
//函数: SP_Init_IOB()
//语法:void SP_Init_IOB(int A,int B,int C)
//描述:初始化B口
//参数:A,方向向量单元,B数据单元,C属性向量单元
//返回:无
//=============================================================================================
.PUBLIC _SP_Init_IOB; //初始B为输出口
_SP_Init_IOB: .PROC
r1 = 0xffff;
[P_IOB_Attrib] = r1;
[P_IOB_Dir] = r1;
r1=0x0000;
[P_IOB_Data] = r1;
RETF
.ENDP;
//============================================================================================
//函数: TurnOffLed()
//语法:void TurnOffLed()
//描述:关闭所有LED函数
//参数:无
//返回:无
//=============================================================================================
.PUBLIC _TurnOffLed;
_TurnOffLed: .PROC
r1 = 0x0000
[P_IOB_Data] = r1
RETF
.ENDP
//============================================================================================
//函数: SP_INT_128Hz()
//语法:void SP_INT_128Hz()
//描述:TMB2选择128Hz
//参数:无
//返回:无
//=============================================================================================
.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;
//============================================================================================
//函数: 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
//============================================================================================
//函数: F_ClearWatchdog()
//语法:void F_ClearWatchdog(void)
//描述:清看门狗
//返回:无
//============================================================================================
.PUBLIC _F_ClearWatchdog;
_F_ClearWatchdog: .PROC
r1 = 1;
[P_Watchdog_Clear] = r1;
RETF;
.ENDP
//===========================================================================================
//函数:F_Show_Extra()
//语法:void F_Show_Extra()
//描述:LED显示中加小数点,跟随F_Show()
//返回:无
//===========================================================================================
.public _F_Show_Extra;
_F_Show_Extra: .proc
r1=[P_IOB_Data];
r1|=0x0080
[P_IOB_Data]=r1
retf;
.endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -