📄 ps2kb_uart.lis
字号:
0164 5BDF xcall _uart_transmit
0166 .dbline 140
0166 ; }
0166 3BC0 xjmp L24
0168 L31:
0168 .dbline 142
0168 ; else //按下SHIFT
0168 ; {
0168 .dbline 143
0168 6627 clr R22
016A 01C0 xjmp L44
016C L41:
016C .dbline 143
016C L42:
016C .dbline 143
016C 6395 inc R22
016E L44:
016E .dbline 143
016E ; for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
016E 82E0 ldi R24,2
0170 869F mul R24,R22
0172 F001 movw R30,R0
0174 80E0 ldi R24,<_Shifted
0176 90E0 ldi R25,>_Shifted
0178 E80F add R30,R24
017A F91F adc R31,R25
017C E491 lpm R30,Z
017E E417 cp R30,R20
0180 11F0 breq L45
0182 6B33 cpi R22,59
0184 98F3 brlo L41
0186 L45:
0186 .dbline 144
0186 ; if (Shifted[TempCyc][0] == ScanCode)
0186 82E0 ldi R24,2
0188 869F mul R24,R22
018A F001 movw R30,R0
018C 80E0 ldi R24,<_Shifted
018E 90E0 ldi R25,>_Shifted
0190 E80F add R30,R24
0192 F91F adc R31,R25
0194 E491 lpm R30,Z
0196 E417 cp R30,R20
0198 11F5 brne L24
019A .dbline 145
019A ; uart_transmit(Shifted[TempCyc][1]);
019A 82E0 ldi R24,2
019C 869F mul R24,R22
019E F001 movw R30,R0
01A0 80E0 ldi R24,<_Shifted+1
01A2 90E0 ldi R25,>_Shifted+1
01A4 E80F add R30,R24
01A6 F91F adc R31,R25
01A8 0491 lpm R16,Z
01AA 38DF xcall _uart_transmit
01AC .dbline 146
01AC ; }
01AC .dbline 148
01AC ;
01AC ; break;
01AC .dbline 150
01AC ; }
01AC ; }
01AC 18C0 xjmp L24
01AE L23:
01AE .dbline 152
01AE ; else
01AE ; {
01AE .dbline 153
01AE ; Key_UP = 0;
01AE 2224 clr R2
01B0 20920300 sts _Key_UP,R2
01B4 .dbline 154
01B4 ; switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
01B4 5527 clr R21
01B6 4231 cpi R20,18
01B8 E0E0 ldi R30,0
01BA 5E07 cpc R21,R30
01BC 49F0 breq L54
01BE 4231 cpi R20,18
01C0 E0E0 ldi R30,0
01C2 5E07 cpc R21,R30
01C4 64F0 brlt L51
01C6 L56:
01C6 4935 cpi R20,89
01C8 E0E0 ldi R30,0
01CA 5E07 cpc R21,R30
01CC 29F0 breq L55
01CE 07C0 xjmp L51
01D0 X1:
01D0 .dbline 155
01D0 ; {
01D0 L54:
01D0 .dbline 157
01D0 ; case 0x12 : // 左 SHIFT
01D0 ; Shift = 0;
01D0 2224 clr R2
01D2 20920400 sts _Shift,R2
01D6 .dbline 158
01D6 ; break;
01D6 03C0 xjmp L52
01D8 L55:
01D8 .dbline 161
01D8 ;
01D8 ; case 0x59 : // 右 SHIFT
01D8 ; Shift = 0;
01D8 2224 clr R2
01DA 20920400 sts _Shift,R2
01DE .dbline 162
01DE ; break;
01DE L51:
01DE L52:
01DE .dbline 164
01DE ; }
01DE ; }
01DE L24:
01DE .dbline 165
01DE ; BF = 0; //标识字符处理完了
01DE 2224 clr R2
01E0 20920500 sts _BF,R2
01E4 .dbline -2
01E4 L22:
01E4 0E940000 xcall pop_gset2
01E8 .dbline 0 ; func end
01E8 0895 ret
01EA .dbsym r TempCyc 22 c
01EA .dbsym r ScanCode 20 c
01EA .dbend
01EA .dbfunc e main _main fV
01EA ; i -> R20,R21
.even
01EA _main::
01EA .dbline -1
01EA .dbline 170
01EA ; }
01EA ;
01EA ;
01EA ; void main(void)
01EA ; {
01EA .dbline 172
01EA ; unsigned int i;
01EA ; CLI(); //disable all interrupts
01EA F894 cli
01EC .dbline 173
01EC ; port_init();
01EC 09DF xcall _port_init
01EE .dbline 174
01EE ; UART_init();
01EE 0DDF xcall _UART_init
01F0 .dbline 175
01F0 ; MCUCR = 0x08;
01F0 88E0 ldi R24,8
01F2 85BF out 0x35,R24
01F4 .dbline 176
01F4 ; GICR = 0x80;
01F4 80E8 ldi R24,128
01F6 8BBF out 0x3b,R24
01F8 .dbline 177
01F8 ; SEI();
01F8 7894 sei
01FA .dbline 178
01FA ; for(i=0;i<60000;i++)//延时
01FA 4427 clr R20
01FC 5527 clr R21
01FE 02C0 xjmp L61
0200 L58:
0200 .dbline 179
0200 L59:
0200 .dbline 178
0200 4F5F subi R20,255 ; offset = 1
0202 5F4F sbci R21,255
0204 L61:
0204 .dbline 178
0204 4036 cpi R20,96
0206 EAEE ldi R30,234
0208 5E07 cpc R21,R30
020A D0F3 brlo L58
020C .dbline 180
020C ; ;
020C ; uart_transmit('\n');
020C 0AE0 ldi R16,10
020E 06DF xcall _uart_transmit
0210 .dbline 181
0210 ; uart_trans_str(" Welcome You!");
0210 00E0 ldi R16,<L62
0212 10E0 ldi R17,>L62
0214 07DF xcall _uart_trans_str
0216 .dbline 182
0216 ; uart_transmit('\n');
0216 0AE0 ldi R16,10
0218 01DF xcall _uart_transmit
021A .dbline 183
021A ; uart_trans_str(" You are the best!");
021A 00E0 ldi R16,<L63
021C 10E0 ldi R17,>L63
021E 02DF xcall _uart_trans_str
0220 .dbline 184
0220 ; uart_transmit('\n');
0220 0AE0 ldi R16,10
0222 FCDE xcall _uart_transmit
0224 .dbline 185
0224 ; uart_trans_str(" EndyLu AVR 2.0");
0224 00E0 ldi R16,<L64
0226 10E0 ldi R17,>L64
0228 FDDE xcall _uart_trans_str
022A .dbline 186
022A ; uart_transmit('\n');
022A 0AE0 ldi R16,10
022C F7DE xcall _uart_transmit
022E .dbline 187
022E ; uart_trans_str(" PS2 Keyboard test program 1.0");
022E 00E0 ldi R16,<L65
0230 10E0 ldi R17,>L65
0232 F8DE xcall _uart_trans_str
0234 .dbline 188
0234 ; uart_transmit('\n');
0234 0AE0 ldi R16,10
0236 F2DE xcall _uart_transmit
0238 .dbline 189
0238 ; uart_trans_str("Please input with keyboard:");
0238 00E0 ldi R16,<L66
023A 10E0 ldi R17,>L66
023C F3DE xcall _uart_trans_str
023E 0CC0 xjmp L68
0240 L67:
0240 .dbline 191
0240 ; while(1)
0240 ; {
0240 .dbline 193
0240 ;
0240 ; if(flag ==1)
0240 80910200 lds R24,_flag
0244 8130 cpi R24,1
0246 41F4 brne L70
0248 .dbline 194
0248 ; {
0248 .dbline 196
0248 ; //uart_transmit(keycode); //发送未解码信息,了解原理时可用
0248 ; Decode(keycode); //键盘解码
0248 00910000 lds R16,_keycode
024C 3CDF xcall _Decode
024E .dbline 198
024E ;
024E ; keycode = 0;
024E 2224 clr R2
0250 20920000 sts _keycode,R2
0254 .dbline 200
0254 ;
0254 ; flag = 0;
0254 20920200 sts _flag,R2
0258 .dbline 201
0258 ; }
0258 L70:
0258 .dbline 202
0258 L68:
0258 .dbline 190
0258 F3CF xjmp L67
025A X4:
025A .dbline -2
025A L57:
025A .dbline 0 ; func end
025A 0895 ret
025C .dbsym r i 20 i
025C .dbend
.area data(ram, con, rel)
0006 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
0006 L66:
0006 .blkb 28
.area idata
0006 506C6561736520696E70757420776974 .byte 'P,'l,'e,'a,'s,'e,32,'i,'n,'p,'u,'t,32,'w,'i,'t
0016 68206B6579626F6172643A00 .byte 'h,32,'k,'e,'y,'b,'o,'a,'r,'d,58,0
.area data(ram, con, rel)
0022 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
0022 L65:
0022 .blkb 31
.area idata
0022 20505332204B6579626F617264207465 .byte 32,'P,'S,50,32,'K,'e,'y,'b,'o,'a,'r,'d,32,'t,'e
0032 73742070726F6772616D20312E3000 .byte 's,'t,32,'p,'r,'o,'g,'r,'a,'m,32,49,46,48,0
.area data(ram, con, rel)
0041 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
0041 L64:
0041 .blkb 18
.area idata
0041 202020456E64794C752041565220322E .byte 32,32,32,'E,'n,'d,'y,'L,'u,32,'A,'V,'R,32,50,46
0051 3000 .byte 48,0
.area data(ram, con, rel)
0053 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
0053 L63:
0053 .blkb 22
.area idata
0053 20202020596F75206172652074686520 .byte 32,32,32,32,'Y,'o,'u,32,'a,'r,'e,32,'t,'h,'e,32
0063 626573742100 .byte 'b,'e,'s,'t,33,0
.area data(ram, con, rel)
0069 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
0069 L62:
0069 .blkb 18
.area idata
0069 202020202057656C636F6D6520596F75 .byte 32,32,32,32,32,'W,'e,'l,'c,'o,'m,'e,32,'Y,'o,'u
0079 2100 .byte 33,0
.area data(ram, con, rel)
007B .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -