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

📄 led.lst

📁 avr单片机
💻 LST
字号:
__start:
__text_start:
    0047 EFCF      LDI	R28,0xFF
    0048 E1D0      LDI	R29,0x10
    0049 BFCD      OUT	0x3D,R28
    004A BFDE      OUT	0x3E,R29
    004B 51C0      SUBI	R28,0x10
    004C 40D0      SBCI	R29,0
    004D EA0A      LDI	R16,0xAA
    004E 8308      STD	Y+0,R16
    004F 2400      CLR	R0
    0050 E0E2      LDI	R30,2
    0051 E0F1      LDI	R31,1
    0052 E011      LDI	R17,1
    0053 30E2      CPI	R30,2
    0054 07F1      CPC	R31,R17
    0055 F011      BEQ	0x0058
    0056 9201      ST	R0,Z+
    0057 CFFB      RJMP	0x0053
    0058 8300      STD	Z+0,R16
    0059 E8EC      LDI	R30,0x8C
    005A E0F0      LDI	R31,0
    005B E0A0      LDI	R26,0
    005C E0B1      LDI	R27,1
    005D E010      LDI	R17,0
    005E 38EE      CPI	R30,0x8E
    005F 07F1      CPC	R31,R17
    0060 F021      BEQ	0x0065
    0061 95C8      LPM
    0062 9631      ADIW	R30,1
    0063 920D      ST	R0,X+
    0064 CFF9      RJMP	0x005E
    0065 940E00D1  CALL	_main
_exit:
    0067 CFFF      RJMP	_exit
FILE: d:\excersize\led.c
(0001) //ICC-AVR application builder : 2006-5-22 9:26:54
(0002) // Target : M128
(0003) // Crystal: 16.000Mhz
(0004) 
(0005) #include <iom128v.h>
(0006) #include <macros.h>
(0007) #include <d:\excersize\led.h>
(0008) void port_init(void)
(0009) {
(0010)  PORTA = 0x00;
_port_init:
    0068 2422      CLR	R2
    0069 BA2B      OUT	0x1B,R2
(0011)  DDRA  = 0x00;
    006A BA2A      OUT	0x1A,R2
(0012)  PORTB = 0xFF;
    006B EF8F      LDI	R24,0xFF
    006C BB88      OUT	0x18,R24
(0013)  DDRB  = 0xFF;
    006D BB87      OUT	0x17,R24
(0014)  PORTC = 0x00; //m103 output only
    006E BA25      OUT	0x15,R2
(0015)  DDRC  = 0xFF;
    006F BB84      OUT	0x14,R24
(0016)  PORTD = 0xFF;
    0070 BB82      OUT	0x12,R24
(0017)  DDRD  = 0xF0;
    0071 EF80      LDI	R24,0xF0
    0072 BB81      OUT	0x11,R24
(0018)  PORTE = 0x00;
    0073 B823      OUT	0x03,R2
(0019)  DDRE  = 0x00;
    0074 B822      OUT	0x02,R2
(0020)  PORTF = 0x00;
    0075 92200062  STS	0x62,R2
(0021)  DDRF  = 0x00;
    0077 92200061  STS	0x61,R2
(0022)  PORTG = 0x00;
    0079 92200065  STS	0x65,R2
(0023)  DDRG  = 0x00;
    007B 92200064  STS	0x64,R2
    007D 9508      RET
(0024) }
(0025) void watchdog_init(void)
(0026) {
(0027)  WDR(); //this prevents a timout on enabling//
_watchdog_init:
    007E 95A8      WDR
(0028)  WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
    007F E08F      LDI	R24,0xF
    0080 BD81      OUT	0x21,R24
    0081 9508      RET
(0029) }
(0030) void timer0_init(void){
(0031)  TCCR0 = 0x00; //stop
_timer0_init:
    0082 2422      CLR	R2
    0083 BE23      OUT	0x33,R2
(0032)  ASSR  = 0x00; //set async mode//同步方式,允许更新计数,比较输出,控制寄存器
    0084 BE20      OUT	0x30,R2
(0033)  TCNT0 = 0x83; //set count
    0085 E883      LDI	R24,0x83
    0086 BF82      OUT	0x32,R24
(0034)  OCR0  = 0x7D;
    0087 E78D      LDI	R24,0x7D
    0088 BF81      OUT	0x31,R24
(0035)  TCCR0 = 0x05; //start timer//128分频
    0089 E085      LDI	R24,5
    008A BF83      OUT	0x33,R24
    008B 9508      RET
_timer0_comp_isr:
    008C 938A      ST	R24,-Y
    008D 939A      ST	R25,-Y
    008E B78F      IN	R24,0x3F
    008F 938A      ST	R24,-Y
(0036) }
(0037) //======================================================time0 中断
(0038) #pragma interrupt_handler timer0_comp_isr:16
(0039) void timer0_comp_isr(void){
(0040)    TCNT0 = 0x83;
    0090 E883      LDI	R24,0x83
    0091 BF82      OUT	0x32,R24
(0041)    T0Count0++;
    0092 91800100  LDS	R24,T0Count0
    0094 91900101  LDS	R25,T0Count0+1
    0096 9601      ADIW	R24,1
    0097 93900101  STS	T0Count0+1,R25
    0099 93800100  STS	T0Count0,R24
    009B 9189      LD	R24,Y+
    009C BF8F      OUT	0x3F,R24
    009D 9199      LD	R25,Y+
    009E 9189      LD	R24,Y+
    009F 9518      RETI
(0042)    
(0043)  //compare occured TCNT0=OCR0
(0044) }
(0045) //call this routine to initialize all peripherals
(0046) void delay(void)
(0047) {
(0048) 
(0049) UI i=0;
_delay:
  j                    --> R16
  i                    --> R18
    00A0 2722      CLR	R18
    00A1 2733      CLR	R19
(0050) UI j=0;
    00A2 2700      CLR	R16
    00A3 2711      CLR	R17
(0051) for(j=0;j<500;j++)
    00A4 C00C      RJMP	0x00B1
(0052) {
(0053)  WDR();
    00A5 95A8      WDR
(0054)  for(i=0;i<5000;i++);
    00A6 2722      CLR	R18
    00A7 2733      CLR	R19
    00A8 C002      RJMP	0x00AB
    00A9 5F2F      SUBI	R18,0xFF
    00AA 4F3F      SBCI	R19,0xFF
    00AB 3828      CPI	R18,0x88
    00AC E1E3      LDI	R30,0x13
    00AD 073E      CPC	R19,R30
    00AE F3D0      BCS	0x00A9
    00AF 5F0F      SUBI	R16,0xFF
    00B0 4F1F      SBCI	R17,0xFF
    00B1 3F04      CPI	R16,0xF4
    00B2 E0E1      LDI	R30,1
    00B3 071E      CPC	R17,R30
    00B4 F380      BCS	0x00A5
    00B5 9508      RET
(0055)  }
(0056)  
(0057) }
(0058) void init_devices(void)
(0059) {
(0060)  //stop errant interrupts until set up
(0061)  CLI(); //disable all interrupts
_init_devices:
    00B6 94F8      BCLR	7
(0062)  XDIV  = 0x00; //xtal divider//系统时钟分频控制寄存器
    00B7 2422      CLR	R2
    00B8 BE2C      OUT	0x3C,R2
(0063)  XMCRA = 0x0E; //external memory//外部存储器控制寄存器
    00B9 E08E      LDI	R24,0xE
    00BA 9380006D  STS	0x6D,R24
(0064)  XMCRB = 0x80;
    00BC E880      LDI	R24,0x80
    00BD 9380006C  STS	0x6C,R24
(0065)  port_init();
    00BF DFA8      RCALL	_port_init
(0066) timer0_init();
    00C0 DFC1      RCALL	_timer0_init
(0067)  MCUCR = 0xC0;//MCU控制寄存器
    00C1 EC80      LDI	R24,0xC0
    00C2 BF85      OUT	0x35,R24
(0068)  EICRA = 0x0A; //extended ext ints//外部中断控制寄存器
    00C3 E08A      LDI	R24,0xA
    00C4 9380006A  STS	0x6A,R24
(0069)  EICRB = 0x0F; //extended ext ints
    00C6 E08F      LDI	R24,0xF
    00C7 BF8A      OUT	0x3A,R24
(0070)  EIMSK = 0x33; //0x03 extended ext enable
    00C8 E383      LDI	R24,0x33
    00C9 BF89      OUT	0x39,R24
(0071)  TIMSK = 0x12; //timer interrupt sources  01:time0
    00CA E182      LDI	R24,0x12
    00CB BF87      OUT	0x37,R24
(0072)  ETIMSK =0x00; //extended timer interrupt sources
    00CC 2422      CLR	R2
    00CD 9220007D  STS	0x7D,R2
(0073)  SEI(); //re-enable interrupts
    00CF 9478      BSET	7
    00D0 9508      RET
(0074)  //all peripherals are now initialized
(0075) }
(0076) void main(void)
(0077) {
(0078) watchdog_init();
_main:
  mid                  --> R20
  i                    --> R22
    00D1 DFAC      RCALL	_watchdog_init
(0079)  WDR();
    00D2 95A8      WDR
(0080)  init_devices();
    00D3 DFE2      RCALL	_init_devices
    00D4 C033      RJMP	0x0108
(0081)  while(1)
(0082)  {
(0083)    UI i=0;
    00D5 2766      CLR	R22
    00D6 2777      CLR	R23
(0084)    WDR();
    00D7 95A8      WDR
(0085)    if(T0Count0>10)
    00D8 E08A      LDI	R24,0xA
    00D9 E090      LDI	R25,0
    00DA 90200100  LDS	R2,T0Count0
    00DC 90300101  LDS	R3,T0Count0+1
    00DE 1582      CP	R24,R2
    00DF 0593      CPC	R25,R3
    00E0 F538      BCC	0x0108
(0086)    {
(0087)     UC mid=0x01;
    00E1 E041      LDI	R20,1
(0088)     WDR();
    00E2 95A8      WDR
(0089)     T0Count0=0;
    00E3 2422      CLR	R2
    00E4 2433      CLR	R3
    00E5 92300101  STS	T0Count0+1,R3
    00E7 92200100  STS	T0Count0,R2
(0090) 	
(0091) 	for(i=0;i<8;i++)
    00E9 C009      RJMP	0x00F3
(0092) 	{
(0093) 	 delay();
    00EA DFB5      RCALL	_delay
(0094) 	 PORTB=~mid;
    00EB 2E24      MOV	R2,R20
    00EC 9420      COM	R2
    00ED BA28      OUT	0x18,R2
(0095) 	 mid=mid*2;
    00EE E082      LDI	R24,2
    00EF 9F84      MUL	R24,R20
    00F0 2D40      MOV	R20,R0
    00F1 5F6F      SUBI	R22,0xFF
    00F2 4F7F      SBCI	R23,0xFF
    00F3 3068      CPI	R22,0x8
    00F4 E0E0      LDI	R30,0
    00F5 077E      CPC	R23,R30
    00F6 F398      BCS	0x00EA
(0096) 	 
(0097) 	}
(0098) 		
(0099) 	PORTB=0xFF;
    00F7 EF8F      LDI	R24,0xFF
    00F8 BB88      OUT	0x18,R24
(0100) 	delay();
    00F9 DFA6      RCALL	_delay
(0101) 	PORTD=0xEF;
    00FA EE8F      LDI	R24,0xEF
    00FB BB82      OUT	0x12,R24
(0102) 	delay();
    00FC DFA3      RCALL	_delay
(0103) 	PORTD=0xDF;
    00FD ED8F      LDI	R24,0xDF
    00FE BB82      OUT	0x12,R24
(0104) 	delay();
    00FF DFA0      RCALL	_delay
(0105) 	PORTD=0xBF;
    0100 EB8F      LDI	R24,0xBF
    0101 BB82      OUT	0x12,R24
(0106) 	delay();
    0102 DF9D      RCALL	_delay
(0107) 	PORTD=0x7F;
    0103 E78F      LDI	R24,0x7F
    0104 BB82      OUT	0x12,R24
(0108) 	delay();
    0105 DF9A      RCALL	_delay
(0109) 	PORTD=0xFF;
FILE: <library>
    0106 EF8F      LDI	R24,0xFF
    0107 BB82      OUT	0x12,R24
    0108 CFCC      RJMP	0x00D5
    0109 9508      RET

⌨️ 快捷键说明

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