?? keyboard.lis
字號:
0236 01DF xcall _put_kbbuff
0238 .dbline 142
0238 ; }
0238 .dbline 143
0238 ; }
0238 .dbline 144
0238 36C0 xjmp L26
023A L38:
023A .dbline 144
023A ; } else{ // Scan code mode
023A .dbline 145
023A ; print_hexbyte(sc); // Print scan code
023A 042F mov R16,R20
023C 4ADF xcall _print_hexbyte
023E .dbline 146
023E ; put_kbbuff(' ');
023E 00E2 ldi R16,32
0240 FCDE xcall _put_kbbuff
0242 .dbline 148
0242 ;
0242 ; }
0242 .dbline 149
0242 ; break;
0242 .dbline 151
0242 31C0 xjmp L26
0244 L25:
0244 .dbline 151
0244 ; }
0244 ; } else {
0244 .dbline 152
0244 ; is_up = 0; // Two 0xF0 in a row not allowed
0244 2224 clr R2
0246 20920000 sts L22,R2
024A .dbline 153
024A ; switch (sc)
024A 5527 clr R21
024C 4231 cpi R20,18
024E E0E0 ldi R30,0
0250 5E07 cpc R21,R30
0252 99F0 breq L65
0254 82E1 ldi R24,18
0256 90E0 ldi R25,0
0258 8417 cp R24,R20
025A 9507 cpc R25,R21
025C 4CF0 brlt L74
025E L73:
025E 4530 cpi R20,5
0260 E0E0 ldi R30,0
0262 5E07 cpc R21,R30
0264 91F0 breq L67
0266 4630 cpi R20,6
0268 E0E0 ldi R30,0
026A 5E07 cpc R21,R30
026C E1F0 breq L63
026E 1BC0 xjmp L62
0270 L74:
0270 4935 cpi R20,89
0272 E0E0 ldi R30,0
0274 5E07 cpc R21,R30
0276 29F0 breq L66
0278 16C0 xjmp L62
027A X1:
027A .dbline 154
027A ; {
027A L65:
027A .dbline 156
027A ; case 0x12 : // Left SHIFT
027A ; shift = 0;
027A 2224 clr R2
027C 20920100 sts L23,R2
0280 .dbline 157
0280 ; break;
0280 12C0 xjmp L63
0282 L66:
0282 .dbline 160
0282 ;
0282 ; case 0x59 : // Right SHIFT
0282 ; shift = 0;
0282 2224 clr R2
0284 20920100 sts L23,R2
0288 .dbline 161
0288 ; break;
0288 0EC0 xjmp L63
028A L67:
028A .dbline 164
028A ;
028A ; case 0x05 : // F1
028A ; if(mode == 1)
028A 80910200 lds R24,L24
028E 8130 cpi R24,1
0290 19F4 brne L68
0292 .dbline 165
0292 ; mode = 2;
0292 82E0 ldi R24,2
0294 80930200 sts L24,R24
0298 L68:
0298 .dbline 166
0298 ; if(mode == 3)
0298 80910200 lds R24,L24
029C 8330 cpi R24,3
029E 19F4 brne L63
02A0 .dbline 167
02A0 ; mode = 0;
02A0 2224 clr R2
02A2 20920200 sts L24,R2
02A6 .dbline 168
02A6 ; break;
02A6 .dbline 171
02A6 ; case 0x06 : // F2
02A6 ; // clr();
02A6 ; break;
02A6 L62:
02A6 L63:
02A6 .dbline 174
02A6 L26:
02A6 .dbline -2
02A6 L21:
02A6 0E940000 xcall pop_gset2
02AA .dbline 0 ; func end
02AA 0895 ret
02AC .dbsym r i 22 c
02AC .dbsym r sc 20 c
02AC .dbend
.area vector(rom, abs)
.org 4
0004 0C945601 jmp _int0_isr
.area text(rom, con, rel)
02AC .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
0000 L76:
0000 .blkb 1
.area text(rom, con, rel)
02AC .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
02AC .dbfunc e int0_isr _int0_isr fV
02AC .dbsym s data L76 c
.even
02AC _int0_isr::
02AC 0E940000 xcall push_lset
02B0 .dbline -1
02B0 .dbline 180
02B0 ;
02B0 ; }
02B0 ; }
02B0 ; }
02B0 ;
02B0 ;
02B0 ; #pragma interrupt_handler int0_isr:iv_INT0
02B0 ; void int0_isr(void)
02B0 ; {
02B0 .dbline 184
02B0 ; //external interupt on INT0
02B0 ; static unsigned char data; // Holds the received scan code
02B0 ;
02B0 ; if(bitcount < 11 && bitcount > 2) // Bit 3 to 10 is data. Parity bit,
02B0 80914600 lds R24,_bitcount
02B4 8B30 cpi R24,11
02B6 80F4 brsh L77
02B8 82E0 ldi R24,2
02BA 20904600 lds R2,_bitcount
02BE 8215 cp R24,R2
02C0 58F4 brsh L77
02C2 .dbline 185
02C2 ; { // start and stop bits are ignored.
02C2 .dbline 186
02C2 ; data = (data >> 1);
02C2 20900000 lds R2,L76
02C6 2694 lsr R2
02C8 20920000 sts L76,R2
02CC .dbline 187
02CC ; if(PIND & 8) //first receive lsb
02CC 839B sbis 0x10,3
02CE 04C0 rjmp L79
02D0 .dbline 188
02D0 ; data = data | 0x80; // Store a '1'
02D0 822D mov R24,R2
02D2 8068 ori R24,128
02D4 80930000 sts L76,R24
02D8 L79:
02D8 .dbline 189
02D8 ; }
02D8 L77:
02D8 .dbline 191
02D8 80914600 lds R24,_bitcount
02DC 8150 subi R24,1
02DE 282E mov R2,R24
02E0 20924600 sts _bitcount,R2
02E4 8823 tst R24
02E6 31F4 brne L81
02E8 .dbline 192
02E8 .dbline 193
02E8 00910000 lds R16,L76
02EC 0FDF xcall _decode
02EE .dbline 194
02EE 8BE0 ldi R24,11
02F0 80934600 sts _bitcount,R24
02F4 .dbline 195
02F4 L81:
02F4 .dbline -2
02F4 L75:
02F4 0E940000 xcall pop_lset
02F8 .dbline 0 ; func end
02F8 1895 reti
02FA .dbend
02FA .dbfunc e delay_ms _delay_ms fV
02FA ; i -> R20,R21
02FA ; ms -> R16
.even
02FA _delay_ms::
02FA 0E940000 xcall push_gset1
02FE .dbline -1
02FE .dbline 201
02FE ;
02FE ; if(--bitcount == 0) // All bits received
02FE ; {
02FE ; decode(data);
02FE ; bitcount = 11;
02FE ; }
02FE ; }
02FE ;
02FE ;
02FE ;
02FE ; void delay_ms(unsigned char ms)
02FE ; {
02FE 09C0 xjmp L85
0300 L84:
0300 .dbline 204
0300 43E3 ldi R20,11059
0302 5BE2 ldi R21,43
0304 02C0 xjmp L90
0306 L87:
0306 .dbline 204
0306 L88:
0306 .dbline 204
0306 4150 subi R20,1
0308 5040 sbci R21,0
030A L90:
030A .dbline 204
030A 4427 clr R20
030C 5527 clr R21
030E 2224 clr R2
0310 D1F7 brne L87
0312 L85:
0312 .dbline 203
0312 ; unsigned int i;
0312 ; while(ms--)
0312 202E mov R2,R16
0314 3324 clr R3
0316 0150 subi R16,1
0318 2220 tst R2
031A 91F7 brne L84
031C .dbline -2
031C L83:
031C 0E940000 xcall pop_gset1
0320 .dbline 0 ; func end
0320 0895 ret
0322 .dbsym r i 20 i
0322 .dbsym r ms 16 c
0322 .dbend
0322 .dbfunc e init_devices _init_devices fV
.even
0322 _init_devices::
0322 .dbline -1
0322 .dbline 209
0322 ; for(i=11059;i=0;i--);
0322 ; }
0322 ;
0322 ; //call this routine to initialize all peripherals
0322 ; void init_devices(void)
0322 ; {
0322 .dbline 211
0322 ; //stop errant interrupts until set up
0322 ; CLI(); //disable all interrupts
0322 F894 cli
0324 .dbline 212
0324 ; port_init();
0324 6DDE xcall _port_init
0326 .dbline 213
0326 ; InitKeyBoard();
0326 76DE xcall _InitKeyBoard
0328 .dbline 215
0328 ;
0328 ; MCUCR = 0x02;
0328 82E0 ldi R24,2
032A 85BF out 0x35,R24
032C .dbline 216
032C ; GICR = 0x40;
032C 80E4 ldi R24,64
032E 8BBF out 0x3b,R24
0330 .dbline 217
0330 ; TIMSK = 0x00; //timer interrupt sources
0330 2224 clr R2
0332 29BE out 0x39,R2
0334 .dbline 218
0334 ; SEI(); //re-enable interrupts
0334 7894 sei
0336 .dbline -2
0336 L91:
0336 .dbline 0 ; func end
0336 0895 ret
0338 .dbend
0338 .dbfunc e main _main fV
0338 ; key -> R20
.even
0338 _main::
0338 .dbline -1
0338 .dbline 228
0338 ; //all peripherals are now initialized
0338 ; }
0338 ;
0338 ; //#include <delay.h>
0338 ;
0338 ; //#include <lcd.h>
0338 ;
0338 ;
0338 ; void main(void)
0338 ; {
0338 04C0 xjmp L94
033A L93:
033A .dbline 234
033A .dbline 235
033A A6DE xcall _getchar_kb
033C 402F mov R20,R16
033E .dbline 237
033E 05E0 ldi R16,5
0340 DCDF xcall _delay_ms
0342 .dbline 239
0342 L94:
0342 .dbline 233
0342 FBCF xjmp L93
0344 X7:
0344 .dbline -2
0344 L92:
0344 .dbline 0 ; func end
0344 0895 ret
0346 .dbsym r key 20 c
0346 .dbend
.area bss(ram, con, rel)
0001 .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
0001 _buffcnt::
0001 .blkb 1
0002 .dbsym e buffcnt _buffcnt c
0002 _outpt::
0002 .blkb 2
0004 .dbsym e outpt _outpt pc
0004 _inpt::
0004 .blkb 2
0006 .dbsym e inpt _inpt pc
0006 _kb_buffer::
0006 .blkb 64
0046 .dbsym e kb_buffer _kb_buffer A[64:64]c
0046 _bitcount::
0046 .blkb 1
0047 .dbsym e bitcount _bitcount c
0047 _edge::
0047 .blkb 1
0048 .dbsym e edge _edge c
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -