📄 counter.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 + -