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

📄 ac20-1.s

📁 AVR单片机ATmega16(L)应用实例—红外线感应自动移门
💻 S
📖 第 1 页 / 共 5 页
字号:
	lds R24,_allchangdu_x
	lds R25,_allchangdu_x+1
	lsr R25
	ror R24
	adiw R24,30
	sts _allchangdu+1,R25
	sts _allchangdu,R24
	.dbline 429
; 			 		st_changdu=allchangdu;}
	movw R2,R24
	sts _st_changdu+1,R3
	sts _st_changdu,R2
	.dbline 429
L391:
	.dbline 432
; 					
; 					//if(changdu<30)
; 					{TCCR2=0x71;SACE_0;inc_dec_flag=0;
	.dbline 432
	ldi R24,113
	out 0x25,R24
	.dbline 432
	sbi 0x12,6
	.dbline 432
	clr R2
	sts _inc_dec_flag,R2
	.dbline 433
; 					sp_pl=0;wide=0;OCR2=wide;
	clr R3
	sts _sp_pl+1,R3
	sts _sp_pl,R2
	.dbline 433
	sts _wide,R2
	.dbline 433
	out 0x23,R2
	.dbline 434
; 					round_cnt=0;PWMOUT_0;}
	sts _round_cnt+1,R3
	sts _round_cnt,R2
	.dbline 434
	sbi 0x12,7
	.dbline 434
	.dbline -2
L377:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_stoptime _input_stoptime fV
	.even
_input_stoptime::
	sbiw R28,2
	.dbline -1
	.dbline 442
; 					//else	{status=130;}	
; 		 
; }
; 
; 
; /*=========待机状态(status=40)时的输入门靠墙停顿时间=========*/
; void input_stoptime(void)
; {
	.dbline 443
	sbic 0x16,1
	rjmp L393
	.dbline 443
	.dbline 443
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 443
	sbic 0x16,1
	rjmp L395
	.dbline 443
	lds R24,_val
	subi R24,255    ; addi 1
	sts _val,R24
L395:
	.dbline 443
;   if(KEY_ADD==0){delay(30);if(KEY_ADD==0)val++;}
L393:
	.dbline 444
;   if(val>9)val=0;
	ldi R24,9
	lds R2,_val
	cp R24,R2
	brsh L397
	.dbline 444
	clr R2
	sts _val,R2
L397:
	.dbline 445
;   if(KEY_OK==0){delay(30);
	sbic 0x16,2
	rjmp L399
	.dbline 445
	.dbline 445
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 446
;   			   if(KEY_OK==0)
	sbic 0x16,2
	rjmp L401
	.dbline 447
;   			   {SREG=0x00;stoptime=val;
	.dbline 447
	clr R2
	out 0x3f,R2
	.dbline 447
	lds R2,_val
	sts _stoptime,R2
	.dbline 448
;   				EEPROM_WRITE(stoptime_address,val);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_val
	ldi R19,>_val
	ldi R16,10
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 449
;   				eep_temp=55;
	ldi R24,55
	sts _eep_temp,R24
	.dbline 450
; 				EEPROM_WRITE(stoptime_address+1,eep_temp);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_eep_temp
	ldi R19,>_eep_temp
	ldi R16,11
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 451
; 				PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 452
; 				delay(500);
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 453
; 				SREG|=0x80; }
	bset 7
	.dbline 453
L401:
	.dbline 454
; 			   }
L399:
	.dbline 455
;   delay(300);
	ldi R16,300
	ldi R17,1
	xcall _delay
	.dbline -2
L392:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_openmaxspeed _input_openmaxspeed fV
	.even
_input_openmaxspeed::
	sbiw R28,2
	.dbline -1
	.dbline 461
; }
; 
; 
; /*==========待机状态(status=40)时的输入开门最大速度===========*/
; void input_openmaxspeed(void)
; {
	.dbline 462
	sbic 0x16,1
	rjmp L404
	.dbline 462
	.dbline 462
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 462
	sbic 0x16,1
	rjmp L406
	.dbline 462
	lds R24,_val
	subi R24,255    ; addi 1
	sts _val,R24
L406:
	.dbline 462
;  if(KEY_ADD==0){delay(30);if(KEY_ADD==0)val++;}
L404:
	.dbline 463
;   if(val>9)val=0;
	ldi R24,9
	lds R2,_val
	cp R24,R2
	brsh L408
	.dbline 463
	clr R2
	sts _val,R2
L408:
	.dbline 464
;    if(KEY_OK==0){delay(30);
	sbic 0x16,2
	rjmp L410
	.dbline 464
	.dbline 464
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 465
;   			   if(KEY_OK==0)
	sbic 0x16,2
	rjmp L412
	.dbline 466
;   			   {SREG=0x00;open_max_temp=val;
	.dbline 466
	clr R2
	out 0x3f,R2
	.dbline 466
	lds R2,_val
	sts _open_max_temp,R2
	.dbline 467
;   				EEPROM_WRITE(open_max_address,val);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_val
	ldi R19,>_val
	ldi R16,20
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 468
;   				eep_temp=55;
	ldi R24,55
	sts _eep_temp,R24
	.dbline 469
; 				EEPROM_WRITE(open_max_address+1,eep_temp);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_eep_temp
	ldi R19,>_eep_temp
	ldi R16,21
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 470
; 				PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 471
; 				delay(500);
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 472
; 				SREG|=0x80; }
	bset 7
	.dbline 472
L412:
	.dbline 473
; 			   }
L410:
	.dbline 474
;   delay(300);
	ldi R16,300
	ldi R17,1
	xcall _delay
	.dbline -2
L403:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_openminspeed _input_openminspeed fV
	.even
_input_openminspeed::
	sbiw R28,2
	.dbline -1
	.dbline 480
; }
; 
; 
; /*=======待机状态(status=40)时的输入开门最小速度==========*/
; void input_openminspeed(void)
; {
	.dbline 481
	sbic 0x16,1
	rjmp L415
	.dbline 481
	.dbline 481
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 481
	sbic 0x16,1
	rjmp L417
	.dbline 481
	lds R24,_val
	subi R24,255    ; addi 1
	sts _val,R24
L417:
	.dbline 481
; if(KEY_ADD==0){delay(30);if(KEY_ADD==0)val++;}
L415:
	.dbline 482
;   if(val>9)val=0;
	ldi R24,9
	lds R2,_val
	cp R24,R2
	brsh L419
	.dbline 482
	clr R2
	sts _val,R2
L419:
	.dbline 483
;    if(KEY_OK==0){delay(30);
	sbic 0x16,2
	rjmp L421
	.dbline 483
	.dbline 483
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 484
;   			   if(KEY_OK==0)
	sbic 0x16,2
	rjmp L423
	.dbline 485
;   			   {SREG=0x00;open_min_temp=val;
	.dbline 485
	clr R2
	out 0x3f,R2
	.dbline 485
	lds R2,_val
	sts _open_min_temp,R2
	.dbline 486
;   				EEPROM_WRITE(open_min_address,val);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_val
	ldi R19,>_val
	ldi R16,25
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 487
;   				eep_temp=55;
	ldi R24,55
	sts _eep_temp,R24
	.dbline 488
; 				EEPROM_WRITE(open_min_address+1,eep_temp);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_eep_temp
	ldi R19,>_eep_temp
	ldi R16,26
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 489
; 				PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 490
; 				delay(500);
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 491
; 				SREG|=0x80; }
	bset 7
	.dbline 491
L423:
	.dbline 492
; 			   }
L421:
	.dbline 493
;   delay(300);
	ldi R16,300
	ldi R17,1
	xcall _delay
	.dbline -2
L414:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_openforce _input_openforce fV
	.even
_input_openforce::
	.dbline -1
	.dbline 498
; }
; 
; //待机状态(40)时的输入开门受挤灵敏度子函数
; void input_openforce(void)
; {
	.dbline -2
L425:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_closemaxspeed _input_closemaxspeed fV
	.even
_input_closemaxspeed::
	sbiw R28,2
	.dbline -1
	.dbline 504
; 
; }
; 
; /*=========待机状态(status=40)时的输入关门最大速度=========*/
; void input_closemaxspeed(void)
; {
	.dbline 505
	sbic 0x16,1
	rjmp L427
	.dbline 505
	.dbline 505
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 505
	sbic 0x16,1
	rjmp L429
	.dbline 505
	lds R24,_val
	subi R24,255    ; addi 1
	sts _val,R24
L429:
	.dbline 505
; if(KEY_ADD==0){delay(30);if(KEY_ADD==0)val++;}
L427:
	.dbline 506
;   if(val>9)val=0;
	ldi R24,9
	lds R2,_val
	cp R24,R2
	brsh L431
	.dbline 506
	clr R2
	sts _val,R2
L431:
	.dbline 507
;    if(KEY_OK==0){delay(30);
	sbic 0x16,2
	rjmp L433
	.dbline 507
	.dbline 507
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 508
;   			   if(KEY_OK==0)
	sbic 0x16,2
	rjmp L435
	.dbline 509
;   			   {SREG=0x00;close_max_temp=val;
	.dbline 509
	clr R2
	out 0x3f,R2
	.dbline 509
	lds R2,_val
	sts _close_max_temp,R2
	.dbline 510
;   				EEPROM_WRITE(close_max_address,val);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_val
	ldi R19,>_val
	ldi R16,30
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 511
;   				eep_temp=55;
	ldi R24,55
	sts _eep_temp,R24
	.dbline 512
; 				EEPROM_WRITE(close_max_address+1,eep_temp);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_eep_temp
	ldi R19,>_eep_temp
	ldi R16,31
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 513
; 				PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 514
; 				delay(500);
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 515
; 				SREG|=0x80; }
	bset 7
	.dbline 515
L435:
	.dbline 516
; 			   }
L433:
	.dbline 517
;   delay(300);
	ldi R16,300
	ldi R17,1
	xcall _delay
	.dbline -2
L426:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_closeminspeed _input_closeminspeed fV
	.even
_input_closeminspeed::
	sbiw R28,2
	.dbline -1
	.dbline 523
; }
; 
; 
; /*=========待机状态(status=40)时输入关门最小速度==========*/
; void input_closeminspeed(void)
; {
	.dbline 524
	sbic 0x16,1
	rjmp L438
	.dbline 524
	.dbline 524
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 524
	sbic 0x16,1
	rjmp L440
	.dbline 524
	lds R24,_val
	subi R24,255    ; addi 1
	sts _val,R24
L440:
	.dbline 524
; if(KEY_ADD==0){delay(30);if(KEY_ADD==0)val++;}
L438:
	.dbline 525
;   if(val>9)val=0;
	ldi R24,9
	lds R2,_val
	cp R24,R2
	brsh L442
	.dbline 525
	clr R2
	sts _val,R2
L442:
	.dbline 526
;    if(KEY_OK==0){delay(30);
	sbic 0x16,2
	rjmp L444
	.dbline 526
	.dbline 526
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 527
;   			   if(KEY_OK==0)
	sbic 0x16,2
	rjmp L446
	.dbline 528
;   			   {SREG=0x00;close_min_temp=val;
	.dbline 528
	clr R2
	out 0x3f,R2
	.dbline 528
	lds R2,_val
	sts _close_min_temp,R2
	.dbline 529
;   				EEPROM_WRITE(close_min_address,val);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_val
	ldi R19,>_val
	ldi R16,35
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 530
;   				eep_temp=55;
	ldi R24,55
	sts _eep_temp,R24
	.dbline 531
; 				EEPROM_WRITE(close_min_address+1,eep_temp);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_eep_temp
	ldi R19,>_eep_temp
	ldi R16,36
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 532
; 				PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 533
; 				delay(500);
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 534
; 				SREG|=0x80; }
	bset 7
	.dbline 534
L446:
	.dbline 535
; 			   }
L444:
	.dbline 536
;   delay(300);
	ldi R16,300
	ldi R17,1
	xcall _delay
	.dbline -2
L437:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_closeforce _input_closeforce fV
	.even
_input_closeforce::
	.dbline -1
	.dbline 541
; }
; 
; //待机状态(40)时的输入关门受挤灵敏度子函数
; void input_closeforce(void)
; {
	.dbline -2
L448:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e input_studyspeed _input_studyspeed fV
	.even
_input_studyspeed::
	sbiw R28,2
	.dbline -1
	.dbline 547
; 
; }
; 
; /*============待机状态(status=40)时输入学习速度=========*/
; void input_studyspeed(void)
; {
	.dbline 548
	sbic 0x16,1
	rjmp L450
	.dbline 548
	.dbline 548
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 548
	sbic 0x16,1
	rjmp L452
	.dbline 548
	lds R24,_val
	subi R24,255    ; addi 1
	sts _val,R24
L452:
	.dbline 548
; if(KEY_ADD==0){delay(30);if(KEY_ADD==0)val++;}
L450:
	.dbline 549
;   if(val>9)val=0;
	ldi R24,9
	lds R2,_val
	cp R24,R2
	brsh L454
	.dbline 549
	clr R2
	sts _val,R2
L454:
	.dbline 550
;   if(KEY_OK==0){delay(30);
	sbic 0x16,2
	rjmp L456
	.dbline 550
	.dbline 550
	ldi R16,30
	ldi R17,0
	xcall _delay
	.dbline 551
;   			   if(KEY_OK==0)
	sbic 0x16,2
	rjmp L458
	.dbline 552
;   			   {SREG=0x00;study_speed_temp=val;
	.dbline 552
	clr R2
	out 0x3f,R2
	.dbline 552
	lds R2,_val
	sts _study_speed_temp,R2
	.dbline 553
;   				EEPROM_WRITE(study_speed_address,val);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_val
	ldi R19,>_val
	ldi R16,15
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 554
;   				eep_temp=55;
	ldi R24,55
	sts _eep_temp,R24
	.dbline 555
; 				EEPROM_WRITE(study_speed_address+1,eep_temp);
	ldi R24,1
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,<_eep_temp
	ldi R19,>_eep_temp
	ldi R16,16
	ldi R17,0
	xcall _EEPROMWriteBytes
	.dbline 556
; 				PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 557
; 				delay(500);
	ldi R16,500
	ldi R17,1
	xcall _delay
	.dbline 558
; 				SREG|=0x80; }
	bset 7
	.dbline 558
L458:
	.dbline 559
; 			   }
L456:
	.dbline 560
;   delay(300);
	ldi R16,300
	ldi R17,1
	xcall _delay
	.dbline -2
L449:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e fnc_inc_dec _fnc_inc_dec fV
;              x -> R20
;              i -> R22
	.even
_fnc_inc_dec::
	xcall push_gset2
	.dbline -1
	.dbline 566
; }
; 
; 
; /*================计算出开门关门的加减速曲线===============*/
; void fnc_inc_dec(void)
; {	 uchar i,x;
	.dbline 567
;  	 x=0; 
	clr R20
	.dbline 569
; 	//计算出开门的加速曲线
; 	open_max=open_max_tab[open_max_temp];//取得开门速度最大脉宽
	ldi R24,<_open_max_tab
	ldi R25,>_open_max_tab
	lds R30,_open_max_t

⌨️ 快捷键说明

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