⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2.lis

📁 mega16的ps2程序 自己修改
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -