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

📄 hptv.s

📁 MCU控制程序
💻 S
📖 第 1 页 / 共 5 页
字号:
;    PORTA|=(1<<7);
	sbi 0x1b,7
	.dbline 359
;    System_State=booting;
	sts _System_State,R24
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e close_machine _close_machine fV
	.even
_close_machine::
	.dbline -1
	.dbline 370
; }
; 
; 
; 
; /*********************************************
; //关机函数
; //此函数用于设置关机时序
; 
; *********************************************/
; void close_machine(void)
; {
	.dbline 371
;    WDR();
	wdr
	.dbline 373
;    //PORTC|=0x38;                               //pwrbt=1
;    reset_close_count=0;
	clr R2
	sts _reset_close_count,R2
	.dbline 374
;    rly_on_count=0;
	sts _rly_on_count,R2
	.dbline 375
;    vs_on_close_count=0;
	sts _vs_on_close_count,R2
	.dbline 376
;    close_to_open_count=0;
	sts _close_to_open_count,R2
	.dbline 377
;    machine_close_start=1;
	ldi R24,1
	sts _machine_close_start,R24
	.dbline 378
;    close_to_open_station=0;
	sts _close_to_open_station,R2
	.dbline 379
;    close_machine_enable=0;
	sts _close_machine_enable,R2
	.dbline 380
;    open_machine_enable=0;
	sts _open_machine_enable,R2
	.dbline 381
;    tv_state=0;
	sts _tv_state,R2
	.dbline 382
;    PORTA|=(1<<7);
	sbi 0x1b,7
	.dbline 383
;    System_State=halting;
	ldi R24,4
	sts _System_State,R24
	.dbline 384
;    WDR();
	wdr
	.dbline -2
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 394
; }
; 
;     
; 
; /*********************************************
; // port initialize
; 
; *********************************************/
; void port_init(void)
; {
	.dbline 395
;  PORTA = 0xcc;   //将PA4 PA5,SPDIF_SW 输出为0 PA6 HOTPLUG保持为高
	ldi R24,204
	out 0x1b,R24
	.dbline 396
;  DDRA  = 0xf3;   // PA4,PA5 置为输出态 
	ldi R24,243
	out 0x1a,R24
	.dbline 398
; // PORTB = 0x7f;
;  PORTB = 0xff;   //内部上拉使能
	ldi R24,255
	out 0x18,R24
	.dbline 399
;  DDRB  = 0x80;
	ldi R24,128
	out 0x17,R24
	.dbline 401
; // PORTC = 0x4c;  //m103 output only      
;  PORTC = 0x0c;
	ldi R24,12
	out 0x15,R24
	.dbline 402
;  PORTC|=(1<<RS232_SW1);    //1
	sbi 0x15,6
	.dbline 403
;  PORTC&=~(1<<RS232_SW2);   //0   --串口初始化
	cbi 0x15,7
	.dbline 405
;  // PORTC = 0x0c;  //m103 output only  
;  DDRC  = 0xf4;  //pwrbt 去掉更改为备用的实时的中断输入引脚;
	ldi R24,244
	out 0x14,R24
	.dbline 406
;  PORTD = 0x60;
	ldi R24,96
	out 0x12,R24
	.dbline 407
;  DDRD  = 0xF3;
	ldi R24,243
	out 0x11,R24
	.dbline -2
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_time _init_time fV
	.even
_init_time::
	xcall push_gset2
	.dbline -1
	.dbline 411
; }
; /********************************************/
; void init_time()
; {
	.dbline 412
;   Time.VS.TL=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _Time+1,R21
	sts _Time,R20
	sts _Time+2+1,R23
	sts _Time+2,R22
	.dbline 413
;   Time.VS.TH=0;
	clr R2
	clr R3
	sts _Time+4+1,R3
	sts _Time+4,R2
	.dbline -2
L30:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e WriteTime _WriteTime fV
;              i -> R20
;            Num -> R18
;          RTime -> R16,R17
	.even
_WriteTime::
	xcall push_gset1
	.dbline -1
	.dbline 417
; }
; 
; void WriteTime(char * RTime,char Num)
; {
	.dbline 419
;   unsigned char i;
;   for(i=0;i<Num;i++)
	clr R20
	xjmp L36
L33:
	.dbline 420
	.dbline 421
	ldi R24,<_I2cReceiveData+1
	ldi R25,>_I2cReceiveData+1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	mov R30,R20
	clr R31
	add R30,R16
	adc R31,R17
	std z+0,R2
	.dbline 422
L34:
	.dbline 419
	inc R20
L36:
	.dbline 419
	cp R20,R18
	brlo L33
	.dbline -2
L32:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Num 18 c
	.dbsym r RTime 16 pc
	.dbend
	.dbfunc e ReadTime _ReadTime fV
;              i -> R20
;            Num -> R18
;          Rtime -> R16,R17
	.even
_ReadTime::
	xcall push_gset1
	.dbline -1
	.dbline 452
;   {
;    *(RTime+i)=I2cReceiveData[i+1];
;   }
; 
; }
; /*
; void WriteTime()      //写设定时间
; {
;   unsigned char i;
;   for(i=1;i<6;i++)
;   {
;    Time.CBit[i]=I2cReceiveData[i];
;   }
; }
; void WriteOpenTime()      //写开机时间
; {
;   unsigned char i;
;   for(i=1;i<4;i++)
;   {
;    OpenTime.OBit[i]=I2cReceiveData[i];
;   }
; }
; void WriteCloseTime()      //写关机时间
; {
;   unsigned char i;
;   for(i=1;i<4;i++)
;   {
;    CloseTime.CBit[i]=I2cReceiveData[i];
;   }
; }*/
; 
; void ReadTime(char *Rtime,char Num)
; {
	.dbline 454
;   unsigned char i;
;   for(i=0;i<Num;i++)
	clr R20
	xjmp L42
L39:
	.dbline 455
	.dbline 456
	mov R30,R20
	clr R31
	add R30,R16
	adc R31,R17
	ldd R2,z+0
	ldi R24,<_I2cSendData+1
	ldi R25,>_I2cSendData+1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 457
L40:
	.dbline 454
	inc R20
L42:
	.dbline 454
	cp R20,R18
	brlo L39
	.dbline -2
L38:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r Num 18 c
	.dbsym r Rtime 16 pc
	.dbend
	.dbfunc e AddTime _AddTime fV
;              i -> y+0
;          ATime -> R16
	.even
_AddTime::
	xcall push_gset2
	sbiw R28,4
	.dbline -1
	.dbline 460
;   {
;    I2cSendData[i+1]=*(Rtime+i);
;   }
; }
; void AddTime(char ATime)
; {
	.dbline 462
;   unsigned long i;
;   i=0xFFFFFFFF-Time.VS.TL;
	lds R4,_Time+2
	lds R5,_Time+2+1
	lds R2,_Time
	lds R3,_Time+1
	ldi R20,255
	ldi R21,255
	ldi R22,255
	ldi R23,255
	sub R20,R2
	sbc R21,R3
	sbc R22,R4
	sbc R23,R5
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 463
;   if(i<=ATime)
	mov R2,R16
	clr R3
	clr R4
	clr R5
	movw R30,R28
	ldd R6,z+0
	ldd R7,z+1
	ldd R8,z+2
	ldd R9,z+3
	cp R2,R6
	cpc R3,R7
	cpc R4,R8
	cpc R5,R9
	brlo L45
	.dbline 464
;   {
	.dbline 465
;     Time.VS.TH++;
	lds R24,_Time+4
	lds R25,_Time+4+1
	adiw R24,1
	sts _Time+4+1,R25
	sts _Time+4,R24
	.dbline 466
; 	Time.VS.TL=ATime-i;
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	mov R6,R16
	clr R7
	clr R8
	clr R9
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	sts _Time+1,R7
	sts _Time,R6
	sts _Time+2+1,R9
	sts _Time+2,R8
	.dbline 467
;   }
	xjmp L46
L45:
	.dbline 469
	.dbline 470
	mov R2,R16
	clr R3
	clr R4
	clr R5
	lds R8,_Time+2
	lds R9,_Time+2+1
	lds R6,_Time
	lds R7,_Time+1
	add R6,R2
	adc R7,R3
	adc R8,R4
	adc R9,R5
	sts _Time+1,R7
	sts _Time,R6
	sts _Time+2+1,R9
	sts _Time+2,R8
	.dbline 471
L46:
	.dbline -2
L44:
	adiw R28,4
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l i 0 l
	.dbsym r ATime 16 c
	.dbend
	.dbfunc e DecTime _DecTime fV
;              i -> y+0
;          Atime -> R16
	.even
_DecTime::
	xcall push_gset2
	sbiw R28,4
	.dbline -1
	.dbline 475
;   else
;   {
;     Time.VS.TL+=ATime;
;   }
;  
; }
; void DecTime(char Atime)
; {
	.dbline 477
;  unsigned long i;
;  if(Time.VS.TL>8)
	ldi R20,8
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_Time+2
	lds R5,_Time+2+1
	lds R2,_Time
	lds R3,_Time+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L49
	.dbline 478
;  {
	.dbline 479
;    Time.VS.TL=Time.VS.TL-Atime;
	mov R2,R16
	clr R3
	clr R4
	clr R5
	lds R8,_Time+2
	lds R9,_Time+2+1
	lds R6,_Time
	lds R7,_Time+1
	sub R6,R2
	sbc R7,R3
	sbc R8,R4
	sbc R9,R5
	sts _Time+1,R7
	sts _Time,R6
	sts _Time+2+1,R9
	sts _Time+2,R8
	.dbline 480
;  }
	xjmp L50
L49:
	.dbline 482
	.dbline 483
	lds R24,_Time+4
	lds R25,_Time+4+1
	sbiw R24,1
	sts _Time+4+1,R25
	sts _Time+4,R24
	.dbline 484
	mov R2,R16
	clr R3
	clr R4
	clr R5
	ldi R20,255
	ldi R21,255
	ldi R22,255
	ldi R23,255
	sub R20,R2
	sbc R21,R3
	sbc R22,R4
	sbc R23,R5
	lds R4,_Time+2
	lds R5,_Time+2+1
	lds R2,_Time
	lds R3,_Time+1
	add R20,R2
	adc R21,R3
	adc R22,R4
	adc R23,R5
	sts _Time+1,R21
	sts _Time,R20
	sts _Time+2+1,R23
	sts _Time+2,R22
	.dbline 485
L50:
	.dbline -2
L48:
	adiw R28,4
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l i 0 l
	.dbsym r Atime 16 c
	.dbend
	.dbfunc e port_open_machine_set _port_open_machine_set fV
	.even
_port_open_machine_set::
	.dbline -1
	.dbline 494
;  else
;  {
;   Time.VS.TH--;
;   Time.VS.TL=0xffffffff-Atime+Time.VS.TL;
;  }
; }
; /*********************************************
; // port initialize when you open and close the machine
; //port_open_machine_set 主要实现MCU收到开机指令后的端口设置
; //port_close_machine_set 主要实现MCU收到关机指令后的端口设置,与上电后一致
; //可以将十六进制改成二进制,表示和更改更直观
; *********************************************/
; void port_open_machine_set(void)
; {
	.dbline 495
;    WDR();
	wdr
	.dbline 496
;    PORTA&= 0xfd;   //pin37  pa0=0   pin37 PA0=1在定时器中delay 2s 实现
	in R24,0x1b
	andi R24,253
	out 0x1b,R24
	.dbline 501
; //   PORTA|= 0x02;   //pin36  pa1=1 
;  //  PORTB|= 0x80;   //pin3   pb7=1
; //   PORTC|= 0x80;   //pin26  pc7=1
; //   PORTC&= 0xbf;   //pin25  pc6=0
;    PORTD&= 0x7f;   //pin16  pd7=0
	in R24,0x12
	andi R24,127
	out 0x12,R24
	.dbline 503
;   // PORTC = 0x0c;
;    PORTC&=~(1<<RS232_SW1);   //0
	cbi 0x15,6
	.dbline 504
;    PORTC|=(1<<RS232_SW2);    //1
	sbi 0x15,7
	.dbline 507
; //   PORTD|= 0x20;   //pin14  pd5=1
; //   PORTD&= 0xef;   //pin13  pd4=0
;    WDR();
	wdr
	.dbline -2
L52:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_close_machine_set _port_close_machine_set fV
	.even
_port_close_machine_set::
	.dbline -1
	.dbline 511
; }
; 
; void port_close_machine_set(void)
; {
	.dbline 512
;    WDR();
	wdr
	.dbline 513
;  PORTA = 0x4c;   //将PA4 SPDIF_SW 暂时定义在高阻态 PA6 HOTPLUG保持为高 pa0=0 A_MUTE为低
	ldi R24,76
	out 0x1b,R24
	.dbline 514
;  DDRA  = 0xE3;   //未使能 PA4 SPDIF_SW 
	ldi R24,227
	out 0x1a,R24
	.dbline 515
;  PORTB = 0xff;   //内部上拉使能
	ldi R24,255
	out 0x18,R24
	.dbline 516
;  DDRB  = 0x80;
	ldi R24,128
	out 0x17,R24
	.dbline 518
; // PORTC = 0x4c;  //m103 output only
;  PORTC = 0x0c;
	ldi R24,12
	out 0x15,R24
	.dbline 519
;  PORTC|=(1<<RS232_SW1);   //1
	sbi 0x15,6
	.dbline 520
;  PORTC&=~(1<<RS232_SW2);   //0   --串口初始化
	cbi 0x15,7
	.dbline 524
; 
; // PORTC = 0x0c;  //m103 output only  串口切换为00---mcu通道
;  
;  DDRC  = 0xf4;  //pwrbt 去掉更改为备用的实时的中断输入引脚;
	ldi R24,244
	out 0x14,R24
	.dbline 525
;  PORTD = 0x60;
	ldi R24,96
	out 0x12,R24
	.dbline 526
;  DDRD  = 0xF3;
	ldi R24,243
	out 0x11,R24
	.dbline 528
;  
;    WDR();

⌨️ 快捷键说明

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