📄 atmega32.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D8 LDI R29,0x8
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 36E0 CPI R30,0x60
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E00C6 CALL _main
_exit:
004A CFFF RJMP _exit
FILE: C:\icc\mega32\led.c
(0001) //ICC-AVR application builder : 2008-07-02 下午 03:28:23
(0002) // Target : M32
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom32v.h>
(0006) #include <macros.h>
(0007) #define uchar unsigned char
(0008)
(0009) void port_init(void) //端口定义
(0010) {
(0011) PORTA = 0x00; //低电平
_port_init:
004B 2422 CLR R2
004C BA2B OUT 0x1B,R2
(0012) DDRA = 0xFF; //输入
004D EF8F LDI R24,0xFF
004E BB8A OUT 0x1A,R24
(0013) PORTB = 0x00; //低电平
004F BA28 OUT 0x18,R2
(0014) DDRB = 0xFF; //输出
0050 BB87 OUT 0x17,R24
(0015) PORTC = 0x00;
0051 BA25 OUT 0x15,R2
(0016) DDRC = 0x00;
0052 BA24 OUT 0x14,R2
(0017) PORTD = 0x00;
0053 BA22 OUT 0x12,R2
(0018) DDRD = 0x3C;
0054 E38C LDI R24,0x3C
0055 BB81 OUT 0x11,R24
0056 9508 RET
(0019) }
(0020)
(0021) //call this routine to initialize all peripherals
(0022) void init_devices(void)
(0023) {
(0024) //stop errant interrupts until set up
(0025) CLI(); //disable all interrupts
_init_devices:
0057 94F8 BCLR 7
(0026) port_init();
0058 DFF2 RCALL _port_init
(0027)
(0028) MCUCR = 0x00;
0059 2422 CLR R2
005A BE25 OUT 0x35,R2
(0029) GICR = 0x00;
005B BE2B OUT 0x3B,R2
(0030) TIMSK = 0x00; //timer interrupt sources
005C BE29 OUT 0x39,R2
(0031) SEI(); //re-enable interrupts
005D 9478 BSET 7
005E 9508 RET
(0032) //all peripherals are now initialized
(0033) }
(0034)
(0035) //1微秒延时
(0036) void delay_1us(void)
(0037) { uchar i=8;
_delay_1us:
i --> R16
005F E008 LDI R16,0x8
(0038) asm("nop");
0060 0000 NOP
(0039) i--;
0061 950A DEC R16
0062 9508 RET
_delay_nus:
t --> R20
0063 940E00D3 CALL push_gset1
0065 2F40 MOV R20,R16
(0040) }
(0041) //长微秒延时
(0042) void delay_nus(uchar t)
(0043) { while(t--)
0066 C001 RJMP 0x0068
(0044) delay_1us();
0067 DFF7 RCALL _delay_1us
0068 2E24 MOV R2,R20
0069 2433 CLR R3
006A 5041 SUBI R20,1
006B 2022 TST R2
006C F7D1 BNE 0x0067
006D 940E00D6 CALL pop_gset1
006F 9508 RET
(0045) }
(0046) //1毫秒延时
(0047) void delay_1ms(void)
(0048) {
(0049) delay_nus(1000);
_delay_1ms:
0070 EE08 LDI R16,0xE8
0071 DFF1 RCALL _delay_nus
0072 9508 RET
_delay_nms:
t --> R20
0073 940E00D3 CALL push_gset1
0075 2F40 MOV R20,R16
(0050) }
(0051) //长毫秒延时
(0052) void delay_nms(uchar t)
(0053) { while(t--)
0076 C001 RJMP 0x0078
(0054) delay_1ms();
0077 DFF8 RCALL _delay_1ms
0078 2E24 MOV R2,R20
0079 2433 CLR R3
007A 5041 SUBI R20,1
007B 2022 TST R2
007C F7D1 BNE 0x0077
007D 940E00D6 CALL pop_gset1
007F 9508 RET
_led_out:
i --> R20
0080 940E00D3 CALL push_gset1
(0055) }
(0056) //定义LED等
(0057) void led_out(void)
(0058) { uchar i;
(0059) for(i=1;i<5;i++)
0082 E041 LDI R20,1
0083 C00B RJMP 0x008F
(0060) {PORTD|=BIT(6-i);
0084 E016 LDI R17,6
0085 1B14 SUB R17,R20
0086 E001 LDI R16,1
0087 940E00EA CALL lsl8
0089 B222 IN R2,0x12
008A 2A20 OR R2,R16
008B BA22 OUT 0x12,R2
(0061) delay_nms(500);}
008C EF04 LDI R16,0xF4
008D DFE5 RCALL _delay_nms
008E 9543 INC R20
008F 3045 CPI R20,5
0090 F398 BCS 0x0084
(0062) for(i=5;i<13;i++)
0091 E045 LDI R20,5
0092 C00B RJMP 0x009E
(0063) {PORTB|=BIT(12-i);
0093 E01C LDI R17,0xC
0094 1B14 SUB R17,R20
0095 E001 LDI R16,1
0096 940E00EA CALL lsl8
0098 B228 IN R2,0x18
0099 2A20 OR R2,R16
009A BA28 OUT 0x18,R2
(0064) delay_nms(500);}
009B EF04 LDI R16,0xF4
009C DFD6 RCALL _delay_nms
009D 9543 INC R20
009E 304D CPI R20,0xD
009F F398 BCS 0x0093
(0065) for(i=12;i>4;i--)
00A0 E04C LDI R20,0xC
00A1 C00D RJMP 0x00AF
(0066) {
(0067) PORTB&=~BIT(12-i);
00A2 E01C LDI R17,0xC
00A3 1B14 SUB R17,R20
00A4 E001 LDI R16,1
00A5 940E00EA CALL lsl8
00A7 2E20 MOV R2,R16
00A8 9420 COM R2
00A9 B238 IN R3,0x18
00AA 2032 AND R3,R2
00AB BA38 OUT 0x18,R3
(0068) delay_nms(500);
00AC EF04 LDI R16,0xF4
00AD DFC5 RCALL _delay_nms
00AE 954A DEC R20
00AF E084 LDI R24,4
00B0 1784 CP R24,R20
00B1 F380 BCS 0x00A2
(0069) }
(0070) for(i=4;i!=0;i--)
00B2 E044 LDI R20,4
00B3 C00D RJMP 0x00C1
(0071) {
(0072) PORTD&=~BIT(6-i);
00B4 E016 LDI R17,6
00B5 1B14 SUB R17,R20
00B6 E001 LDI R16,1
00B7 940E00EA CALL lsl8
00B9 2E20 MOV R2,R16
00BA 9420 COM R2
00BB B232 IN R3,0x12
00BC 2032 AND R3,R2
00BD BA32 OUT 0x12,R3
(0073) delay_nms(500);
00BE EF04 LDI R16,0xF4
00BF DFB3 RCALL _delay_nms
00C0 954A DEC R20
00C1 2344 TST R20
00C2 F789 BNE 0x00B4
00C3 940E00D6 CALL pop_gset1
00C5 9508 RET
(0074) }
(0075) }
(0076) //主程序开始
(0077) void main(void)
(0078) {
(0079) init_devices();
_main:
00C6 DF90 RCALL _init_devices
00C7 C001 RJMP 0x00C9
(0080) while(1)
(0081) {
(0082) led_out();
FILE: <library>
00C8 DFB7 RCALL _led_out
00C9 CFFE RJMP 0x00C8
00CA 9508 RET
push_gset5:
00CB 92FA ST R15,-Y
00CC 92EA ST R14,-Y
push_gset4:
00CD 92DA ST R13,-Y
00CE 92CA ST R12,-Y
push_gset3:
00CF 92BA ST R11,-Y
00D0 92AA ST R10,-Y
push_gset2:
00D1 937A ST R23,-Y
00D2 936A ST R22,-Y
push_gset1:
00D3 935A ST R21,-Y
00D4 934A ST R20,-Y
00D5 9508 RET
pop_gset1:
00D6 E0E1 LDI R30,1
pop:
00D7 9149 LD R20,Y+
00D8 9159 LD R21,Y+
00D9 FDE0 SBRC R30,0
00DA 9508 RET
00DB 9169 LD R22,Y+
00DC 9179 LD R23,Y+
00DD FDE1 SBRC R30,1
00DE 9508 RET
00DF 90A9 LD R10,Y+
00E0 90B9 LD R11,Y+
00E1 FDE2 SBRC R30,2
00E2 9508 RET
00E3 90C9 LD R12,Y+
00E4 90D9 LD R13,Y+
00E5 FDE3 SBRC R30,3
00E6 9508 RET
00E7 90E9 LD R14,Y+
00E8 90F9 LD R15,Y+
00E9 9508 RET
lsl8:
00EA 2311 TST R17
00EB F019 BEQ 0x00EF
00EC 0F00 LSL R16
00ED 951A DEC R17
00EE CFFB RJMP lsl8
00EF 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -