📄 system.asm
字号:
.INCLUDE hardware.inc
.EXTERNAL F_Key_Scan_Initial
.EXTERNAL F_Key_DebounceCnt_Down
.EXTERNAL F_Key_Scan_ServiceLoop
.PUBLIC G_Sum;
.PUBLIC G_INT_STATUS;
.PUBLIC G_BADDDP;
.RAM
.VAR G_INT_STATUS = 0;
.VAR G_Sum // 进入中断的计数器
.VAR G_BADDDP = 0;
.DATA
// 2007.05.30 resocman 片选和段选
C_Address: .DW 0xfd00,0x6100,0xdb00,0xf300, 0x6700,0xb700,0xbf00,0xe100,0xff00,0xf700,0xBF00,0x8600,0xDB00,0xCF00,0xE600,0xed00,0xfd00,0x8700,0xff00,0xef00;
//'0''1''2''3''4''5''6''7''8''9''0.''1.''2.''3.''4.''5.''6.''7.''8.''9.'的代码
C_Dig: .DW 0x8,0x4,0x2,0x1;
.CODE
//============================================================================================
//函数: System_Initial
//语法:void System_Initial()
//描述:键盘扫描初始化
//参数:无
//返回:无
//===============================================================================================
.public _System_Initial;
.public F_System_Initial;
_System_Initial: .PROC
F_System_Initial:
call F_Key_Scan_Initial; // 键盘扫描初始化,来自key.asm
retf;
.ENDP;
//============================================================================================
//函数: System_ServiceLoop
//语法:System_ServiceLoop()
//描述:键盘扫描
//参数:无
//返回:无
//==============================================================================================
.public _System_ServiceLoop;
.public F_System_ServiceLoop;
_System_ServiceLoop: .PROC
F_System_ServiceLoop:
call F_Key_DebounceCnt_Down; // 按键去抖 ,来自key.asm
call F_Key_Scan_ServiceLoop; // 键盘扫描程序,来自key.asm
R1=0x0001; // 清看门狗
[P_Watchdog_Clear]=R1; //
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] //取出第二个入口参数
cmp r3, 0x0000
JNL Normal
r3 = 0x000A
Normal:
r2 = r1 + C_Dig; //取LED管的片选地址 ,相当取数组中的某个元素
r2 = [r2] //将地址里的内容取出,即取一个片选值 2007.05.30 resocman
r4 = r3 + C_Address //取显示数据的地址
r4 = [r4]
r2 |= r4
[P_IOA_Data] = r2; //显示数据
POP bp FROM [sp]
RETF;
.ENDP
//============================================================================================
//函数: Clear_WatchDog()
//语法:void Clear_WatchDog(void)
//描述:清看门狗
//参数:无
//返回:无
//============================================================================================
.PUBLIC _Clear_WatchDog;
_Clear_WatchDog: .PROC
r1 = 0x01;
[P_Watchdog_Clear] = r1;
RETF
.ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -