📄 ps2.lst
字号:
17A 1FF9 ADC R31,R25
17B 9024 LPM R2,0(Z)
17C 142A CP R2,R10
17D F009 BEQ 0x017F
17E C04A RJMP 0x01C9
(0097) USART_Transmit(UnShifted[TempCyc][1]);
17F E585 LDI R24,0x55
180 E090 LDI R25,0
181 2FE4 MOV R30,R20
182 27FF CLR R31
183 0FEE LSL R30
184 1FFF ROL R31
185 0FE8 ADD R30,R24
186 1FF9 ADC R31,R25
187 9104 LPM R16,0(Z)
188 DF6D RCALL _USART_Transmit
(0098)
(0099) }
189 C03F RJMP 0x01C9
(0100) else //按下SHIFT
(0101) {
(0102) for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
18A 2744 CLR R20
18B C001 RJMP 0x018D
18C 9543 INC R20
18D EC8A LDI R24,0xCA
18E E090 LDI R25,0
18F 2FE4 MOV R30,R20
190 27FF CLR R31
191 0FEE LSL R30
192 1FFF ROL R31
193 0FE8 ADD R30,R24
194 1FF9 ADC R31,R25
195 9024 LPM R2,0(Z)
196 142A CP R2,R10
197 F011 BEQ 0x019A
198 334B CPI R20,0x3B
199 F390 BCS 0x018C
(0103) if (Shifted[TempCyc][0] == ScanCode)
19A EC8A LDI R24,0xCA
19B E090 LDI R25,0
19C 2FE4 MOV R30,R20
19D 27FF CLR R31
19E 0FEE LSL R30
19F 1FFF ROL R31
1A0 0FE8 ADD R30,R24
1A1 1FF9 ADC R31,R25
1A2 9024 LPM R2,0(Z)
1A3 142A CP R2,R10
1A4 F521 BNE 0x01C9
(0104) USART_Transmit(Shifted[TempCyc][1]);
1A5 EC8B LDI R24,0xCB
1A6 E090 LDI R25,0
1A7 2FE4 MOV R30,R20
1A8 27FF CLR R31
1A9 0FEE LSL R30
1AA 1FFF ROL R31
1AB 0FE8 ADD R30,R24
1AC 1FF9 ADC R31,R25
1AD 9104 LPM R16,0(Z)
1AE DF47 RCALL _USART_Transmit
(0105)
(0106) }
(0107)
(0108) break;
(0109) }
(0110) }
1AF C019 RJMP 0x01C9
(0111) else
(0112) {
(0113) Key_UP = 0;
1B0 2422 CLR R2
1B1 9220 0061 STS PS2.C:Key_UP,R2
(0114) switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
1B3 2D4A MOV R20,R10
1B4 2755 CLR R21
1B5 3142 CPI R20,0x12
1B6 E0E0 LDI R30,0
1B7 075E CPC R21,R30
1B8 F049 BEQ 0x01C2
1B9 3142 CPI R20,0x12
1BA E0E0 LDI R30,0
1BB 075E CPC R21,R30
1BC F064 BLT 0x01C9
1BD 3549 CPI R20,0x59
1BE E0E0 LDI R30,0
1BF 075E CPC R21,R30
1C0 F029 BEQ 0x01C6
1C1 C007 RJMP 0x01C9
(0115) {
(0116) case 0x12 : // 左 SHIFT
(0117) Shift = 0;
1C2 2422 CLR R2
1C3 9220 0062 STS PS2.C:Shift,R2
(0118) break;
1C5 C003 RJMP 0x01C9
(0119)
(0120) case 0x59 : // 右 SHIFT
(0121) Shift = 0;
1C6 2422 CLR R2
1C7 9220 0062 STS PS2.C:Shift,R2
(0122) break;
(0123) }
(0124) }
(0125) BF = 0; //标识字符处理完了
1C9 2422 CLR R2
1CA 9220 0063 STS PS2.C:BF,R2
1CC 940C 0257 JMP pop_xgset300C
(0126) }
(0127)
(0128)
(0129) void main()
(0130) {
(0131) PORTD = PORTD | 0x18; //设置为上拉模式
_main:
1CE B382 IN R24,0x12
1CF 6188 ORI R24,0x18
1D0 BB82 OUT 0x12,R24
(0132) DDRD = DDRD & 0xE7; //设置为输入模式
1D1 B381 IN R24,0x11
1D2 7E87 ANDI R24,0xE7
1D3 BB81 OUT 0x11,R24
(0133) uart0_init(9600);
1D4 E800 LDI R16,0x80
1D5 E215 LDI R17,0x25
1D6 DEEE RCALL _uart0_init
(0134) MCUCR = MCUCR & 0xf3; //外部中断1设置为低电平触发
1D7 B785 IN R24,0x35
1D8 7F83 ANDI R24,0xF3
1D9 BF85 OUT 0x35,R24
(0135) GICR = (1<<INT1); //外部中断0,1的使能
1DA E880 LDI R24,0x80
1DB BF8B OUT 0x3B,R24
(0136) SEI();
1DC 9478 BSET 7
(0137) do
(0138) {
(0139) if (BF)
1DD 9020 0063 LDS R2,PS2.C:BF
1DF 2022 TST R2
1E0 F021 BEQ 0x01E5
(0140) Decode(KeyV);
1E1 9100 0064 LDS R16,PS2.C:KeyV
1E3 DF52 RCALL _Decode
1E4 C001 RJMP 0x01E6
(0141) else
(0142) SEI();; //开中断
1E5 9478 BSET 7
(0143) }
(0144) while(1)
FILE: <library>
1E6 CFF6 RJMP 0x01DD
1E7 9508 RET
div32u:
1E8 94E8 BCLR 6
1E9 C001 RJMP 0x01EB
mod32u:
1EA 9468 BSET 6
1EB D030 RCALL long_div_prolog
1EC 24CC CLR R12
1ED C009 RJMP 0x01F7
div32s:
1EE 94E8 BCLR 6
1EF C001 RJMP 0x01F1
mod32s:
1F0 9468 BSET 6
1F1 D02A RCALL long_div_prolog
1F2 FD37 SBRC R19,7
1F3 940E 026A CALL neg32
1F5 FDB7 SBRC R27,7
1F6 D052 RCALL neg_R24_R27
1F7 2477 CLR R7
1F8 2488 CLR R8
1F9 2499 CLR R9
1FA 24AA CLR R10
1FB 24BB CLR R11
1FC D042 RCALL tst_R16_R19
1FD F0C1 BEQ 0x0216
1FE D045 RCALL tst_R24_R27
1FF F0B1 BEQ 0x0216
200 E2E8 LDI R30,0x28
201 0F00 LSL R16
202 1F11 ROL R17
203 1F22 ROL R18
204 1F33 ROL R19
205 1C77 ROL R7
206 1C88 ROL R8
207 1C99 ROL R9
208 1CAA ROL R10
209 1CBB ROL R11
20A 1688 CP R8,R24
20B 0699 CPC R9,R25
20C 06AA CPC R10,R26
20D 06BB CPC R11,R27
20E F028 BCS 0x0214
20F 1A88 SUB R8,R24
210 0A99 SBC R9,R25
211 0AAA SBC R10,R26
212 0ABB SBC R11,R27
213 9503 INC R16
214 95EA DEC R30
215 F759 BNE 0x0201
216 F426 BRTC 0x021B
217 2D08 MOV R16,R8
218 2D19 MOV R17,R9
219 2D2A MOV R18,R10
21A 2D3B MOV R19,R11
21B C013 RJMP long_div_epilog
long_div_prolog:
21C 927A ST R7,-Y
21D 928A ST R8,-Y
21E 929A ST R9,-Y
21F 92AA ST R10,-Y
220 92BA ST R11,-Y
221 92CA ST R12,-Y
222 93EA ST R30,-Y
223 938A ST R24,-Y
224 939A ST R25,-Y
225 93AA ST R26,-Y
226 93BA ST R27,-Y
227 858B LDD R24,Y+11
228 859C LDD R25,Y+12
229 85AD LDD R26,Y+13
22A 85BE LDD R27,Y+14
22B 2EC3 MOV R12,R19
22C F00E BRTS 0x022E
22D 26CB EOR R12,R27
22E 9508 RET
long_div_epilog:
22F FCC7 SBRC R12,7
230 940E 026A CALL neg32
232 91B9 LD R27,Y+
233 91A9 LD R26,Y+
234 9199 LD R25,Y+
235 9189 LD R24,Y+
236 91E9 LD R30,Y+
237 90C9 LD R12,Y+
238 90B9 LD R11,Y+
239 90A9 LD R10,Y+
23A 9099 LD R9,Y+
23B 9089 LD R8,Y+
23C 9079 LD R7,Y+
23D 9624 ADIW R28,4
23E 9508 RET
tst_R16_R19:
23F 2FE0 MOV R30,R16
240 2BE1 OR R30,R17
241 2BE2 OR R30,R18
242 2BE3 OR R30,R19
243 9508 RET
tst_R24_R27:
244 2FE8 MOV R30,R24
245 2BE9 OR R30,R25
246 2BEA OR R30,R26
247 2BEB OR R30,R27
248 9508 RET
neg_R24_R27:
249 9580 COM R24
24A 9590 COM R25
24B 95A0 COM R26
24C 95B0 COM R27
24D 5F8F SUBI R24,0xFF
24E 4F9F SBCI R25,0xFF
24F 4FAF SBCI R26,0xFF
250 4FBF SBCI R27,0xFF
251 9508 RET
push_xgset300C:
252 935A ST R21,-Y
253 934A ST R20,-Y
254 92BA ST R11,-Y
255 92AA ST R10,-Y
256 9508 RET
pop_xgset300C:
257 90A9 LD R10,Y+
258 90B9 LD R11,Y+
259 9149 LD R20,Y+
25A 9159 LD R21,Y+
25B 9508 RET
push_xgsetF00C:
25C 937A ST R23,-Y
25D 936A ST R22,-Y
25E 935A ST R21,-Y
25F 934A ST R20,-Y
260 92BA ST R11,-Y
261 92AA ST R10,-Y
262 9508 RET
pop_xgsetF00C:
263 90A9 LD R10,Y+
264 90B9 LD R11,Y+
265 9149 LD R20,Y+
266 9159 LD R21,Y+
267 9169 LD R22,Y+
268 9179 LD R23,Y+
269 9508 RET
neg32:
26A 9500 COM R16
26B 9510 COM R17
26C 9520 COM R18
26D 9530 COM R19
26E 5F0F SUBI R16,0xFF
26F 4F1F SBCI R17,0xFF
270 4F2F SBCI R18,0xFF
271 4F3F SBCI R19,0xFF
272 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -