⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr.asm

📁 凌阳单片机流水灯程序
💻 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 + -