📄 keyboard.lis
字号:
00A2 90E0 ldi R25,0
00A4 5C01 movw R10,R24
00A6 02C0 rjmp L21
00A8 L20:
00A8 AA24 clr R10
00AA BB24 clr R11
00AC L21:
00AC 6935 cpi R22,89
00AE 19F4 brne L22
00B0 41E0 ldi R20,1
00B2 50E0 ldi R21,0
00B4 02C0 rjmp L23
00B6 L22:
00B6 4427 clr R20
00B8 5527 clr R21
00BA L23:
00BA 1501 movw R2,R10
00BC 242A or R2,R20
00BE 352A or R3,R21
00C0 2220 tst R2
00C2 19F4 brne X0
00C4 3320 tst R3
00C6 09F4 brne X2
00C8 69C0 rjmp L10
00CA X2:
00CA X0:
00CA .dbline 64
00CA 2224 clr R2
00CC 20920000 sts L11,R2
00D0 .dbline 65
00D0 ; return;
00D0 65C0 rjmp L10
00D2 L16:
00D2 .dbline 67
00D2 ; }
00D2 ; switch (sc)
00D2 462F mov R20,R22
00D4 5527 clr R21
00D6 4231 cpi R20,18
00D8 E0E0 ldi R30,0
00DA 5E07 cpc R21,R30
00DC 49F0 breq L27
00DE 4231 cpi R20,18
00E0 E0E0 ldi R30,0
00E2 5E07 cpc R21,R30
00E4 7CF0 brlt L24
00E6 L47:
00E6 4935 cpi R20,89
00E8 E0E0 ldi R30,0
00EA 5E07 cpc R21,R30
00EC 31F0 breq L28
00EE 0AC0 rjmp L24
00F0 X1:
00F0 .dbline 68
00F0 ; {
00F0 L27:
00F0 .dbline 69
00F0 ; case 0x12:{
00F0 .dbline 70
00F0 ; shift=1;
00F0 81E0 ldi R24,1
00F2 80930000 sts L11,R24
00F6 .dbline 71
00F6 ; shiftup=1;
00F6 80930200 sts L13,R24
00FA .dbline 72
00FA ; }
00FA L28:
00FA .dbline 73
00FA ; case 0x59:{
00FA .dbline 74
00FA ; shift=1;
00FA 81E0 ldi R24,1
00FC 80930000 sts L11,R24
0100 .dbline 75
0100 ; shiftup=1;
0100 80930200 sts L13,R24
0104 .dbline 76
0104 ; }
0104 L24:
0104 .dbline 77
0104 ; default:{
0104 .dbline 78
0104 ; if (shift==0)
0104 20900000 lds R2,L11
0108 2220 tst R2
010A 29F5 brne L29
010C .dbline 79
010C ; {
010C .dbline 80
010C 4427 clr R20
010E 01C0 rjmp L34
0110 L31:
0110 .dbline 80
0110 L32:
0110 .dbline 80
0110 4395 inc R20
0112 L34:
0112 .dbline 80
0112 ; for(i = 0;unshifted[i][0]!=sc && unshifted[i][0]; i++);
0112 82E0 ldi R24,2
0114 849F mul R24,R20
0116 F001 movw R30,R0
0118 80E0 ldi R24,<_unshifted
011A 90E0 ldi R25,>_unshifted
011C E80F add R30,R24
011E F91F adc R31,R25
0120 2490 lpm R2,Z
0122 3324 clr R3
0124 2616 cp R2,R22
0126 11F0 breq L35
0128 2220 tst R2
012A 91F7 brne L31
012C L35:
012C .dbline 81
012C ; if (unshifted[i][0] == sc)
012C 82E0 ldi R24,2
012E 849F mul R24,R20
0130 F001 movw R30,R0
0132 80E0 ldi R24,<_unshifted
0134 90E0 ldi R25,>_unshifted
0136 E80F add R30,R24
0138 F91F adc R31,R25
013A E491 lpm R30,Z
013C E617 cp R30,R22
013E 09F0 breq X3
0140 2DC0 rjmp L30
0142 X3:
0142 .dbline 82
0142 ; put_kbbuff(unshifted[i][1]);
0142 82E0 ldi R24,2
0144 849F mul R24,R20
0146 F001 movw R30,R0
0148 80E0 ldi R24,<_unshifted+1
014A 90E0 ldi R25,>_unshifted+1
014C E80F add R30,R24
014E F91F adc R31,R25
0150 0491 lpm R16,Z
0152 56DF rcall _put_kbbuff
0154 .dbline 83
0154 ; }
0154 23C0 rjmp L30
0156 L29:
0156 .dbline 85
0156 ; else
0156 ; {
0156 .dbline 86
0156 4427 clr R20
0158 01C0 rjmp L42
015A L39:
015A .dbline 86
015A L40:
015A .dbline 86
015A 4395 inc R20
015C L42:
015C .dbline 86
015C ; for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
015C 82E0 ldi R24,2
015E 849F mul R24,R20
0160 F001 movw R30,R0
0162 80E0 ldi R24,<_shifted
0164 90E0 ldi R25,>_shifted
0166 E80F add R30,R24
0168 F91F adc R31,R25
016A 2490 lpm R2,Z
016C 3324 clr R3
016E 2616 cp R2,R22
0170 11F0 breq L43
0172 2220 tst R2
0174 91F7 brne L39
0176 L43:
0176 .dbline 87
0176 ; if (shifted[i][0] == sc)
0176 82E0 ldi R24,2
0178 849F mul R24,R20
017A F001 movw R30,R0
017C 80E0 ldi R24,<_shifted
017E 90E0 ldi R25,>_shifted
0180 E80F add R30,R24
0182 F91F adc R31,R25
0184 E491 lpm R30,Z
0186 E617 cp R30,R22
0188 49F4 brne L44
018A .dbline 88
018A ; {
018A .dbline 89
018A ; put_kbbuff(shifted[i][1]);
018A 82E0 ldi R24,2
018C 849F mul R24,R20
018E F001 movw R30,R0
0190 80E0 ldi R24,<_shifted+1
0192 90E0 ldi R25,>_shifted+1
0194 E80F add R30,R24
0196 F91F adc R31,R25
0198 0491 lpm R16,Z
019A 32DF rcall _put_kbbuff
019C .dbline 90
019C ; }
019C L44:
019C .dbline 91
019C ; }
019C L30:
019C .dbline 92
019C ; }
019C .dbline 93
019C ; }
019C .dbline -2
019C .dbline 94
019C ; }
019C L10:
019C 00D0 rcall pop_gset3
019E .dbline 0 ; func end
019E 0895 ret
01A0 .dbsym r i 20 c
01A0 .dbsym r sc 22 c
01A0 .dbend
.area vector(rom, abs)
.org 4
0004 D0C0 rjmp _int1_isr
.area text(rom, con, rel)
01A0 .dbfile C:\mega8\PS2_KEYBOARD\keyboard.c
.area bss(ram, con, rel)
0003 .dbfile C:\mega8\PS2_KEYBOARD\keyboard.c
0003 L49:
0003 .blkb 1
.area text(rom, con, rel)
01A0 .dbfile C:\mega8\PS2_KEYBOARD\keyboard.c
01A0 .dbfunc e int1_isr _int1_isr fV
01A0 .dbsym s data L49 c
.even
01A0 _int1_isr::
01A0 00D0 rcall push_lset
01A2 00D0 rcall push_gset1
01A4 .dbline -1
01A4 .dbline 97
01A4 ; #pragma interrupt_handler int1_isr:iv_INT1
01A4 ; void int1_isr(void)
01A4 ; {
01A4 .dbline 99
01A4 ; static unsigned char data;
01A4 ; switch (bitcount)
01A4 40914400 lds R20,_bitcount
01A8 5527 clr R21
01AA 4130 cpi R20,1
01AC E0E0 ldi R30,0
01AE 5E07 cpc R21,R30
01B0 E1F0 breq L57
01B2 4230 cpi R20,2
01B4 E0E0 ldi R30,0
01B6 5E07 cpc R21,R30
01B8 91F0 breq L56
01BA 4130 cpi R20,1
01BC E0E0 ldi R30,0
01BE 5E07 cpc R21,R30
01C0 34F1 brlt L50
01C2 L62:
01C2 4B30 cpi R20,11
01C4 E0E0 ldi R30,0
01C6 5E07 cpc R21,R30
01C8 09F0 breq L53
01CA 21C0 rjmp L50
01CC X4:
01CC .dbline 100
01CC ; {
01CC L53:
01CC .dbline 101
01CC ; case 11:{
01CC .dbline 102
01CC ; if ((PIN_KB&(1<<DATAPIN))!=0)
01CC 829B sbis 0x10,2
01CE 01C0 rjmp L54
01D0 .dbline 103
01D0 ; return;
01D0 2EC0 rjmp L48
01D2 L54:
01D2 .dbline 105
01D2 ; else
01D2 ; bitcount--;
01D2 80914400 lds R24,_bitcount
01D6 8150 subi R24,1
01D8 80934400 sts _bitcount,R24
01DC .dbline 106
01DC ; break;}
01DC 28C0 rjmp L51
01DE L56:
01DE .dbline 107
01DE ; case 2:{
01DE .dbline 108
01DE ; bitcount--;
01DE 80914400 lds R24,_bitcount
01E2 8150 subi R24,1
01E4 80934400 sts _bitcount,R24
01E8 .dbline 109
01E8 ; break;}
01E8 22C0 rjmp L51
01EA L57:
01EA .dbline 110
01EA ; case 1:{
01EA .dbline 111
01EA ; bitcount--;
01EA 80914400 lds R24,_bitcount
01EE 8150 subi R24,1
01F0 80934400 sts _bitcount,R24
01F4 .dbline 112
01F4 ; if ((PIN_KB&(1<<DATAPIN))==0)
01F4 8299 sbic 0x10,2
01F6 04C0 rjmp L58
01F8 .dbline 113
01F8 ; {
01F8 .dbline 114
01F8 ; bitcount=11;
01F8 8BE0 ldi R24,11
01FA 80934400 sts _bitcount,R24
01FE .dbline 115
01FE ; return;
01FE 17C0 rjmp L48
0200 L58:
0200 .dbline 118
0200 ; }
0200 ; else
0200 ; {
0200 .dbline 119
0200 ; bitcount=11;
0200 8BE0 ldi R24,11
0202 80934400 sts _bitcount,R24
0206 .dbline 120
0206 ; decode(data);
0206 00910300 lds R16,L49
020A 39DF rcall _decode
020C .dbline 121
020C ; }
020C .dbline 122
020C ; break;}
020C 10C0 rjmp L51
020E L50:
020E .dbline 123
020E ; default:{
020E .dbline 124
020E ; data = (data >> 1);
020E 20900300 lds R2,L49
0212 2694 lsr R2
0214 20920300 sts L49,R2
0218 .dbline 125
0218 ; if((PIN_KB&(1<<DATAPIN))!=0)
0218 829B sbis 0x10,2
021A 04C0 rjmp L60
021C .dbline 126
021C ; data|=0x80;
021C 822D mov R24,R2
021E 8068 ori R24,128
0220 80930300 sts L49,R24
0224 L60:
0224 .dbline 127
0224 80914400 lds R24,_bitcount
0228 8150 subi R24,1
022A 80934400 sts _bitcount,R24
022E .dbline 128
022E .dbline 129
022E L51:
022E .dbline -2
022E .dbline 130
022E ; bitcount--;
022E ; }
022E ; }
022E ; }
022E L48:
022E 00D0 rcall pop_gset1
0230 00D0 rcall pop_lset
0232 .dbline 0 ; func end
0232 1895 reti
0234 .dbend
.area bss(ram, con, rel)
0004 .dbfile C:\mega8\PS2_KEYBOARD\keyboard.c
0004 _kb_buffer::
0004 .blkb 64
0044 .dbsym e kb_buffer _kb_buffer A[64:64]c
0044 _bitcount::
0044 .blkb 1
0045 .dbsym e bitcount _bitcount c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -