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

📄 hptv.s

📁 MCU控制程序
💻 S
📖 第 1 页 / 共 5 页
字号:
	wdr
	.dbline -2
L53:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 540
; }
; 
; 
; 
; 
; 
; /******************************************
; //Watchdog initialize
; // prescale: 1024K
; ******************************************/
; void watchdog_init(void)
; {
	.dbline 541
;  WDR(); //this prevents a timout on enabling
	wdr
	.dbline 542
;  WDTCR = 0x0E; //WATCHDOG ENABLED - dont forget to issue WDRs
	ldi R24,14
	out 0x21,R24
	.dbline -2
L54:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 556
; }
; 
; 
; 
; /*****************************************
; //TIMER0 initialize - prescale:64
; // WGM: Normal
; // desired value: 1KHz
; // actual value:  1.002KHz (0.2%)
; //主要实现时序中的毫秒级的计数
; //同时实现输入端口的电平检测
; *****************************************/
; void timer0_init(void)
; {
	.dbline 557
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 558
;  TCNT0 = 0x8D; //set count
	ldi R24,141
	out 0x32,R24
	.dbline 559
;  OCR0  = 0x73;  //set compare
	ldi R24,115
	out 0x3c,R24
	.dbline 560
;  TCCR0 = 0x03; //start timer
	ldi R24,3
	out 0x33,R24
	.dbline -2
L55:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e time0_cl _time0_cl fV
	.even
_time0_cl::
	.dbline -1
	.dbline 563
; }
; void time0_cl(void)
; {
	.dbline 564
;  if(machine_open_start==1)                 //开机进入第一阶段reset未开始
	lds R24,_machine_open_start
	cpi R24,1
	brne L57
	.dbline 565
;    {
	.dbline 573
;       
; /*      if(pwrbt_count>=0&&pwrbt_count<pwrbt_high_time)
; 	    {
; 		   DDRC|=0x08;
; 		   PORTC|=0x08;                    //pwrbt=1
; 		}
; */		
;       if(pwrbt_count>=pwrbt_high_time&&pwrbt_count<pwrbt_low_time)
	lds R24,_pwrbt_count
	cpi R24,10
	brlo L59
	cpi R24,15
	brsh L59
	.dbline 574
; 	    {
	.dbline 577
; //		   DDRC|=0x08;
; //		   PORTC&=0xf7;                    //pwrbt=0
; 		   open_to_close_station=0;        //强制赋值,出于稳定考虑,可以省略
	clr R2
	sts _open_to_close_station,R2
	.dbline 578
; 		   close_machine_enable=0;         //强制赋值,出于稳定考虑,可以省略
	sts _close_machine_enable,R2
	.dbline 579
; 		}
L59:
	.dbline 580
; 	  if(pwrbt_count>=pwrbt_low_time&&pwrbt_count<255)
	lds R24,_pwrbt_count
	cpi R24,15
	brlo L61
	cpi R24,255
	brsh L61
	.dbline 581
; 	    {
	.dbline 583
; 		  // PORTC|=0x04;                    //rly_on=1
; 		   PORTC&=0xfb;                    //rly_on=0
	in R24,0x15
	andi R24,251
	out 0x15,R24
	.dbline 584
;            open_to_close_count=0;
	clr R2
	clr R3
	sts _open_to_close_count+1,R3
	sts _open_to_close_count,R2
	.dbline 585
; 		   vs_on_open_count=0;          
	sts _vs_on_open_count,R2
	.dbline 586
; 		   reset_open_count=0;             //强制付值,出于稳定考虑,可以省略
	sts _reset_open_count,R2
	.dbline 587
; 		   machine_open_start=2;           //开机进入第二阶段reset开始
	ldi R24,2
	sts _machine_open_start,R24
	.dbline 588
; 		   open_to_close_station=1;        //开机计时,到20s可以关机
	ldi R24,1
	sts _open_to_close_station,R24
	.dbline 589
; 		   pwrbt_count=0;                  //防止益处,出于稳定考虑,可以省略
	sts _pwrbt_count,R2
	.dbline 591
; 		   
; 		}
L61:
	.dbline 592
;       pwrbt_count++;
	lds R24,_pwrbt_count
	subi R24,255    ; addi 1
	sts _pwrbt_count,R24
	.dbline 593
; 	  if(pwrbt_count>=(pwrbt_low_time+1)&&pwrbt_count<=255)
	cpi R24,16
	brlo L63
	ldi R24,255
	lds R2,_pwrbt_count
	cp R24,R2
	brlo L63
	.dbline 594
; 	    {
	.dbline 595
; 		   pwrbt_count=0;                  //防止益处,出于稳定考虑,可以省略
	clr R2
	sts _pwrbt_count,R2
	.dbline 596
; 		}
L63:
	.dbline 613
; /*		
; 	  if((PINA&0x08)==0)                   //掉电检测
; 	  {
; 	    power_down_count++;
; 	    if(power_down_count>=20)           //10ms检测  
; 	      {
; 		    power_down_count=0;
; 	       // power_on_close_enable=1;       //关机使能
; 			machine_open_start=0;         //清除10s限制
; 			close_machine_enable=1;       //立即关机,没有10s限制
; 		  //  power_check_up=1;              //延时开机使能
; 			//power_check_down=1;            //立即关机,没有10s限制
; 			//open_machine();               //立即关机
; 			//UDR=0x33;//测试
; 	      }
; 	  }*/	
;    }
L57:
	.dbline 620
; // else
; //  {
; //	   pwrbt_count=0;                      //防止益处,出于稳定考虑,可以省略
; //   }
;                                    
; 					//开机进入第二阶段reset开始   set vs_on 
;    if(machine_open_start==2)
	lds R24,_machine_open_start
	cpi R24,2
	brne L65
	.dbline 621
; 	  {
	.dbline 622
; 	    vs_on_open_count++;
	lds R24,_vs_on_open_count
	subi R24,255    ; addi 1
	sts _vs_on_open_count,R24
	.dbline 623
; 	    if(vs_on_open_count>vs_on_open_time&&vs_on_open_count<=255)
	ldi R24,20
	lds R2,_vs_on_open_count
	cp R24,R2
	brsh L67
	ldi R24,255
	cp R24,R2
	brlo L67
	.dbline 624
; 		   {
	.dbline 626
; 		     // PORTD|=0x40;               //vs_on=1
; 			  PORTD&=0xff;               //vs_on=0
	in R24,0x12
	andi R24,255
	out 0x12,R24
	.dbline 629
;     	//	  PORTD&= 0xdf;   //pin14  pd5=0
; 		//	  PORTD&= 0xef;   //pin13  pd4=0
; 			  machine_open_start=3;
	ldi R24,3
	sts _machine_open_start,R24
	.dbline 630
; 			  vs_on_open_count=0;        //防止益处,出于稳定考虑,可以省略
	clr R2
	sts _vs_on_open_count,R2
	.dbline 631
; 		   }
L67:
	.dbline 650
; 	/****************	   
;         if((PINA&0x08)==0)//开机时掉电检测PA3脚,如持续10ms则执行关机,开机操作
;         {
; 	        power_down_count++;
; 	        if(power_down_count>=10)//10ms检测
; 	        {
; 		        power_down_count=0;
; //	            power_on_close_enable=1;       //关机使能
; 			
; 			  //  open_to_close_station=0;      //取消20s状态
; 			    machine_open_start=0;         //清除10s限制
; 			    close_machine_enable=1;       //立即关机,没有10s限制
; 		     //   power_check_up=1;              //延时开机使能
; 			//power_check_down=1;            //立即关机,没有10s限制
; 			//open_machine();               //立即关机
; 			//UDR=0x33;//测试
; 	        }
; 	     }************/
; 	  }
L65:
	.dbline 655
;     
; //////////////////////////////////////////////////////////////
;                                       
; 									      //关机代码
;     if(machine_close_start==1)
	lds R24,_machine_close_start
	cpi R24,1
	breq X1
	xjmp L69
X1:
	.dbline 656
; 	  {
	.dbline 657
; 	     if(reset_close_count>=reset_close_time&&reset_close_count<reset_l_close_time)
	lds R24,_reset_close_count
	cpi R24,50
	brlo L71
	cpi R24,80
	brsh L71
	.dbline 658
; 		   {
	.dbline 659
; 		      PORTA&=0xfe;                //pa0=0  实现关机静音;
	in R24,0x1b
	andi R24,254
	out 0x1b,R24
	.dbline 660
; 		   }
L71:
	.dbline 661
; 		if((reset_close_count>=reset_l_close_time)&&(reset_close_count<255))
	lds R24,_reset_close_count
	cpi R24,80
	brlo L73
	cpi R24,255
	brsh L73
	.dbline 662
; 		   {
	.dbline 664
; 		      //PORTC|=0x30;                //reset=1,reset_l=1
; 			  DDRC|=0x30;
	in R24,0x14
	ori R24,48
	out 0x14,R24
	.dbline 665
; 		      PORTC&=0xcf;                //reset=0,reset_l=0
	in R24,0x15
	andi R24,207
	out 0x15,R24
	.dbline 666
; 			  PORTA&=0xdf;                //pa5=0 IR_SW关闭;这一轮板R1074应不装 
	in R24,0x1b
	andi R24,223
	out 0x1b,R24
	.dbline 667
; 		   }
L73:
	.dbline 668
; 		 reset_close_count++;
	lds R24,_reset_close_count
	subi R24,255    ; addi 1
	sts _reset_close_count,R24
	.dbline 669
; 		 rly_on_count++;
	lds R24,_rly_on_count
	subi R24,255    ; addi 1
	sts _rly_on_count,R24
	.dbline 670
; 		 if((reset_close_count>rly_on_time)&&(reset_close_count<=255))
	ldi R24,200
	lds R2,_reset_close_count
	cp R24,R2
	brsh L75
	ldi R24,255
	cp R24,R2
	brlo L75
	.dbline 671
; 		   {
	.dbline 674
; 	         // DDRC|=0x04;
; 		      //PORTC&=0xfb;                //rly_on=0
; 			  PORTC|=0x04;                    //rly_on=1
	sbi 0x15,2
	.dbline 676
; 			 // rly_on_count=0;
; 		   }
L75:
	.dbline 677
; 		 vs_on_close_count++;
	lds R24,_vs_on_close_count
	subi R24,255    ; addi 1
	sts _vs_on_close_count,R24
	.dbline 678
; 		 if((reset_close_count>vs_on_close_time)&&(reset_close_count<255)) 
	ldi R24,220
	lds R2,_reset_close_count
	cp R24,R2
	brsh L77
	mov R24,R2
	cpi R24,255
	brsh L77
	.dbline 679
; 		   {
	.dbline 681
; 		     // PORTD&=0xbf;                //vs_on=0;
; 			  PORTD|=0x40;               //vs_on=1
	sbi 0x12,6
	.dbline 682
; 			  vs_on_close_count=0;
	clr R2
	sts _vs_on_close_count,R2
	.dbline 683
; 			  reset_close_count=0;
	sts _reset_close_count,R2
	.dbline 684
; 			  rly_on_count=0;
	sts _rly_on_count,R2
	.dbline 685
; 			  close_to_open_station=1;
	ldi R24,1
	sts _close_to_open_station,R24
	.dbline 686
; 			  machine_close_start=0;
	sts _machine_close_start,R2
	.dbline 687
; 			  PORTD&=0xef;
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 688
; 		      PORTD|=0x20;                //指示灯
	sbi 0x12,5
	.dbline 689
; 			  port_close_machine_set();   //set the port after you close the machine
	xcall _port_close_machine_set
	.dbline 690
; 			  System_State=standby;
	clr R2
	sts _System_State,R2
	.dbline 692
; 			   
; 		   }
L77:
	.dbline 693
; 		 if(reset_close_count>(vs_on_close_count+1)&&reset_close_count<=255)
	lds R24,_vs_on_close_count
	subi R24,255    ; addi 1
	lds R2,_reset_close_count
	cp R24,R2
	brsh L79
	ldi R24,255
	cp R24,R2
	brlo L79
	.dbline 694
; 		   {
	.dbline 695
; 			  reset_close_count=0;
	clr R2
	sts _reset_close_count,R2
	.dbline 696
; 			  rly_on_count=0;
	sts _rly_on_count,R2
	.dbline 697
; 			  vs_on_close_count=0;
	sts _vs_on_close_count,R2
	.dbline 698
; 			  machine_close_start=0;
	sts _machine_close_start,R2
	.dbline 699
; 		   }                              //防止益处,出于稳定考虑,可以省略
L79:
	.dbline 700
; 	  }
L69:
	.dbline 705
; 
; //////////////////////////////////////////////////////pw_key open the machine
; /*##############################################################*/
; 
;   if(tv_state)  //开机时检测
	lds R2,_tv_state
	tst R2
	breq L81
	.dbline 706
;   {
	.dbline 707
;     if((PINA&0x08)==0)//开机时掉电检测PA3脚,如持续10ms则执行关机,开机操作
	sbic 0x19,3
	rjmp L83
	.dbline 708
;      {
	.dbline 709
; 	    power_down_count++;
	lds R24,_power_down_count
	subi R24,255    ; addi 1
	sts _power_down_count,R24
	.dbline 710
; 	    if((power_down_count>=20)&&(machine_open_start==0))//10ms检测
	cpi R24,20
	brlo L82
	lds R2,_machine_open_start
	tst R2
	brne L82
	.dbline 711
; 	      {
	.dbline 712
; 		    power_down_count=0;
	clr R2
	sts _power_down_count,R2
	.dbline 714
; 			
; 	        power_on_close_enable=1;       //关机使能
	ldi R24,1
	sts _power_on_close_enable,R24
	.dbline 715
; 			open_to_close_station=0;      //取消20s状态
	sts _open_to_close_station,R2
	.dbline 717
; 			//machine_open_start=0;         //清除10s限制
; 			close_machine_enable=1;       //立即关机,没有10s限制
	sts _close_machine_enable,R24
	.dbline 718
; 		    power_check_up=1;              //延时开机使能
	sts _power_check_up,R24
	.dbline 722
; //			power_check_down=1;            //立即关机,没有10s限制
; 			//open_machine();               //立即关机
; 			
; 	      }
	.dbline 723
; 	 }
	xjmp L82
L83:
	.dbline 725
;     else                                 //为0正常
;      {
	.dbline 726
; 	        power_down_count=0;              //计数器清零
	clr R2
	sts _power_down_count,R2
	.dbline 727
; 	 }
	.dbline 728
;   }
	xjmp L82
L81:
	.dbline 730
;   else         
;   {                                   //关机时检测是否需要掉电开机
	.dbline 732
;   
;      if(power_check_up)               //开机
	lds R2,_power_check_up
	tst R2
	breq L87
	.dbline 733
; 		{
	.dbline 735
; 		 
; 		  power_down_count=0;
	clr R2
	sts _power_down_count,R2
	.dbline 737
; 		  
; 		  power_check_up=0;
	sts _power_check_up,R2
	.dbline 738
; 		  power_key_open_enable=1;
	ldi R24,1
	sts _power_key_open_enable,R24
	.dbline 740
; 		
; 		}
L87:
	.dbline 741
;   }	 
L82:
	.dbline 743
; 	  
;  WDR();
	wdr
	.dbline -2
L56:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile G:\McuControl\hptv.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 748
;   
; }
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 750
;  //WDR();
;  TCNT0 = 0x8D; //reload counter value
	ldi R24,141
	out 0x32,R24
	.dbline 751
;  time0_b=1;
	ldi R24,1
	sts _time0_b,R24
	.dbline 752
;  time0_num++;
	lds R24,_time0_num
	subi R24,255    ; addi 1
	sts _time0_num,R24
	.dbline 753
;  time1_num++;
	lds R24,_time1_num
	subi R24,255    ; addi 1
	sts _time1_num,R24
	.dbline 756
;  
;  
;  if(time1_num>=50)//time时间计时
	cpi R24,50
	brlo L90
	.dbline 757
;    {
	.dbline 758
;      time1_num=0;
	clr R2
	sts _time1_num,R2
	.dbline 759
;      time1_b=1;
	ldi R24,1
	sts _time1_b,R24
	.dbline 760
;    }
L90:
	.dbline 761
;  if(key_open)     //按键保持时间计数
	lds R2,_key_open

⌨️ 快捷键说明

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