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

📄 coder.s

📁 m8改造4VF遥控器
💻 S
📖 第 1 页 / 共 2 页
字号:
	clr R2
	out 0x32,R2
	.dbline 200
;  input=1;
	ldi R24,1
	sts _input,R24
	.dbline 201
;  if(train)//先不忙发送
	lds R2,_train
	tst R2
	breq L35
	.dbline 202
;   switch(IN1)
	in R16,0x10
	clr R17
	andi R16,8
	andi R17,0
	cpi R16,0
	cpc R16,R17
	breq L40
X5:
	cpi R16,0
	ldi R30,0
	cpc R17,R30
	brlt L37
L42:
	cpi R16,8
	ldi R30,0
	cpc R17,R30
	breq L41
	rjmp L37
X6:
	.dbline 203
;  {
L40:
	.dbline 205
;  case 0:
;  OUTH;
	sbi 0x12,7
	.dbline 206
;  break;
	rjmp L38
L41:
	.dbline 208
;  case 0x08:
;  OUTL;
	cbi 0x12,7
	.dbline 209
;  }
L37:
L38:
L35:
	.dbline -2
L34:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R24,y+
	ld R17,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Putchar _Putchar fV
;              c -> R16
	.even
_Putchar::
	.dbline -1
	.dbline 216
;  
; }
; 
; 
; 
; void Putchar (Uchar c)
; {
L44:
	.dbline 217
L45:
	.dbline 217
; while(!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L44
	.dbline 218
; UDR=c;
	out 0xc,R16
	.dbline -2
L43:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e ReadADC _ReadADC fi
;           int2 -> R20,R21
;           int1 -> R22,R23
;        channel -> R16
	.even
_ReadADC::
	rcall push_gset2
	.dbline -1
	.dbline 223
; }
; 
; 
; Uint ReadADC (Uchar channel)
; {
	.dbline 225
; Uint int1,int2;
; ADMUX&=~0x1F;
	in R24,0x7
	andi R24,224
	out 0x7,R24
	.dbline 226
; ADMUX|=channel;
	in R2,0x7
	or R2,R16
	out 0x7,R2
	.dbline 227
; ADCSRA|=0x40;
	sbi 0x6,6
L48:
	.dbline 228
	.dbline 228
L49:
	.dbline 228
; while(~ADCSRA&0x10){}
	in R2,0x6
	clr R3
	com R2
	com R3
	sbrc R2,4
	rjmp L48
	.dbline 229
; ADCSRA|=0x10;
	sbi 0x6,4
	.dbline 230
; int2=ADCL;
	in R20,0x4
	clr R21
	.dbline 231
; int1=ADCH;
	in R22,0x5
	clr R23
	.dbline 232
; int1<<=8;
	mov R23,R22
	clr R22
	.dbline 233
; return (int1+int2);
	movw R16,R22
	add R16,R20
	adc R17,R21
	.dbline -2
L47:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r int2 20 i
	.dbsym r int1 22 i
	.dbsym r channel 16 c
	.dbend
	.dbfunc e main _main fI
; warning_frequency -> R10
;        ledonof -> y+13
; warning_counter -> y+12
;      battcheck -> y+11
;         youmen -> R14,R15
;      safedelay -> y+10
;           safe -> y+9
;           batt -> R22,R23
;        checken -> y+8
;           temp -> y+0
;        counter -> R20
	.even
_main::
	sbiw R28,14
	.dbline -1
	.dbline 238
; }
; 
; 
; main()
; {
	.dbline 244
; 
; Uint batt;//电量
; Uint temp[4];//滤波用
; Uint youmen ;//油门缓存
; Uchar counter ;//采集计数
; Uchar safe=1,safedelay=0;//油门保护
	clr R0
	inc R0
	std y+9,R0
	.dbline 244
	clr R0
	std y+10,R0
	.dbline 246
; Uchar warning_frequency;//警告频率
; Uchar warning_counter=0;
	std y+12,R0
	.dbline 247
; Uchar ledonof=0;
	std y+13,R0
	.dbline 248
; Uchar battcheck=1;//检测电量许可
	clr R0
	inc R0
	std y+11,R0
	.dbline 249
; Uchar checken=200;//等待电压稳定
	ldi R24,200
	std y+8,R24
	.dbline 251
; 
; init_devices();
	rcall _init_devices
	rjmp L53
L52:
	.dbline 255
; 
; 
; while(1)
; {
	.dbline 258
; 
; 
; for(counter=0;counter<=3;counter++)
	clr R20
	rjmp L58
L55:
	.dbline 259
; {
	.dbline 260
; temp[counter]=ReadADC (counter);
	mov R16,R20
	rcall _ReadADC
	ldi R24,2
	mul R24,R20
	movw R30,R0
	movw R24,R28
	add R30,R24
	adc R31,R25
	std z+1,R17
	std z+0,R16
	.dbline 261
	ldi R24,2
	mul R24,R20
	movw R24,R28
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<_time
	ldi R25,>_time
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R4,z+0
	ldd R5,z+1
	movw R24,R4
	adiw R24,1
	cp R24,R2
	cpc R25,R3
	brlo L61
	movw R24,R4
	sbiw R24,1
	cp R2,R24
	cpc R3,R25
	brsh L59
L61:
	.dbline 261
; if((temp[counter]>time[counter]+1)||(temp[counter]<time[counter]-1))time[counter]=temp[counter];
	ldi R24,2
	mul R24,R20
	movw R24,R28
	movw R30,R0
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	ldi R24,<_time
	ldi R25,>_time
	movw R30,R0
	add R30,R24
	adc R31,R25
	std z+1,R3
	std z+0,R2
L59:
	.dbline 263
L56:
	.dbline 258
	inc R20
L58:
	.dbline 258
	ldi R24,3
	cp R24,R20
	brlo X8
	rjmp L55
X8:
	.dbline 265
; 
; }
; 
; batt=ReadADC (4);
	ldi R16,4
	rcall _ReadADC
	movw R22,R16
	.dbline 267
	sbis 0x16,1
	rjmp L62
	.dbline 267
	ldi R24,100
	ldi R25,0
	sts _time+8+1,R25
	sts _time+8,R24
	rjmp L63
L62:
	.dbline 267
; 
; if(BUTTON1)time[4]=SWL_time;else time[4]=SWH_time;
	ldi R24,900
	ldi R25,3
	sts _time+8+1,R25
	sts _time+8,R24
L63:
	.dbline 268
	sbis 0x16,2
	rjmp L66
	.dbline 268
	ldi R24,100
	ldi R25,0
	sts _time+10+1,R25
	sts _time+10,R24
	rjmp L67
L66:
	.dbline 268
; if(BUTTON2)time[5]=SWL_time;else time[5]=SWH_time;
	ldi R24,900
	ldi R25,3
	sts _time+10+1,R25
	sts _time+10,R24
L67:
	.dbline 269
	sbis 0x16,3
	rjmp L70
	.dbline 269
	ldi R24,100
	ldi R25,0
	sts _time+12+1,R25
	sts _time+12,R24
	rjmp L71
L70:
	.dbline 269
; if(BUTTON3)time[6]=SWL_time;else time[6]=SWH_time;
	ldi R24,900
	ldi R25,3
	sts _time+12+1,R25
	sts _time+12,R24
L71:
	.dbline 270
	sbis 0x16,4
	rjmp L74
	.dbline 270
	ldi R24,100
	ldi R25,0
	sts _time+14+1,R25
	sts _time+14,R24
	rjmp L75
L74:
	.dbline 270
; if(BUTTON4)time[7]=SWL_time;else time[7]=SWH_time;
	ldi R24,900
	ldi R25,3
	sts _time+14+1,R25
	sts _time+14,R24
L75:
	.dbline 272
; 
; time[8]=12000-time[0]-time[1]-time[2]-time[3]-time[4]-time[5]-time[6]-time[7];
	lds R2,_time
	lds R3,_time+1
	ldi R24,12000
	ldi R25,46
	sub R24,R2
	sbc R25,R3
	lds R2,_time+2
	lds R3,_time+2+1
	sub R24,R2
	sbc R25,R3
	lds R2,_time+4
	lds R3,_time+4+1
	sub R24,R2
	sbc R25,R3
	lds R2,_time+6
	lds R3,_time+6+1
	sub R24,R2
	sbc R25,R3
	lds R2,_time+8
	lds R3,_time+8+1
	sub R24,R2
	sbc R25,R3
	lds R2,_time+10
	lds R3,_time+10+1
	sub R24,R2
	sbc R25,R3
	lds R2,_time+12
	lds R3,_time+12+1
	sub R24,R2
	sbc R25,R3
	lds R2,_time+14
	lds R3,_time+14+1
	sub R24,R2
	sbc R25,R3
	sts _time+16+1,R25
	sts _time+16,R24
	.dbline 274
; 
; WDR();
	wdr
	.dbline 276
; 
; if(safe)
	ldd R0,y+9
	tst R0
	breq L86
	.dbline 277
; {
	.dbline 278
; youmen=time[2];
	lds R14,_time+4
	lds R15,_time+4+1
	.dbline 279
; time[2]=0;
	clr R2
	clr R3
	sts _time+4+1,R3
	sts _time+4,R2
	.dbline 280
; if(safedelay>3)
	ldi R24,3
	ldd R0,y+10
	cp R24,R0
	brsh L90
	.dbline 281
;  {
	.dbline 282
;   if(youmen<50)safe=0;
	movw R24,R14
	cpi R24,50
	ldi R30,0
	cpc R25,R30
	brsh L91
	.dbline 282
	clr R0
	std y+9,R0
	.dbline 283
;  }
	rjmp L91
L90:
	.dbline 284
; else safedelay++;
	ldd R0,y+10
	inc R0
	std y+10,R0
L91:
	.dbline 285
; }
L86:
	.dbline 288
; 
; 
; if(!(BUTTON5))
	sbic 0x16,5
	rjmp L94
	.dbline 289
; {
	.dbline 290
; TCCR0 = 0x05; //start timer//开始判断有无信号
	ldi R24,5
	out 0x33,R24
	.dbline 291
; GICR  = 0xC0;//外中断开
	ldi R24,192
	out 0x3b,R24
	.dbline 292
;   if (input)
	lds R2,_input
	tst R2
	breq L96
	.dbline 293
;   {
	.dbline 294
;   TCCR1B = 0x00;//原来的信号发送关闭
	clr R2
	out 0x2e,R2
	.dbline 295
;   train=1;//开始训练
	ldi R24,1
	sts _train,R24
	.dbline 296
;   ch_counter=0;//等待放行
	sts _ch_counter,R2
	.dbline 297
;   }
	rjmp L95
L96:
	.dbline 299
;   else
;   {
	.dbline 300
;   TCCR1B = 0x02;
	ldi R24,2
	out 0x2e,R24
	.dbline 301
;   train=0;//退出时关闭训练
	clr R2
	sts _train,R2
	.dbline 303
;    ////原来的信号发送打开
;   }
	.dbline 304
; }//if(!(BUTTON5))
	rjmp L95
L94:
	.dbline 306
; else
; {
	.dbline 307
; GICR  = 0x00;//外中断关
	clr R2
	out 0x3b,R2
	.dbline 308
; TCCR0 = 0x00;
	out 0x33,R2
	.dbline 309
; TCNT0 = 0x00;
	out 0x32,R2
	.dbline 310
; train=0;
	sts _train,R2
	.dbline 311
; input=0;
	sts _input,R2
	.dbline 312
; TCCR1B = 0x02;
	ldi R24,2
	out 0x2e,R24
	.dbline 313
; }
L95:
	.dbline 317
; 
; ////////////////////////////
; 
; if(checken==0)
	ldd R0,y+8
	tst R0
	brne L98
	.dbline 318
; {
	.dbline 319
; if(battcheck)
	ldd R0,y+11
	tst R0
	breq L113
	.dbline 320
; {
	.dbline 321
; if(batt<450) //进入报警状态
	cpi R22,194
	ldi R30,1
	cpc R23,R30
	brsh L102
	.dbline 322
; {
	.dbline 323
;   if(batt>393) //进入频闪状态
	ldi R24,393
	ldi R25,1
	cp R24,R22
	cpc R25,R23
	brsh L104
	.dbline 324
; {
	.dbline 325
; warning_frequency=batt-390;
	movw R24,R22
	subi R24,134
	sbci R25,1
	mov R10,R24
	.dbline 326
; warning_counter++;
	ldd R0,y+12
	inc R0
	std y+12,R0
	.dbline 327
; if(warning_counter>=warning_frequency)
	cp R0,R24
	brlo L113
	.dbline 328
; {
	.dbline 329
; warning_counter=0;
	clr R0
	std y+12,R0
	.dbline 330
; ledonof=!ledonof;
	ldd R0,y+13
	tst R0
	brne L108
	ldi R24,1
	ldi R25,0
	movw R12,R24
	rjmp L109
L108:
	clr R12
	clr R13
L109:
	std y+13,R12
	.dbline 331
; if(ledonof)LEDH;
	mov R0,R12
	tst R12
	breq L110
	.dbline 331
	sbi 0x18,0
	rjmp L113
L110:
	.dbline 332
; else LEDL;
	cbi 0x18,0
	.dbline 333
; }
	.dbline 334
; }
	rjmp L113
L104:
	.dbline 335
;  else {LEDH;battcheck=0; }//进入长亮状态,不允许电压回升
	.dbline 335
	sbi 0x18,0
	.dbline 335
	clr R0
	std y+11,R0
	.dbline 335
	.dbline 337
; 
; }
	rjmp L113
L102:
	.dbline 339
; 
; else LEDL;  //关闭
	cbi 0x18,0
	.dbline 340
; }
	.dbline 341
; }//if(checken==0)
	rjmp L113
L98:
	.dbline 342
; else checken--;
	ldd R0,y+8
	dec R0
	std y+8,R0
L112:
	.dbline 347
L113:
	.dbline 347
	lds R2,_ch_counter
	tst R2
	brne L112
	.dbline 349
L53:
	.dbline 254
	rjmp L52
X7:
	.dbline -2
L51:
	adiw R28,14
	.dbline 0 ; func end
	ret
	.dbsym r warning_frequency 10 c
	.dbsym l ledonof 13 c
	.dbsym l warning_counter 12 c
	.dbsym l battcheck 11 c
	.dbsym r youmen 14 i
	.dbsym l safedelay 10 c
	.dbsym l safe 9 c
	.dbsym r batt 22 i
	.dbsym l checken 8 c
	.dbsym l temp 0 A[8:4]i
	.dbsym r counter 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile D:\AVR程序\简易编码系统\coder.c
_time::
	.blkb 18
	.dbsym e time _time A[18:9]i

⌨️ 快捷键说明

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