📄 system.asm
字号:
//*****************************************************************************************************//
// SYSTEM SERVICE FUNCTION //
// DESIGNED BY PHEONIX //
// VOID IO_INIT(VOID) //
// VOID WATCHDOG_CLEAR(VOID) //
//*****************************************************************************************************//
.PUBLIC _IO_INIT;
.PUBLIC _WATCHDOG_CLEAR;
.PUBLIC _IRQ3;
.PUBLIC _IRQ4;
.DEFINE P_IOA_Data 0x7000; // Write Data into data register and read from IOA pad
.DEFINE P_IOA_Buffer 0x7001; // Write Data into buffer register and read from buffer register
.DEFINE P_IOA_Dir 0x7002; // Direction vector for IOA
.DEFINE P_IOA_Attrib 0x7003; // Attribute vector for IOA
.DEFINE P_IOA_Latch 0x7004; // Latch PortA data for key change wake-up
.DEFINE P_IOB_Data 0x7005; // Write Data into the data register and read from IOB pad
.DEFINE P_IOB_Buffer 0x7006; // Write Data into buffer register and read from buffer register
.DEFINE P_IOB_Dir 0x7007; // Direction vector for IOB
.DEFINE P_IOB_Attrib 0x7008; // Attribute vector for IOB
.DEFINE P_Watchdog_Clear 0x7012; // Watchdog Reset
.DEFINE P_INT_CTRL 0x7010;
.DEFINE P_INT_CLEAR 0x7011;
.EXTERNAL _SET_ADDR;
.EXTERNAL _READ_DATA;
.EXTERNAL _Key;
.EXTERNAL _Time;
.CODE
_IO_INIT:.PROC
PUSH R1 TO [SP];
//A口高八位同向输出(初值低电平),低八位悬浮输入。
R1=0xFF00;
[P_IOA_Dir]=R1;
R1=0xFFFF;
[P_IOA_Attrib]=R1;
R1=0x0000;
[P_IOA_Data]=R1;
//B口同向输出;
R1=0xFFF3;
[P_IOB_Dir]=R1;
R1=0xFFFF;
[P_IOB_Attrib]=R1;
R1=0xFFEF;
[P_IOB_Data]=R1;
int off
R1 = 0x0110;
[P_INT_CTRL] = r1;
int irq;
POP R1 FROM [SP];
RETF;
.ENDP
_WATCHDOG_CLEAR:.PROC
PUSH R1 TO [SP];
R1=0x0001;
[P_Watchdog_Clear]=R1;
POP R1 FROM [SP];
RETF;
.ENDP;
.TEXT
_IRQ3:
PUSH R1 TO [SP]; //压栈保护
R1 = [P_INT_CTRL];
test R1,0x0100 //比较是否为IRQ3_EXT1
jnz L_IRQ3_Ext1 //是,则转至对应程序段;
[P_INT_CLEAR] = r1
pop R1,R1 from [sp]
reti;
L_IRQ3_Ext1:
R1=0x0000;
PUSH R1,R1 TO [SP];
CALL _SET_ADDR;
POP R1,R1 FROM [SP];
CALL _READ_DATA;
[_Key]=R1;
R1 = 0x0100
[P_INT_CLEAR] = R1
POP R1 FROM [sp]
RETI;
_IRQ4:
push R1 to [sp] //压栈保护
r1 = [P_INT_CTRL];
test r1,0x0010 //比较是否为IRQ3_EXT1
jnz L_IRQ4 //是,则转至对应程序段;
[P_INT_CLEAR] = r1
pop R1 from [sp]
reti
L_IRQ4:
R1=[_Time];
R1+=1;
[_Time]=R1;
R1=0x0010
[P_INT_CLEAR] = r1
pop R1 from [sp]
RETI;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -