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

📄 ps2.lst

📁 meg16 的所有功能实例
💻 LST
字号:
__start:
__text_start:
    002C E5CF      LDI	R28,0x5F
    002D E0D4      LDI	R29,4
    002E BFCD      OUT	0x3D,R28
    002F BFDE      OUT	0x3E,R29
    0030 51C0      SUBI	R28,0x10
    0031 40D0      SBCI	R29,0
    0032 EA0A      LDI	R16,0xAA
    0033 8308      STD	Y+0,R16
    0034 2400      CLR	R0
    0035 E6E3      LDI	R30,0x63
    0036 E0F0      LDI	R31,0
    0037 E010      LDI	R17,0
    0038 36E3      CPI	R30,0x63
    0039 07F1      CPC	R31,R17
    003A F011      BEQ	0x003D
    003B 9201      ST	R0,Z+
    003C CFFB      RJMP	0x0038
    003D 8300      STD	Z+0,R16
    003E E5E4      LDI	R30,0x54
    003F E0F0      LDI	R31,0
    0040 E6A0      LDI	R26,0x60
    0041 E0B0      LDI	R27,0
    0042 E010      LDI	R17,0
    0043 35E7      CPI	R30,0x57
    0044 07F1      CPC	R31,R17
    0045 F021      BEQ	0x004A
    0046 95C8      LPM
    0047 9631      ADIW	R30,1
    0048 920D      ST	R0,X+
    0049 CFF9      RJMP	0x0043
    004A 940E00A0  CALL	_main
_exit:
    004C CFFF      RJMP	_exit
FILE: E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\ps2\v1.0\ps2_key.c
(0001) /****************************************Copyright (c)**************************************************
(0002) **                               ADEmbed Development Co.,LTD.                                    
(0003) **                                 http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name:			ps2_key.c
(0006) ** Last modified Date:  2008-12-13
(0007) ** Last Version:		1.0
(0008) ** Descriptions:		ps2 test.
(0009) ** 
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by:			junbolu
(0012) ** Created date:		2008-12-13
(0013) ** Version:				1.0
(0014) ** Descriptions:		
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by:
(0018) ** Modified date:
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) **SCK   ----  INT1
(0027) **DATA  ----  PD3  
(0028) **描述:读取PS2键盘编码,不经过任何处理直接发送到串口显示。
(0029) **      
(0030) **
(0031) **涉及知识点:
(0032) **          
(0033) **          
(0034) **          
(0035) *******************************************************************************************************/
(0036) 
(0037) 
(0038) #include<iom16v.h>
(0039) #include<macros.h>
(0040) 
(0041) #define BAUD  9600
(0042) #define BARR  (7372800/(16*BAUD)-1)
(0043) 
(0044) volatile unsigned char keycode=0;
(0045) volatile unsigned char step=0;
(0046) volatile char flag=0;
(0047) 
(0048) 
(0049) 
(0050) void port_init(void)
(0051) {
(0052) 	DDRD =  0Xe7;
_port_init:
    004D EE87      LDI	R24,0xE7
    004E BB81      OUT	0x11,R24
(0053)     PORTD = 0XFF;
    004F EF8F      LDI	R24,0xFF
    0050 BB82      OUT	0x12,R24
    0051 9508      RET
(0054) }
(0055) 
(0056) void UART_init( void )
(0057) {
(0058) 	UBRRH = (unsigned char)(BARR>>8);
_UART_init:
    0052 2422      CLR	R2
    0053 BC20      OUT	0x20,R2
(0059) 	UBRRL = (unsigned char)BARR;
    0054 E28F      LDI	R24,0x2F
    0055 B989      OUT	0x09,R24
(0060) 	UCSRB = (1<<RXEN)|(1<<TXEN);
    0056 E188      LDI	R24,0x18
    0057 B98A      OUT	0x0A,R24
(0061) 	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);       
    0058 E886      LDI	R24,0x86
    0059 BD80      OUT	0x20,R24
    005A 9508      RET
