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

📄 ps2kb_uart.lst

📁 meg16 的所有功能实例
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0182 C06B      RJMP	0x01EE
(0125) 
(0126) 					case 0x12 :	// 左 SHIFT
(0127) 						Shift = 1;
    0183 E081      LDI	R24,1
    0184 93800064  STS	Shift,R24
(0128) 					break;
    0186 C067      RJMP	0x01EE
(0129) 
(0130) 					case 0x59 :	// 右 SHIFT
(0131) 						Shift = 1;
    0187 E081      LDI	R24,1
    0188 93800064  STS	Shift,R24
(0132) 					break;
    018A C063      RJMP	0x01EE
(0133) 
(0134) 					default:						
(0135) 						if(!Shift)	//如果SHIFT没按下
    018B 90200064  LDS	R2,Shift
    018D 2022      TST	R2
    018E F521      BNE	0x01B3
(0136) 							{
(0137) 								for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
    018F 2766      CLR	R22
    0190 C001      RJMP	0x0192
    0191 9563      INC	R22
    0192 E082      LDI	R24,2
    0193 9F86      MUL	R24,R22
    0194 01F0      MOVW	R30,R0
    0195 E584      LDI	R24,0x54
    0196 E090      LDI	R25,0
    0197 0FE8      ADD	R30,R24
    0198 1FF9      ADC	R31,R25
    0199 91E4      LPM	R30,0(Z)
    019A 17E4      CP	R30,R20
    019B F011      BEQ	0x019E
    019C 336B      CPI	R22,0x3B
    019D F398      BCS	0x0191
(0138) 								if (UnShifted[TempCyc][0] == ScanCode) 
    019E E082      LDI	R24,2
    019F 9F86      MUL	R24,R22
    01A0 01F0      MOVW	R30,R0
    01A1 E584      LDI	R24,0x54
    01A2 E090      LDI	R25,0
    01A3 0FE8      ADD	R30,R24
    01A4 1FF9      ADC	R31,R25
    01A5 91E4      LPM	R30,0(Z)
    01A6 17E4      CP	R30,R20
    01A7 F009      BEQ	0x01A9
    01A8 C045      RJMP	0x01EE
(0139) 								    uart_transmit(UnShifted[TempCyc][1]);
    01A9 E082      LDI	R24,2
    01AA 9F86      MUL	R24,R22
    01AB 01F0      MOVW	R30,R0
    01AC E585      LDI	R24,0x55
    01AD E090      LDI	R25,0
    01AE 0FE8      ADD	R30,R24
    01AF 1FF9      ADC	R31,R25
    01B0 9104      LPM	R16,0(Z)
    01B1 DF5B      RCALL	_uart_transmit
(0140) 							} 
    01B2 C03B      RJMP	0x01EE
(0141) 						else  //按下SHIFT
(0142) 							{
(0143) 								for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
    01B3 2766      CLR	R22
    01B4 C001      RJMP	0x01B6
    01B5 9563      INC	R22
    01B6 E082      LDI	R24,2
    01B7 9F86      MUL	R24,R22
    01B8 01F0      MOVW	R30,R0
    01B9 EC8A      LDI	R24,0xCA
    01BA E090      LDI	R25,0
    01BB 0FE8      ADD	R30,R24
    01BC 1FF9      ADC	R31,R25
    01BD 91E4      LPM	R30,0(Z)
    01BE 17E4      CP	R30,R20
    01BF F011      BEQ	0x01C2
    01C0 336B      CPI	R22,0x3B
    01C1 F398      BCS	0x01B5
(0144) 								if (Shifted[TempCyc][0] == ScanCode)
    01C2 E082      LDI	R24,2
    01C3 9F86      MUL	R24,R22
    01C4 01F0      MOVW	R30,R0
    01C5 EC8A      LDI	R24,0xCA
    01C6 E090      LDI	R25,0
    01C7 0FE8      ADD	R30,R24
    01C8 1FF9      ADC	R31,R25
    01C9 91E4      LPM	R30,0(Z)
    01CA 17E4      CP	R30,R20
    01CB F511      BNE	0x01EE
(0145) 								   uart_transmit(Shifted[TempCyc][1]);
    01CC E082      LDI	R24,2
    01CD 9F86      MUL	R24,R22
    01CE 01F0      MOVW	R30,R0
    01CF EC8B      LDI	R24,0xCB
    01D0 E090      LDI	R25,0
    01D1 0FE8      ADD	R30,R24
    01D2 1FF9      ADC	R31,R25
    01D3 9104      LPM	R16,0(Z)
    01D4 DF38      RCALL	_uart_transmit
(0146) 							}
(0147) 
(0148) 					break;
(0149) 				}
(0150) 		}
    01D5 C018      RJMP	0x01EE
(0151) 	else
(0152) 		{	
(0153) 			Key_UP = 0;
    01D6 2422      CLR	R2
    01D7 92200063  STS	Key_UP,R2
(0154) 			switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
    01D9 2755      CLR	R21
    01DA 3142      CPI	R20,0x12
    01DB E0E0      LDI	R30,0
    01DC 075E      CPC	R21,R30
    01DD F049      BEQ	0x01E7
    01DE 3142      CPI	R20,0x12
    01DF E0E0      LDI	R30,0
    01E0 075E      CPC	R21,R30
    01E1 F064      BLT	0x01EE
    01E2 3549      CPI	R20,0x59
    01E3 E0E0      LDI	R30,0
    01E4 075E      CPC	R21,R30
    01E5 F029      BEQ	0x01EB
    01E6 C007      RJMP	0x01EE
(0155) 				{
(0156) 					case 0x12 :	// 左 SHIFT
(0157) 						Shift = 0;
    01E7 2422      CLR	R2
    01E8 92200064  STS	Shift,R2
(0158) 					break;
    01EA C003      RJMP	0x01EE
(0159) 
(0160) 					case 0x59 :	// 右 SHIFT
(0161) 						Shift = 0;
    01EB 2422      CLR	R2
    01EC 92200064  STS	Shift,R2
(0162) 					break;
(0163) 				}
(0164) 		}
(0165) 	BF = 0; //标识字符处理完了
    01EE 2422      CLR	R2
    01EF 92200065  STS	BF,R2
    01F1 940E022D  CALL	pop_gset2
    01F3 9508      RET
(0166) } 
(0167) 
(0168) 
(0169) void main(void)
(0170) {
(0171)     unsigned int i;
(0172) 	CLI(); //disable all interrupts
_main:
  i                    --> R20
    01F4 94F8      BCLR	7
(0173)  	port_init();
    01F5 DF09      RCALL	_port_init
(0174)  	UART_init();
    01F6 DF0D      RCALL	_UART_init
(0175) 	MCUCR = 0x08;
    01F7 E088      LDI	R24,0x8
    01F8 BF85      OUT	0x35,R24
(0176)  	GICR  = 0x80;
    01F9 E880      LDI	R24,0x80
    01FA BF8B      OUT	0x3B,R24
(0177)  	SEI();
    01FB 9478      BSET	7
(0178) 	for(i=0;i<60000;i++)//延时
    01FC 2744      CLR	R20
    01FD 2755      CLR	R21
    01FE C002      RJMP	0x0201
    01FF 5F4F      SUBI	R20,0xFF
    0200 4F5F      SBCI	R21,0xFF
    0201 3640      CPI	R20,0x60
    0202 EEEA      LDI	R30,0xEA
    0203 075E      CPC	R21,R30
    0204 F3D0      BCS	0x01FF
(0179) 	;
(0180) 	uart_transmit('\n');		
    0205 E00A      LDI	R16,0xA
    0206 DF06      RCALL	_uart_transmit
(0181) 	uart_trans_str("     Welcome You!");
    0207 EC09      LDI	R16,0xC9
    0208 E010      LDI	R17,0
    0209 DF07      RCALL	_uart_trans_str
(0182) 	uart_transmit('\n');		
    020A E00A      LDI	R16,0xA
    020B DF01      RCALL	_uart_transmit
(0183) 	uart_trans_str("    You are the best!");	
    020C EB03      LDI	R16,0xB3
    020D E010      LDI	R17,0
    020E DF02      RCALL	_uart_trans_str
(0184) 	uart_transmit('\n');
    020F E00A      LDI	R16,0xA
    0210 DEFC      RCALL	_uart_transmit
(0185) 	uart_trans_str("   EndyLu AVR 2.0");
    0211 EA01      LDI	R16,0xA1
    0212 E010      LDI	R17,0
    0213 DEFD      RCALL	_uart_trans_str
(0186) 	uart_transmit('\n');
    0214 E00A      LDI	R16,0xA
    0215 DEF7      RCALL	_uart_transmit
(0187) 	uart_trans_str(" PS2 Keyboard test program 1.0");	
    0216 E802      LDI	R16,0x82
    0217 E010      LDI	R17,0
    0218 DEF8      RCALL	_uart_trans_str
(0188) 	uart_transmit('\n');
    0219 E00A      LDI	R16,0xA
    021A DEF2      RCALL	_uart_transmit
(0189) 	uart_trans_str("Please input with keyboard:");
    021B E606      LDI	R16,0x66
    021C E010      LDI	R17,0
    021D DEF3      RCALL	_uart_trans_str
    021E C00C      RJMP	0x022B
(0190) 	while(1)
(0191) 	{
(0192) 	
(0193) 	 	if(flag ==1)
    021F 91800062  LDS	R24,flag
    0221 3081      CPI	R24,1
    0222 F441      BNE	0x022B
(0194) 	 	{ 
(0195) 		  	//uart_transmit(keycode); //发送未解码信息,了解原理时可用
(0196) 		    Decode(keycode);   //键盘解码
    0223 91000060  LDS	R16,keycode
    0225 DF3C      RCALL	_Decode
(0197) 	 		 
(0198) 			keycode = 0;
    0226 2422      CLR	R2
    0227 92200060  STS	keycode,R2
(0199) 			
(0200) 			flag = 0;
FILE: <library>
    0229 92200062  STS	flag,R2
    022B CFF3      RJMP	0x021F
    022C 9508      RET
pop_gset2:
    022D E0E2      LDI	R30,2
    022E 940C023C  JMP	pop
push_gset5:
    0230 92FA      ST	R15,-Y
    0231 92EA      ST	R14,-Y
push_gset4:
    0232 92DA      ST	R13,-Y
    0233 92CA      ST	R12,-Y
push_gset3:
    0234 92BA      ST	R11,-Y
    0235 92AA      ST	R10,-Y
push_gset2:
    0236 937A      ST	R23,-Y
    0237 936A      ST	R22,-Y
push_gset1:
    0238 935A      ST	R21,-Y
    0239 934A      ST	R20,-Y
    023A 9508      RET
pop_gset1:
    023B E0E1      LDI	R30,1
pop:
    023C 9149      LD	R20,Y+
    023D 9159      LD	R21,Y+
    023E FDE0      SBRC	R30,0
    023F 9508      RET
    0240 9169      LD	R22,Y+
    0241 9179      LD	R23,Y+
    0242 FDE1      SBRC	R30,1
    0243 9508      RET
    0244 90A9      LD	R10,Y+
    0245 90B9      LD	R11,Y+
    0246 FDE2      SBRC	R30,2
    0247 9508      RET
    0248 90C9      LD	R12,Y+
    0249 90D9      LD	R13,Y+
    024A FDE3      SBRC	R30,3
    024B 9508      RET
    024C 90E9      LD	R14,Y+
    024D 90F9      LD	R15,Y+
    024E 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -