📄 ps2kb_uart.lis
字号:
.even
0024 _uart_trans_str::
0024 0E940000 xcall push_gset1
0028 A801 movw R20,R16
002A .dbline -1
002A .dbline 75
002A ; }
002A ;
002A ; void uart_trans_str(unsigned char *s)
002A ; {
002A 05C0 xjmp L9
002C L8:
002C .dbline 77
002C .dbline 78
002C FA01 movw R30,R20
002E 0081 ldd R16,z+0
0030 F5DF xcall _uart_transmit
0032 .dbline 79
0032 4F5F subi R20,255 ; offset = 1
0034 5F4F sbci R21,255
0036 .dbline 80
0036 L9:
0036 .dbline 76
0036 ; while(*s)
0036 FA01 movw R30,R20
0038 2080 ldd R2,z+0
003A 2220 tst R2
003C B9F7 brne L8
003E .dbline -2
003E L7:
003E 0E940000 xcall pop_gset1
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbsym r s 20 pc
0044 .dbend
.area vector(rom, abs)
.org 8
0008 0C942200 jmp _int1_scr
.area text(rom, con, rel)
0044 .dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
0044 .dbfunc e int1_scr _int1_scr fV
.even
0044 _int1_scr::
0044 2A92 st -y,R2
0046 8A93 st -y,R24
0048 9A93 st -y,R25
004A 2FB6 in R2,0x3f
004C 2A92 st -y,R2
004E .dbline -1
004E .dbline 84
004E ; {
004E ; uart_transmit(*s);
004E ; s++;
004E ; }
004E ; }
004E ; #pragma interrupt_handler int1_scr:3
004E ; void int1_scr(void)
004E ; {
004E .dbline 85
004E ; step++;
004E 80910100 lds R24,_step
0052 8F5F subi R24,255 ; addi 1
0054 80930100 sts _step,R24
0058 .dbline 87
0058 ;
0058 ; if(step==1)
0058 80910100 lds R24,_step
005C 8130 cpi R24,1
005E 41F4 brne L12
0060 .dbline 88
0060 ; {
0060 .dbline 89
0060 ; if((PIND&0X10)==1)
0060 80B3 in R24,0x10
0062 8071 andi R24,16
0064 8130 cpi R24,1
0066 49F5 brne L13
0068 .dbline 90
0068 ; {
0068 .dbline 91
0068 ; step = 0;
0068 2224 clr R2
006A 20920100 sts _step,R2
006E .dbline 92
006E ; }
006E .dbline 93
006E ; }
006E 25C0 xjmp L13
0070 L12:
0070 .dbline 94
0070 ; else if((step>=2)&&(step<=9))
0070 80910100 lds R24,_step
0074 8230 cpi R24,2
0076 B8F0 brlo L16
0078 89E0 ldi R24,9
007A 20900100 lds R2,_step
007E 8215 cp R24,R2
0080 90F0 brlo L16
0082 .dbline 95
0082 ; {
0082 .dbline 96
0082 ; keycode>>=1;
0082 20900000 lds R2,_keycode
0086 2694 lsr R2
0088 20920000 sts _keycode,R2
008C .dbline 98
008C ;
008C ; if((PIND&0X10)==0)
008C 8499 sbic 0x10,4
008E 05C0 rjmp L18
0090 .dbline 99
0090 ; {
0090 .dbline 100
0090 ; keycode|=0x00;
0090 20900000 lds R2,_keycode
0094 20920000 sts _keycode,R2
0098 .dbline 101
0098 ; }
0098 10C0 xjmp L17
009A L18:
009A .dbline 103
009A ; else
009A ; {
009A .dbline 104
009A ; keycode|=0x80;
009A 80910000 lds R24,_keycode
009E 8068 ori R24,128
00A0 80930000 sts _keycode,R24
00A4 .dbline 105
00A4 ; }
00A4 .dbline 106
00A4 ; }
00A4 0AC0 xjmp L17
00A6 L16:
00A6 .dbline 107
00A6 ; else if(step == 11)
00A6 80910100 lds R24,_step
00AA 8B30 cpi R24,11
00AC 31F4 brne L20
00AE .dbline 108
00AE ; {
00AE .dbline 109
00AE ; flag = 1;
00AE 81E0 ldi R24,1
00B0 80930200 sts _flag,R24
00B4 .dbline 110
00B4 ; step = 0;
00B4 2224 clr R2
00B6 20920100 sts _step,R2
00BA .dbline 111
00BA ; }
00BA L20:
00BA L17:
00BA L13:
00BA .dbline -2
00BA L11:
00BA 2990 ld R2,y+
00BC 2FBE out 0x3f,R2
00BE 9991 ld R25,y+
00C0 8991 ld R24,y+
00C2 2990 ld R2,y+
00C4 .dbline 0 ; func end
00C4 1895 reti
00C6 .dbend
00C6 .dbfunc e Decode _Decode fV
00C6 ; TempCyc -> R22
00C6 ; ScanCode -> R20
.even
00C6 _Decode::
00C6 0E940000 xcall push_gset2
00CA 402F mov R20,R16
00CC .dbline -1
00CC .dbline 115
00CC ; }
00CC ;
00CC ; void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码+shift的断码+G的断码
00CC ; {
00CC .dbline 118
00CC ; unsigned char TempCyc;
00CC ;
00CC ; if (!Key_UP) //当键盘松开时
00CC 20900300 lds R2,_Key_UP
00D0 2220 tst R2
00D2 09F0 breq X2
00D4 6CC0 xjmp L23
00D6 X2:
00D6 .dbline 119
00D6 ; {
00D6 .dbline 120
00D6 ; switch (ScanCode)
00D6 642F mov R22,R20
00D8 7727 clr R23
00DA 6935 cpi R22,89
00DC E0E0 ldi R30,0
00DE 7E07 cpc R23,R30
00E0 B9F0 breq L30
00E2 89E5 ldi R24,89
00E4 90E0 ldi R25,0
00E6 8617 cp R24,R22
00E8 9707 cpc R25,R23
00EA 2CF0 brlt L50
00EC L49:
00EC 6231 cpi R22,18
00EE E0E0 ldi R30,0
00F0 7E07 cpc R23,R30
00F2 51F0 breq L29
00F4 11C0 xjmp L25
00F6 L50:
00F6 603F cpi R22,240
00F8 E0E0 ldi R30,0
00FA 7E07 cpc R23,R30
00FC 09F0 breq L28
00FE 0CC0 xjmp L25
0100 X0:
0100 .dbline 121
0100 ; {
0100 L28:
0100 .dbline 123
0100 ; case 0xF0 : // 当收到0xF0,Key_UP置1表示断码开始
0100 ; Key_UP = 1;
0100 81E0 ldi R24,1
0102 80930300 sts _Key_UP,R24
0106 .dbline 124
0106 ; break;
0106 6BC0 xjmp L24
0108 L29:
0108 .dbline 127
0108 ;
0108 ; case 0x12 : // 左 SHIFT
0108 ; Shift = 1;
0108 81E0 ldi R24,1
010A 80930400 sts _Shift,R24
010E .dbline 128
010E ; break;
010E 67C0 xjmp L24
0110 L30:
0110 .dbline 131
0110 ;
0110 ; case 0x59 : // 右 SHIFT
0110 ; Shift = 1;
0110 81E0 ldi R24,1
0112 80930400 sts _Shift,R24
0116 .dbline 132
0116 ; break;
0116 63C0 xjmp L24
0118 L25:
0118 .dbline 135
0118 ;
0118 ; default:
0118 ; if(!Shift) //如果SHIFT没按下
0118 20900400 lds R2,_Shift
011C 2220 tst R2
011E 21F5 brne L31
0120 .dbline 136
0120 ; {
0120 .dbline 137
0120 6627 clr R22
0122 01C0 xjmp L36
0124 L33:
0124 .dbline 137
0124 L34:
0124 .dbline 137
0124 6395 inc R22
0126 L36:
0126 .dbline 137
0126 ; for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
0126 82E0 ldi R24,2
0128 869F mul R24,R22
012A F001 movw R30,R0
012C 80E0 ldi R24,<_UnShifted
012E 90E0 ldi R25,>_UnShifted
0130 E80F add R30,R24
0132 F91F adc R31,R25
0134 E491 lpm R30,Z
0136 E417 cp R30,R20
0138 11F0 breq L37
013A 6B33 cpi R22,59
013C 98F3 brlo L33
013E L37:
013E .dbline 138
013E ; if (UnShifted[TempCyc][0] == ScanCode)
013E 82E0 ldi R24,2
0140 869F mul R24,R22
0142 F001 movw R30,R0
0144 80E0 ldi R24,<_UnShifted
0146 90E0 ldi R25,>_UnShifted
0148 E80F add R30,R24
014A F91F adc R31,R25
014C E491 lpm R30,Z
014E E417 cp R30,R20
0150 09F0 breq X3
0152 45C0 xjmp L24
0154 X3:
0154 .dbline 139
0154 ; uart_transmit(UnShifted[TempCyc][1]);
0154 82E0 ldi R24,2
0156 869F mul R24,R22
0158 F001 movw R30,R0
015A 80E0 ldi R24,<_UnShifted+1
015C 90E0 ldi R25,>_UnShifted+1
015E E80F add R30,R24
0160 F91F adc R31,R25
0162 0491 lpm R16,Z
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -