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

📄 q1.lst

📁 我学习AVR的代码例子
💻 LST
字号:
__start:
__text_start:
    002B E5CF      LDI	R28,0x5F
    002C E0D4      LDI	R29,4
    002D BFCD      OUT	0x3D,R28
    002E BFDE      OUT	0x3E,R29
    002F 51C0      SUBI	R28,0x10
    0030 40D0      SBCI	R29,0
    0031 EA0A      LDI	R16,0xAA
    0032 8308      STD	Y+0,R16
    0033 2400      CLR	R0
    0034 E6E1      LDI	R30,0x61
    0035 E0F0      LDI	R31,0
    0036 E010      LDI	R17,0
    0037 36E1      CPI	R30,0x61
    0038 07F1      CPC	R31,R17
    0039 F011      BEQ	0x003C
    003A 9201      ST	R0,Z+
    003B CFFB      RJMP	0x0037
    003C 8300      STD	Z+0,R16
    003D E5E4      LDI	R30,0x54
    003E E0F0      LDI	R31,0
    003F E6A0      LDI	R26,0x60
    0040 E0B0      LDI	R27,0
    0041 E010      LDI	R17,0
    0042 35E5      CPI	R30,0x55
    0043 07F1      CPC	R31,R17
    0044 F021      BEQ	0x0049
    0045 95C8      LPM
    0046 9631      ADIW	R30,1
    0047 920D      ST	R0,X+
    0048 CFF9      RJMP	0x0042
    0049 940E008F  CALL	_main
_exit:
    004B CFFF      RJMP	_exit
FILE: q1.c
(0001) #include "iom16v.h"
(0002) #define LOBYTE(a) ((BYTE)(a&0x0f))
(0003) #define HIBYTE(a) ((BYTE)((a)>>4))
(0004) #define _asm asm
(0005) #define WDR() 	asm("wdr")
(0006) #define SEI()	asm("sei")
(0007) #define CLI()	asm("cli")
(0008) #define NOP()	asm("nop")
(0009) #define SLEEP() asm("sleep")
(0010) #define led_on() (PORTA =0x00)
(0011) #define led_off() (PORTA =0xff)
(0012) char i=0;
(0013) void delay_2us(int time)//微秒级延时程序
(0014)  {     
(0015)    do
(0016) 	 {
(0017) 	   time--;
_delay_2us:
  time                 --> R16
    004C 5001      SUBI	R16,1
    004D 4010      SBCI	R17,0
(0018) 	   //WDR();
(0019) 	 }	
(0020)    while (time>1);
    004E E081      LDI	R24,1
    004F E090      LDI	R25,0
    0050 1780      CP	R24,R16
    0051 0791      CPC	R25,R17
    0052 F3CC      BLT	0x004C
    0053 9508      RET
_delay_ms:
  time                 --> R20
    0054 940E00A2  CALL	push_gset1
    0056 01A8      MOVW	R20,R16
(0021)  }	   
(0022) void delay_ms(unsigned int time)//毫秒级延时程序
(0023)  {
    0057 C005      RJMP	0x005D
(0024)    while(time!=0)
(0025) 	 {		
(0026) 	   delay_2us(500);
    0058 EF04      LDI	R16,0xF4
    0059 E011      LDI	R17,1
    005A DFF1      RCALL	_delay_2us
(0027) 	   time--;
    005B 5041      SUBI	R20,1
    005C 4050      SBCI	R21,0
    005D 3040      CPI	R20,0
    005E 0745      CPC	R20,R21
    005F F7C1      BNE	0x0058
    0060 940E00A5  CALL	pop_gset1
    0062 9508      RET
(0028) 	 }
(0029)    //WDR();
(0030)  }
(0031) void port_init(void)
(0032)  {
(0033)    DDRA  = 0xff;
_port_init:
    0063 EF8F      LDI	R24,0xFF
    0064 BB8A      OUT	0x1A,R24
(0034)    PORTA  = 0x00;
    0065 2422      CLR	R2
    0066 BA2B      OUT	0x1B,R2
    0067 9508      RET
(0035)  }
(0036) void T_init(void)
(0037)  {
(0038)    TCCR1A=0x00;
_T_init:
    0068 2422      CLR	R2
    0069 BC2F      OUT	0x2F,R2
(0039)    TCCR1B=0x00;       //停止定时器1
    006A BC2E      OUT	0x2E,R2
(0040)    
(0041)    TCNT1H=0xc2;
    006B EC82      LDI	R24,0xC2
    006C BD8D      OUT	0x2D,R24
(0042)    TCNT1L=0xf7;       //定时0.5s
    006D EF87      LDI	R24,0xF7
    006E BD8C      OUT	0x2C,R24
(0043)    
(0044)    TCCR1B=0x04;       //256分频
    006F E084      LDI	R24,4
    0070 BD8E      OUT	0x2E,R24
    0071 9508      RET
_timer1_ovf:
    0072 922A      ST	R2,-Y
    0073 938A      ST	R24,-Y
    0074 B62F      IN	R2,0x3F
    0075 922A      ST	R2,-Y
(0045)    
(0046)  }
(0047) #pragma interrupt_handler timer1_ovf:9
(0048) void timer1_ovf(void)                    //位闪动即修改
(0049)  {
(0050)    TCNT1H=0xc2;
    0076 EC82      LDI	R24,0xC2
    0077 BD8D      OUT	0x2D,R24
(0051)    TCNT1L=0xf7;
    0078 EF87      LDI	R24,0xF7
    0079 BD8C      OUT	0x2C,R24
(0052)    TCCR1B=0x04;
    007A E084      LDI	R24,4
    007B BD8E      OUT	0x2E,R24
(0053)    if(i==1){i=0;led_on();}
    007C 91800060  LDS	R24,i
    007E 3081      CPI	R24,1
    007F F429      BNE	0x0085
    0080 2422      CLR	R2
    0081 92200060  STS	i,R2
    0083 BA2B      OUT	0x1B,R2
    0084 C005      RJMP	0x008A
(0054)    else {i=1;led_off();}
    0085 E081      LDI	R24,1
    0086 93800060  STS	i,R24
    0088 EF8F      LDI	R24,0xFF
    0089 BB8B      OUT	0x1B,R24
    008A 9029      LD	R2,Y+
    008B BE2F      OUT	0x3F,R2
    008C 9189      LD	R24,Y+
    008D 9029      LD	R2,Y+
    008E 9518      RETI
(0055)  }
(0056) void main(void)
(0057)  {
(0058)    port_init();
_main:
    008F DFD3      RCALL	_port_init
(0059)    T_init();
    0090 DFD7      RCALL	_T_init
(0060)    TIMSK=0X45;
    0091 E485      LDI	R24,0x45
    0092 BF89      OUT	0x39,R24
(0061)    SEI();
    0093 9478      BSET	7
    0094 C003      RJMP	0x0098
(0062)    while(1)
(0063)    {
(0064)     delay_ms(1000);
FILE: <library>
    0095 EE08      LDI	R16,0xE8
    0096 E013      LDI	R17,3
    0097 DFBC      RCALL	_delay_ms
    0098 CFFC      RJMP	0x0095
    0099 9508      RET
push_gset5:
    009A 92FA      ST	R15,-Y
    009B 92EA      ST	R14,-Y
push_gset4:
    009C 92DA      ST	R13,-Y
    009D 92CA      ST	R12,-Y
push_gset3:
    009E 92BA      ST	R11,-Y
    009F 92AA      ST	R10,-Y
push_gset2:
    00A0 937A      ST	R23,-Y
    00A1 936A      ST	R22,-Y
push_gset1:
    00A2 935A      ST	R21,-Y
    00A3 934A      ST	R20,-Y
    00A4 9508      RET
pop_gset1:
    00A5 E0E1      LDI	R30,1
pop:
    00A6 9149      LD	R20,Y+
    00A7 9159      LD	R21,Y+
    00A8 FDE0      SBRC	R30,0
    00A9 9508      RET
    00AA 9169      LD	R22,Y+
    00AB 9179      LD	R23,Y+
    00AC FDE1      SBRC	R30,1
    00AD 9508      RET
    00AE 90A9      LD	R10,Y+
    00AF 90B9      LD	R11,Y+
    00B0 FDE2      SBRC	R30,2
    00B1 9508      RET
    00B2 90C9      LD	R12,Y+
    00B3 90D9      LD	R13,Y+
    00B4 FDE3      SBRC	R30,3
    00B5 9508      RET
    00B6 90E9      LD	R14,Y+
    00B7 90F9      LD	R15,Y+
    00B8 9508      RET

⌨️ 快捷键说明

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