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

📄 hp.lst

📁 MCU控制程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    010D 9543      INC	R20
    010E 3046      CPI	R20,6
    010F F360      BCS	0x00FC
(0298) 		 }  
(0299) 	   }
(0300) 	  if((pb_state&(1<<6))==0)
    0110 9020008F  LDS	R2,_pb_state
    0112 FC26      SBRC	R2,6
    0113 C005      RJMP	0x0119
(0301) 	   {
(0302) 	     i2c_public|=1<<5;
    0114 918000F6  LDS	R24,_i2c_public
    0116 6280      ORI	R24,0x20
    0117 938000F6  STS	_i2c_public,R24
(0303) 	   }
(0304) 	}
    0119 940E1157  CALL	pop_gset1
    011B 9508      RET
_io_check:
  i                    --> R20
    011C 940E1154  CALL	push_gset1
(0305) 	//UDR=pb_state;
(0306) }
(0307) void io_check(void)     //io状态变化检测函数 0.5s检测一次
(0308) {
(0309)  uchar i;
(0310) 
(0311) 	if(pb_state!=(PINB&0x7f))
    011E B386      IN	R24,0x16
    011F 778F      ANDI	R24,0x7F
    0120 9020008F  LDS	R2,_pb_state
    0122 1628      CP	R2,R24
    0123 F029      BEQ	0x0129
(0312) 	{
(0313) 	  pbcheck_num++;
    0124 9180008D  LDS	R24,_pbcheck_num
    0126 5F8F      SUBI	R24,0xFF
    0127 9380008D  STS	_pbcheck_num,R24
(0314) 	}
(0315) 	
(0316) 	if(pbcheck_num>1)  //确认有变化
    0129 E081      LDI	R24,1
    012A 9020008D  LDS	R2,_pbcheck_num
    012C 1582      CP	R24,R2
    012D F008      BCS	0x012F
    012E C03F      RJMP	0x016E
(0317) 	{
(0318) 	   for(i=0;i<6;i++)
    012F 2744      CLR	R20
    0130 C024      RJMP	0x0155
(0319) 	   {
(0320) 	        if((pb_state&(1<<i))!=((PINB&(1<<i))))//位比较,相同则调用函数
    0131 2F24      MOV	R18,R20
    0132 2733      CLR	R19
    0133 E001      LDI	R16,1
    0134 E010      LDI	R17,0
    0135 940E11A5  CALL	lsl16
    0137 B226      IN	R2,0x16
    0138 2433      CLR	R3
    0139 2220      AND	R2,R16
    013A 2231      AND	R3,R17
    013B 9040008F  LDS	R4,_pb_state
    013D 2455      CLR	R5
    013E 2240      AND	R4,R16
    013F 2251      AND	R5,R17
    0140 1442      CP	R4,R2
    0141 0453      CPC	R5,R3
    0142 F089      BEQ	0x0154
(0321) 	        {
(0322) 			   
(0323) 			   i2c_public|=(1<<i);   //相应位置位
    0143 E001      LDI	R16,1
    0144 2F14      MOV	R17,R20
    0145 940E11AC  CALL	lsl8
    0147 902000F6  LDS	R2,_i2c_public
    0149 2A20      OR	R2,R16
    014A 922000F6  STS	_i2c_public,R2
(0324) 			   pb_state=PINB&0x7f; //保存新的状态位
    014C B386      IN	R24,0x16
    014D 778F      ANDI	R24,0x7F
    014E 9380008F  STS	_pb_state,R24
(0325) 			   STATE=(~pb_state)&0x7f;
    0150 9580      COM	R24
    0151 778F      ANDI	R24,0x7F
    0152 9380007F  STS	_STATE,R24
    0154 9543      INC	R20
    0155 3046      CPI	R20,6
    0156 F2D0      BCS	0x0131
(0326) 	        }
(0327) 		}	
(0328) 	   if((pb_state&(1<<6))!=(PINB&(1<<6)))  //由于i2c_public只有8位第7位单独处理
    0157 B386      IN	R24,0x16
    0158 7480      ANDI	R24,0x40
    0159 9190008F  LDS	R25,_pb_state
    015B 7490      ANDI	R25,0x40
    015C 1798      CP	R25,R24
    015D F069      BEQ	0x016B
(0329) 	   {                                   //第5位第6位用相同申请项
(0330) 			   i2c_public|=(1<<5);   //相应位置位
    015E 918000F6  LDS	R24,_i2c_public
    0160 6280      ORI	R24,0x20
    0161 938000F6  STS	_i2c_public,R24
(0331) 			   pb_state=PINB&0x7f; //保存新的状态位
    0163 B386      IN	R24,0x16
    0164 778F      ANDI	R24,0x7F
    0165 9380008F  STS	_pb_state,R24
(0332) 			   STATE=(~pb_state)&0x7f; //
    0167 9580      COM	R24
    0168 778F      ANDI	R24,0x7F
    0169 9380007F  STS	_STATE,R24
(0333) 	   }
(0334) 	  pbcheck_num=0; 
    016B 2422      CLR	R2
    016C 9220008D  STS	_pbcheck_num,R2
(0335) 	}
    016E 940E1157  CALL	pop_gset1
    0170 9508      RET
(0336) 	//UDR=pb_state;
(0337) }
(0338) /*********************************************
(0339) //开机函数
(0340) //此函数用于设置开机时序
(0341) 
(0342) *********************************************/
(0343) void open_machine(void)
(0344) {
(0345)    WDR();
_open_machine:
    0171 95A8      WDR
(0346)    //PORTC|=0x38;                               //pwrbt=1,reset=1,eset_l=1
(0347)    pwrbt_count=0;
    0172 2422      CLR	R2
    0173 922000BC  STS	_pwrbt_count,R2
(0348)    reset_open_count=0;
    0175 922000BB  STS	_reset_open_count,R2
(0349)    vs_on_open_count=0;
    0177 922000B8  STS	_vs_on_open_count,R2
(0350)    machine_open_start=1;
    0179 E081      LDI	R24,1
    017A 938000B0  STS	_machine_open_start,R24
(0351)    open_to_close_station=0;
    017C 922000B1  STS	_open_to_close_station,R2
(0352)    open_to_close_count=0;
    017E 2433      CLR	R3
    017F 923000BE  STS	_open_to_close_count+1,R3
    0181 922000BD  STS	_open_to_close_count,R2
(0353)    close_machine_enable=0;
    0183 922000AE  STS	_close_machine_enable,R2
(0354)    open_machine_enable=0;
    0185 922000AD  STS	_open_machine_enable,R2
(0355)    tv_state=1;
    0187 938000F9  STS	_tv_state,R24
(0356)    WDR();
    0189 95A8      WDR
(0357)    command_2d=0;
    018A 92200093  STS	_command_2d,R2
(0358)    PORTA|=(1<<7);
    018C 9ADF      SBI	0x1B,7
(0359)    System_State=booting;
    018D 93800069  STS	_System_State,R24
    018F 9508      RET
(0360) }
(0361) 
(0362) 
(0363) 
(0364) /*********************************************
(0365) //关机函数
(0366) //此函数用于设置关机时序
(0367) 
(0368) *********************************************/
(0369) void close_machine(void)
(0370) {
(0371)    WDR();
_close_machine:
    0190 95A8      WDR
(0372)    //PORTC|=0x38;                               //pwrbt=1
(0373)    reset_close_count=0;
    0191 2422      CLR	R2
    0192 922000BA  STS	_reset_close_count,R2
(0374)    rly_on_count=0;
    0194 922000B9  STS	_rly_on_count,R2
(0375)    vs_on_close_count=0;
    0196 922000B7  STS	_vs_on_close_count,R2
(0376)    close_to_open_count=0;
    0198 922000BF  STS	_close_to_open_count,R2
(0377)    machine_close_start=1;
    019A E081      LDI	R24,1
    019B 938000AF  STS	_machine_close_start,R24
(0378)    close_to_open_station=0;
    019D 922000B2  STS	_close_to_open_station,R2
(0379)    close_machine_enable=0;
    019F 922000AE  STS	_close_machine_enable,R2
(0380)    open_machine_enable=0;
    01A1 922000AD  STS	_open_machine_enable,R2
(0381)    tv_state=0;
    01A3 922000F9  STS	_tv_state,R2
(0382)    PORTA|=(1<<7);
    01A5 9ADF      SBI	0x1B,7
(0383)    System_State=halting;
    01A6 E084      LDI	R24,4
    01A7 93800069  STS	_System_State,R24
(0384)    WDR();
    01A9 95A8      WDR
    01AA 9508      RET
(0385) }
(0386) 
(0387)     
(0388) 
(0389) /*********************************************
(0390) // port initialize
(0391) 
(0392) *********************************************/
(0393) void port_init(void)
(0394) {
(0395)  PORTA = 0xcc;   //将PA4 PA5,SPDIF_SW 输出为0 PA6 HOTPLUG保持为高
_port_init:
    01AB EC8C      LDI	R24,0xCC
    01AC BB8B      OUT	0x1B,R24
(0396)  DDRA  = 0xf3;   // PA4,PA5 置为输出态 
    01AD EF83      LDI	R24,0xF3
    01AE BB8A      OUT	0x1A,R24
(0397) // PORTB = 0x7f;
(0398)  PORTB = 0xff;   //内部上拉使能
    01AF EF8F      LDI	R24,0xFF
    01B0 BB88      OUT	0x18,R24
(0399)  DDRB  = 0x80;
    01B1 E880      LDI	R24,0x80
    01B2 BB87      OUT	0x17,R24
(0400) // PORTC = 0x4c;  //m103 output only      
(0401)  PORTC = 0x0c;
    01B3 E08C      LDI	R24,0xC
    01B4 BB85      OUT	0x15,R24
(0402)  PORTC|=(1<<RS232_SW1);    //1
    01B5 9AAE      SBI	0x15,6
(0403)  PORTC&=~(1<<RS232_SW2);   //0   --串口初始化
    01B6 98AF      CBI	0x15,7
(0404)  // PORTC = 0x0c;  //m103 output only  
(0405)  DDRC  = 0xf4;  //pwrbt 去掉更改为备用的实时的中断输入引脚;
    01B7 EF84      LDI	R24,0xF4
    01B8 BB84      OUT	0x14,R24
(0406)  PORTD = 0x60;
    01B9 E680      LDI	R24,0x60
    01BA BB82      OUT	0x12,R24
(0407)  DDRD  = 0xF3;
    01BB EF83      LDI	R24,0xF3
    01BC BB81      OUT	0x11,R24
    01BD 9508      RET
_init_time:
    01BE 940E116B  CALL	push_gset2
(0408) }
(0409) /********************************************/
(0410) void init_time()
(0411) {
(0412)   Time.VS.TL=0;
    01C0 E040      LDI	R20,0
    01C1 E050      LDI	R21,0
    01C2 E060      LDI	R22,0
    01C3 E070      LDI	R23,0
    01C4 93500071  STS	_Time+1,R21
    01C6 93400070  STS	_Time,R20
    01C8 93700073  STS	_Time+3,R23
    01CA 93600072  STS	_Time+2,R22
(0413)   Time.VS.TH=0;
    01CC 2422      CLR	R2
    01CD 2433      CLR	R3
    01CE 92300075  STS	0x75,R3
    01D0 92200074  STS	0x74,R2
    01D2 940E114B  CALL	pop_gset2
    01D4 9508      RET
_WriteTime:
  i                    --> R20
  Num                  --> R18
  RTime                --> R16
    01D5 940E1154  CALL	push_gset1
(0414) }
(0415) 
(0416) void WriteTime(char * RTime,char Num)
(0417) {
(0418)   unsigned char i;
(0419)   for(i=0;i<Num;i++)
    01D7 2744      CLR	R20
    01D8 C00D      RJMP	0x01E6
(0420)   {
(0421)    *(RTime+i)=I2cReceiveData[i+1];
    01D9 EC8B      LDI	R24,0xCB
    01DA E090      LDI	R25,0
    01DB 2FE4      MOV	R30,R20
    01DC 27FF      CLR	R31
    01DD 0FE8      ADD	R30,R24
    01DE 1FF9      ADC	R31,R25
    01DF 8020      LDD	R2,Z+0
    01E0 2FE4      MOV	R30,R20
    01E1 27FF      CLR	R31
    01E2 0FE0      ADD	R30,R16
    01E3 1FF1      ADC	R31,R17
    01E4 8220      STD	Z+0,R2
    01E5 9543      INC	R20
    01E6 1742      CP	R20,R18
    01E7 F388      BCS	0x01D9
    01E8 940E1157  CALL	pop_gset1
    01EA 9508      RET
_ReadTime:
  i                    --> R20
  Num                  --> R18
  Rtime                --> R16
    01EB 940E1154  CALL	push_gset1
(0422)   }
(0423) 
(0424) }
(0425) /*
(0426) void WriteTime()      //写设定时间
(0427) {
(0428)   unsigned char i;
(0429)   for(i=1;i<6;i++)
(0430)   {
(0431)    Time.CBit[i]=I2cReceiveData[i];
(0432)   }
(0433) }
(0434) void WriteOpenTime()      //写开机时间
(0435) {
(0436)   unsigned char i;
(0437)   for(i=1;i<4;i++)
(0438)   {
(0439)    OpenTime.OBit[i]=I2cReceiveData[i];
(0440)   }
(0441) }
(0442) void WriteCloseTime()      //写关机时间
(0443) {
(0444)   unsigned char i;
(0445)   for(i=1;i<4;i++)
(0446)   {
(0447)    CloseTime.CBit[i]=I2cReceiveData[i];
(0448)   }
(0449) }*/
(0450) 
(0451) void ReadTime(char *Rtime,char Num)
(0452) {
(0453)   unsigned char i;
(0454)   for(i=0;i<Num;i++)
    01ED 2744      CLR	R20
    01EE C00D      RJMP	0x01FC
(0455)   {
(0456)    I2cSendData[i+1]=*(Rtime+i);
    01EF 2FE4      MOV	R30,R20
    01F0 27FF      CLR	R31
    01F1 0FE0      ADD	R30,R16
    01F2 1FF1      ADC	R31,R17
    01F3 8020      LDD	R2,Z+0
    01F4 ED8D      LDI	R24,0xDD
    01F5 E090      LDI	R25,0
    01F6 2FE4      MOV	R30,R20
    01F7 27FF      CLR	R31
    01F8 0FE8      ADD	R30,R24
    01F9 1FF9      ADC	R31,R25
    01FA 8220      STD	Z+0,R2
    01FB 9543      INC	R20
    01FC 1742      CP	R20,R18
    01FD F388      BCS	0x01EF
    01FE 940E1157  CALL	pop_gset1
    0200 9508      RET
_AddTime:
  i                    --> Y+0
  ATime                --> R16
    0201 940E116B  CALL	push_gset2
    0203 9724      SBIW	R28,4
(0457)   }
(0458) }
(0459) void AddTime(char ATime)
(0460) {
(0461)   unsigned long i;
(0462)   i=0xFFFFFFFF-Time.VS.TL;

⌨️ 快捷键说明

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