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

📄 ps2_key.s

📁 meg16 的所有功能实例
💻 S
字号:
	.module ps2_key.c
	.area data(ram, con, rel)
_keycode::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
	.dbsym e keycode _keycode c
_step::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
	.dbsym e step _step c
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
	.dbsym e flag _flag c
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 51
; /****************************************Copyright (c)**************************************************
; **                               ADEmbed Development Co.,LTD.                                    
; **                                 http://www.adembed.com
; **--------------File Info-------------------------------------------------------------------------------
; ** File name:			ps2_key.c
; ** Last modified Date:  2008-12-13
; ** Last Version:		1.0
; ** Descriptions:		ps2 test.
; ** 
; **------------------------------------------------------------------------------------------------------
; ** Created by:			junbolu
; ** Created date:		2008-12-13
; ** Version:				1.0
; ** Descriptions:		
; **
; **------------------------------------------------------------------------------------------------------
; ** Modified by:
; ** Modified date:
; ** Version:
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; **ICC-AVR application builder : 2008-12-13
; **Target : M16
; **Crystal: 7.3728Mhz
; **SCK   ----  INT1
; **DATA  ----  PD3  
; **描述:读取PS2键盘编码,不经过任何处理直接发送到串口显示。
; **      
; **
; **涉及知识点:
; **          
; **          
; **          
; *******************************************************************************************************/
; 
; 
; #include<iom16v.h>
; #include<macros.h>
; 
; #define BAUD  9600
; #define BARR  (7372800/(16*BAUD)-1)
; 
; volatile unsigned char keycode=0;
; volatile unsigned char step=0;
; volatile char flag=0;
; 
; 
; 
; void port_init(void)
; {
	.dbline 52
; 	DDRD =  0Xe7;
	ldi R24,231
	out 0x11,R24
	.dbline 53
;     PORTD = 0XFF;
	ldi R24,255
	out 0x12,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e UART_init _UART_init fV
	.even
_UART_init::
	.dbline -1
	.dbline 57
; }
; 
; void UART_init( void )
; {
	.dbline 58
; 	UBRRH = (unsigned char)(BARR>>8);
	clr R2
	out 0x20,R2
	.dbline 59
; 	UBRRL = (unsigned char)BARR;
	ldi R24,47
	out 0x9,R24
	.dbline 60
; 	UCSRB = (1<<RXEN)|(1<<TXEN);
	ldi R24,24
	out 0xa,R24
	.dbline 61
; 	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);       
	ldi R24,134
	out 0x20,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_transmit _uart_transmit fV
;           data -> R16
	.even
_uart_transmit::
	.dbline -1
	.dbline 65
; }
; 
; void uart_transmit(unsigned char data)
; {
L4:
	.dbline 66
L5:
	.dbline 66
; 	while(!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L4
	.dbline 68
; 	
; 	UDR = data;
	out 0xc,R16
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.area vector(rom, abs)
	.org 8
	jmp _int1_scr
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
	.dbfunc e int1_scr _int1_scr fV
	.even
_int1_scr::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 75
; 
; }
; 
; 
; #pragma interrupt_handler int1_scr:3
; void int1_scr(void)
; {
	.dbline 76
; 	step++;
	lds R24,_step
	subi R24,255    ; addi 1
	sts _step,R24
	.dbline 78
; 	
; 	if(step==1)
	lds R24,_step
	cpi R24,1
	brne L8
	.dbline 79
; 	{
	.dbline 80
; 		if((PIND&0X10)==1)
	in R24,0x10
	andi R24,16
	cpi R24,1
	brne L9
	.dbline 81
; 		{
	.dbline 82
; 			step = 0;
	clr R2
	sts _step,R2
	.dbline 83
; 		}
	.dbline 84
; 	}
	xjmp L9
L8:
	.dbline 86
; 	
; 	else if((step>=2)&&(step<=9))
	lds R24,_step
	cpi R24,2
	brlo L12
	ldi R24,9
	lds R2,_step
	cp R24,R2
	brlo L12
	.dbline 87
; 	{
	.dbline 89
; 		
; 		keycode>>=1;
	lds R2,_keycode
	lsr R2
	sts _keycode,R2
	.dbline 91
; 		
; 		if((PIND&0X10)==0)
	sbic 0x10,4
	rjmp L14
	.dbline 92
; 		{
	.dbline 93
; 			keycode|=0x00;
	lds R2,_keycode
	sts _keycode,R2
	.dbline 94
; 		}
	xjmp L13
L14:
	.dbline 96
; 		else 
; 		{
	.dbline 97
; 			keycode|=0x80;
	lds R24,_keycode
	ori R24,128
	sts _keycode,R24
	.dbline 98
; 		}
	.dbline 100
; 	   
; 	}
	xjmp L13
L12:
	.dbline 101
; 	else if(step == 11)
	lds R24,_step
	cpi R24,11
	brne L16
	.dbline 102
; 	{
	.dbline 103
; 		flag = 1;
	ldi R24,1
	sts _flag,R24
	.dbline 104
; 		step = 0;
	clr R2
	sts _step,R2
	.dbline 106
; 	
; 	}
L16:
L13:
L9:
	.dbline -2
L7:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 112
; 	
; 	
; }
; 
; void main(void)
; {
	.dbline 114
; 
; 	CLI(); //disable all interrupts
	cli
	.dbline 115
;  	port_init();
	xcall _port_init
	.dbline 116
;  	UART_init();
	xcall _UART_init
	.dbline 117
; 	MCUCR = 0x08;
	ldi R24,8
	out 0x35,R24
	.dbline 118
;  	GICR  = 0x80;
	ldi R24,128
	out 0x3b,R24
	.dbline 119
;  	SEI();
	sei
	xjmp L20
L19:
	.dbline 122
;  
; 	while(1)
; 	{
	.dbline 123
; 	 	if(flag ==1)
	lds R24,_flag
	cpi R24,1
	brne L22
	.dbline 124
; 	 	{
	.dbline 125
; 	 		uart_transmit(keycode);
	lds R16,_keycode
	xcall _uart_transmit
	.dbline 127
; 			
; 			keycode = 0;
	clr R2
	sts _keycode,R2
	.dbline 129
; 			
; 			flag = 0;
	sts _flag,R2
	.dbline 130
; 	    }
L22:
	.dbline 131
L20:
	.dbline 121
	xjmp L19
X0:
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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