📄 00asm.asm
字号:
.ram
.var tag
.data
Key_table:.DW 0x0002,0x0004,0x0008
.external _key_value, _length ,_Tran , _TimeCount
.code
.public _scankeys
_scankeys:.proc
r1=0x0000
[tag]=r1
loop:
loop1: //???1?
R1=0x0020
[P_IOA_Data]=R1
R1 = 0x000f
R1& =[P_IOA_Data]
JZ loop2
cmp R1,0x0001
JZ _exit1
R2=0xfffe
BP=Key_table
toop1:
R2+=0x0003
CMP R1,[BP++]
JNZ toop1
[_key_value]=R2
jmp _compare
loop2: //???2?
R1=0x0040
[P_IOA_Data]=R1
R1 = 0x000f
R1& =[P_IOA_Data]
JZ loop3
cmp R1,0x0001
JZ _exit2
R2=0xffff
BP=Key_table
toop2:
R2+=0x0003
CMP R1,[BP++]
JNZ toop2
[_key_value]=R2
JMP _compare
loop3: //???3?
R1=0x0080
[P_IOA_Data]=R1
R1 = 0x000f
R1& =[P_IOA_Data]
JZ _compare
BP=Key_table
R2=0x0000
cmp R1,0x0001
JNZ toop3
[_key_value]=R2
jmp _compare
toop3:
R2+=0x0003
CMP R1,[BP++]
JNZ toop3
[_key_value]=R2
//_exit0:
//R1=[_length]
//R1+=1
//[_length]=R1
_compare:
r3=[tag]
r3+=1
[tag]=r3
cmp r3,16
jna loop0
_exit:
RETF
.ENDP
_exit1:
r1=99
[_key_value]=r1
goto _exit
_exit2:
r1=98
[_key_value]=r1
goto _exit
loop0:
r1=100
[_key_value]=r1
goto loop
.public _InitIO; //???,??io???
_InitIO:.proc
R1=0x00f0; //IOA?4??????????(?),?4?????????(?)
[P_IOA_Dir]=R1;
[P_IOA_Attrib]=R1;
R1=0x0000;
[P_IOA_Data]=R1;
R1=0xffff; //IOB?8?????????(????),8--10?????????(????)
[P_IOB_Dir]=R1;
[P_IOB_Attrib]=R1;
R1=0x0000
[P_IOB_Data]=R1;
RETF
.ENDP
//========================================================
//?????
//========================================================
.public _Initsystem;
_Initsystem:.proc //?????,???
IRQ OFF
R1=0x0004
[P_INT_Ctrl]=R1
IRQ ON
RETF
.ENDP
//==============================================================
//???
//=============================================================
//.public _OffIRQ5;
//_OffIRQ5:.proc
// R1=0x0004 //??????????????
//[P_INT_Ctrl]=R1
//pop r1,r5 from [sp]
//RETI
//IRQ OFF
// RETF
//.ENDP
//=================================================================
//????????(IRQ5_2Hz)
//?1???????+1
//===============================================================
.text
.PUBLIC _IRQ5
.include hardware.inc
.external _TimeCount,_sec1
_IRQ5:
push r1,r5 to [sp]
r1=0x0001
[0x7012]=r1
r1=0x0008
test r1,[P_INT_Ctrl];
jnz l_IRQ5_4Hz
///////////////2Hz??
l_IRQ5_2Hz:
r1=0x0004
[P_INT_Clear]=r1
r1=[_TimeCount] //?????
r1+=1
cmp r1,2
jnb loopx //?????
[_TimeCount]=r1
jmp loopy
//pop r1,r5 from [sp]
// RETI
loopx:
r1=[_sec1]
r1+=1 //???1
[_sec1]=r1
r1=0
[_TimeCount]=r1
jmp loopy
/////////////4Hz??
l_IRQ5_4Hz:
[P_INT_Clear]=r1
loopy:
pop r1,r5 from [sp]
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -