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

📄 counter.lst

📁 protues_atmeg8学习之:LED篇源代码
💻 LST
字号:
__start:
__text_start:
    001A E5CF      LDI	R28,0x5F
    001B E0D4      LDI	R29,4
    001C BFCD      OUT	0x3D,R28
    001D BFDE      OUT	0x3E,R29
    001E 51C0      SUBI	R28,0x10
    001F 40D0      SBCI	R29,0
    0020 EA0A      LDI	R16,0xAA
    0021 8308      STD	Y+0,R16
    0022 2400      CLR	R0
    0023 E6EA      LDI	R30,0x6A
    0024 E0F0      LDI	R31,0
    0025 E010      LDI	R17,0
    0026 36EA      CPI	R30,0x6A
    0027 07F1      CPC	R31,R17
    0028 F011      BEQ	0x002B
    0029 9201      ST	R0,Z+
    002A CFFB      RJMP	0x0026
    002B 8300      STD	Z+0,R16
    002C E2EA      LDI	R30,0x2A
    002D E0F0      LDI	R31,0
    002E E6A0      LDI	R26,0x60
    002F E0B0      LDI	R27,0
    0030 E010      LDI	R17,0
    0031 33E4      CPI	R30,0x34
    0032 07F1      CPC	R31,R17
    0033 F021      BEQ	0x0038
    0034 95C8      LPM
    0035 9631      ADIW	R30,1
    0036 920D      ST	R0,X+
    0037 CFF9      RJMP	0x0031
    0038 D018      RCALL	_main
_exit:
    0039 CFFF      RJMP	_exit
FILE: F:\Learn\AVR\Pro_Mega8\LED\Counter\Counter.c
(0001) /******************************************/
(0002) //文件名:Counter.c
(0003) //功能: 多个LED数码观的控制
(0004) //作者:  young
(0005) //时间: 2006.10.1
(0006) //目标MCU:ATmega8   
(0007) //晶振:  8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) 
(0011) //延时1MS
(0012) void delay_1ms(void)
(0013) { 
(0014)     unsigned int i;
(0015)     for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
  i                    --> R16
    003A E001      LDI	R16,1
    003B E010      LDI	R17,0
    003C C002      RJMP	0x003F
    003D 5F0F      SUBI	R16,0xFF
    003E 4F1F      SBCI	R17,0xFF
    003F 3706      CPI	R16,0x76
    0040 E0E4      LDI	R30,4
    0041 071E      CPC	R17,R30
    0042 F3D0      BCS	0x003D
(0016)         ;
(0017) }
    0043 9508      RET
_delay_ms:
  i                    --> R20
  n                    --> R22
    0044 D0DB      RCALL	push_gset2
    0045 01B8      MOVW	R22,R16
(0018) 
(0019) //延时nMS
(0020) void delay_ms(unsigned int n)
(0021) {
(0022)     unsigned int i=0;
    0046 2744      CLR	R20
    0047 2755      CLR	R21
    0048 C003      RJMP	0x004C
(0023)     while(i<n)
(0024)     {
(0025) 	    delay_1ms();
    0049 DFF0      RCALL	_delay_1ms
(0026)         i++;
    004A 5F4F      SUBI	R20,0xFF
    004B 4F5F      SBCI	R21,0xFF
    004C 1746      CP	R20,R22
    004D 0757      CPC	R21,R23
    004E F3D0      BCS	0x0049
(0027)     }
(0028) } 
    004F D0B7      RCALL	pop_gset2
    0050 9508      RET
_main:
  j                    --> R20
  CountNum             --> Y+0
  i                    --> R22
    0051 9724      SBIW	R28,4
(0029) 
(0030) //主函数,依次显示数字0~9
(0031) void main()
(0032) {
(0033) 	unsigned char i,j;
(0034) 	static unsigned char LedNum[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 
(0035) 	                       0x6D, 0x7D, 0x07, 0x7F, 0x6F};	
(0036) 	//显示小数点要加0x80
(0037)     unsigned char CountNum[4]={0, 0, 0, 0};    //计数的百、十、个位和十分位
    0052 E286      LDI	R24,0x26
    0053 E090      LDI	R25,0
    0054 01FE      MOVW	R30,R28
    0055 E004      LDI	R16,4
    0056 E010      LDI	R17,0
    0057 93FA      ST	R31,-Y
    0058 93EA      ST	R30,-Y
    0059 939A      ST	R25,-Y
    005A 938A      ST	R24,-Y
    005B D0CD      RCALL	asgncblk
(0038) 	DDRB=0xFF;	//设置B口为输出模式
    005C EF8F      LDI	R24,0xFF
    005D BB87      OUT	0x17,R24
(0039) 	PORTB=0xFF;	//置高电平
    005E BB88      OUT	0x18,R24
(0040) 	DDRC=0x0F;
    005F E08F      LDI	R24,0xF
    0060 BB84      OUT	0x14,R24
(0041) 	PORTC=0xFF;
    0061 EF8F      LDI	R24,0xFF
    0062 BB85      OUT	0x15,R24
    0063 C088      RJMP	0x00EC
(0042) 	   
(0043) 	while (1)
(0044) 	{	
(0045) 	    i=0;	
    0064 2766      CLR	R22
(0046)         for(j=0;j<100;j++) //依次显示1S"000.0"
    0065 2744      CLR	R20
    0066 C01F      RJMP	0x0086
(0047)     	{
(0048) 		    i=++i%4;
    0067 2F86      MOV	R24,R22
    0068 5F8F      SUBI	R24,0xFF
    0069 E014      LDI	R17,4
    006A 2F08      MOV	R16,R24
    006B D083      RCALL	mod8u
    006C 2F60      MOV	R22,R16
(0049) 		    PORTC&=~(1<<i);
    006D E001      LDI	R16,1
    006E 2F16      MOV	R17,R22
    006F D0B3      RCALL	lsl8
    0070 2E20      MOV	R2,R16
    0071 9420      COM	R2
    0072 B235      IN	R3,0x15
    0073 2032      AND	R3,R2
    0074 BA35      OUT	0x15,R3
(0050) 			if(2==i)
    0075 3062      CPI	R22,2
    0076 F429      BNE	0x007C
(0051) 			    PORTB=LedNum[0]+0x80;
    0077 91800060  LDS	R24,0x60
    0079 5880      SUBI	R24,0x80
    007A BB88      OUT	0x18,R24
    007B C003      RJMP	0x007F
(0052) 			else	
(0053) 			    PORTB=LedNum[0];		
    007C 90200060  LDS	R2,0x60
    007E BA28      OUT	0x18,R2
(0054) 			delay_ms(10);
    007F E00A      LDI	R16,0xA
    0080 E010      LDI	R17,0
    0081 DFC2      RCALL	_delay_ms
(0055) 			PORTC|=0xFF;	
    0082 B385      IN	R24,0x15
    0083 6F8F      ORI	R24,0xFF
    0084 BB85      OUT	0x15,R24
    0085 9543      INC	R20
    0086 3644      CPI	R20,0x64
    0087 F2F8      BCS	0x0067
(0056)     	}
(0057) 		
(0058) 		CountNum[0]=CountNum[1]=CountNum[2]=CountNum[3]=0;
    0088 2422      CLR	R2
    0089 822B      STD	Y+3,R2
    008A 822A      STD	Y+2,R2
    008B 8229      STD	Y+1,R2
    008C 8228      STD	Y+0,R2
    008D C05D      RJMP	0x00EB
(0059) 		while(1)
(0060) 		{
(0061) 			if(CountNum[3]++==9)
    008E 802B      LDD	R2,Y+3
    008F 2D82      MOV	R24,R2
    0090 5F8F      SUBI	R24,0xFF
    0091 838B      STD	Y+3,R24
    0092 2D82      MOV	R24,R2
    0093 3089      CPI	R24,0x9
    0094 F4B9      BNE	0x00AC
(0062) 			{
(0063) 			    CountNum[3]=0;			    
    0095 2422      CLR	R2
    0096 822B      STD	Y+3,R2
(0064) 				if(9==CountNum[2]++)
    0097 802A      LDD	R2,Y+2
    0098 2D82      MOV	R24,R2
    0099 5F8F      SUBI	R24,0xFF
    009A 838A      STD	Y+2,R24
    009B 2D82      MOV	R24,R2
    009C 3089      CPI	R24,0x9
    009D F471      BNE	0x00AC
(0065) 			    {
(0066) 			        CountNum[2]=0;				    
    009E 2422      CLR	R2
    009F 822A      STD	Y+2,R2
(0067) 					if(9==CountNum[1]++)
    00A0 8029      LDD	R2,Y+1
    00A1 2D82      MOV	R24,R2
    00A2 5F8F      SUBI	R24,0xFF
    00A3 8389      STD	Y+1,R24
    00A4 2D82      MOV	R24,R2
    00A5 3089      CPI	R24,0x9
    00A6 F429      BNE	0x00AC
(0068) 			        {
(0069) 			            CountNum[1]=0;
    00A7 2422      CLR	R2
    00A8 8229      STD	Y+1,R2
(0070) 				        CountNum[0]++;
    00A9 8188      LDD	R24,Y+0
    00AA 5F8F      SUBI	R24,0xFF
    00AB 8388      STD	Y+0,R24
(0071) 					}
(0072) 			    }				
(0073) 			}
(0074) 					
(0075) 		    for(i=0;i<4;i++)
    00AC 2766      CLR	R22
    00AD C02D      RJMP	0x00DB
(0076) 		    {
(0077) 		        PORTC&=~(1<<i);
    00AE E001      LDI	R16,1
    00AF 2F16      MOV	R17,R22
    00B0 D072      RCALL	lsl8
    00B1 2E20      MOV	R2,R16
    00B2 9420      COM	R2
    00B3 B235      IN	R3,0x15
    00B4 2032      AND	R3,R2
    00B5 BA35      OUT	0x15,R3
(0078) 				if(2==i)
    00B6 3062      CPI	R22,2
    00B7 F479      BNE	0x00C7
(0079) 				    PORTB=LedNum[CountNum[i]]+0x80;
    00B8 01CE      MOVW	R24,R28
    00B9 2FE6      MOV	R30,R22
    00BA 27FF      CLR	R31
    00BB 0FE8      ADD	R30,R24
    00BC 1FF9      ADC	R31,R25
    00BD 81E0      LDD	R30,Z+0
    00BE 27FF      CLR	R31
    00BF E680      LDI	R24,0x60
    00C0 E090      LDI	R25,0
    00C1 0FE8      ADD	R30,R24
    00C2 1FF9      ADC	R31,R25
    00C3 8180      LDD	R24,Z+0
    00C4 5880      SUBI	R24,0x80
    00C5 BB88      OUT	0x18,R24
    00C6 C00D      RJMP	0x00D4
(0080) 				else
(0081) 				    PORTB=LedNum[CountNum[i]];			    
    00C7 01CE      MOVW	R24,R28
    00C8 2FE6      MOV	R30,R22
    00C9 27FF      CLR	R31
    00CA 0FE8      ADD	R30,R24
    00CB 1FF9      ADC	R31,R25
    00CC 81E0      LDD	R30,Z+0
    00CD 27FF      CLR	R31
    00CE E680      LDI	R24,0x60
    00CF E090      LDI	R25,0
    00D0 0FE8      ADD	R30,R24
    00D1 1FF9      ADC	R31,R25
    00D2 8020      LDD	R2,Z+0
    00D3 BA28      OUT	0x18,R2
(0082) 			    delay_ms(10);
    00D4 E00A      LDI	R16,0xA
    00D5 E010      LDI	R17,0
    00D6 DF6D      RCALL	_delay_ms
(0083) 			    PORTC|=0xFF;
    00D7 B385      IN	R24,0x15
    00D8 6F8F      ORI	R24,0xFF
    00D9 BB85      OUT	0x15,R24
    00DA 9563      INC	R22
    00DB 3064      CPI	R22,4
    00DC F408      BCC	0x00DE
    00DD CFD0      RJMP	0x00AE
(0084) 			}
(0085) 	        
(0086) 			if(CountNum[0]==9 && CountNum[1]==9 && CountNum[2]==9 && CountNum[3]==9)
    00DE 8188      LDD	R24,Y+0
    00DF 3089      CPI	R24,0x9
    00E0 F451      BNE	0x00EB
    00E1 8189      LDD	R24,Y+1
    00E2 3089      CPI	R24,0x9
    00E3 F439      BNE	0x00EB
    00E4 818A      LDD	R24,Y+2
    00E5 3089      CPI	R24,0x9
    00E6 F421      BNE	0x00EB
    00E7 818B      LDD	R24,Y+3
    00E8 3089      CPI	R24,0x9
    00E9 F409      BNE	0x00EB
(0087) 			    break;			
    00EA C001      RJMP	0x00EC
    00EB CFA2      RJMP	0x008E
    00EC CF77      RJMP	0x0064
(0088) 		}		
(0089)      }
(0090) }
FILE: <library>
    00ED 9624      ADIW	R28,4
    00EE 9508      RET
mod8u:
    00EF 9468      BSET	6
    00F0 C001      RJMP	xdiv8u
div8u:
    00F1 94E8      BCLR	6
xdiv8u:
    00F2 932A      ST	R18,-Y
    00F3 92FA      ST	R15,-Y
    00F4 92EA      ST	R14,-Y
    00F5 24FF      CLR	R15
    00F6 24EE      CLR	R14
    00F7 E120      LDI	R18,0x10
    00F8 0F00      LSL	R16
    00F9 1CFF      ROL	R15
    00FA 1CEE      ROL	R14
    00FB 16E1      CP	R14,R17
    00FC F010      BCS	0x00FF
    00FD 1AE1      SUB	R14,R17
    00FE 9503      INC	R16
    00FF 952A      DEC	R18
    0100 F7B9      BNE	0x00F8
    0101 F40E      BRTC	0x0103
    0102 2D0E      MOV	R16,R14
    0103 90E9      LD	R14,Y+
    0104 90F9      LD	R15,Y+
    0105 9129      LD	R18,Y+
    0106 9508      RET
pop_gset2:
    0107 E0E2      LDI	R30,2
    0108 C004      RJMP	pop
push_gset1:
    0109 935A      ST	R21,-Y
    010A 934A      ST	R20,-Y
    010B 9508      RET
pop_gset1:
    010C E0E1      LDI	R30,1
pop:
    010D 9149      LD	R20,Y+
    010E 9159      LD	R21,Y+
    010F FDE0      SBRC	R30,0
    0110 9508      RET
    0111 9169      LD	R22,Y+
    0112 9179      LD	R23,Y+
    0113 FDE1      SBRC	R30,1
    0114 9508      RET
    0115 90A9      LD	R10,Y+
    0116 90B9      LD	R11,Y+
    0117 FDE2      SBRC	R30,2
    0118 9508      RET
    0119 90C9      LD	R12,Y+
    011A 90D9      LD	R13,Y+
    011B FDE3      SBRC	R30,3
    011C 9508      RET
    011D 90E9      LD	R14,Y+
    011E 90F9      LD	R15,Y+
    011F 9508      RET
push_gset2:
    0120 937A      ST	R23,-Y
    0121 936A      ST	R22,-Y
    0122 CFE6      RJMP	push_gset1
lsl8:
    0123 2311      TST	R17
    0124 F019      BEQ	0x0128
    0125 0F00      LSL	R16
    0126 951A      DEC	R17
    0127 CFFB      RJMP	lsl8
    0128 9508      RET
asgncblk:
    0129 93AA      ST	R26,-Y
    012A 93BA      ST	R27,-Y
    012B 93EA      ST	R30,-Y
    012C 93FA      ST	R31,-Y
    012D 920A      ST	R0,-Y
    012E 81AF      LDD	R26,Y+7
    012F 85B8      LDD	R27,Y+8
    0130 81ED      LDD	R30,Y+5
    0131 81FE      LDD	R31,Y+6
    0132 3000      CPI	R16,0
    0133 0701      CPC	R16,R17
    0134 F031      BEQ	0x013B
    0135 95C8      LPM
    0136 920D      ST	R0,X+
    0137 9631      ADIW	R30,1
    0138 5001      SUBI	R16,1
    0139 4010      SBCI	R17,0
    013A CFF7      RJMP	0x0132
    013B 9009      LD	R0,Y+
    013C 91F9      LD	R31,Y+
    013D 91E9      LD	R30,Y+
    013E 91B9      LD	R27,Y+
    013F 91A9      LD	R26,Y+
    0140 9624      ADIW	R28,4
    0141 9508      RET

⌨️ 快捷键说明

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