📄 isr.asm
字号:
//========================================================
// 文件名称: isr.asm
// 功能描述: 使用IRQ5、IRQ6中断服务程序,在里面判断当
// 前模式,进入对应模式的移位程序,以控制显示
// 另外在,IRQ6的TMB2中断里,进行键盘扫描
// 维护记录: 2005-09-12 v1.0
//========================================================
.INCLUDE hardware.inc
.INCLUDE key.inc
.EXTERNAL _g_uiMode
.EXTERNAL _g_uiConst
.EXTERNAL _g_uiData
.EXTERNAL _g_uiCount
.TEXT
.PUBLIC _IRQ5
_IRQ5:
push r1,r5 to [sp]
r1 = C_IRQ5_2Hz
test r1,[P_INT_Ctrl]
jnz ?L_IRQ5_2Hz_Temp
?L_IRQ5_4Hz:
r1 = [_g_uiMode]
test r1,0x0008
jnz ?Mode4
test r1,0x0004
jnz ?Mode3
test r1,0x0020
jnz ?Mode6_Temp
jmp ?Mode2
?L_IRQ5_2Hz_Temp:
goto ?L_IRQ5_2Hz
?Mode6_Temp:
goto ?Mode6
?Mode2:
r1 = [P_IOB_Data]
r1 &= 0x00ff
r1 = r1 lsl 1
cmp r1,0x0100
jne ?Continue
r1 = 0x0001
?Continue:
[P_IOB_Data] = r1
goto ?Exit
?Mode3:
r1 = [_g_uiConst]
cmp r1,0x000c
jne ?Con0
r1 = 0xf000
r1 = r1 lsl 4 //将SB初始化全为1
r1 = 0x0000
[_g_uiData] = r1
[_g_uiConst] = r1
?Con0:
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
[P_IOB_Data] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Mode4:
r1 = [_g_uiData]
cmp r1,0x0000
jne ?Disp
r1 = 0x0000 //熄灭二极管
[P_IOB_Data] = r1
r1 = 0x0001
[_g_uiData] = r1
goto ?Exit
?Disp:
r1 = [_g_uiConst]
cmp r1,0x0001
je ?Next0
cmp r1,0x0002
je ?Next1
cmp r1,0x0003
je ?Next2
cmp r1,0x0004
je ?Next3
cmp r1,0x0005
je ?Next4_Temp
cmp r1,0x0006
je ?Next5_Temp
cmp r1,0x0007
je ?Next6_Temp
cmp r1,0x0008
je ?Next7_Temp
jmp ?Change_Temp
?Next4_Temp:
goto ?Next4
?Next5_Temp:
goto ?Next5
?Next6_Temp:
goto ?Next6
?Next7_Temp:
goto ?Next7
?Change_Temp:
goto ?Change
?Next0:
r1 = 0x0001
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next1:
r1 = 0x0003
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next2:
r1 = 0x0007
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next3:
r1 = 0x000f
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next4:
r1 = 0x001f
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next5:
r1 = 0x003f
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next6:
r1 = 0x007f
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Next7:
r1 = 0x00ff
[P_IOB_Data] = r1
r1 = 0x0000
[_g_uiData] = r1
r1 = [_g_uiConst]
r1 += 1
[_g_uiConst] = r1
goto ?Exit
?Change:
r1 = 0x0001
[_g_uiConst] = r1
goto ?Exit
?Mode6:
r1 = [_g_uiConst]
cmp r1,0x0000
je ?Mid0
cmp r1,0x0001
je ?Mid1
cmp r1,0x0002
je ?Mid2
cmp r1,0x0003
je ?Mid3
cmp r1,0x0004
je ?Mid4
cmp r1,0x0005
je ?Mid5
cmp r1,0x0006
je ?Mid6
cmp r1,0x0007
je ?Mid7
r1 = 0x0000
[_g_uiConst] = r1
jmp ?Exit
?Mid0:
r1 = 0x0018
[P_IOB_Data] = r1
r1 = 0x0001
[_g_uiConst] = r1
jmp ?Exit
?Mid1:
r1 = 0x003c
[P_IOB_Data] = r1
r1 = 0x0002
[_g_uiConst] = r1
jmp ?Exit
?Mid2:
r1 = 0x007e
[P_IOB_Data] = r1
r1 = 0x0003
[_g_uiConst] = r1
jmp ?Exit
?Mid3:
r1 = 0x00ff
[P_IOB_Data] = r1
r1 = 0x0004
[_g_uiConst] = r1
jmp ?Exit
?Mid4:
r1 = 0x007e
[P_IOB_Data] = r1
r1 = 0x0005
[_g_uiConst] = r1
jmp ?Exit
?Mid5:
r1 = 0x003c
[P_IOB_Data] = r1
r1 = 0x0006
[_g_uiConst] = r1
jmp ?Exit
?Mid6:
r1 = 0x0018
[P_IOB_Data] = r1
r1 = 0x0007
[_g_uiConst] = r1
jmp ?Exit
?Mid7:
r1 = 0x0000
[P_IOB_Data] = r1
r1 = 0x0008
[_g_uiConst] = r1
jmp ?Exit
?Exit:
r1 = C_IRQ5_4Hz
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
?L_IRQ5_2Hz:
r1 = [_g_uiMode]
test r1,0x0001
jnz ?Mode1
?Mode2_2Hz:
r1 = [_g_uiConst]
cmp r1,0x0000
jne ?Con2
r1 = 0x0001
[_g_uiConst] = r1
r1 = 0xf000
r1 = r1 lsl 4
r1 = 0xf000
[_g_uiData] = r1
jmp ?Exit0
?Con2:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
jmp ?Exit0
?Mode1:
r1 = [P_IOB_Data]
r1 ^= 0x00ff
[P_IOB_Data] = r1
?Exit0:
r1 = C_IRQ5_2Hz
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
.PUBLIC _IRQ6
_IRQ6:
push r1,r5 to [sp]
r1 = C_IRQ6_TMB1
test r1,[P_INT_Ctrl]
jnz ?L_IRQ6_TMB1
?L_IRQ6_TMB2:
call F_Key_Scan
r1 = C_IRQ6_TMB2
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
?L_IRQ6_TMB1:
r1 = [_g_uiMode]
test r1,0x0040
jnz ?Mode7_Temp
jmp ?Mode8
?Mode7_Temp:
goto ?Mode7
?Mode8:
r1 = [_g_uiConst]
cmp r1,0xffff
jne ?Start0
r1 = 0x0080
[_g_uiConst] = r1
// r1 = 0x8000
// r1 = r1 lsl 4
r1 = 0x0000
[_g_uiData] = r1
r1 = 0x0008
[_g_uiCount] = r1
goto ?Exit2
?Start0:
r1 = [_g_uiConst]
test r1,0x0080
jnz ?Shift8_Temp
test r1,0x0040
jnz ?Shift7_Temp
test r1,0x0020
jnz ?Shift6_Temp
test r1,0x0010
jnz ?Shift5_Temp
test r1,0x0008
jnz ?Shift4_Temp
test r1,0x0004
jnz ?Shift3_Temp
test r1,0x0002
jnz ?Shift2_Temp
test r1,0x0001
jnz ?Shift1_Temp
r1 = [_g_uiCount]
r1 -= 1
jz ?DispW
r1 = 0xffff
[_g_uiConst] = r1
goto ?Exit2
?DispW:
r1 = 0xffff
[P_IOB_Data] = r1
goto ?Exit2
?Shift8_Temp:
goto ?Shift8
?Shift7_Temp:
goto ?Shift7
?Shift6_Temp:
goto ?Shift6
?Shift5_Temp:
goto ?Shift5
?Shift4_Temp:
goto ?Shift4
?Shift3_Temp:
goto ?Shift3
?Shift2_Temp:
goto ?Shift2
?Shift1_Temp:
goto ?Shift1
?Shift8:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load8
[_g_uiCount] = r1
cmp r1,0x0007
jne ?Con3
r1 = 0x8000
r1 = r1 lsl 4
?Con3:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
goto ?Exit2
?Load8:
r1 = 0x0040
[_g_uiConst] = r1
r1 = 0x0007
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift7:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load7
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x0080
[P_IOB_Data] = r1
goto ?Exit2
?Load7:
r1 = 0x0020
[_g_uiConst] = r1
r1 = 0x0007
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift6:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load6
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x00c0
[P_IOB_Data] = r1
goto ?Exit2
?Load6:
r1 = 0x0010
[_g_uiConst] = r1
r1 = 0x0006
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift5:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load5
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x00e0
[P_IOB_Data] = r1
goto ?Exit2
?Load5:
r1 = 0x0008
[_g_uiConst] = r1
r1 = 0x0005
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift4:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load4
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x00f0
[P_IOB_Data] = r1
goto ?Exit2
?Load4:
r1 = 0x0004
[_g_uiConst] = r1
r1 = 0x0004
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift3:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load3
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x00f8
[P_IOB_Data] = r1
goto ?Exit2
?Load3:
r1 = 0x0002
[_g_uiConst] = r1
r1 = 0x0003
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift2:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load2
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x00fc
[P_IOB_Data] = r1
goto ?Exit2
?Load2:
r1 = 0x0001
[_g_uiConst] = r1
r1 = 0x0002
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Shift1:
r1 = [_g_uiCount]
r1 -= 1
jz ?Load1
[_g_uiCount] = r1
r1 = [_g_uiData]
r1 = r1 rol 1
[_g_uiData] = r1
r1 |= 0x00fe
[P_IOB_Data] = r1
goto ?Exit2
?Load1:
r1 = 0x0000
[_g_uiConst] = r1
r1 = 0x0011
[_g_uiCount] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Mode7:
r1 = [_g_uiConst]
cmp r1,0x0000
jne ?Start
r1 = 0x0001
[_g_uiConst] = r1
r1 = 0x0001
[_g_uiData] = r1
r1 = 0x8000
r1 = r1 lsl 4
goto ?Exit2
?Start:
r1 = [_g_uiConst]
cmp r1,0x0001
je ?OK1_Temp
cmp r1,0x0002
je ?OK2_Temp
cmp r1,0x0003
je ?OK3_Temp
cmp r1,0x0004
je ?OK4_Temp
cmp r1,0x0005
je ?OK5_Temp
cmp r1,0x0006
je ?OK6_Temp
cmp r1,0x0007
je ?OK7_Temp
cmp r1,0x0008
je ?OK8_Temp
cmp r1,0x0009
je ?OK9_Temp
cmp r1,0x000a
je ?OKa_Temp
cmp r1,0x000b
je ?OKb_Temp
cmp r1,0x000c
je ?OKc_Temp
cmp r1,0x000d
je ?OKd_Temp
cmp r1,0x000e
je ?OKe_Temp
cmp r1,0x000f
je ?OKf_Temp
cmp r1,0x0010
je ?OK10_Temp
r1 = 0x0001
[_g_uiConst] = r1
goto ?Exit2
?OK1_Temp:
goto ?OK1
?OK2_Temp:
goto ?OK2
?OK3_Temp:
goto ?OK3
?OK4_Temp:
goto ?OK4
?OK5_Temp:
goto ?OK5
?OK6_Temp:
goto ?OK6
?OK7_Temp:
goto ?OK7
?OK8_Temp:
goto ?OK8
?OK9_Temp:
goto ?OK9
?OKa_Temp:
goto ?OKa
?OKb_Temp:
goto ?OKb
?OKc_Temp:
goto ?OKc
?OKd_Temp:
goto ?OKd
?OKe_Temp:
goto ?OKe
?OKf_Temp:
goto ?OKf
?OK10_Temp:
goto ?OK10
?OK1:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0002
[_g_uiConst] = r1
goto ?Exit2
?OK2:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0003
[_g_uiConst] = r1
goto ?Exit2
?OK3:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0004
[_g_uiConst] = r1
goto ?Exit2
?OK4:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0005
[_g_uiConst] = r1
goto ?Exit2
?OK5:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0006
[_g_uiConst] = r1
goto ?Exit2
?OK6:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0007
[_g_uiConst] = r1
goto ?Exit2
?OK7:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0008
[_g_uiConst] = r1
goto ?Exit2
?OK8:
r1 = [_g_uiData]
r1 = r1 rol 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0009
[_g_uiConst] = r1
goto ?Exit2
?OK9:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x000a
[_g_uiConst] = r1
goto ?Exit2
?OKa:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x000b
[_g_uiConst] = r1
goto ?Exit2
?OKb:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x000c
[_g_uiConst] = r1
jmp ?Exit2
?OKc:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x000d
[_g_uiConst] = r1
jmp ?Exit2
?OKd:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x000e
[_g_uiConst] = r1
jmp ?Exit2
?OKe:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x000f
[_g_uiConst] = r1
jmp ?Exit2
?OKf:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0010
[_g_uiConst] = r1
jmp ?Exit2
?OK10:
r1 = [_g_uiData]
r1 = r1 ror 1
[P_IOB_Data] = r1
[_g_uiData] = r1
r1 = 0x0020
[_g_uiConst] = r1
jmp ?Exit2
?Exit2:
r1 = C_IRQ6_TMB1
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -