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

📄 mian.lst

📁 AVR单片机解码普通PC键盘码值
💻 LST
字号:
__start:
__text_start:
    0033 E5CF      LDI	R28,0x5F
    0034 E0D4      LDI	R29,4
    0035 BFCD      OUT	P3D,R28
    0036 BFDE      OUT	P3E,R29
    0037 51C0      SUBI	R28,0x10
    0038 40D0      SBCI	R29,0
    0039 EA0A      LDI	R16,0xAA
    003A 8308      STD	R16,0+Y
    003B 2400      CLR	R0
    003C E6E5      LDI	R30,0x65
    003D E0F0      LDI	R31,0
    003E E010      LDI	R17,0
    003F 36E5      CPI	R30,0x65
    0040 07F1      CPC	R31,R17
    0041 F011      BEQ	0x0044
    0042 9201      ST	R0,Z+
    0043 CFFB      RJMP	0x003F
    0044 8300      STD	R16,0+Z
    0045 E6E0      LDI	R30,0x60
    0046 E0F0      LDI	R31,0
    0047 E6A0      LDI	R26,0x60
    0048 E0B0      LDI	R27,0
    0049 E010      LDI	R17,0
    004A 36E5      CPI	R30,0x65
    004B 07F1      CPC	R31,R17
    004C F021      BEQ	0x0051
    004D 95C8      LPM
    004E 9631      ADIW	R30,1
    004F 920D      ST	R0,X+
    0050 CFF9      RJMP	0x004A
    0051 940E00A1  CALL	_main
_exit:
    0053 CFFF      RJMP	_exit
FILE: D:\AVRchengcu\PS2--AVR\ps2\main.c
(0001) /******************************************************************************
(0002) //程序功能解码PC键盘,然后把键盘码值通过串口发送到串口显示
(0003) //晶振频率:16 MHZ
(0004) //单片机类型:maget 16
(0005) //编写日期:2009年3月13日      谢巍
(0006) *******************************************************************************/
(0007) 
(0008) #include <iom16v.h>
(0009) #include <macros.h>
(0010) 
(0011) #define IRsignal    (PINA&BIT(0))            //检测一个端口电平输入情况就要这样定义了
(0012) #define DIR_I       DDRA&=~BIT(0)  
(0013) #define DIR_O       DDRA|=BIT(0)
(0014) 
(0015) //定义全局变量
(0016) unsigned char    KB_HitFlag = 0;		    //按键标志
(0017) unsigned char    KB_UpFlag = 0;		    //抬起标志
(0018) unsigned char    KB_Buf=0;	//键盘缓冲区
(0019) 
(0020) //外部中断初始化函数
(0021) void init_devices(void)
(0022) {
(0023)  MCUCR = 0x02;    //INT1 的下降沿产生异步中断请求
_init_devices:
    0054 E082      LDI	R24,2
    0055 BF85      OUT	P35,R24
(0024)  GICR  = 0x40;    //INT1中断使能
    0056 E480      LDI	R24,0x40
    0057 BF8B      OUT	P3B,R24
(0025)  TIMSK = 0x00;    //timer interrupt sources
    0058 2422      CLR	R2
    0059 BE29      OUT	P39,R2
(0026)  SEI();           //打开外部所有中断    两种表达方式是相同的
    005A 9478      BSET	7
(0027) }
    005B 9508      RET
_int1_isr:
    005C 940E00CC  CALL	push_lset
