📄 key.lst
字号:
< .EXTERNAL F_SP_Write_INT_Status; // for further use
< .EXTERNAL F_SP_Set_INT_Vector; // for further use
< .EXTERNAL F_SP_Clear_INT_Vector; // for further use
<
< .EXTERNAL F_SP_Send_Out; //
< .EXTERNAL F_SP_Send_DAC1; //
< .EXTERNAL F_SP_Send_DAC2; //
< .EXTERNAL F_SP_Send_Two_DAC; //
< .EXTERNAL F_SP_Init_HW; //
<
< .EXTERNAL R_InterruptStatus;
<
<
< .EXTERNAL F_SP_RampUpDAC1;
< .EXTERNAL F_SP_RampDnDAC1;
< .EXTERNAL F_SP_RampUpDAC2;
< .EXTERNAL F_SP_RampDnDAC2;
<
< .EXTERNAL F_SP_InitQueue;
< .EXTERNAL F_SP_ReadQueue;
< .EXTERNAL F_SP_WriteQueue;
< .EXTERNAL F_SP_TestQueue;
<
<
<
< .EXTERNAL F_SP_Get_ADC
<
< .EXTERNAL F_SP_Set_P_TimerA_Ctrl
< .EXTERNAL F_SP_Set_P_TimerA_Data
< .EXTERNAL F_SP_Set_P_TimerB_Ctrl
< .EXTERNAL F_SP_Set_P_TimerB_Data
< .EXTERNAL F_SP_Set_P_INT_Ctrl
< .EXTERNAL F_SP_Set_P_INT_Clear
< .EXTERNAL F_SP_Set_P_SystemClock
< .EXTERNAL F_SP_Set_P_DAC_Ctrl
< .EXTERNAL F_SP_Set_P_ADC_Ctrl
<
<
<
< //--------------------------------------------
< SACM_MACRO1: .MACRO
<
< .ENDM
<
< SACM_MACRO2: .MACRO
<
< .ENDM
<
<
<
<
< //.define PC_Play_Enable_A2000 1 // Enable the PC-Play function for SACM-A2000 module
< //.define PC_Play_Enable_S480 1 // Enable the PC-Play function for SACM-S480 module
< //.define PC_Play_Enable_S240 1 // Enable the PC-Play function for SACM-S240 module
< //.define PC_Play_Enable_MS01 1 // Enable the PC-Play function for SACM-MS01 module
<
<
<
< //========================================================================================
< // End of hardware.inc
< //========================================================================================
.PUBLIC F_Key_Scan_Initial;
.PUBLIC _Key_Scan_ServiceLoop;
.PUBLIC F_Key_Scan_ServiceLoop;
//.PUBLIC F_Key_Scan_ServiceLoop_2;
.PUBLIC F_Key_DebounceCnt_Down;
.PUBLIC _SP_GetCh;
.PUBLIC F_SP_GetCh;
.PUBLIC R_KeyStrobe;
//////////////////////////////////////////////////////////////////
// RAM Define Area
//////////////////////////////////////////////////////////////////
000001DA .RAM
000001DA 00 00 .VAR R_DebounceReg; //for keyboard scan
.DEFINE C_DebounceCnt 0x0005;
000001DB 00 00 .VAR R_DebounceCnt; //for keyboard scan
000001DC 00 00 .VAR R_KeyBuf; //for keyboard scan
000001DD 00 00 .VAR R_KeyStrobe; //for keyboard scan
000095CA .CODE
//////////////////////////////////////////////////////////////////
// Function: Initialization for F_Key_Scan_ServiceLoop
//////////////////////////////////////////////////////////////////
_Key_Scan_ServiceLoop:
F_Key_Scan_Initial:
000095CA 40 92 r1 = 0x0000; //
000095CB 19 D3 DA 01 [R_DebounceReg] = r1; //
000095CD 19 D3 DC 01 [R_KeyBuf] = r1; //
000095CF 19 D3 DD 01 [R_KeyStrobe] = r1; //
000095D1 45 92 r1 = C_DebounceCnt; //
000095D2 19 D3 DB 01 [R_DebounceCnt] = r1; //reset debounce counter
000095D4 90 9A retf;
//////////////////////////////////////////////////////////////////
// Function: Get Key code from key pad(8 x 1 key pad)
// Input: Port IOA b7-b0
// Output: R_KeyStrobe b7-b0
// | | | |
// +Vcc --- x --- x ... x --- x ---
// | | | |
// IOA.7 IOA.0
// Note: 1)link F_DebounceCntDown is necessary
// Destory register: r1, r2
//////////////////////////////////////////////////////////////////
F_Key_Scan_ServiceLoop:
000095D5 11 93 00 70 r1 = [P_IOA_Data]; // get key data from IOA
//r1 = [P_IOB_Data]; // get key data from IOB
000095D7 47 B2 r1 = r1 and 0x7; //
000095D8 12 95 DA 01 r2 = [R_DebounceReg]; //
000095DA 19 D3 DA 01 [R_DebounceReg] = r1; //
000095DC 12 45 DA 01 cmp r2,[R_DebounceReg]; //
000095DE 04 5E je L_KS_StableTwoSample; //
000095DF 45 92 r1 = C_DebounceCnt; //debounce time setting
000095E0 19 D3 DB 01 [R_DebounceCnt] = r1; //
000095E2 90 9A retf; //
L_KS_StableTwoSample:
000095E3 11 93 DB 01 r1 = [R_DebounceCnt]; //
000095E5 01 5E jz L_KS_StableOverDebounce; //
000095E6 90 9A retf;
L_KS_StableOverDebounce:
000095E7 19 D3 DB 01 [R_DebounceCnt] = r1; //
000095E9 12 95 DA 01 r2 = [R_DebounceReg]; //
000095EB 11 93 DC 01 r1 = [R_KeyBuf]; //
000095ED 1A D5 DC 01 [R_KeyBuf] = r2; //
000095EF 47 82 r1 = r1 xor 0x0007; //
000095F0 11 B3 DC 01 r1 = r1 and [R_KeyBuf]; //
000095F2 47 B2 r1 = r1 and 0x0007; //
000095F3 11 A3 DD 01 r1 = r1 or [R_KeyStrobe]; //
000095F5 19 D3 DD 01 [R_KeyStrobe] = r1; //save stable key code to R_KeyStrobe
000095F7 90 9A retf;
//////////////////////////////////////////////////////////////////
// Function: debounce counter down count
//////////////////////////////////////////////////////////////////
F_Key_DebounceCnt_Down:
000095F8 11 93 DB 01 r1 = [R_DebounceCnt]; // Debounce subroutine for F_IO_Key_Scan:
000095FA 03 5E jz L_DebounceCntZero; // stop count if zero
000095FB 41 22 r1 -= 0x0001; //
000095FC 19 D3 DB 01 [R_DebounceCnt] = r1; //
L_DebounceCntZero: //
000095FE 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;
000095FF 11 93 DD 01 r1 = [R_KeyStrobe]; // Get Key code
00009601 40 94 r2 = 0x0000; // Clear KeyStrobe for next key
00009602 1A D5 DD 01 [R_KeyStrobe] = r2; //
//pop BP,BP from [SP];
00009604 90 9A retf;
//========================================================================================
// End of key.asm
//========================================================================================
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -