📄 ledbright.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 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 + -