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

📄 main.s

📁 前两年在一家模型公司开发的
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile E:\TWINTI~1\main.c
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 48
; /********************************************************************************/
; //		
; // 		builder : 2007-04-10
; // 		Target  : ATMEAG 48V
; // 		Crystal : 内部 8.00 MHz
; //
; //		
; 		
; /********************************************************************************/
; 
; #include 	<iom48v.h>
; #include 	<macros.h>
; 
; #include	"eeprom.h"
; #include	"time2.h"
; #include	"adc.h"
; 
; 
; #define		uchar		unsigned char
; #define		uint		unsigned int
; 
; #define		SET_LED		PORTD |=  (1<<PB4)
; #define		CLR_LED		PORTD &= ~(1<<PB4)
; 
; uchar	e2rom[7];
; 
; uint	PE1,PE2;
; 
; uchar	mode;
; uchar	rxd_flag;	// 油门接收OK标志
; 
; uchar	PWM;
; uint	Timer;
; uint	high,middle,low;
; uchar	REV;
; uchar	power;
; uchar	heat;
; union	
; {	uint	temp;
; 	uchar  	data[2];		
; }time;
; 
; 
; /*---------------------------------------------------------------
;    			初始化
; ----------------------------------------------------------------*/
; void timer0_init(void)
; {
	.dbline 49
;  	TCCR0B = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 50
;  	TCNT0  = 0x01; //set count
	ldi R24,1
	out 0x26,R24
	.dbline 51
;  	TCCR0A = 0x23; 
	ldi R24,35
	out 0x24,R24
	.dbline 52
;  	OCR0B  = 0xA5;
	ldi R24,165
	out 0x28,R24
	.dbline 53
;  	TCCR0B = 0x01; //start timer
	ldi R24,1
	out 0x25,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 59
; }
; 
; 
; 
; void timer1_init(void) 		// 20MS 中断
; {
	.dbline 60
;  	TCCR1B = 0x00;  // stop
	clr R2
	sts 129,R2
	.dbline 61
;  	TCNT1H = 0xB1;  // setup
	ldi R24,177
	sts 133,R24
	.dbline 62
;  	TCNT1L = 0xE0;
	ldi R24,224
	sts 132,R24
	.dbline 63
;  	OCR1AH = 0x4E;
	ldi R24,78
	sts 137,R24
	.dbline 64
;  	OCR1AL = 0x20;
	ldi R24,32
	sts 136,R24
	.dbline 65
;  	OCR1BH = 0x4E;
	ldi R24,78
	sts 139,R24
	.dbline 66
;  	OCR1BL = 0x20;
	ldi R24,32
	sts 138,R24
	.dbline 67
;  	ICR1H  = 0x4E;
	ldi R24,78
	sts 135,R24
	.dbline 68
;  	ICR1L  = 0x20;
	ldi R24,32
	sts 134,R24
	.dbline 69
;  	TCCR1A = 0x00;
	sts 128,R2
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 74
; }
; 
; 
; void init_devices(void)
; {
	.dbline 75
; 	CLI();
	cli
	.dbline 77
; 		
;  	DDRB  = 0x7F;
	ldi R24,127
	out 0x4,R24
	.dbline 78
;  	PORTB = 0xC0;
	ldi R24,192
	out 0x5,R24
	.dbline 80
; 	
; 	DDRC  = 0x00;
	clr R2
	out 0x7,R2
	.dbline 81
;  	PORTC = 0x40; // m103 output only
	ldi R24,64
	out 0x8,R24
	.dbline 83
;  	
;  	DDRD  = 0xFB;
	ldi R24,251
	out 0xa,R24
	.dbline 84
;  	PORTD = 0x40;
	ldi R24,64
	out 0xb,R24
	.dbline 86
;  	
;  	MCUCR  = 0x00;
	out 0x35,R2
	.dbline 87
;  	EICRA  = 0x03; 	// INT0 上升沿触发
	ldi R24,3
	sts 105,R24
	.dbline 88
;  	EIMSK  = 0x01;	// 使能 INT0 中断
	ldi R24,1
	out 0x1d,R24
	.dbline 90
;  	
;  	timer0_init();
	rcall _timer0_init
	.dbline 91
;  	timer1_init();
	rcall _timer1_init
	.dbline 92
;  	timer2_init();
	rcall _timer2_init
	.dbline 93
;  	init_eeprom();
	rcall _init_eeprom
	.dbline 94
;  	adc_int();
	rcall _adc_int
	.dbline 96
;  	
;  	SEI();
	sei
	.dbline -2
L4:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;              k -> R10,R11
;              t -> R16,R17
	.even
_delay::
	rcall push_gset3
	.dbline -1
	.dbline 104
; }
; 
; /*---------------------------------------------------------------
;    			延时
; ----------------------------------------------------------------*/
; 
; void delay(uint t)
; {
	.dbline 107
; 	uint i,j,k;
; 	
; 	for(i=0;i<t;i++)
	clr R20
	clr R21
	rjmp L9
L6:
	.dbline 108
; 	{
	.dbline 109
; 		for(j=0;j<200;j++)
	clr R22
	clr R23
	rjmp L13
L10:
	.dbline 110
; 		{
	.dbline 111
	clr R10
	clr R11
	rjmp L17
L14:
	.dbline 111
L15:
	.dbline 111
	movw R24,R10
	adiw R24,1
	movw R10,R24
L17:
	.dbline 111
	movw R24,R10
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brlo L14
	.dbline 111
	.dbline 112
L11:
	.dbline 109
	subi R22,255  ; offset = 1
	sbci R23,255
L13:
	.dbline 109
	cpi R22,200
	ldi R30,0
	cpc R23,R30
	brlo L10
	.dbline 113
L7:
	.dbline 107
	subi R20,255  ; offset = 1
	sbci R21,255
L9:
	.dbline 107
	cp R20,R16
	cpc R21,R17
	brlo L6
	.dbline -2
L5:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r k 10 i
	.dbsym r t 16 i
	.dbend
	.dbfunc e LED_set _LED_set fV
	.even
_LED_set::
	.dbline -1
	.dbline 118
; 			for(k=0;k<50;k++);;
; 		}
; 	}
; }
; 
; 
; void LED_set(void)
; {
	.dbline 119
; 	SET_LED	;
	sbi 0xb,4
	.dbline 120
; 	delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 121
; 	CLR_LED	;
	cbi 0xb,4
	.dbline 122
; 	delay(8);
	ldi R16,8
	ldi R17,0
	rcall _delay
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e egis _egis fV
;           temp -> R20,R21
	.even
_egis::
	rcall push_gset1
	.dbline -1
	.dbline 126
; }
; 
; void egis(void)
; {
	.dbline 129
; 	uint temp;
; 	
; 	temp = adc_colect(1);
	ldi R16,1
	rcall _adc_colect
	movw R20,R16
	.dbline 130
; 	if(temp<0x1D0 && power<200) power ++;
	cpi R16,208
	ldi R30,1
	cpc R17,R30
	brsh L20
	lds R24,_power
	cpi R24,200
	brsh L20
	.dbline 130
	subi R24,255    ; addi 1
	sts _power,R24
	rjmp L21
L20:
	.dbline 131
; 	else if(temp>0x1DF)power = 0;
	ldi R24,479
	ldi R25,1
	cp R24,R20
	cpc R25,R21
	brsh L22
	.dbline 131
	clr R2
	sts _power,R2
L22:
L21:
	.dbline 133
; 	
; 	if(power>3 && PWM<50)
	ldi R24,3
	lds R2,_power
	cp R24,R2
	brsh L24
	lds R24,_PWM
	cpi R24,50
	brsh L24
	.dbline 134
; 	{
	.dbline 135
; 		PWM = 0;
	clr R2
	sts _PWM,R2
	.dbline 136
; 		Pwm_set(0,0);
	clr R18
	clr R16
	rcall _Pwm_set
	.dbline 137
; 		delay(5);
	ldi R16,5
	ldi R17,0
	rcall _delay
	.dbline 138
; 		temp = 0;
	clr R20
	clr R21
	rjmp L27
L26:
	.dbline 140
	.dbline 141
	ldi R16,1
	rcall _adc_colect
	movw R20,R16
	.dbline 142
	rcall _LED_set
	.dbline 143
	rcall _Buz
	.dbline 144
	ldi R16,20
	ldi R17,0
	rcall _delay
	.dbline 145
L27:
	.dbline 139
; 		while(temp<0x1df)
	cpi R20,223
	ldi R30,1
	cpc R21,R30
	brlo L26
	.dbline 146
; 		{
; 			temp = adc_colect(1);
; 			LED_set();
; 			Buz();
; 			delay(20);
; 		}
; 	}
L24:
	.dbline 149
; 	
; 	
; 	temp = adc_colect(2);
	ldi R16,2
	rcall _adc_colect
	movw R20,R16
	.dbline 150
; 	if(temp>0x3BF && heat<200) heat ++;		// >110度
	ldi R24,959
	ldi R25,3
	cp R24,R16
	cpc R25,R17
	brsh L29
	lds R24,_heat
	cpi R24,200
	brsh L29
	.dbline 150
	subi R24,255    ; addi 1
	sts _heat,R24
	rjmp L30
L29:
	.dbline 151
; 	else if(temp<0x38E)heat = 0;			// <80度
	cpi R20,142
	ldi R30,3
	cpc R21,R30
	brsh L31
	.dbline 151
	clr R2
	sts _heat,R2
L31:
L30:
	.dbline 153
; 	
; 	if(heat>3 && PWM<50)
	ldi R24,3
	lds R2,_heat
	cp R24,R2
	brsh L33
	lds R24,_PWM
	cpi R24,50
	brsh L33
	.dbline 154
; 	{
	.dbline 155
; 		PWM = 0;
	clr R2
	sts _PWM,R2
	.dbline 156
; 		Pwm_set(0,0);
	clr R18
	clr R16
	rcall _Pwm_set
	.dbline 157
; 		delay(5);
	ldi R16,5
	ldi R17,0
	rcall _delay
	.dbline 158
; 		temp = 0xfff;
	ldi R20,4095
	ldi R21,15
	rjmp L36
L35:
	.dbline 160
	.dbline 161
	ldi R16,2
	rcall _adc_colect
	movw R20,R16
	.dbline 162
	rcall _LED_set
	.dbline 163
	rcall _LED_set
	.dbline 164
	rcall _Buz
	.dbline 165
	rcall _Buz
	.dbline 166
	ldi R16,20
	ldi R17,0
	rcall _delay
	.dbline 167
L36:
	.dbline 159
	ldi R24,910
	ldi R25,3
	cp R24,R20
	cpc R25,R21
	brlo L35
	.dbline 168
L33:
	.dbline -2
L19:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 i
	.dbend
	.dbfunc e Gun_set _Gun_set fV
	.even
_Gun_set::
	.dbline -1
	.dbline 176
; 		while(temp>0x38E)
; 		{
; 			temp = adc_colect(2);
; 			LED_set();
; 			LED_set();
; 			Buz();
; 			Buz();
; 			delay(20);
; 		}
; 	}
; }
; 
; /*---------------------------------------------------------------
;    			油门处理
; ----------------------------------------------------------------*/
; 
; void Gun_set(void)
; {	 	
	.dbline 177
; 	if(rxd_flag)	// 接收已完成
	lds R2,_rxd_flag
	tst R2
	brne X0
	rjmp L39
X0:
	.dbline 178
; 	{
	.dbline 179
; 		rxd_flag = 0;
	clr R2
	sts _rxd_flag,R2
	.dbline 181
; 		
; 		if(Timer>high) Timer = high;	// 确保接收到的数据在正常范围内
	lds R2,_high
	lds R3,_high+1
	lds R4,_Timer
	lds R5,_Timer+1
	cp R2,R4
	cpc R3,R5
	brsh L41
	.dbline 181
	sts _Timer+1,R3
	sts _Timer,R2
L41:
	.dbline 182
; 		if(Timer<low)  Timer = low;
	lds R2,_low
	lds R3,_low+1
	lds R4,_Timer
	lds R5,_Timer+1
	cp R4,R2
	cpc R5,R3
	brsh L43
	.dbline 182
	sts _Timer+1,R3
	sts _Timer,R2
L43:
	.dbline 184
; 		
; 		if(Timer>(middle+50))		// 前进 1550us
	lds R24,_middle
	lds R25,_middle+1
	adiw R24,50
	lds R2,_Timer
	lds R3,_Timer+1
	cp R24,R2
	cpc R25,R3
	brsh L45
	.dbline 185
; 		{
	.dbline 186
; 			if(power>3 || heat>3)
	ldi R24,3
	lds R2,_power
	cp R24,R2
	brlo L49
	lds R2,_heat
	cp R24,R2
	brsh L47
L49:
	.dbline 187
; 			{
	.dbline 188
; 				PWM --;
	lds R24,_PWM
	subi R24,1
	sts _PWM,R24
	.dbline 189
; 			}
	rjmp L48
L47:
	.dbline 191
; 			else 
; 			{	
	.dbline 192
; 				PWM = ((Timer-middle)*10)/PE1;	// 计算占空比
	lds R2,_middle
	lds R3,_middle+1
	lds R18,_Timer
	lds R19,_Timer+1
	sub R18,R2
	sbc R19,R3
	ldi R16,10
	ldi R17,0
	rcall empy16s
	lds R18,_PE1
	lds R19,_PE1+1
	rcall div16u
	sts _PWM,R16
	.dbline 193
; 				if(PWM>210) PWM = 255;		
	ldi R24,210
	cp R24,R16
	brsh L50
	.dbline 193
	ldi R24,255
	sts _PWM,R24
L50:
	.dbline 195
; 				
; 			}
L48:
	.dbline 196
; 			Pwm_set(PWM,1);		// 设置PWM占空比
	ldi R18,1
	lds R16,_PWM
	rcall _Pwm_set
	.dbline 197
; 			mode = 1;
	ldi R24,1
	sts _mode,R24
	.dbline 198
; 			SET_LED;
	sbi 0xb,4
	.dbline 199
; 		}
	rjmp L46
L45:
	.dbline 200
; 		else if(Timer<(middle-50)) 	
	lds R24,_middle
	lds R25,_middle+1
	sbiw R24,50
	lds R2,_Timer
	lds R3,_Timer+1
	cp R2,R24
	cpc R3,R25
	brlo X1
	rjmp L52
X1:
	.dbline 201
; 		{
	.dbline 202
; 			if(!mode && REV)	// 后退
	lds R2,_mode
	tst R2
	brne L54
	lds R2,_REV
	tst R2
	breq L54
	.dbline 203
; 			{
	.dbline 204
; 				if(power>3 || heat>3)
	ldi R24,3
	lds R2,_power
	cp R24,R2
	brlo L58
	lds R2,_heat
	cp R24,R2
	brsh L56
L58:
	.dbline 205
; 				{
	.dbline 206
; 					PWM --;
	lds R24,_PWM
	subi R24,1
	sts _PWM,R24
	.dbline 207
; 				}	
	rjmp L57
L56:
	.dbline 209
; 				else 
; 				{	
	.dbline 210
; 					PWM = ((middle-Timer)*10)/PE2;
	lds R2,_Timer
	lds R3,_Timer+1
	lds R18,_middle
	lds R19,_middle+1
	sub R18,R2
	sbc R19,R3
	ldi R16,10
	ldi R17,0
	rcall empy16s
	lds R18,_PE2
	lds R19,_PE2+1
	rcall div16u
	sts _PWM,R16
	.dbline 211
; 					if(PWM>210) PWM = 255;
	ldi R24,210
	cp R24,R16
	brsh L59
	.dbline 211
	ldi R24,255
	sts _PWM,R24
L59:
	.dbline 212
; 				}
L57:
	.dbline 213
; 				Pwm_set(PWM,2);
	ldi R18,2
	lds R16,_PWM
	rcall _Pwm_set
	.dbline 214
; 				SET_LED;
	sbi 0xb,4
	.dbline 215
; 				delay(5);
	ldi R16,5
	ldi R17,0
	rcall _delay
	.dbline 216
; 			}
	rjmp L53
L54:
	.dbline 218
; 			else 
; 			{
	.dbline 219
; 				Pwm_set(255,3);	// 刹车
	ldi R18,3
	ldi R16,255
	rcall _Pwm_set
	rjmp L62
L61:
	.dbline 221
	.dbline 222
	rcall _LED_set
	.dbline 223
L62:
	.dbline 220
; 				while((Timer+50)<=middle)
	lds R2,_middle
	lds R3,_middle+1
	lds R24,_Timer
	lds R25,_Timer+1
	adiw R24,50
	cp R2,R24
	cpc R3,R25
	brsh L61
	.dbline 224
; 				{
; 					LED_set();
; 				}
; 				mode = 0;
	clr R2
	sts _mode,R2
	.dbline 225
; 			}
	.dbline 226
; 		}
	rjmp L53
L52:
	.dbline 228
; 		else 
; 		{
	.dbline 229
; 			Pwm_set(0,0);
	clr R18
	clr R16
	rcall _Pwm_set
	.dbline 230
; 			CLR_LED;
	cbi 0xb,4
	.dbline 231
; 		}
L53:
L46:
	.dbline 232
; 	}
L39:
	.dbline 233
; 	egis();
	rcall _egis
	.dbline -2
L38:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e key _key fc
;              k -> R20
;              i -> R22
	.even
_key::
	rcall push_gset2
	.dbline -1
	.dbline 240
; }
; 
; 
; 
; 
; uchar key(void)
; {
	.dbline 241
; 	uchar i,k=0;
	clr R20
	.dbline 243
; 	
; 	for(i=0;i<5;i++)
	clr R22
	rjmp L68
L65:
	.dbline 244
; 	{
	.dbline 245
; 		if(PINB & 0x80) k = 0;
	sbis 0x3,7
	rjmp L69
	.dbline 245
	clr R20
	rjmp L70
L69:
	.dbline 246
; 		else k ++;
	inc R20
L70:
	.dbline 247
	ldi R16,3
	ldi R17,0
	rcall _delay
	.dbline 248
L66:
	.dbline 243
	inc R22
L68:
	.dbline 243
	cpi R22,5
	brlo L65
	.dbline 250
; 		delay(3);
; 	}
; 
; 	return k;
	mov R16,R20
	.dbline -2
L64:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r k 20 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e compute _compute fi
;           temp -> R16,R17
;              i -> R18
	.even
_compute::
	.dbline -1
	.dbline 258
; }
; 
; /*---------------------------------------------------------------
;    			
; ----------------------------------------------------------------*/
; 
; uint compute(void)
; {
	.dbline 260
; 	uchar 	i;
; 	uint 	temp = 0;
	clr R16
	clr R17
	.dbline 262
; 	
; 	for(i=0;i<8;i++)
	clr R18
	rjmp L75
X2:
	.dbline 263
; 	{	
L76:
	.dbline 264
L77:
	.dbline 264
	lds R2,_rxd_flag
	tst R2
	breq L76
	.dbline 265
	lds R2,_Timer
	lds R3,_Timer+1
	add R16,R2
	adc R17,R3
	.dbline 266
	clr R2
	sts _rxd_flag,R2
	.dbline 267
	clr R3
	sts _Timer+1,R3
	sts _Timer,R2
	.dbline 268
L73:
	.dbline 262

⌨️ 快捷键说明

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