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

📄 ps2kb_uart.s

📁 meg16 的所有功能实例
💻 S
📖 第 1 页 / 共 2 页
字号:
L20:
L17:
L13:
	.dbline -2
L11:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Decode _Decode fV
;        TempCyc -> R22
;       ScanCode -> R20
	.even
_Decode::
	xcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 115
; }
; 
; void Decode(unsigned char ScanCode) //注意:如SHIFT+G为12H 34H F0H 34H F0H 12H,也就是说shift的通码+G的通码+shift的断码+G的断码
; {
	.dbline 118
; 	unsigned char TempCyc;	
; 
; 	if (!Key_UP)                //当键盘松开时
	lds R2,_Key_UP
	tst R2
	breq X2
	xjmp L23
X2:
	.dbline 119
; 		{
	.dbline 120
; 			switch (ScanCode)
	mov R22,R20
	clr R23
	cpi R22,89
	ldi R30,0
	cpc R23,R30
	breq L30
	ldi R24,89
	ldi R25,0
	cp R24,R22
	cpc R25,R23
	brlt L50
L49:
	cpi R22,18
	ldi R30,0
	cpc R23,R30
	breq L29
	xjmp L25
L50:
	cpi R22,240
	ldi R30,0
	cpc R23,R30
	breq L28
	xjmp L25
X0:
	.dbline 121
; 				{
L28:
	.dbline 123
; 					case 0xF0 :	// 当收到0xF0,Key_UP置1表示断码开始
; 						Key_UP = 1;
	ldi R24,1
	sts _Key_UP,R24
	.dbline 124
; 					break;
	xjmp L24
L29:
	.dbline 127
; 
; 					case 0x12 :	// 左 SHIFT
; 						Shift = 1;
	ldi R24,1
	sts _Shift,R24
	.dbline 128
; 					break;
	xjmp L24
L30:
	.dbline 131
; 
; 					case 0x59 :	// 右 SHIFT
; 						Shift = 1;
	ldi R24,1
	sts _Shift,R24
	.dbline 132
; 					break;
	xjmp L24
L25:
	.dbline 135
; 
; 					default:						
; 						if(!Shift)	//如果SHIFT没按下
	lds R2,_Shift
	tst R2
	brne L31
	.dbline 136
; 							{
	.dbline 137
	clr R22
	xjmp L36
L33:
	.dbline 137
L34:
	.dbline 137
	inc R22
L36:
	.dbline 137
; 								for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
	ldi R24,2
	mul R24,R22
	movw R30,R0
	ldi R24,<_UnShifted
	ldi R25,>_UnShifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R20
	breq L37
	cpi R22,59
	brlo L33
L37:
	.dbline 138
; 								if (UnShifted[TempCyc][0] == ScanCode) 
	ldi R24,2
	mul R24,R22
	movw R30,R0
	ldi R24,<_UnShifted
	ldi R25,>_UnShifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R20
	breq X3
	xjmp L24
X3:
	.dbline 139
; 								    uart_transmit(UnShifted[TempCyc][1]);
	ldi R24,2
	mul R24,R22
	movw R30,R0
	ldi R24,<_UnShifted+1
	ldi R25,>_UnShifted+1
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _uart_transmit
	.dbline 140
; 							} 
	xjmp L24
L31:
	.dbline 142
; 						else  //按下SHIFT
; 							{
	.dbline 143
	clr R22
	xjmp L44
L41:
	.dbline 143
L42:
	.dbline 143
	inc R22
L44:
	.dbline 143
; 								for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示
	ldi R24,2
	mul R24,R22
	movw R30,R0
	ldi R24,<_Shifted
	ldi R25,>_Shifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R20
	breq L45
	cpi R22,59
	brlo L41
L45:
	.dbline 144
; 								if (Shifted[TempCyc][0] == ScanCode)
	ldi R24,2
	mul R24,R22
	movw R30,R0
	ldi R24,<_Shifted
	ldi R25,>_Shifted
	add R30,R24
	adc R31,R25
	lpm R30,Z
	cp R30,R20
	brne L24
	.dbline 145
; 								   uart_transmit(Shifted[TempCyc][1]);
	ldi R24,2
	mul R24,R22
	movw R30,R0
	ldi R24,<_Shifted+1
	ldi R25,>_Shifted+1
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _uart_transmit
	.dbline 146
; 							}
	.dbline 148
; 
; 					break;
	.dbline 150
; 				}
; 		}
	xjmp L24
L23:
	.dbline 152
; 	else
; 		{	
	.dbline 153
; 			Key_UP = 0;
	clr R2
	sts _Key_UP,R2
	.dbline 154
; 			switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理
	clr R21
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	breq L54
	cpi R20,18
	ldi R30,0
	cpc R21,R30
	brlt L51
L56:
	cpi R20,89
	ldi R30,0
	cpc R21,R30
	breq L55
	xjmp L51
X1:
	.dbline 155
; 				{
L54:
	.dbline 157
; 					case 0x12 :	// 左 SHIFT
; 						Shift = 0;
	clr R2
	sts _Shift,R2
	.dbline 158
; 					break;
	xjmp L52
L55:
	.dbline 161
; 
; 					case 0x59 :	// 右 SHIFT
; 						Shift = 0;
	clr R2
	sts _Shift,R2
	.dbline 162
; 					break;
L51:
L52:
	.dbline 164
; 				}
; 		}
L24:
	.dbline 165
; 	BF = 0; //标识字符处理完了
	clr R2
	sts _BF,R2
	.dbline -2
L22:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r TempCyc 22 c
	.dbsym r ScanCode 20 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20,R21
	.even
_main::
	.dbline -1
	.dbline 170
; } 
; 
; 
; void main(void)
; {
	.dbline 172
;     unsigned int i;
; 	CLI(); //disable all interrupts
	cli
	.dbline 173
;  	port_init();
	xcall _port_init
	.dbline 174
;  	UART_init();
	xcall _UART_init
	.dbline 175
; 	MCUCR = 0x08;
	ldi R24,8
	out 0x35,R24
	.dbline 176
;  	GICR  = 0x80;
	ldi R24,128
	out 0x3b,R24
	.dbline 177
;  	SEI();
	sei
	.dbline 178
; 	for(i=0;i<60000;i++)//延时
	clr R20
	clr R21
	xjmp L61
L58:
	.dbline 179
L59:
	.dbline 178
	subi R20,255  ; offset = 1
	sbci R21,255
L61:
	.dbline 178
	cpi R20,96
	ldi R30,234
	cpc R21,R30
	brlo L58
	.dbline 180
; 	;
; 	uart_transmit('\n');		
	ldi R16,10
	xcall _uart_transmit
	.dbline 181
; 	uart_trans_str("     Welcome You!");
	ldi R16,<L62
	ldi R17,>L62
	xcall _uart_trans_str
	.dbline 182
; 	uart_transmit('\n');		
	ldi R16,10
	xcall _uart_transmit
	.dbline 183
; 	uart_trans_str("    You are the best!");	
	ldi R16,<L63
	ldi R17,>L63
	xcall _uart_trans_str
	.dbline 184
; 	uart_transmit('\n');
	ldi R16,10
	xcall _uart_transmit
	.dbline 185
; 	uart_trans_str("   EndyLu AVR 2.0");
	ldi R16,<L64
	ldi R17,>L64
	xcall _uart_trans_str
	.dbline 186
; 	uart_transmit('\n');
	ldi R16,10
	xcall _uart_transmit
	.dbline 187
; 	uart_trans_str(" PS2 Keyboard test program 1.0");	
	ldi R16,<L65
	ldi R17,>L65
	xcall _uart_trans_str
	.dbline 188
; 	uart_transmit('\n');
	ldi R16,10
	xcall _uart_transmit
	.dbline 189
; 	uart_trans_str("Please input with keyboard:");
	ldi R16,<L66
	ldi R17,>L66
	xcall _uart_trans_str
	xjmp L68
L67:
	.dbline 191
; 	while(1)
; 	{
	.dbline 193
; 	
; 	 	if(flag ==1)
	lds R24,_flag
	cpi R24,1
	brne L70
	.dbline 194
; 	 	{ 
	.dbline 196
; 		  	//uart_transmit(keycode); //发送未解码信息,了解原理时可用
; 		    Decode(keycode);   //键盘解码
	lds R16,_keycode
	xcall _Decode
	.dbline 198
; 	 		 
; 			keycode = 0;
	clr R2
	sts _keycode,R2
	.dbline 200
; 			
; 			flag = 0;
	sts _flag,R2
	.dbline 201
; 	    }
L70:
	.dbline 202
L68:
	.dbline 190
	xjmp L67
X4:
	.dbline -2
L57:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
L66:
	.blkb 28
	.area idata
	.byte 'P,'l,'e,'a,'s,'e,32,'i,'n,'p,'u,'t,32,'w,'i,'t
	.byte 'h,32,'k,'e,'y,'b,'o,'a,'r,'d,58,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
L65:
	.blkb 31
	.area idata
	.byte 32,'P,'S,50,32,'K,'e,'y,'b,'o,'a,'r,'d,32,'t,'e
	.byte 's,'t,32,'p,'r,'o,'g,'r,'a,'m,32,49,46,48,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
L64:
	.blkb 18
	.area idata
	.byte 32,32,32,'E,'n,'d,'y,'L,'u,32,'A,'V,'R,32,50,46
	.byte 48,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
L63:
	.blkb 22
	.area idata
	.byte 32,32,32,32,'Y,'o,'u,32,'a,'r,'e,32,'t,'h,'e,32
	.byte 'b,'e,'s,'t,33,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c
L62:
	.blkb 18
	.area idata
	.byte 32,32,32,32,32,'W,'e,'l,'c,'o,'m,'e,32,'Y,'o,'u
	.byte 33,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.2\PS2KB_UART\PS2KB_UART.c

⌨️ 快捷键说明

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