📄 hptv.s
字号:
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 + -