📄 system.asm
字号:
.include resource.inc //包含文件
.include hardware.inc //包含文件
.define P_INT_Ctrl_New 0x702d //定义关键字
.public _K_code //全局变量,用于存储键值
.public _flag //标志
.oram
.var _K_code //全局变量,用于存储键值
.var _dd //用于延时
.var _flag //标志
.code
//*-----------------------------------------------------------------------*/
//函数名称:_System_ServiceLoop
//功能描述:扫描键盘函数
//语法格式:.public _System_ServiceLoop
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _System_ServiceLoop
_System_ServiceLoop:.proc
push r5 to [sp] //保护寄存器
r1 = [P_IOA_Attrib] //设置IOA口低8位为下拉电阻输入口
r1 &= 0xff00
[P_IOA_Attrib] = r1
r1 = [P_IOA_Dir]
r1 &= 0xff00
[P_IOA_Dir] = r1
r1=[P_IOA_Data]
r1 &= 0xff00
[P_IOA_Data] = r1
nop
nop
nop
r1=[P_IOA_Data] //读键值
r1 &= 0x00ff
cmp r1,0x0000
je exit
call _delay //去抖
r1=[P_IOA_Data]
r1 &= 0x00ff
[_K_code]=r1 //保存键值
exit:
pop r5 from [sp]
R1=0x0001
[P_Watchdog_Clear]=R1 //清看门狗
retf
.endp
//*-----------------------------------------------------------------------*/
//函数名称:_Clear_WatchDog
//功能描述:清看门狗函数
//语法格式:.public _Clear_WatchDog
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _Clear_WatchDog
_Clear_WatchDog:.proc
R1=0x0001
[P_Watchdog_Clear]=R1
retf
.endp
//*-----------------------------------------------------------------------*/
//函数名称:_delay
//功能描述:延时函数
//语法格式:.public _delay
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _delay
_delay:.proc
r1=0x00ff
tt: r1-=1
r2=0x0001
[P_Watchdog_Clear]=r2
cmp r1,0x0000
je ff
jmp tt
ff: nop
retf
.endp
//*-----------------------------------------------------------------------*/
//函数名称:_Reset_Int
//功能描述:重新设置中断函数
//语法格式:.public _Reset_Int
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _Reset_Int
_Reset_Int:
r1 = [P_INT_Ctrl_New]
r1|=0x0014
[P_INT_Ctrl]=r1
int irq,fiq //开中断
retf
//*-----------------------------------------------------------------------*/
//函数名称:_Set_Int
//功能描述:设置中断函数
//语法格式:.public _Set_Int
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _Set_Int
_Set_Int:
int off
r1=0x0080
[_dd]=r1
r1 = [P_INT_Ctrl_New]
r1|=0x0014
[P_INT_Ctrl]=r1
int irq,fiq
retf
//*-----------------------------------------------------------------------*/
//函数名称:_Set_TimerA
//功能描述:开定时器函数
//语法格式:.public _Set_TimerA
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _Set_TimerB
_Set_TimerB:.proc
r1 = [P_INT_Ctrl_New]
r1 = 0x0204
[P_TimerB_Ctrl] = r1
r1 = 0x0000
[P_TimerB_Data] = r1
retf
.endp
//*-----------------------------------------------------------------------*/
//函数名称:_IRQ4
//功能描述:中断服务延时函数
//语法格式:.public _IRQ4
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.text
.public _IRQ4
_IRQ4:
push r1,r5 to [sp]
r1=0x0010
test r1,[P_INT_Ctrl]
jnz L_Irq4_1k
r1=0x0020
test r1,[P_INT_Ctrl]
jnz L_Irq4_2k;
L_Irq4_4k:
r1=0x0040
jmp L_Exit_Int
L_Irq4_2k:
r1=0x0020
jmp L_Exit_Int
L_Irq4_1k:
r1 =[_dd]
r1-=1
[_dd]=r1
cmp r1,0x0000
je change
r1=0x0010
jmp L_Exit_Int
change:
r1=1
[_flag]=r1
r1=0x0080
[_dd]=r1
int off
r1=0x0010
L_Exit_Int:
[P_INT_Clear]=r1
pop r1,r5 from [sp]
reti
//*-----------------------------------------------------------------------*/
//函数名称:_IRQ5
//功能描述:中断服务清看门狗函数
//语法格式:.public _IRQ5
//入口参数;无
//出口参数:无
//注意事项:仅为用户模型
//*-----------------------------------------------------------------------*/
.public _IRQ5
_IRQ5:
push r1,r5 to [sp]
r1=0x0001
[P_Watchdog_Clear]=r1
r1=0x0004
[P_INT_Clear]=r1
pop r1,r5 from [sp]
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -