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

📄 onekey.lst

📁 protues_atmeg8学习之:按键篇源代码
💻 LST
字号:
__start:
__text_start:
    0018 E5CF      LDI	R28,0x5F
    0019 E0D4      LDI	R29,4
    001A BFCD      OUT	0x3D,R28
    001B BFDE      OUT	0x3E,R29
    001C 51C0      SUBI	R28,0x10
    001D 40D0      SBCI	R29,0
    001E EA0A      LDI	R16,0xAA
    001F 8308      STD	Y+0,R16
    0020 2400      CLR	R0
    0021 E6E0      LDI	R30,0x60
    0022 E0F0      LDI	R31,0
    0023 E010      LDI	R17,0
    0024 36E1      CPI	R30,0x61
    0025 07F1      CPC	R31,R17
    0026 F011      BEQ	0x0029
    0027 9201      ST	R0,Z+
    0028 CFFB      RJMP	0x0024
    0029 8300      STD	Z+0,R16
    002A E3E0      LDI	R30,0x30
    002B E0F0      LDI	R31,0
    002C E6A0      LDI	R26,0x60
    002D E0B0      LDI	R27,0
    002E E010      LDI	R17,0
    002F 33E0      CPI	R30,0x30
    0030 07F1      CPC	R31,R17
    0031 F021      BEQ	0x0036
    0032 95C8      LPM
    0033 9631      ADIW	R30,1
    0034 920D      ST	R0,X+
    0035 CFF9      RJMP	0x002F
    0036 D044      RCALL	_main
_exit:
    0037 CFFF      RJMP	_exit
FILE: F:\Learn\AVR\Pro_Mega8\KEY\OneKey\Delay.h
(0001) //延时1MS
(0002) void delay_1ms(void)
(0003) { 
(0004)     unsigned int i;
(0005)     for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
  i                    --> R16
    0038 E001      LDI	R16,1
    0039 E010      LDI	R17,0
    003A C002      RJMP	0x003D
    003B 5F0F      SUBI	R16,0xFF
    003C 4F1F      SBCI	R17,0xFF
    003D 3706      CPI	R16,0x76
    003E E0E4      LDI	R30,4
    003F 071E      CPC	R17,R30
    0040 F3D0      BCS	0x003B
(0006)         ;
(0007) }
    0041 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0042 D077      RCALL	push_gset2
    0043 01B8      MOVW	R22,R16
(0008) 
(0009) //延时nMS
(0010) void delay_ms(unsigned int n)
(0011) {
(0012)     unsigned int i=0;
    0044 2744      CLR	R20
    0045 2755      CLR	R21
    0046 C003      RJMP	0x004A
(0013)     while(i<n)
(0014)     {
(0015) 	    delay_1ms();
    0047 DFF0      RCALL	_delay_1ms
(0016)         i++;
    0048 5F4F      SUBI	R20,0xFF
    0049 4F5F      SBCI	R21,0xFF
    004A 1746      CP	R20,R22
    004B 0757      CPC	R21,R23
    004C F3D0      BCS	0x0047
(0017)     }
(0018) } 
    004D D053      RCALL	pop_gset2
    004E 9508      RET
_ScanKey:
  key                  --> R20
    004F D06A      RCALL	push_gset2
FILE: F:\Learn\AVR\Pro_Mega8\KEY\OneKey\OneKey.C
(0001) /******************************************/
(0002) //文件名:Int0.c
(0003) //功能: 外部中断的应用
(0004) //作者:  young
(0005) //时间: 2006.10.1
(0006) //目标MCU:ATmega8   
(0007) //晶振:  8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) //#include <macros.h>
(0011) #include "Delay.h"
(0012) 
(0013) unsigned char CountNum;   //全局变量,用来计数
(0014) 
(0015) //按键扫描函数
(0016) void ScanKey(void)
(0017) {
(0018)     unsigned char key;	
(0019) 	key=PINC;
    0050 B343      IN	R20,0x13
(0020)     if(1==key&0x01)	
    0051 3041      CPI	R20,1
    0052 F419      BNE	0x0056
    0053 E061      LDI	R22,1
    0054 E070      LDI	R23,0
    0055 C002      RJMP	0x0058
    0056 2766      CLR	R22
    0057 2777      CLR	R23
    0058 FF60      SBRS	R22,0
    0059 C001      RJMP	0x005B
(0021) 	    return;	
    005A C01E      RJMP	0x0079
(0022) 	delay_ms(10);
    005B E00A      LDI	R16,0xA
    005C E010      LDI	R17,0
    005D DFE4      RCALL	_delay_ms
(0023) 		
(0024) 	key=PINC;
    005E B343      IN	R20,0x13
(0025) 	if(1==key&0x01)	
    005F 3041      CPI	R20,1
    0060 F419      BNE	0x0064
    0061 E061      LDI	R22,1
    0062 E070      LDI	R23,0
    0063 C002      RJMP	0x0066
    0064 2766      CLR	R22
    0065 2777      CLR	R23
    0066 FF60      SBRS	R22,0
    0067 C001      RJMP	0x0069
(0026) 	    return;
    0068 C010      RJMP	0x0079
(0027) 	CountNum++;
    0069 91800060  LDS	R24,_CountNum
    006B 5F8F      SUBI	R24,0xFF
    006C 93800060  STS	_CountNum,R24
    006E C001      RJMP	0x0070
(0028) 	while(0==key&0x01)	
(0029) 	    key=PINC;	
    006F B343      IN	R20,0x13
    0070 2344      TST	R20
    0071 F419      BNE	0x0075
    0072 E061      LDI	R22,1
    0073 E070      LDI	R23,0
    0074 C002      RJMP	0x0077
    0075 2766      CLR	R22
    0076 2777      CLR	R23
    0077 FD60      SBRC	R22,0
    0078 CFF6      RJMP	0x006F
(0030) }
    0079 D027      RCALL	pop_gset2
    007A 9508      RET
_main:
  temp                 --> Y+1
  num                  --> Y+0
    007B 972A      SBIW	R28,0xA
(0031) 
(0032) //主函数,显示数据时先关中断,然后再打开
(0033) void main()
(0034) {
(0035) 	unsigned char temp;
(0036) 	unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 
    007C E286      LDI	R24,0x26
    007D E090      LDI	R25,0
    007E 01FE      MOVW	R30,R28
    007F E00A      LDI	R16,0xA
    0080 E010      LDI	R17,0
    0081 93FA      ST	R31,-Y
    0082 93EA      ST	R30,-Y
    0083 939A      ST	R25,-Y
    0084 938A      ST	R24,-Y
    0085 D037      RCALL	asgncblk
(0037) 	                       0x6D, 0x7D, 0x07, 0x7F, 0x6F};
(0038) 	//初始化端口
(0039) 	DDRB=0xFF;	  //设置B口为输出模式
    0086 EF8F      LDI	R24,0xFF
    0087 BB87      OUT	0x17,R24
(0040) 	PORTB=0xFF;	  //置高电平
    0088 BB88      OUT	0x18,R24
(0041) 	DDRC=0x00;
    0089 2422      CLR	R2
    008A BA24      OUT	0x14,R2
(0042) 	//PORTC=0xFF;	    	
(0043) 	
(0044) 	CountNum=0;   //初始化全局变量	
    008B 92200060  STS	_CountNum,R2
    008D C010      RJMP	0x009E
(0045) 	while (1)
(0046) 	{	
(0047) 	    ScanKey();//扫描按键
    008E DFC0      RCALL	_ScanKey
(0048) 		if(CountNum>=10)
    008F 91800060  LDS	R24,_CountNum
    0091 308A      CPI	R24,0xA
    0092 F018      BCS	0x0096
(0049) 		    CountNum-=10;        			
    0093 508A      SUBI	R24,0xA
    0094 93800060  STS	_CountNum,R24
(0050) 		PORTB=num[CountNum];		
    0096 01CE      MOVW	R24,R28
    0097 91E00060  LDS	R30,_CountNum
    0099 27FF      CLR	R31
    009A 0FE8      ADD	R30,R24
    009B 1FF9      ADC	R31,R25
    009C 8020      LDD	R2,Z+0
    009D BA28      OUT	0x18,R2
    009E CFEF      RJMP	0x008E
(0051)      }
(0052) }
FILE: <library>
    009F 962A      ADIW	R28,0xA
    00A0 9508      RET
pop_gset2:
    00A1 E0E2      LDI	R30,2
    00A2 C004      RJMP	pop
push_gset1:
    00A3 935A      ST	R21,-Y
    00A4 934A      ST	R20,-Y
    00A5 9508      RET
pop_gset1:
    00A6 E0E1      LDI	R30,1
pop:
    00A7 9149      LD	R20,Y+
    00A8 9159      LD	R21,Y+
    00A9 FDE0      SBRC	R30,0
    00AA 9508      RET
    00AB 9169      LD	R22,Y+
    00AC 9179      LD	R23,Y+
    00AD FDE1      SBRC	R30,1
    00AE 9508      RET
    00AF 90A9      LD	R10,Y+
    00B0 90B9      LD	R11,Y+
    00B1 FDE2      SBRC	R30,2
    00B2 9508      RET
    00B3 90C9      LD	R12,Y+
    00B4 90D9      LD	R13,Y+
    00B5 FDE3      SBRC	R30,3
    00B6 9508      RET
    00B7 90E9      LD	R14,Y+
    00B8 90F9      LD	R15,Y+
    00B9 9508      RET
push_gset2:
    00BA 937A      ST	R23,-Y
    00BB 936A      ST	R22,-Y
    00BC CFE6      RJMP	push_gset1
asgncblk:
    00BD 93AA      ST	R26,-Y
    00BE 93BA      ST	R27,-Y
    00BF 93EA      ST	R30,-Y
    00C0 93FA      ST	R31,-Y
    00C1 920A      ST	R0,-Y
    00C2 81AF      LDD	R26,Y+7
    00C3 85B8      LDD	R27,Y+8
    00C4 81ED      LDD	R30,Y+5
    00C5 81FE      LDD	R31,Y+6
    00C6 3000      CPI	R16,0
    00C7 0701      CPC	R16,R17
    00C8 F031      BEQ	0x00CF
    00C9 95C8      LPM
    00CA 920D      ST	R0,X+
    00CB 9631      ADIW	R30,1
    00CC 5001      SUBI	R16,1
    00CD 4010      SBCI	R17,0
    00CE CFF7      RJMP	0x00C6
    00CF 9009      LD	R0,Y+
    00D0 91F9      LD	R31,Y+
    00D1 91E9      LD	R30,Y+
    00D2 91B9      LD	R27,Y+
    00D3 91A9      LD	R26,Y+
    00D4 9624      ADIW	R28,4
    00D5 9508      RET

⌨️ 快捷键说明

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