(0062) }
(0063) 
(0064) void uart_transmit(unsigned char data)
(0065) {
(0066) 	while(!(UCSRA&(1<<UDRE)));
_uart_transmit:
  data                 --> R16
    005B 9B5D      SBIS	0x0B,5
    005C CFFE      RJMP	_uart_transmit
(0067) 	
(0068) 	UDR = data;
    005D B90C      OUT	0x0C,R16
    005E 9508      RET
_int1_scr:
    005F 922A      ST	R2,-Y
    0060 938A      ST	R24,-Y
    0061 939A      ST	R25,-Y
    0062 B62F      IN	R2,0x3F
    0063 922A      ST	R2,-Y
(0069) 
(0070) }
(0071) 
(0072) 
(0073) #pragma interrupt_handler int1_scr:3
(0074) void int1_scr(void)
(0075) {
(0076) 	step++;
    0064 91800061  LDS	R24,step
    0066 5F8F      SUBI	R24,0xFF
    0067 93800061  STS	step,R24
(0077) 	
(0078) 	if(step==1)
    0069 91800061  LDS	R24,step
    006B 3081      CPI	R24,1
    006C F441      BNE	0x0075
(0079) 	{
(0080) 		if((PIND&0X10)==1)
    006D B380      IN	R24,0x10
    006E 7180      ANDI	R24,0x10
    006F 3081      CPI	R24,1
    0070 F549      BNE	0x009A
(0081) 		{
(0082) 			step = 0;
    0071 2422      CLR	R2
    0072 92200061  STS	step,R2
(0083) 		}
(0084) 	}
    0074 C025      RJMP	0x009A
(0085) 	
(0086) 	else if((step>=2)&&(step<=9))
    0075 91800061  LDS	R24,step
    0077 3082      CPI	R24,2
    0078 F0B8      BCS	0x0090
    0079 E089      LDI	R24,0x9
    007A 90200061  LDS	R2,step
    007C 1582      CP	R24,R2
    007D F090      BCS	0x0090
(0087) 	{
(0088) 		
(0089) 		keycode>>=1;
    007E 90200060  LDS	R2,keycode
    0080 9426      LSR	R2
    0081 92200060  STS	keycode,R2
(0090) 		
(0091) 		if((PIND&0X10)==0)
    0083 9984      SBIC	0x10,4
    0084 C005      RJMP	0x008A
(0092) 		{
(0093) 			keycode|=0x00;
    0085 90200060  LDS	R2,keycode
    0087 92200060  STS	keycode,R2
(0094) 		}
    0089 C010      RJMP	0x009A
(0095) 		else 
(0096) 		{
(0097) 			keycode|=0x80;
    008A 91800060  LDS	R24,keycode
    008C 6880      ORI	R24,0x80
    008D 93800060  STS	keycode,R24
(0098) 		}
(0099) 	   
(0100) 	}
    008F C00A      RJMP	0x009A
(0101) 	else if(step == 11)
    0090 91800061  LDS	R24,step
    0092 308B      CPI	R24,0xB
    0093 F431      BNE	0x009A
(0102) 	{
(0103) 		flag = 1;
    0094 E081      LDI	R24,1
    0095 93800062  STS	flag,R24
(0104) 		step = 0;
    0097 2422      CLR	R2
    0098 92200061  STS	step,R2
(0105) 	
(0106) 	}
    009A 9029      LD	R2,Y+
    009B BE2F      OUT	0x3F,R2
    009C 9199      LD	R25,Y+
    009D 9189      LD	R24,Y+
    009E 9029      LD	R2,Y+
    009F 9518      RETI
(0107) 	
(0108) 	
(0109) }
(0110) 
(0111) void main(void)
(0112) {
(0113) 
(0114) 	CLI(); //disable all interrupts
_main:
    00A0 94F8      BCLR	7
(0115)  	port_init();
    00A1 DFAB      RCALL	_port_init
(0116)  	UART_init();
    00A2 DFAF      RCALL	_UART_init
(0117) 	MCUCR = 0x08;
    00A3 E088      LDI	R24,0x8
    00A4 BF85      OUT	0x35,R24
(0118)  	GICR  = 0x80;
    00A5 E880      LDI	R24,0x80
    00A6 BF8B      OUT	0x3B,R24
(0119)  	SEI();
    00A7 9478      BSET	7
    00A8 C00C      RJMP	0x00B5
(0120)  
(0121) 	while(1)
(0122) 	{
(0123) 	 	if(flag ==1)
    00A9 91800062  LDS	R24,flag
    00AB 3081      CPI	R24,1
    00AC F441      BNE	0x00B5
(0124) 	 	{
(0125) 	 		uart_transmit(keycode);
    00AD 91000060  LDS	R16,keycode
    00AF DFAB      RCALL	_uart_transmit
(0126) 			
(0127) 			keycode = 0;
    00B0 2422      CLR	R2
    00B1 92200060  STS	keycode,R2
(0128) 			
(0129) 			flag = 0;
FILE: <library>
    00B3 92200062  STS	flag,R2
    00B5 CFF3      RJMP	0x00A9
    00B6 9508      RET

⌨️ 快捷键说明

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