(0028) 
(0029) //外部中断1中断服务函数
(0030) #pragma interrupt_handler int1_isr:2
(0031) void int1_isr(void)
(0032) {
(0033) 	static unsigned char cnt = 0;
(0034) 	static unsigned char k=0;
(0035) 	if ( cnt == 0 )		    //起始位
    005E 90200063  LDS	R2,__idata_start+3
    0060 2022      TST	R2
    0061 F409      BNE	0x0063
(0036) 	{;
(0037) 	}
    0062 C012      RJMP	0x0075
(0038) 	else if ( cnt <= 8 )	//数据位
    0063 E088      LDI	R24,0x8
    0064 90200063  LDS	R2,__idata_start+3
    0066 1582      CP	R24,R2
    0067 F068      BCS	0x0075
(0039) 	{
(0040) 		k >>= 1;
    0068 90200064  LDS	R2,0x64
    006A 9426      LSR	R2
    006B 92200064  STS	R2,0x64
(0041) 		if (IRsignal==BIT(0)) 
    006D B389      IN	R24,P19
    006E 7081      ANDI	R24,1
    006F 3081      CPI	R24,1
    0070 F421      BNE	0x0075
(0042) 		      k|= 0x80;
    0071 2D82      MOV	R24,R2
    0072 6880      ORI	R24,0x80
    0073 93800064  STS	R24,0x64
(0043) 	}
(0044) 	else	//校验位和停止位
(0045) 	{;
(0046) 	}
(0047) 	cnt++;
    0075 91800063  LDS	R24,__idata_start+3
    0077 5F8F      SUBI	R24,0xFF
    0078 93800063  STS	R24,__idata_start+3
(0048) 	if ( cnt >= 11 )	    //一帧数据接收完毕
    007A 308B      CPI	R24,0xB
    007B F110      BCS	0x009E
(0049) 	{
(0050) 		cnt = 0;
    007C 2422      CLR	R2
    007D 92200063  STS	R2,__idata_start+3
(0051) 		if ( k == 0xF0 )	//抬起标志
    007F 91800064  LDS	R24,0x64
    0081 3F80      CPI	R24,0xF0
    0082 F421      BNE	0x0087
(0052) 		{
(0053) 			KB_UpFlag = 1;
    0083 E081      LDI	R24,1
    0084 93800061  STS	R24,__idata_start+1
(0054) 		}
    0086 C017      RJMP	0x009E
(0055) 		else
(0056) 		{
(0057) 			if ( KB_UpFlag )
    0087 90200061  LDS	R2,__idata_start+1
    0089 2022      TST	R2
    008A F021      BEQ	0x008F
(0058) 			{
(0059) 				KB_UpFlag = 0;
    008B 2422      CLR	R2
    008C 92200061  STS	R2,__idata_start+1
(0060) 			}
    008E C00F      RJMP	0x009E
(0061) 			else
(0062) 			{
(0063) 				KB_Buf = k;
    008F 90200064  LDS	R2,0x64
    0091 92200062  STS	R2,__idata_start+2
(0064) 				k=0;
    0093 2422      CLR	R2
    0094 92200064  STS	R2,0x64
(0065) 				KB_HitFlag = 1;
    0096 E081      LDI	R24,1
    0097 93800060  STS	R24,__idata_start
(0066) 
(0067)                 put_c(KB_Buf);
    0099 91000062  LDS	R16,__idata_start+2
    009B 2711      CLR	R17
    009C 940E00B3  CALL	_put_c
(0068) 	    	}
(0069) 		}
(0070) 	}        
(0071) }
    009E 940E00E3  CALL	pop_lset
    00A0 9518      RETI
(0072) 
(0073) void main()
(0074) {
(0075)  	 init_devices();
_main:
    00A1 DFB2      RCALL	_init_devices
(0076) 	 init_USART(); 
    00A2 940E00A9  CALL	_init_USART
(0077) 	 KB_Buf=0;
    00A4 2422      CLR	R2
    00A5 92200062  STS	R2,__idata_start+2
(0078) 	 while(1)
    00A7 CFFF      RJMP	0x00A7
(0079) 	 {
(0080) 	    ;
(0081) 	 }
(0082) 	
(0083) }FILE: <library>
    00A8 9508      RET
_init_USART:
    00A9 E886      LDI	R24,0x86
    00AA BD80      OUT	P20,R24
    00AB E687      LDI	R24,0x67
    00AC B989      OUT	P09,R24
    00AD 2422      CLR	R2
    00AE BC20      OUT	P20,R2
    00AF B82B      OUT	P0B,R2
    00B0 E988      LDI	R24,0x98
    00B1 B98A      OUT	P0A,R24
    00B2 9508      RET
_put_c:
  c                    --> R16
    00B3 9B5D      SBIS	P0B,5
    00B4 CFFE      RJMP	_put_c
    00B5 B90C      OUT	P0C,R16
    00B6 9508      RET
_put_s:
  ptr                  --> R20
    00B7 D042      RCALL	push_gset1
    00B8 2F40      MOV	R20,R16
    00B9 2F51      MOV	R21,R17
    00BA C006      RJMP	0x00C1
    00BB 2FE4      MOV	R30,R20
    00BC 2FF5      MOV	R31,R21
    00BD 9101      LD	R16,Z+
    00BE 2F4E      MOV	R20,R30
    00BF 2F5F      MOV	R21,R31
    00C0 DFF2      RCALL	_put_c
    00C1 2FE4      MOV	R30,R20
    00C2 2FF5      MOV	R31,R21
    00C3 8020      LDD	R2,0+Z
    00C4 2022      TST	R2
    00C5 F7A9      BNE	0x00BB
    00C6 E00D      LDI	R16,0xD
    00C7 DFEB      RCALL	_put_c
    00C8 E00A      LDI	R16,0xA
    00C9 DFE9      RCALL	_put_c
    00CA D032      RCALL	pop_gset1
    00CB 9508      RET
push_lset:
    00CC 93FA      ST	R31,-Y
    00CD 93EA      ST	R30,-Y
    00CE 93BA      ST	R27,-Y
    00CF 93AA      ST	R26,-Y
    00D0 939A      ST	R25,-Y
    00D1 938A      ST	R24,-Y
    00D2 933A      ST	R19,-Y
    00D3 932A      ST	R18,-Y
    00D4 931A      ST	R17,-Y
    00D5 930A      ST	R16,-Y
    00D6 929A      ST	R9,-Y
    00D7 928A      ST	R8,-Y
    00D8 927A      ST	R7,-Y
    00D9 926A      ST	R6,-Y
    00DA 925A      ST	R5,-Y
    00DB 924A      ST	R4,-Y
    00DC 923A      ST	R3,-Y
    00DD 922A      ST	R2,-Y
    00DE 921A      ST	R1,-Y
    00DF 920A      ST	R0,-Y
    00E0 B60F      IN	R0,P3F
    00E1 920A      ST	R0,-Y
    00E2 9508      RET
pop_lset:
    00E3 9009      LD	R0,Y+
    00E4 BE0F      OUT	P3F,R0
    00E5 9009      LD	R0,Y+
    00E6 9019      LD	R1,Y+
    00E7 9029      LD	R2,Y+
    00E8 9039      LD	R3,Y+
    00E9 9049      LD	R4,Y+
    00EA 9059      LD	R5,Y+
    00EB 9069      LD	R6,Y+
    00EC 9079      LD	R7,Y+
    00ED 9089      LD	R8,Y+
    00EE 9099      LD	R9,Y+
    00EF 9109      LD	R16,Y+
    00F0 9119      LD	R17,Y+
    00F1 9129      LD	R18,Y+
    00F2 9139      LD	R19,Y+
    00F3 9189      LD	R24,Y+
    00F4 9199      LD	R25,Y+
    00F5 91A9      LD	R26,Y+
    00F6 91B9      LD	R27,Y+
    00F7 91E9      LD	R30,Y+
    00F8 91F9      LD	R31,Y+
    00F9 9508      RET
push_gset1:
    00FA 935A      ST	R21,-Y
    00FB 934A      ST	R20,-Y
    00FC 9508      RET
pop_gset1:
    00FD E0E1      LDI	R30,1
pop:
    00FE 9149      LD	R20,Y+
    00FF 9159      LD	R21,Y+
    0100 FDE0      SBRC	R30,0
    0101 9508      RET
    0102 9169      LD	R22,Y+
    0103 9179      LD	R23,Y+
    0104 FDE1      SBRC	R30,1
    0105 9508      RET
    0106 90A9      LD	R10,Y+
    0107 90B9      LD	R11,Y+
    0108 FDE2      SBRC	R30,2
    0109 9508      RET
    010A 90C9      LD	R12,Y+
    010B 90D9      LD	R13,Y+
    010C FDE3      SBRC	R30,3
    010D 9508      RET
    010E 90E9      LD	R14,Y+
    010F 90F9      LD	R15,Y+
    0110 9508      RET

⌨️ 快捷键说明

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