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

📄 led.lst

📁 这是关于AVR单片机学习的初步开发
💻 LST
字号:
__start:
__text_start:
    0013 E5CF      LDI	R28,0x5F
    0014 E0D4      LDI	R29,4
    0015 BFCD      OUT	0x3D,R28
    0016 BFDE      OUT	0x3E,R29
    0017 51C0      SUBI	R28,0x10
    0018 40D0      SBCI	R29,0
    0019 EA0A      LDI	R16,0xAA
    001A 8308      STD	Y+0,R16
    001B 2400      CLR	R0
    001C E6E0      LDI	R30,0x60
    001D E0F0      LDI	R31,0
    001E E010      LDI	R17,0
    001F 36E0      CPI	R30,0x60
    0020 07F1      CPC	R31,R17
    0021 F011      BEQ	0x0024
    0022 9201      ST	R0,Z+
    0023 CFFB      RJMP	0x001F
    0024 8300      STD	Z+0,R16
    0025 E2E6      LDI	R30,0x26
    0026 E0F0      LDI	R31,0
    0027 E6A0      LDI	R26,0x60
    0028 E0B0      LDI	R27,0
    0029 E010      LDI	R17,0
    002A 32E6      CPI	R30,0x26
    002B 07F1      CPC	R31,R17
    002C F021      BEQ	0x0031
    002D 95C8      LPM
    002E 9631      ADIW	R30,1
    002F 920D      ST	R0,X+
    0030 CFF9      RJMP	0x002A
    0031 D056      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\alf\MYDOCU~1\开发板\调试程序\led\led00.c
(0001) //I/O演示程序
(0002) //程序流程:全亮->全灭->PD隔一步进->全亮->全灭->PD隔二步进->全亮->全灭->PB全亮->pb0置位->pb0清零->PB0反转->全灭->(循环)
(0003) 
(0004) // Target : M8
(0005) // Crystal: 11.059Mhz
(0006) 
(0007) #include <iom8v.h>
(0008) #include <macros.h>
(0009) 
(0010) //起始全亮
(0011) void port_init(void)
(0012) {
(0013)  PORTB = 0x00;
_port_init:
    0033 2422      CLR	R2
    0034 BA28      OUT	0x18,R2
(0014)  DDRB  = 0xFF;
    0035 EF8F      LDI	R24,0xFF
    0036 BB87      OUT	0x17,R24
(0015)  PORTC = 0x00; 
    0037 BA25      OUT	0x15,R2
(0016)  DDRC  = 0x7F;
    0038 E78F      LDI	R24,0x7F
    0039 BB84      OUT	0x14,R24
(0017)  PORTD = 0x00;
    003A BA22      OUT	0x12,R2
(0018)  DDRD  = 0xFF;
    003B EF8F      LDI	R24,0xFF
    003C BB81      OUT	0x11,R24
(0019) }
    003D 9508      RET
_delay:
  i                    --> R20
  j                    --> R22
  tim                  --> R16
    003E D080      RCALL	push_gset2
(0020) 
(0021) //延时函数,大约1ms;
(0022) void delay(char tim)
(0023) {
(0024)  unsigned int i,j;
(0025)  for(i=0;i<tim;i++)
    003F 2744      CLR	R20
    0040 2755      CLR	R21
    0041 C00B      RJMP	0x004D
(0026)  	for(j=0;j<10000;j++);
    0042 2766      CLR	R22
    0043 2777      CLR	R23
    0044 C002      RJMP	0x0047
    0045 5F6F      SUBI	R22,0xFF
    0046 4F7F      SBCI	R23,0xFF
    0047 3160      CPI	R22,0x10
    0048 E2E7      LDI	R30,0x27
    0049 077E      CPC	R23,R30
    004A F3D0      BCS	0x0045
    004B 5F4F      SUBI	R20,0xFF
    004C 4F5F      SBCI	R21,0xFF
    004D 2E20      MOV	R2,R16
    004E 2433      CLR	R3
    004F 1542      CP	R20,R2
    0050 0553      CPC	R21,R3
    0051 F380      BCS	0x0042
(0027) }
    0052 D053      RCALL	pop_gset2
    0053 9508      RET
(0028) 
(0029) //led全亮
(0030) void led_on(void)
(0031) {
(0032)  PORTB = 0x00;
_led_on:
    0054 2422      CLR	R2
    0055 BA28      OUT	0x18,R2
(0033)  PORTC = 0x00;
    0056 BA25      OUT	0x15,R2
(0034)  PORTD = 0x00;
    0057 BA22      OUT	0x12,R2
(0035)  
(0036)  delay(5000);
    0058 E808      LDI	R16,0x88
(0037) }
    0059 CFE4      RJMP	_delay
(0038) //led全灭
(0039) void led_off(void)
(0040) {
(0041)  PORTB = 0xFF;
_led_off:
    005A EF8F      LDI	R24,0xFF
    005B BB88      OUT	0x18,R24
(0042)  PORTC = 0xFF;
    005C BB85      OUT	0x15,R24
(0043)  PORTD = 0xFF;
    005D BB82      OUT	0x12,R24
(0044)  
(0045)  delay(5000);
    005E E808      LDI	R16,0x88
(0046) }
    005F CFDE      RJMP	_delay
_pd_1:
  i                    --> R20
    0060 D047      RCALL	push_gset1
(0047) //PB隔1步进
(0048) void pd_1(void)
(0049) {
(0050)  char i;
(0051)  for (i = 0; i < 8; i++)
    0061 2744      CLR	R20
    0062 C009      RJMP	0x006C
(0052)  {
(0053)   	 PORTB = ~(1 << (i));//位操作结合移位操作
    0063 E001      LDI	R16,1
    0064 2F14      MOV	R17,R20
    0065 D05C      RCALL	lsl8
    0066 2E20      MOV	R2,R16
    0067 9420      COM	R2
    0068 BA28      OUT	0x18,R2
(0054) 	 delay(5000);
    0069 E808      LDI	R16,0x88
    006A DFD3      RCALL	_delay
    006B 9543      INC	R20
    006C 3048      CPI	R20,0x8
    006D F3A8      BCS	0x0063
(0055)  }
(0056) }
    006E D03C      RCALL	pop_gset1
    006F 9508      RET
_pd_2:
  i                    --> R20
    0070 D037      RCALL	push_gset1
(0057) //PB隔2步进
(0058) void pd_2(void)
(0059) {
(0060)  char i;
(0061)  for (i = 0; i < 8; i+=2)
    0071 2744      CLR	R20
    0072 C009      RJMP	0x007C
(0062)  {
(0063)   	 PORTB = ~(1 << (i));//位操作结合移位操作
    0073 E001      LDI	R16,1
    0074 2F14      MOV	R17,R20
    0075 D04C      RCALL	lsl8
    0076 2E20      MOV	R2,R16
    0077 9420      COM	R2
    0078 BA28      OUT	0x18,R2
(0064) 	 delay(5000);
    0079 E808      LDI	R16,0x88
    007A DFC3      RCALL	_delay
    007B 5F4E      SUBI	R20,0xFE
    007C 3048      CPI	R20,0x8
    007D F3A8      BCS	0x0073
(0065)  }
(0066) }
    007E D02C      RCALL	pop_gset1
    007F 9508      RET
(0067) 
(0068) //call this routine to initialise all peripherals
(0069) void init_devices(void)
(0070) {
(0071)  //stop errant interrupts until set up
(0072)  CLI(); //disable all interrupts
_init_devices:
    0080 94F8      BCLR	7
(0073)  port_init();
    0081 DFB1      RCALL	_port_init
(0074) 
(0075)  MCUCR = 0x00;
    0082 2422      CLR	R2
    0083 BE25      OUT	0x35,R2
(0076)  GICR  = 0x00;
    0084 BE2B      OUT	0x3B,R2
(0077)  TIMSK = 0x00; //timer interrupt sources
    0085 BE29      OUT	0x39,R2
(0078)  SEI(); //re-enable interrupts
    0086 9478      BSET	7
(0079)  //all peripherals are now initialised
(0080) }
    0087 9508      RET
(0081) 
(0082) //
(0083) void main(void)
(0084) {
(0085)  init_devices();
_main:
    0088 DFF7      RCALL	_init_devices
    0089 C01A      RJMP	0x00A4
(0086)  
(0087)  while(1)
(0088)  {
(0089)   led_on();
    008A DFC9      RCALL	_led_on
(0090)   led_off();
    008B DFCE      RCALL	_led_off
(0091)   
(0092)   led_on();
    008C DFC7      RCALL	_led_on
(0093)   led_off();
    008D DFCC      RCALL	_led_off
(0094)   
(0095)   
(0096)   pd_1();
    008E DFD1      RCALL	_pd_1
(0097)   
(0098)   led_on();
    008F DFC4      RCALL	_led_on
(0099)   led_off();
    0090 DFC9      RCALL	_led_off
(0100)   
(0101)   
(0102)   pd_2();
    0091 DFDE      RCALL	_pd_2
(0103)   
(0104)   led_on();
    0092 DFC1      RCALL	_led_on
(0105)   led_off();
    0093 DFC6      RCALL	_led_off
(0106)   
(0107)   
(0108)   //赋值(会给所有的位以特定值),使pb0为0,led亮;
(0109)   PORTB = 0xFE;
    0094 EF8E      LDI	R24,0xFE
    0095 BB88      OUT	0x18,R24
(0110)   delay(5000);
    0096 E808      LDI	R16,0x88
    0097 DFA6      RCALL	_delay
(0111)   //置位(不影响其他位),使pb0为1,led灭;
(0112)   PORTB |= 0x01;
    0098 9AC0      SBI	0x18,0
(0113)   delay(5000);
    0099 E808      LDI	R16,0x88
    009A DFA3      RCALL	_delay
(0114)   //清零(不影响其他位),使pb0为0,led亮; 
(0115)   PORTB &= ~0x01;
    009B 98C0      CBI	0x18,0
(0116)   delay(5000);
    009C E808      LDI	R16,0x88
    009D DFA0      RCALL	_delay
(0117)   //反转(不影响其他位),使pb0为1,led灭;
(0118)   PORTB ^= 0x01;
    009E E081      LDI	R24,1
    009F B228      IN	R2,0x18
    00A0 2628      EOR	R2,R24
    00A1 BA28      OUT	0x18,R2
(0119)   delay(5000);
    00A2 E808      LDI	R16,0x88
    00A3 DF9A      RCALL	_delay
    00A4 CFE5      RJMP	0x008A
(0120)  }
(0121) }
FILE: <library>
    00A5 9508      RET
pop_gset2:
    00A6 E0E2      LDI	R30,2
    00A7 C004      RJMP	pop
push_gset1:
    00A8 935A      ST	R21,-Y
    00A9 934A      ST	R20,-Y
    00AA 9508      RET
pop_gset1:
    00AB E0E1      LDI	R30,1
pop:
    00AC 9149      LD	R20,Y+
    00AD 9159      LD	R21,Y+
    00AE FDE0      SBRC	R30,0
    00AF 9508      RET
    00B0 9169      LD	R22,Y+
    00B1 9179      LD	R23,Y+
    00B2 FDE1      SBRC	R30,1
    00B3 9508      RET
    00B4 90A9      LD	R10,Y+
    00B5 90B9      LD	R11,Y+
    00B6 FDE2      SBRC	R30,2
    00B7 9508      RET
    00B8 90C9      LD	R12,Y+
    00B9 90D9      LD	R13,Y+
    00BA FDE3      SBRC	R30,3
    00BB 9508      RET
    00BC 90E9      LD	R14,Y+
    00BD 90F9      LD	R15,Y+
    00BE 9508      RET
push_gset2:
    00BF 937A      ST	R23,-Y
    00C0 936A      ST	R22,-Y
    00C1 CFE6      RJMP	push_gset1
lsl8:
    00C2 2311      TST	R17
    00C3 F019      BEQ	0x00C7
    00C4 0F00      LSL	R16
    00C5 951A      DEC	R17
    00C6 CFFB      RJMP	lsl8
    00C7 9508      RET

⌨️ 快捷键说明

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