📄 isr.asm
字号:
//========================================================
// 文件名称: isr.asm
// 功能描述: 显示数据,定时0.5s和1s
// 维护记录: 2005-09-12 v1.0
//========================================================
.INCLUDE SPCE061A.inc
.INCLUDE Dig.inc
.EXTERNAL _g_uiFirst
.EXTERNAL _g_uiFlag
.EXTERNAL _g_uiSeg
.TEXT
//========================================================
// 汇编格式: _IRQ4
// 实现功能: 1KHz中断调用F_DIG_Drive函数
// 参数: 无
// 返回值: 无
//========================================================
.PUBLIC _IRQ4
_IRQ4:
push r1,r5 to [sp]
r1 = C_IRQ4_1KHz
test r1,[P_INT_Ctrl]
jnz ?L_IRQ4_1KHz
r1 = C_IRQ4_2KHz
test r1,[P_INT_Ctrl]
jnz ?L_IRQ4_2KHz
?L_IRQ4_4KHz:
call F_DIG_Drive //F_DIG_Drive函数是数码管显示函数,定义在Dig.asm文件中
r1 = C_IRQ4_4KHz
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
?L_IRQ4_2KHz:
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
?L_IRQ4_1KHz:
call F_DIG_Drive
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
//========================================================
// 汇编格式: _IRQ5
// 实现功能: 2Hz中断进行显示处理
// 参数: 无
// 返回值: 无
//========================================================
.PUBLIC _IRQ5
_IRQ5:
push r1,r5 to [sp]
r1 = C_IRQ5_2Hz
test r1,[P_INT_Ctrl]
jnz ?L_IRQ5_2Hz
?L_IRQ5_4Hz:
r1 = C_IRQ5_4Hz
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
?L_IRQ5_2Hz:
r1 = [_g_uiFirst]
cmp r1,0x0001 //第2次进入中断
ja ?Start //时间〉=1s
r1 = [_g_uiFirst] //时间小于1s
r1 += 1
[_g_uiFirst] = r1
goto ?Exit
?Start:
r1 = [_g_uiFirst]
cmp r1,2 //1s
jne ?Next
r1 += 1 //初始化g_uiFlag、g_uiSeg显示"1000"
[_g_uiFirst] = r1
r1 = 1
[_g_uiFlag] = r1
r1 = 2
[_g_uiSeg] = r1
goto ?Exit
?Next:
r1 = [_g_uiSeg]
cmp r1,9 //更改段码指针,显示数值加1
ja ?Next1
r1 += 1
[_g_uiSeg] = r1
goto ?Exit
?Next1:
r1 = [_g_uiFlag] //更改被刷新数码管位
cmp r1,4
je ?Last
r1 += 1
[_g_uiFlag] = r1
r1 = 2
[_g_uiSeg] = r1
goto ?Exit
?Last:
r1 = 0x0000 //置标志,重新显示“000000”
[_g_uiFirst] = r1
[_g_uiFlag] =r1
goto ?Exit
?Exit:
r1 = C_IRQ5_2Hz
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -