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

📄 ledbright.lst

📁 红外遥控模拟的汇编程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 36E6      CPI	R30,0x66
    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 D0A7      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: D:\PROTEU~1.7\ICCAVR~1\LED渐明渐暗\LEDBRIGHT.C
(0001) //ICC-AVR application builder : 2006-3-5 20:09:53
(0002) // Target : M8
(0003) // Crystal: 4.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) #define bitset(var, bitno) ((var) |= (1 << (bitno)))
(0008) #define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
(0009) #define uchar unsigned char
(0010) #define uint unsigned int
(0011) #define suchar static unsigned char
(0012) #define suint static unsigned int
(0013) suint pot_vol; 
(0014) suchar uchsw;num;
(0015) suchar pwm;
(0016) void port_init(void)
(0017) {
(0018)  PORTB = 0x00;
_port_init:
    0033 2422      CLR	R2
    0034 BA28      OUT	0x18,R2
(0019)  DDRB  = 0x02;
    0035 E082      LDI	R24,2
    0036 BB87      OUT	0x17,R24
(0020)  PORTC = 0x00; //m103 output only
    0037 BA25      OUT	0x15,R2
(0021)  DDRC  = 0x00;
    0038 BA24      OUT	0x14,R2
(0022)  PORTD = 0x00;
    0039 BA22      OUT	0x12,R2
(0023)  DDRD  = 0x00;
    003A BA21      OUT	0x11,R2
    003B 9508      RET
(0024) }
(0025) 
(0026) //TIMER1 initialisation - prescale:1
(0027) // WGM: 8) PWM phz freq correct, TOP=ICRn
(0028) void timer1_init(void)
(0029) {TCCR1B = 0x00; //stop
_timer1_init:
    003C 2422      CLR	R2
    003D BC2E      OUT	0x2E,R2
(0030)  TCNT1H = 0x00; //setup
    003E BC2D      OUT	0x2D,R2
(0031)  TCNT1L = 0x00;
    003F BC2C      OUT	0x2C,R2
(0032)  OCR1AH = 0x00;
    0040 BC2B      OUT	0x2B,R2
(0033)  OCR1AL = 0x00;
    0041 BC2A      OUT	0x2A,R2
(0034)  OCR1BH = 0x00;
    0042 BC29      OUT	0x29,R2
(0035)  OCR1BL = 0x0A;
    0043 E08A      LDI	R24,0xA
    0044 BD88      OUT	0x28,R24
(0036)  ICR1H  = 0x00;
    0045 BC27      OUT	0x27,R2
(0037)  ICR1L  = 0xCE;		   		//18KHZ
    0046 EC8E      LDI	R24,0xCE
    0047 BD86      OUT	0x26,R24
(0038)  TCCR1A = 0x82;
    0048 E882      LDI	R24,0x82
    0049 BD8F      OUT	0x2F,R24
(0039)  TCCR1B = 0x19; //start Timer
    004A E189      LDI	R24,0x19
    004B BD8E      OUT	0x2E,R24
    004C 9508      RET
(0040) }
(0041) 
(0042) //call this routine to initialize all peripherals
(0043) void init_devices(void)
(0044) {
(0045)  //stop errant interrupts until set up
(0046)  CLI(); //disable all interrupts
_init_devices:
    004D 94F8      BCLR	7
(0047)  port_init();
    004E DFE4      RCALL	_port_init
(0048)  timer1_init();
    004F DFEC      RCALL	_timer1_init
(0049) 
(0050)  MCUCR = 0x00;
    0050 2422      CLR	R2
    0051 BE25      OUT	0x35,R2
(0051)  GICR  = 0x00;
    0052 BE2B      OUT	0x3B,R2
(0052)  TIMSK = 0x00; //timer interrupt sources
    0053 BE29      OUT	0x39,R2
(0053)  SEI(); //re-enable interrupts
    0054 9478      BSET	7
    0055 9508      RET
(0054)  //all peripherals are now initialized
(0055) }
(0056) void delay(void)
(0057) {
(0058) uchar i;
(0059) uchar j;
(0060)  for(i=0;i<150;i++)
_delay:
  i                    --> R16
  j                    --> R18
    0056 2700      CLR	R16
    0057 C007      RJMP	0x005F
(0061)  {
(0062)  for(j=0;j<150;j++)
    0058 2722      CLR	R18
    0059 C002      RJMP	0x005C
(0063)  asm("nop");}
    005A 0000      NOP
    005B 9523      INC	R18
    005C 3926      CPI	R18,0x96
    005D F3E0      BCS	0x005A
    005E 9503      INC	R16
    005F 3906      CPI	R16,0x96
    0060 F3B8      BCS	0x0058
    0061 9508      RET
(0064)  
(0065) } 
(0066) void pwmopen(uchar i)
(0067) {
(0068) 
(0069) //  TCCR1A = 0x82;
(0070) // TCCR1B = 0x19;
(0071) //pwm=OCR1AL;
(0072)  //if(pwm==i) return;
(0073) // else if(pwm>i) pwm--; 
(0074) //      else          pwm++;
(0075)  OCR1AH=0;
_pwmopen:
  i                    --> R16
    0062 2422      CLR	R2
    0063 BC2B      OUT	0x2B,R2
(0076)  OCR1AL=i;  
    0064 BD0A      OUT	0x2A,R16
    0065 9508      RET
(0077) }
(0078) void clpwm()								
(0079) {	
(0080)    	TCCR1B=0x00;							
_clpwm:
    0066 2422      CLR	R2
    0067 BC2E      OUT	0x2E,R2
(0081) 	TCCR1A=0x00;
    0068 BC2F      OUT	0x2F,R2
(0082) 	bitclr(PORTB,1);
    0069 98C1      CBI	0x18,1
(0083)     TCNT1H=0;TCNT1L=0;
    006A BC2D      OUT	0x2D,R2
    006B BC2C      OUT	0x2C,R2
    006C 9508      RET
_auto_mode:
  i                    --> R20
    006D D11F      RCALL	push_gset1
(0084) }
(0085) void auto_mode(void)
(0086) {
(0087) unsigned char i;
(0088) // bitset(PORTD,0);
(0089)  //bitclr(PORTD,1);
(0090) // while(uchsw)
(0091)  //{
(0092)  
(0093)  for (i=0;255>i; i++)
    006E 2744      CLR	R20
    006F C00B      RJMP	0x007B
(0094)   {
(0095)   if ((PINC&0x02)|(PINC&0x04))  break;
    0070 B383      IN	R24,0x13
    0071 7084      ANDI	R24,4
    0072 B393      IN	R25,0x13
    0073 7092      ANDI	R25,2
    0074 2B98      OR	R25,R24
    0075 F009      BEQ	0x0077
    0076 C007      RJMP	0x007E
(0096)   pwmopen(i);
    0077 2F04      MOV	R16,R20
    0078 DFE9      RCALL	_pwmopen
(0097)   delay();
    0079 DFDC      RCALL	_delay
    007A 9543      INC	R20
    007B EF8F      LDI	R24,0xFF
    007C 1748      CP	R20,R24
    007D F390      BCS	0x0070
(0098)   }
(0099)  for (i=255;0<i; i--)
    007E EF4F      LDI	R20,0xFF
    007F C00B      RJMP	0x008B
(0100)   {
(0101)   if ((PINC&0x02)|(PINC&0x04)) break;
    0080 B383      IN	R24,0x13
    0081 7084      ANDI	R24,4
    0082 B393      IN	R25,0x13
    0083 7092      ANDI	R25,2
    0084 2B98      OR	R25,R24
    0085 F009      BEQ	0x0087
    0086 C007      RJMP	0x008E
(0102)   pwmopen(i);
    0087 2F04      MOV	R16,R20
    0088 DFD9      RCALL	_pwmopen
(0103)   delay();
    0089 DFCC      RCALL	_delay
    008A 954A      DEC	R20
    008B 2422      CLR	R2
    008C 1624      CP	R2,R20
    008D F390      BCS	0x0080
    008E D101      RCALL	pop_gset1
    008F 9508      RET
(0104)   }
(0105) }
(0106) static unsigned char pot_charge(void) //电位器AD转换。
(0107) {
(0108)  //uchar i;
(0109)  ADMUX=0;
_pot_charge:
    0090 2422      CLR	R2
    0091 B827      OUT	0x07,R2
(0110)  ADCSR=6;					//1/64 prescaler
    0092 E086      LDI	R24,6
    0093 B986      OUT	0x06,R24
(0111)  ADCSR|=(1<<ADEN);ADCSR|=(1<<ADSC);
    0094 9A37      SBI	0x06,7
    0095 9A36      SBI	0x06,6
(0112)  WDR();
    0096 95A8      WDR
(0113) 	do
(0114) 	{
(0115) 	;
(0116) 	}while(!(ADCSR&(1<<ADIF)));
    0097 9B34      SBIS	0x06,4
    0098 CFFE      RJMP	0x0097
(0117) //if(vol_avg!=2)
(0118)  //{
(0119)  pot_vol=ADCL;
    0099 B024      IN	R2,0x04
    009A 2433      CLR	R3
    009B 92300065  STS	pot_vol+1,R3
    009D 92200064  STS	pot_vol,R2
(0120)  pot_vol|=(uint)(ADCH<<8);
    009F B025      IN	R2,0x05
    00A0 2433      CLR	R3
    00A1 2C32      MOV	R3,R2
    00A2 2422      CLR	R2
    00A3 90400064  LDS	R4,pot_vol
    00A5 90500065  LDS	R5,pot_vol+1
    00A7 2842      OR	R4,R2
    00A8 2853      OR	R5,R3
    00A9 92500065  STS	pot_vol+1,R5
    00AB 92400064  STS	pot_vol,R4
(0121)  pot_vol=(uchar)(pot_vol/4);
    00AD 0112      MOVW	R2,R4
    00AE 9436      LSR	R3
    00AF 9427      ROR	R2
    00B0 9436      LSR	R3
    00B1 9427      ROR	R2
    00B2 2433      CLR	R3
    00B3 92300065  STS	pot_vol+1,R3
    00B5 92200064  STS	pot_vol,R2
(0122)  //vol_avg++;
(0123) // vol_to=vol_to+(uint)pot_vol;
(0124) // return;
(0125) //}
(0126) // else
(0127) // {
(0128)  

⌨️ 快捷键说明

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