📄 keyboard.lis
字号:
01AC ; {
01AC .dbline 139
01AC AA24 clr R10
01AE 01C0 xjmp L51
01B0 L48:
01B0 .dbline 139
01B0 L49:
01B0 .dbline 139
01B0 A394 inc R10
01B2 L51:
01B2 .dbline 139
01B2 ; for(i = 0;shifted[i][0]!=sc && shifted[i][0]; i++);
01B2 82E0 ldi R24,2
01B4 8A9D mul R24,R10
01B6 F001 movw R30,R0
01B8 80E0 ldi R24,<_shifted
01BA 90E0 ldi R25,>_shifted
01BC E80F add R30,R24
01BE F91F adc R31,R25
01C0 2490 lpm R2,Z
01C2 3324 clr R3
01C4 2C14 cp R2,R12
01C6 11F0 breq L52
01C8 2220 tst R2
01CA 91F7 brne L48
01CC L52:
01CC .dbline 140
01CC ; if (shifted[i][0] == sc)
01CC 82E0 ldi R24,2
01CE 8A9D mul R24,R10
01D0 F001 movw R30,R0
01D2 80E0 ldi R24,<_shifted
01D4 90E0 ldi R25,>_shifted
01D6 E80F add R30,R24
01D8 F91F adc R31,R25
01DA E491 lpm R30,Z
01DC EC15 cp R30,R12
01DE 49F4 brne L53
01E0 .dbline 141
01E0 ; {
01E0 .dbline 142
01E0 ; put_kbbuff(shifted[i][1]);
01E0 82E0 ldi R24,2
01E2 8A9D mul R24,R10
01E4 F001 movw R30,R0
01E6 80E0 ldi R24,<_shifted+1
01E8 90E0 ldi R25,>_shifted+1
01EA E80F add R30,R24
01EC F91F adc R31,R25
01EE 0491 lpm R16,Z
01F0 07DF xcall _put_kbbuff
01F2 .dbline 143
01F2 ; }
01F2 L53:
01F2 .dbline 144
01F2 ; }
01F2 L39:
01F2 .dbline 145
01F2 ; }
01F2 .dbline 146
01F2 ; }
01F2 .dbline -2
01F2 .dbline 147
01F2 ; }
01F2 L19:
01F2 0E940000 xcall pop_gset5x
01F6 .dbline 0 ; func end
01F6 0895 ret
01F8 .dbsym r i 10 c
01F8 .dbsym r sc 12 c
01F8 .dbend
.area vector(rom, abs)
.org 8
0008 0C94FC00 jmp _int1_isr
.area text(rom, con, rel)
01F8 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
.area bss(ram, con, rel)
0003 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0003 L58:
0003 .blkb 1
.area text(rom, con, rel)
01F8 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
01F8 .dbfunc e int1_isr _int1_isr fV
01F8 .dbsym s data L58 c
.even
01F8 _int1_isr::
01F8 0E940000 xcall push_lset
01FC 0E940000 xcall push_gset3x
0200 .dbline -1
0200 .dbline 151
0200 ; #pragma interrupt_handler int1_isr:iv_INT1
0200 ; //键盘数据读取中断程序
0200 ; void int1_isr(void)
0200 ; {
0200 .dbline 153
0200 ; static unsigned char data;
0200 ; switch (bitcount)
0200 A0904400 lds R10,_bitcount
0204 BB24 clr R11
0206 C501 movw R24,R10
0208 8130 cpi R24,1
020A E0E0 ldi R30,0
020C 9E07 cpc R25,R30
020E E9F0 breq L66
0210 8230 cpi R24,2
0212 E0E0 ldi R30,0
0214 9E07 cpc R25,R30
0216 99F0 breq L65
0218 8130 cpi R24,1
021A E0E0 ldi R30,0
021C 9E07 cpc R25,R30
021E 3CF1 brlt L59
0220 L71:
0220 C501 movw R24,R10
0222 8B30 cpi R24,11
0224 E0E0 ldi R30,0
0226 9E07 cpc R25,R30
0228 09F0 breq L62
022A 21C0 xjmp L59
022C X4:
022C .dbline 154
022C ; {
022C L62:
022C .dbline 155
022C ; case 11:{
022C .dbline 156
022C ; if ((PIN_KB&(1<<DATAPIN))!=0)
022C 829B sbis 0x10,2
022E 01C0 rjmp L63
0230 .dbline 157
0230 ; return;
0230 2EC0 xjmp L57
0232 L63:
0232 .dbline 159
0232 ; else
0232 ; bitcount--;
0232 80914400 lds R24,_bitcount
0236 8150 subi R24,1
0238 80934400 sts _bitcount,R24
023C .dbline 160
023C ; break;}
023C 28C0 xjmp L60
023E L65:
023E .dbline 161
023E ; case 2:{
023E .dbline 162
023E ; bitcount--;
023E 80914400 lds R24,_bitcount
0242 8150 subi R24,1
0244 80934400 sts _bitcount,R24
0248 .dbline 163
0248 ; break;}
0248 22C0 xjmp L60
024A L66:
024A .dbline 164
024A ; case 1:{
024A .dbline 165
024A ; bitcount--;
024A 80914400 lds R24,_bitcount
024E 8150 subi R24,1
0250 80934400 sts _bitcount,R24
0254 .dbline 166
0254 ; if ((PIN_KB&(1<<DATAPIN))==0)
0254 8299 sbic 0x10,2
0256 04C0 rjmp L67
0258 .dbline 167
0258 ; {
0258 .dbline 168
0258 ; bitcount=11;
0258 8BE0 ldi R24,11
025A 80934400 sts _bitcount,R24
025E .dbline 169
025E ; return;
025E 17C0 xjmp L57
0260 L67:
0260 .dbline 172
0260 ; }
0260 ; else
0260 ; {
0260 .dbline 173
0260 ; bitcount=11;
0260 8BE0 ldi R24,11
0262 80934400 sts _bitcount,R24
0266 .dbline 174
0266 ; decode(data);
0266 00910300 lds R16,L58
026A 2DDF xcall _decode
026C .dbline 175
026C ; }
026C .dbline 176
026C ; break;}
026C 10C0 xjmp L60
026E L59:
026E .dbline 177
026E ; default:{
026E .dbline 178
026E ; data = (data >> 1);
026E 20900300 lds R2,L58
0272 2694 lsr R2
0274 20920300 sts L58,R2
0278 .dbline 179
0278 ; if((PIN_KB&(1<<DATAPIN))!=0)
0278 829B sbis 0x10,2
027A 04C0 rjmp L69
027C .dbline 180
027C ; data|=0x80;
027C 822D mov R24,R2
027E 8068 ori R24,128
0280 80930300 sts L58,R24
0284 L69:
0284 .dbline 181
0284 80914400 lds R24,_bitcount
0288 8150 subi R24,1
028A 80934400 sts _bitcount,R24
028E .dbline 182
028E .dbline 183
028E L60:
028E .dbline -2
028E .dbline 184
028E ; bitcount--;
028E ; }
028E ; }
028E ; }
028E L57:
028E 0E940000 xcall pop_gset3x
0292 0E940000 xcall pop_lset
0296 .dbline 0 ; func end
0296 1895 reti
0298 .dbend
0298 .dbfunc e main _main fV
0298 ; key -> R10
.even
0298 _main::
0298 .dbline -1
0298 .dbline 187
0298 ; //PC键盘演示程序,SHIFT键和按键同时按下时为大写
0298 ; void main()
0298 ; {
0298 .dbline 190
0298 ; unsigned char key;
0298 ;
0298 ; uart_init();
0298 E3DE xcall _uart_init
029A .dbline 191
029A ; init_kb();
029A 06DF xcall _init_kb
029C .dbline 192
029C ; puts("双龙电子PC键盘演示程序:");
029C 00E0 ldi R16,<L73
029E 10E0 ldi R17,>L73
02A0 ECDE xcall _puts
02A2 .dbline 193
02A2 ; putchar(0x0d);
02A2 0DE0 ldi R16,13
02A4 E6DE xcall _putchar
02A6 .dbline 194
02A6 ; putchar(0x0d);
02A6 0DE0 ldi R16,13
02A8 E4DE xcall _putchar
02AA 0DC0 xjmp L75
02AC L74:
02AC .dbline 196
02AC ; while(1)
02AC ; {
02AC .dbline 198
02AC ;
02AC ; key=get_char();
02AC BDDE xcall _get_char
02AE A02E mov R10,R16
02B0 .dbline 199
02B0 ; if (key!=0)
02B0 0023 tst R16
02B2 49F0 breq L77
02B4 .dbline 200
02B4 ; {
02B4 .dbline 201
02B4 ; if (key==0x0d)
02B4 0D30 cpi R16,13
02B6 29F4 brne L79
02B8 .dbline 202
02B8 ; {
02B8 .dbline 203
02B8 ; putchar('\n');
02B8 0AE0 ldi R16,10
02BA DBDE xcall _putchar
02BC .dbline 204
02BC ; putchar(key);
02BC 0A2D mov R16,R10
02BE D9DE xcall _putchar
02C0 .dbline 205
02C0 ; }
02C0 02C0 xjmp L80
02C2 L79:
02C2 .dbline 207
02C2 ; else
02C2 ; putchar(key);
02C2 0A2D mov R16,R10
02C4 D6DE xcall _putchar
02C6 L80:
02C6 .dbline 208
02C6 ; }
02C6 L77:
02C6 .dbline 209
02C6 L75:
02C6 .dbline 195
02C6 F2CF xjmp L74
02C8 X5:
02C8 .dbline -2
02C8 .dbline 210
02C8 ; }
02C8 ; }
02C8 L72:
02C8 .dbline 0 ; func end
02C8 0895 ret
02CA .dbsym r key 10 c
02CA .dbend
.area bss(ram, con, rel)
0004 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\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
.area data(ram, con, rel)
0002 .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
0002 L73:
0002 .blkb 24
.area idata
0002 CBABC1FAB5E7D7D35043BCFCC5CCD1DD .byte 203,171,193,250,181,231,215,211,'P,'C,188,252,197,204,209,221
0012 CABEB3CCD0F23A00 .byte 202,190,179,204,208,242,58,0
.area data(ram, con, rel)
001A .dbfile F:\李鹏飞\sl-avrad-m16\键盘演示程序\Keyboard.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -