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

📄 ledbright.s

📁 红外遥控模拟的汇编程序
💻 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 + -