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

📄 ps2kb_uart.lis

📁 meg16 的所有功能实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -