📄 ps2.lis
字号:
014C FF1F rol R31
014E E80F add R30,R24
0150 F91F adc R31,R25
0152 2490 lpm R2,Z
0154 2A14 cp R2,R10
0156 11F0 breq L31
0158 X12:
0158 4B33 cpi R20,59
015A 90F3 brlo L27
015C X13:
015C L31:
015C .dbline 96
015C ; if (UnShifted[TempCyc][0] == ScanCode)
015C 80E0 ldi R24,<_UnShifted
015E 90E0 ldi R25,>_UnShifted
0160 E42F mov R30,R20
0162 FF27 clr R31
0164 EE0F lsl R30
0166 FF1F rol R31
0168 E80F add R30,R24
016A F91F adc R31,R25
016C 2490 lpm R2,Z
016E 2A14 cp R2,R10
0170 09F0 breq X22
0172 4AC0 xjmp L18
0174 X22:
0174 X14:
0174 .dbline 97
0174 ; USART_Transmit(UnShifted[TempCyc][1]);
0174 80E0 ldi R24,<_UnShifted+1
0176 90E0 ldi R25,>_UnShifted+1
0178 E42F mov R30,R20
017A FF27 clr R31
017C EE0F lsl R30
017E FF1F rol R31
0180 E80F add R30,R24
0182 F91F adc R31,R25
0184 0491 lpm R16,Z
0186 6DDF xcall _USART_Transmit
0188 .dbline 99
0188 ;
0188 ; }
0188 3FC0 xjmp L18
018A L25:
018A .dbline 101
018A ; else //按下SHIFT
018A ; {
018A .dbline 102
018A ; for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
018A 4427 clr R20
018C 01C0 xjmp L38
018E L35:
018E .dbline 102
018E L36:
018E .dbline 102
018E 4395 inc R20
0190 L38:
0190 .dbline 102
0190 80E0 ldi R24,<_Shifted
0192 90E0 ldi R25,>_Shifted
0194 E42F mov R30,R20
0196 FF27 clr R31
0198 EE0F lsl R30
019A FF1F rol R31
019C E80F add R30,R24
019E F91F adc R31,R25
01A0 2490 lpm R2,Z
01A2 2A14 cp R2,R10
01A4 11F0 breq L39
01A6 X15:
01A6 4B33 cpi R20,59
01A8 90F3 brlo L35
01AA X16:
01AA L39:
01AA .dbline 103
01AA ; if (Shifted[TempCyc][0] == ScanCode)
01AA 80E0 ldi R24,<_Shifted
01AC 90E0 ldi R25,>_Shifted
01AE E42F mov R30,R20
01B0 FF27 clr R31
01B2 EE0F lsl R30
01B4 FF1F rol R31
01B6 E80F add R30,R24
01B8 F91F adc R31,R25
01BA 2490 lpm R2,Z
01BC 2A14 cp R2,R10
01BE 21F5 brne L18
01C0 X17:
01C0 .dbline 104
01C0 ; USART_Transmit(Shifted[TempCyc][1]);
01C0 80E0 ldi R24,<_Shifted+1
01C2 90E0 ldi R25,>_Shifted+1
01C4 E42F mov R30,R20
01C6 FF27 clr R31
01C8 EE0F lsl R30
01CA FF1F rol R31
01CC E80F add R30,R24
01CE F91F adc R31,R25
01D0 0491 lpm R16,Z
01D2 47DF xcall _USART_Transmit
01D4 .dbline 106
01D4 ;
01D4 ; }
01D4 .dbline 108
01D4 ;
01D4 ; break;
01D4 .dbline 110
01D4 ; }
01D4 ; }
01D4 19C0 xjmp L18
01D6 L17:
01D6 .dbline 112
01D6 ; else
01D6 ; {
01D6 .dbline 113
01D6 ; Key_UP = 0;
01D6 2224 clr R2
01D8 20920100 sts _Key_UP,R2
01DC .dbline 114
01DC ; switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
01DC 4A2D mov R20,R10
01DE 5527 clr R21
01E0 4231 cpi R20,18
01E2 E0E0 ldi R30,0
01E4 5E07 cpc R21,R30
01E6 49F0 breq L48
01E8 X18:
01E8 4231 cpi R20,18
01EA E0E0 ldi R30,0
01EC 5E07 cpc R21,R30
01EE 64F0 brlt L45
01F0 X19:
01F0 L50:
01F0 4935 cpi R20,89
01F2 E0E0 ldi R30,0
01F4 5E07 cpc R21,R30
01F6 29F0 breq L49
01F8 X20:
01F8 07C0 xjmp L45
01FA L48:
01FA .dbline 117
01FA ; {
01FA ; case 0x12 : // 左 SHIFT
01FA ; Shift = 0;
01FA 2224 clr R2
01FC 20920200 sts _Shift,R2
0200 .dbline 118
0200 ; break;
0200 03C0 xjmp L46
0202 L49:
0202 .dbline 121
0202 ;
0202 ; case 0x59 : // 右 SHIFT
0202 ; Shift = 0;
0202 2224 clr R2
0204 20920200 sts _Shift,R2
0208 .dbline 122
0208 ; break;
0208 L45:
0208 L46:
0208 .dbline 124
0208 ; }
0208 ; }
0208 L18:
0208 .dbline 125
0208 ; BF = 0; //标识字符处理完了
0208 2224 clr R2
020A 20920300 sts _BF,R2
020E .dbline -2
020E L16:
020E .dbline 0 ; func end
020E 0C940000 xjmp pop_xgset300C
0212 .dbsym r TempCyc 20 c
0212 .dbsym r ScanCode 10 c
0212 .dbend
0212 .dbfunc e main _main fV
.even
0212 _main::
0212 .dbline -1
0212 .dbline 130
0212 ; }
0212 ;
0212 ;
0212 ; void main()
0212 ; {
0212 .dbline 131
0212 ; PORTD = PORTD | 0x18; //设置为上拉模式
0212 82B3 in R24,0x12
0214 8861 ori R24,24
0216 82BB out 0x12,R24
0218 .dbline 132
0218 ; DDRD = DDRD & 0xE7; //设置为输入模式
0218 81B3 in R24,0x11
021A 877E andi R24,231
021C 81BB out 0x11,R24
021E .dbline 133
021E ; uart0_init(9600);
021E 00E8 ldi R16,9600
0220 15E2 ldi R17,37
0222 EEDE xcall _uart0_init
0224 .dbline 134
0224 ; MCUCR = MCUCR & 0xf3; //外部中断1设置为低电平触发
0224 85B7 in R24,0x35
0226 837F andi R24,243
0228 85BF out 0x35,R24
022A .dbline 135
022A ; GICR = (1<<INT1); //外部中断0,1的使能
022A 80E8 ldi R24,128
022C 8BBF out 0x3b,R24
022E .dbline 136
022E ; SEI();
022E 7894 sei
0230 L52:
0230 .dbline 138
0230 ; do
0230 ; {
0230 .dbline 139
0230 ; if (BF)
0230 20900300 lds R2,_BF
0234 2220 tst R2
0236 21F0 breq L55
0238 X23:
0238 .dbline 140
0238 ; Decode(KeyV);
0238 00910000 lds R16,_KeyV
023C 52DF xcall _Decode
023E 01C0 xjmp L56
0240 L55:
0240 .dbline 142
0240 ; else
0240 ; SEI();; //开中断
0240 7894 sei
0242 L56:
0242 .dbline 142
0242 .dbline 143
0242 ; }
0242 L53:
0242 .dbline 144
0242 ; while(1)
0242 F6CF xjmp L52
0244 X24:
0244 .dbline -2
0244 L51:
0244 .dbline 0 ; func end
0244 0895 ret
0246 .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\电子设计\AVR程序\PS2\PS2.C
0000 _KeyV:
0000 .blkb 1
0001 .dbsym s KeyV _KeyV c
0001 ; ;
0001 ;
0001 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -