📄 1.lst
字号:
< .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
< //========================================================================================
.EXTERNAL _Hour;
.EXTERNAL _Min;
.EXTERNAL _Sec;
.EXTERNAL _Flag;
.EXTERNAL _stoptag;
.EXTERNAL _year;
.EXTERNAL _month;
.EXTERNAL _day;
.EXTERNAL _i3;
.EXTERNAL _i5;
.EXTERNAL _keycode
00008725 .data
00008725 EE 00 DE 00 keytable:.dw 0x00ee,0x00de,0x00be,0x007e
BE 00 7E 00
00008729 ED 00 DD 00 .dw 0x00ed,0x00dd,0x00bd,0x007d
BD 00 7D 00
0000872D EB 00 DB 00 .dw 0x00eb,0x00db,0x00bb,0x007b
BB 00 7B 00
00008731 E7 00 D7 00 .dw 0x00e7,0x00d7,0x00b7,0x0077
B7 00 77 00
.PUBLIC _SystemInit
000086EA .code
_SystemInit:
000086EA 09 93 FF 07 r1=0x07ff; //IOB初始化
000086EC 19 D3 07 70 [P_IOB_Dir]=r1;
000086EE 19 D3 08 70 [P_IOB_Attrib]=r1;
000086F0 19 D3 05 70 [P_IOB_Data]=r1;
000086F2 4F 92 R1 = 0x000f; //IOA初始化
000086F3 19 D3 03 70 [P_IOA_Attrib] = R1;
000086F5 19 D3 02 70 [P_IOA_Dir] = R1;
000086F7 09 93 F0 00 r1=0x00f0;
000086F9 19 D3 00 70 [P_IOA_Data] = R1;
000086FB 40 F1 int off
000086FC 09 93 84 00 r1=0x0084; //开IRQ5的2HZ.IRQ3的中断
000086FE 19 D3 10 70 [P_INT_Ctrl]=r1;
00008700 49 F1 IRQ ON;
00008701 98 9A RETI;
00008009 .text
.PUBLIC _IRQ5
_IRQ5:
00008009 A8 DA PUSH R1,R5 TO [SP] //现场保护
0000800A 41 92 R1=0x0001; //清看门狗
0000800B 19 D3 12 70 [P_Watchdog_Clear]=R1;
0000800D 48 92 R1=0x0008; //屏蔽4HZ中断
0000800E 11 C3 10 70 TEST r1,[P_INT_Ctrl];
00008010 13 4E JNZ L_IRQ5_4HZ;
L_IRQ5_2HZ:
00008011 44 92 r1=0x0004
00008012 19 D3 11 70 [P_INT_Clear]=r1
00008014 11 93 17 00 r1=[_Flag]
00008016 40 42 cmp r1,0
00008017 05 5E je loop
00008018 40 92 r1=0
00008019 19 D3 17 00 [_Flag]=r1
0000801B A8 90 pop r1,r5 from [sp]
0000801C 98 9A reti
loop:
0000801D 41 92 r1=1
0000801E 19 D3 14 00 [_i5]=r1
00008020 19 D3 17 00 [_Flag]=r1
00008022 A8 90 pop r1,r5 from [sp]
00008023 98 9A reti
L_IRQ5_4HZ:
00008024 19 D3 11 70 [P_INT_Clear]=r1;
00008026 A8 90 POP R1,R5 FROM [SP];
00008027 98 9A RETI;
.public _IRQ3
_IRQ3:
00008028 41 94 r2=0x0001
00008029 1A D5 12 70 [P_Watchdog_Clear]=r2;
0000802B A0 D8 push r1,r4 to [sp]
0000802C 09 93 00 01 r1=0x0100
0000802E 11 C3 10 70 test r1,[P_INT_Ctrl]
00008030 13 4E jnz L_IRQ3_Ext1
00008031 09 93 00 02 r1=0x0200
00008033 11 C3 10 70 test r1,[P_INT_Ctrl]
00008035 0B 4E jnz L_IRQ3_Ext2
00008036 09 93 80 00 r1=0x0080;
00008038 19 D3 11 70 [P_INT_Clear]=r1
0000803A 40 F0 47 80 call Key_scan
0000803C 41 92 R1=0x0001; //清看门狗
0000803D 19 D3 12 70 [P_Watchdog_Clear]=R1;
0000803F A0 90 POP R1,R4 FROM [SP];
00008040 98 9A RETI;
L_IRQ3_Ext2:
00008041 19 D3 11 70 [P_INT_Clear]=r1
00008043 98 9A reti
L_IRQ3_Ext1:
00008044 19 D3 11 70 [P_INT_Clear]=r1
00008046 98 9A reti
.PUBLIC Key_scan
Key_scan:.proc
// r1=0x0080;
// [P_INT_Clear]=r1;
F_Key_Scan_A4:
00008047 40 98 r4=0x0000;
00008048 4E 94 R2=0x000e; //扫描第一行
00008049 1A D5 00 70 [P_IOA_Data] = R2 ;
0000804B 09 93 F0 00 R1 = 0x00f0;
0000804D 11 B3 00 70 R1& =[P_IOA_Data];
0000804F 09 43 F0 00 CMP R1,0x00f0; //是否该行有键按下
00008051 26 4E JNZ L_make_sure;
F_Key_Scan_A5:
00008052 4D 94 R2=0x000d; //扫描第二行
00008053 1A D5 00 70 [P_IOA_Data] = R2;
00008055 09 93 F0 00 R1 = 0x00f0;
00008057 11 B3 00 70 R1& =[P_IOA_Data];
00008059 09 43 F0 00 CMP R1,0x00f0; //是否该行有键按下
0000805B 1C 4E JNZ L_make_sure;
F_Key_Scan_A6:
0000805C 4B 94 R2=0x000b; //扫描第三行
0000805D 1A D5 00 70 [P_IOA_Data] = R2;
0000805F 09 93 F0 00 R1 = 0x00f0;
00008061 11 B3 00 70 R1& =[P_IOA_Data];
00008063 09 43 F0 00 CMP R1,0x00f0; //是否该行有键按下
00008065 12 4E JNZ L_make_sure;
F_Key_Scan_A7:
00008066 47 94 R2=0x0007; //扫描第四行
00008067 1A D5 00 70 [P_IOA_Data] = R2;
00008069 09 93 F0 00 R1 = 0x00f0;
0000806B 11 B3 00 70 R1& =[P_IOA_Data];
0000806D 09 43 F0 00 CMP R1,0x00f0; //是否该行有键按下
0000806F 08 4E JnZ L_make_sure;
00008070 41 92 R1=0x0001; //清看门狗
00008071 19 D3 12 70 [P_Watchdog_Clear]=R1;
00008073 09 93 F0 00 r1=0x00f0
00008075 19 D3 00 70 [P_IOA_Data]=r1
00008077 90 9A RETF
L_make_sure: // 去抖
00008078 01 97 r3=r1;
00008079 1A D5 00 70 [P_IOA_Data] = R2;
0000807B 09 93 F0 00 R1 = 0x00f0;
0000807D 11 B3 00 70 R1& =[P_IOA_Data];
0000807F 03 43 cmp r1,r3;
00008080 7A 4E jne F_Key_Scan_A4
00008081 41 08 r4+=1;
00008082 0C 49 84 03 cmp r4,900;
00008084 4D 4E jne L_make_sure;
00008085 40 98 r4=0x0000;
00008086 02 A3 r1=r1|r2 ;
00008087 0D 9B 25 87 bp=keytable
00008089 40 94 r2=0
getkeycodeloop:
0000808A 41 04 r2+=1
0000808B D5 96 r3=[bp++]
0000808C 03 43 cmp r1,r3
0000808D 44 4E jne getkeycodeloop;
0000808E 1A D5 16 00 [_keycode]=r2
00008090 41 94 r2=1
00008091 1A D5 15 00 [_i3]=r2
00008093 09 93 F0 00 r1=0x00f0
00008095 19 D3 00 70 [P_IOA_Data]=r1
00008097 90 9A RETF
.endp
0 error(s), 0 warning(s).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -