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

📄 atmega32.lst

📁 学单片机得先弄懂它的IO口
💻 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 + -