📄 ledbright.s
字号:
.module LEDBRIGHT.C
.area text(rom, con, rel)
.dbfile D:\PROTEU~1.7\ICCAVR~1\LED渐明渐暗\LEDBRIGHT.C
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 17
; //ICC-AVR application builder : 2006-3-5 20:09:53
; // Target : M8
; // Crystal: 4.0000Mhz
;
; #include <iom8v.h>
; #include <macros.h>
; #define bitset(var, bitno) ((var) |= (1 << (bitno)))
; #define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))
; #define uchar unsigned char
; #define uint unsigned int
; #define suchar static unsigned char
; #define suint static unsigned int
; suint pot_vol;
; suchar uchsw;num;
; suchar pwm;
; void port_init(void)
; {
.dbline 18
; PORTB = 0x00;
clr R2
out 0x18,R2
.dbline 19
; DDRB = 0x02;
ldi R24,2
out 0x17,R24
.dbline 20
; PORTC = 0x00; //m103 output only
out 0x15,R2
.dbline 21
; DDRC = 0x00;
out 0x14,R2
.dbline 22
; PORTD = 0x00;
out 0x12,R2
.dbline 23
; DDRD = 0x00;
out 0x11,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 29
; }
;
; //TIMER1 initialisation - prescale:1
; // WGM: 8) PWM phz freq correct, TOP=ICRn
; void timer1_init(void)
; {TCCR1B = 0x00; //stop
.dbline 29
clr R2
out 0x2e,R2
.dbline 30
; TCNT1H = 0x00; //setup
out 0x2d,R2
.dbline 31
; TCNT1L = 0x00;
out 0x2c,R2
.dbline 32
; OCR1AH = 0x00;
out 0x2b,R2
.dbline 33
; OCR1AL = 0x00;
out 0x2a,R2
.dbline 34
; OCR1BH = 0x00;
out 0x29,R2
.dbline 35
; OCR1BL = 0x0A;
ldi R24,10
out 0x28,R24
.dbline 36
; ICR1H = 0x00;
out 0x27,R2
.dbline 37
; ICR1L = 0xCE; //18KHZ
ldi R24,206
out 0x26,R24
.dbline 38
; TCCR1A = 0x82;
ldi R24,130
out 0x2f,R24
.dbline 39
; TCCR1B = 0x19; //start Timer
ldi R24,25
out 0x2e,R24
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 44
; }
;
; //call this routine to initialize all peripherals
; void init_devices(void)
; {
.dbline 46
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 47
; port_init();
rcall _port_init
.dbline 48
; timer1_init();
rcall _timer1_init
.dbline 50
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 51
; GICR = 0x00;
out 0x3b,R2
.dbline 52
; TIMSK = 0x00; //timer interrupt sources
out 0x39,R2
.dbline 53
; SEI(); //re-enable interrupts
sei
.dbline -2
L3:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay _delay fV
; i -> R16
; j -> R18
.even
_delay::
.dbline -1
.dbline 57
; //all peripherals are now initialized
; }
; void delay(void)
; {
.dbline 60
; uchar i;
; uchar j;
; for(i=0;i<150;i++)
clr R16
rjmp L8
L5:
.dbline 61
; {
.dbline 62
; for(j=0;j<150;j++)
clr R18
rjmp L12
L9:
.dbline 63
nop
L10:
.dbline 62
inc R18
L12:
.dbline 62
cpi R18,150
brlo L9
.dbline 63
L6:
.dbline 60
inc R16
L8:
.dbline 60
cpi R16,150
brlo L5
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbsym r j 18 c
.dbend
.dbfunc e pwmopen _pwmopen fV
; i -> R16
.even
_pwmopen::
.dbline -1
.dbline 67
; asm("nop");}
;
; }
; void pwmopen(uchar i)
; {
.dbline 75
;
; // TCCR1A = 0x82;
; // TCCR1B = 0x19;
; //pwm=OCR1AL;
; //if(pwm==i) return;
; // else if(pwm>i) pwm--;
; // else pwm++;
; OCR1AH=0;
clr R2
out 0x2b,R2
.dbline 76
; OCR1AL=i;
out 0x2a,R16
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbsym r i 16 c
.dbend
.dbfunc e clpwm _clpwm fV
.even
_clpwm::
.dbline -1
.dbline 79
; }
; void clpwm()
; {
.dbline 80
; TCCR1B=0x00;
clr R2
out 0x2e,R2
.dbline 81
; TCCR1A=0x00;
out 0x2f,R2
.dbline 82
; bitclr(PORTB,1);
cbi 0x18,1
.dbline 83
; TCNT1H=0;TCNT1L=0;
out 0x2d,R2
.dbline 83
out 0x2c,R2
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e auto_mode _auto_mode fV
; i -> R20
.even
_auto_mode::
rcall push_gset1
.dbline -1
.dbline 86
; }
; void auto_mode(void)
; {
.dbline 93
; unsigned char i;
; // bitset(PORTD,0);
; //bitclr(PORTD,1);
; // while(uchsw)
; //{
;
; for (i=0;255>i; i++)
clr R20
rjmp L19
L16:
.dbline 94
; {
.dbline 95
; if ((PINC&0x02)|(PINC&0x04)) break;
in R24,0x13
andi R24,4
in R25,0x13
andi R25,2
or R25,R24
breq L20
.dbline 95
rjmp L18
L20:
.dbline 96
mov R16,R20
rcall _pwmopen
.dbline 97
rcall _delay
.dbline 98
L17:
.dbline 93
inc R20
L19:
.dbline 93
ldi R24,255
cp R20,R24
brlo L16
L18:
.dbline 99
; pwmopen(i);
; delay();
; }
; for (i=255;0<i; i--)
ldi R20,255
rjmp L25
L22:
.dbline 100
; {
.dbline 101
; if ((PINC&0x02)|(PINC&0x04)) break;
in R24,0x13
andi R24,4
in R25,0x13
andi R25,2
or R25,R24
breq L26
.dbline 101
rjmp L24
L26:
.dbline 102
mov R16,R20
rcall _pwmopen
.dbline 103
rcall _delay
.dbline 104
L23:
.dbline 99
dec R20
L25:
.dbline 99
clr R2
cp R2,R20
brlo L22
L24:
.dbline -2
L15:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.dbfunc s pot_charge _pot_charge fc
.even
_pot_charge:
.dbline -1
.dbline 107
; pwmopen(i);
; delay();
; }
; }
; static unsigned char pot_charge(void) //电位器AD转换。
; {
.dbline 109
; //uchar i;
; ADMUX=0;
clr R2
out 0x7,R2
.dbline 110
; ADCSR=6; //1/64 prescaler
ldi R24,6
out 0x6,R24
.dbline 111
; ADCSR|=(1<<ADEN);ADCSR|=(1<<ADSC);
sbi 0x6,7
.dbline 111
sbi 0x6,6
.dbline 112
; WDR();
wdr
L29:
.dbline 114
; do
; {
.dbline 115
; ;
.dbline 116
L30:
.dbline 116
; }while(!(ADCSR&(1<<ADIF)));
sbis 0x6,4
rjmp L29
.dbline 119
; //if(vol_avg!=2)
; //{
; pot_vol=ADCL;
in R2,0x4
clr R3
sts _pot_vol+1,R3
sts _pot_vol,R2
.dbline 120
; pot_vol|=(uint)(ADCH<<8);
in R2,0x5
clr R3
mov R3,R2
clr R2
lds R4,_pot_vol
lds R5,_pot_vol+1
or R4,R2
or R5,R3
sts _pot_vol+1,R5
sts _pot_vol,R4
.dbline 121
; pot_vol=(uchar)(pot_vol/4);
movw R2,R4
lsr R3
ror R2
lsr R3
ror R2
clr R3
sts _pot_vol+1,R3
sts _pot_vol,R2
.dbline 132
; //vol_avg++;
; // vol_to=vol_to+(uint)pot_vol;
; // return;
; //}
; // else
; // {
;
; // adc_l=(uchar)(vol_to/2);//high bit
; // vol_to=0;
; // }
; return pot_vol;
mov R16,R2
.dbline -2
L28:
.dbline 0 ; func end
ret
.dbend
.dbfunc e manu_mode _manu_mode fV
.even
_manu_mode::
.dbline -1
.dbline 136
; }
;
; void manu_mode(void)
; {
.dbline 143
; //unsigned char i;
; //bitset(PORTD,1);
; //bitclr(PORTD,0);
;
; //if((PINC&0x02))
;
; pwmopen(pot_charge());
rcall _pot_charge
rcall _pwmopen
.dbline -2
L32:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sw_check _sw_check fV
.even
_sw_check::
.dbline -1
.dbline 147
;
; }
; void sw_check(void)
; {
.dbline 148
; if (!(PINC&0x02)){uchsw=1;auto_mode();}//自动模式
sbic 0x13,1
rjmp L34
.dbline 148
.dbline 148
ldi R24,1
sts _uchsw,R24
.dbline 148
rcall _auto_mode
.dbline 148
rjmp L35
L34:
.dbline 149
.dbline 149
clr R2
sts _uchsw,R2
.dbline 149
rcall _manu_mode
.dbline 149
L35:
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbend
.dbfunc e vlr_v _vlr_v fV
.even
_vlr_v::
.dbline -1
.dbline 154
; else {uchsw=0;manu_mode();}//手动模式
; }
;
;
; void vlr_v(void)
; {
.dbline 155
; num=1;
ldi R24,1
ldi R25,0
sts _num+1,R25
sts _num,R24
.dbline 157
;
; pot_vol=0;
clr R2
clr R3
sts _pot_vol+1,R3
sts _pot_vol,R2
.dbline 158
; uchsw=0;
sts _uchsw,R2
.dbline 159
; pwm=0;
sts _pwm,R2
.dbline -2
L36:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 163
;
; }
; void main(void)
; {
.dbline 165
;
; init_devices();
rcall _init_devices
.dbline 166
; vlr_v();
rcall _vlr_v
.dbline 167
; TCCR1B=0x00; //停止PWM
clr R2
out 0x2e,R2
.dbline 168
; TCCR1A=0x00;
out 0x2f,R2
rjmp L39
L38:
.dbline 170
; while(1)
; {
.dbline 171
; if (!(PINC&0x04))
sbic 0x13,2
rjmp L41
.dbline 172
; {
.dbline 173
; PORTD=0;
clr R2
out 0x12,R2
.dbline 174
; DDRD=0;
out 0x11,R2
.dbline 175
; TCCR1A = 0x82; //打开PWM
ldi R24,130
out 0x2f,R24
.dbline 176
; TCCR1B = 0x19;
ldi R24,25
out 0x2e,R24
.dbline 177
; sw_check();
rcall _sw_check
.dbline 178
; }
rjmp L42
L41:
.dbline 180
; else
; {
.dbline 181
; clpwm();
rcall _clpwm
.dbline 182
; bitclr(PORTB,1);
cbi 0x18,1
.dbline 183
; for(num=1;0x80>num;num=num*2) //由亮变暗
ldi R24,1
ldi R25,0
sts _num+1,R25
sts _num,R24
rjmp L46
L43:
.dbline 184
; {
.dbline 185
; if (!(PINC&0x04)) break;
sbic 0x13,2
rjmp L47
.dbline 185
rjmp L45
L47:
.dbline 186
lds R2,_num
lds R3,_num+1
out 0x12,R2
.dbline 187
out 0x11,R2
.dbline 188
rcall _delay
.dbline 189
rcall _delay
.dbline 190
rcall _delay
.dbline 191
L44:
.dbline 183
lds R18,_num
lds R19,_num+1
ldi R16,2
ldi R17,0
rcall empy16s
sts _num+1,R17
sts _num,R16
L46:
.dbline 183
lds R2,_num
lds R3,_num+1
ldi R24,128
ldi R25,0
cp R2,R24
cpc R3,R25
brlt L43
L45:
.dbline 192
; PORTD=num;
; DDRD=num;
; delay();
; delay();
; delay();
; }
; for(num=0x80;1<num;num=num/2)//由暗变亮
ldi R24,128
ldi R25,0
sts _num+1,R25
sts _num,R24
rjmp L52
L49:
.dbline 193
; {
.dbline 194
; if (PINC&0x04) break;
sbis 0x13,2
rjmp L53
.dbline 194
rjmp L51
L53:
.dbline 195
lds R2,_num
lds R3,_num+1
out 0x12,R2
.dbline 196
out 0x11,R2
.dbline 197
rcall _delay
.dbline 198
rcall _delay
.dbline 199
rcall _delay
.dbline 200
L50:
.dbline 192
ldi R18,2
ldi R19,0
lds R16,_num
lds R17,_num+1
rcall div16s
sts _num+1,R17
sts _num,R16
L52:
.dbline 192
lds R2,_num
lds R3,_num+1
ldi R24,1
ldi R25,0
cp R24,R2
cpc R25,R3
brlt L49
L51:
.dbline 201
; PORTD=num;
; DDRD=num;
; delay();
; delay();
; delay();
; }
; }
L42:
.dbline 202
L39:
.dbline 169
rjmp L38
X0:
.dbline -2
L37:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\PROTEU~1.7\ICCAVR~1\LED渐明渐暗\LEDBRIGHT.C
_pwm:
.blkb 1
.dbsym s pwm _pwm c
_num::
.blkb 2
.dbsym e num _num I
_uchsw:
.blkb 1
.dbsym s uchsw _uchsw c
_pot_vol:
.blkb 2
.dbsym s pot_vol _pot_vol i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -