📄 sp_lib.lst
字号:
F_Key_Scan_ServiceLoop_2:
00000031 11 93 01 70 r1 = [P_IOA_Buffer]; // PortA.7 low(scan line +Vcc)
00000033 09 B3 7F FF r1 &= 0xFF7F;
00000035 19 D3 01 70 [P_IOA_Buffer] = r1;
00000037 11 93 00 70 r1 = [P_IOA_Data]; // get key data from IOA
//r1 = [P_IOB_Data]; // get key data from IOB
00000039 4F B2 r1 &= 0x000F; //
0000003A 01 95 r2 = r1; // key from +Vcc
0000003B 0A 87 FF FF r3 = r2 xor 0xffff; // Be a +Vcc mask
// delay here
0000003D 00 EE nop;
0000003E 00 EE nop;
0000003F 00 EE nop;
00000040 11 93 01 70 r1 = [P_IOA_Buffer]; // PortA.7 high(scan line)
00000042 09 A3 80 00 r1 |= 0x0080; //
00000044 19 D3 01 70 [P_IOA_Buffer] = r1; //
00000046 11 93 00 70 r1 = [P_IOA_Data]; //
//r1 = [P_IOB_Data]; // get key data from IOB
00000048 4F B2 r1 &= 0x000F; //
00000049 02 83 r1 ^= r2; // possible bits by scan line
0000004A 03 B3 r1 &= r3; // do +Vcc mask
0000004B 59 93 r1 = r1 lsl 4; //
0000004C 02 A3 r1 |= r2; //
//r2 = r2 lsl 4; //
//r1 |= r2; //
0000004D 09 B3 FF 00 r1 = r1 and 0xFF; // mask bit[0..7]
0000004F 12 95 00 00 r2 = [R_DebounceReg]; //
00000051 19 D3 00 00 [R_DebounceReg] = r1; //
00000053 12 45 00 00 cmp r2,[R_DebounceReg]; //
00000055 04 5E je L_KS_StableTwoSample_2; //
00000056 48 92 r1 = C_DebounceCnt; //debounce time setting
00000057 19 D3 01 00 [R_DebounceCnt] = r1; //
00000059 90 9A retf; //
L_KS_StableTwoSample_2:
0000005A 11 93 01 00 r1 = [R_DebounceCnt]; //
0000005C 01 5E jz L_KS_StableOverDebounce_2; //
0000005D 90 9A retf;
L_KS_StableOverDebounce_2:
0000005E 19 D3 01 00 [R_DebounceCnt] = r1; //
00000060 12 95 00 00 r2 = [R_DebounceReg]; //
00000062 11 93 02 00 r1 = [R_KeyBuf]; //
00000064 1A D5 02 00 [R_KeyBuf] = r2; //
00000066 09 83 FF 00 r1 = r1 xor 0x00ff; //
00000068 11 B3 02 00 r1 = r1 and [R_KeyBuf]; //
0000006A 09 B3 FF 00 r1 = r1 and 0x00ff; //
0000006C 11 A3 03 00 r1 = r1 or [R_KeyStrobe]; //
0000006E 19 D3 03 00 [R_KeyStrobe] = r1; //save stable key code to R_KeyStrobe
00000070 90 9A retf;
//////////////////////////////////////////////////////////////////
// Function: debounce counter down count
//////////////////////////////////////////////////////////////////
F_Key_DebounceCnt_Down:
00000071 11 93 01 00 r1 = [R_DebounceCnt]; // Debounce subroutine for F_IO_Key_Scan:
00000073 03 5E jz L_DebounceCntZero; // stop count if zero
00000074 41 22 r1 -= 0x0001; //
00000075 19 D3 01 00 [R_DebounceCnt] = r1; //
L_DebounceCntZero: //
00000077 90 9A retf; //
//****************************************************************
// Function: Get Keycode for I/O Port
// Destory register: r1, r2
//****************************************************************
_SP_GetCh:
F_SP_GetCh:
//push BP,BP to [SP];
//BP = SP + 1;
00000078 11 93 03 00 r1 = [R_KeyStrobe]; // Get Key code
0000007A 40 94 r2 = 0x0000; // Clear KeyStrobe for next key
0000007B 1A D5 03 00 [R_KeyStrobe] = r2; //
//pop BP,BP from [SP];
0000007D 90 9A retf;
//////////////////////////////////////////////////////////////////
// I/O APIs
//////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------
//-- Procedure: _SP_Init_IOA
//-- Syntax : SP_Init_IOA(Dir,Data,Attrib)
//-- Description: Initialize IOA setting
//-- Parameter:
//-- Dir --> P_IOA_Dir,
//-- Data --> P_IOA_Data,
//-- Attrib --> P_IOA_Attrib
//-- Return:
//-- None
//--------------------------------------------------------------------
_SP_Init_IOA: .PROC
0000007E 88 DA PUSH BP,BP TO [SP];
0000007F 08 0B 01 00 BP = SP + 1;
00000081 88 D2 PUSH R1,R1 TO [SP];
00000082 03 92 R1 = [BP+3]; // Port direction
00000083 19 D3 02 70 [P_IOA_Dir] = R1;
00000085 04 92 R1 = [BP+4];
00000086 19 D3 00 70 [P_IOA_Data] = R1;
00000088 05 92 R1 = [BP+5];
00000089 19 D3 03 70 [P_IOA_Attrib] = R1;
0000008B 88 90 POP R1,R1 FROM [SP];
0000008C 88 98 POP BP,BP FROM [SP];
0000008D 90 9A RETF;
.ENDP
//////////////////////////////////////////////////////////////////
// SP_Inti_IOB
//////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------
//-- Procedure: _SP_Init_IOB
//-- Syntax : SP_Init_IOB(Dir,Data,Attrib)
//-- Description: Initialize IOB setting
//-- Parameter:
//-- Dir --> P_IOB_Dir,
//-- Data --> P_IOB_Data,
//-- Attrib --> P_IOB_Attrib
//-- Return:
//-- None
//--------------------------------------------------------------------
_SP_Init_IOB: .PROC
0000008E 88 DA PUSH BP,BP TO [SP];
0000008F 08 0B 01 00 BP = SP + 1;
00000091 88 D2 PUSH R1,R1 TO [SP];
00000092 03 92 R1 = [BP+3]; // Port direction
00000093 19 D3 07 70 [P_IOB_Dir] = R1;
00000095 04 92 R1 = [BP+4];
00000096 19 D3 05 70 [P_IOB_Data] = R1;
00000098 05 92 R1 = [BP+5];
00000099 19 D3 08 70 [P_IOB_Attrib] = R1;
0000009B 88 90 POP R1,R1 FROM [SP];
0000009C 88 98 POP BP,BP FROM [SP];
0000009D 90 9A RETF;
.ENDP
//--------------------------------------------------------------------
//-- Procedure: _SP_Import
//-- Syntax : SP_Import(Port Number,Data Buffer Pointer)
//-- Description: Import number from IO and save to a memory location
//-- Parameter:
//-- Port Number --> P_IOB_Dir,
//-- Data Buffer Pointer --> P_IOB_Data,
//-- Return:
//-- None
//--------------------------------------------------------------------
_SP_Import: .PROC
0000009E 88 DA PUSH BP,BP TO [SP];
0000009F 08 0B 01 00 BP = SP + 1;
000000A1 90 D4 PUSH R1,R2 TO [SP];
000000A2 03 92 R1 = [BP+3]; // Port Number
000000A3 04 94 R2 = [BP+4]; // Data Buffer Pointer
000000A4 C1 92 R1 = [R1] ;
000000A5 C2 D2 [R2] = R1 ;
000000A6 90 90 POP R1,R2 FROM [SP];
000000A7 88 98 POP BP,BP FROM [SP];
000000A8 90 9A RETF;
.ENDP
//--------------------------------------------------------------------
//-- Procedure: _SP_Export
//-- Syntax : SP_Export(Port Number,value)
//-- Description: Export value to I/O
//-- Parameter:
//-- Port Number --> Port_IOA_Data,Port_IOB_Data
//-- value
//-- Return:
//-- None
//--------------------------------------------------------------------
_SP_Export: .PROC
000000A9 88 DA PUSH BP,BP TO [SP];
000000AA 08 0B 01 00 BP = SP + 1;
000000AC 90 D4 PUSH R1,R2 TO [SP];
000000AD 03 92 R1 = [BP+3]; // Port Number
000000AE 04 94 R2 = [BP+4]; // Value
000000AF C1 D4 [R1] = R2 ;
000000B0 90 90 POP R1,R2 FROM [SP];
000000B1 88 98 POP BP,BP FROM [SP];
000000B2 90 9A RETF;
.ENDP
//========================================================================================
// End of sp_lib.asm
//========================================================================================
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -