📄 irq.asm
字号:
.include hardware.inc
.public _IRQ5
.external _sec
.external _output
.external _light
.external _num
.external _point
.data
printtable: //显示段码表
.DW 0xff3F,0xff06,0xff5B,0xff4F,0xff66 //0,1,2,3,4 //0-4
.DW 0xff6D,0xff7D,0xff07,0xff7F,0xff6F //5,6,7,8,9 //5-9
.DW 0xff77,0xff7C,0xff39,0xff5E,0xff79 //A,b,C,d,E //10-14
.DW 0xff71,0xff3d,0xff76,0xff06,0xff0e //F,G,H,I,J //15-19
.DW 0xfff2,0xff38,0xff7e,0xff37,0xff3f //K,L,M,N,O //20-24
.DW 0xff73,0xffbf,0xfff7,0xffed,0xff78 //P,Q,R,S,T //25-29
.DW 0xffbe,0xff62,0xff77,0xff66,0xff6a //U,V,W,X,Y //30-34
.DW 0xff5b,0xffFF,0xff00,0xff40,0xff80 //Z,全亮,全灭,"-","." //35-39
.DW 0xffc0,0xff86 //"-.","!" //40-41
.text
//中断程序 利用2hz中断产生秒累加sec
_IRQ5:
PUSH r1,r5 to [SP]
r1=0x0004
TEST R1,[P_INT_Ctrl]
JNZ IRQ_2Hz
IRQ_4Hz:
r1=0x0008
[P_INT_Clear]=r1
POP r1,r5 FROM [SP]
RETI
IRQ_2Hz:
r1=0x0001
[P_Watchdog_Clear]=r1
r1=1
r2=[_num]
r2+=r1
[_num]=r2
cmp r2,2
je l_num
loop:
r1=0x0004
[P_INT_Clear]= r1
POP r1,r5 FROM [SP]
RETI
l_num:
r1=1
r2=[_sec]
r2+=r1
[_sec]=r2
r1=0
[_num]=r1
cmp r1,0
je loop
reti
.code
.public _output_asm
//输出函数
_output_asm: .proc
r1=0
r3=0x00ff
[P_IOB_Data]= r1
r2=_output
next:
bp=printtable
bp+=[r2++]
r1=[bp]
r1&=r3
[P_IOB_Data]= r1
call _light_loop
r3+=0x0100
CMP r3,0x08ff
JB next
r1=[_point]
[P_IOB_Data]=r1
call _light_loop
retf
.endp
_light_loop: .proc
r1=[_light]
r1+=1
long:
r1-=1
r1=0
CMP r1,0
JNE long
retf
.endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -