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

📄 sd8060.lst

📁 电梯楼层采集器代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
     42E 940E 05B1 CALL	_I2C_Initial
(0396) 	 AT24_Read((unsigned char *)&p_buf->Data,SystemConfig_Address,p_buf->Length-1);
     430 01FB      MOVW	R30,R22
     431 8181      LDD	R24,Z+1
     432 8192      LDD	R25,Z+2
     433 9701      SBIW	R24,1
     434 8388      STD	Y+0,R24
     435 2722      CLR	R18
     436 2733      CLR	R19
     437 018F      MOVW	R16,R30
     438 5F0C      SUBI	R16,0xFC
     439 4F1F      SBCI	R17,0xFF
     43A 940E 0615 CALL	_AT24_Read
(0397) 	 I2C_Close();
     43C 940E 05B6 CALL	_I2C_Close
(0398)   	 communication->pc_txd = 1; 
     43E E081      LDI	R24,1
     43F 01FA      MOVW	R30,R20
     440 8381      STD	Z+1,R24
(0399)    }
     441 C001      RJMP	0x0443
(0400)    else if(TEST) CommandReply(RESP_INVALID_DATA);          /*包长度异常*/
     442 C000      RJMP	0x0443
(0401)   }
     443 9621      ADIW	R28,1
     444 940C 0DAA JMP	pop_xgsetF000
_SET_CONFIG:
  count                --> Y,+2
  point                --> Y,+2
  p_buf                --> R20
     446 934A      ST	R20,-Y
     447 935A      ST	R21,-Y
     448 9721      SBIW	R28,1
(0402) }
(0403) //------------------------------------------------------------------------------
(0404) /*设置系统配置参数*/
(0405) void SET_CONFIG(void)
(0406) {
(0407)  unsigned int point,count;
(0408)  struct StructOfProtocol *p_buf;
(0409)  p_buf = (struct StructOfProtocol *)Buffer485;
     449 E749      LDI	R20,0x79
     44A E051      LDI	R21,1
(0410)  *C51Buffer485 = *Buffer485;
     44B 9020 0179 LDS	R2,Buffer485
     44D 9220 0079 STS	C51Buffer485,R2
(0411)  if (p_buf->Length == sizeof(SystemConfig) + 1)                /*接收数据包长度确认*/
     44F 01FA      MOVW	R30,R20
     450 8181      LDD	R24,Z+1
     451 8192      LDD	R25,Z+2
     452 3281      CPI	R24,0x21
     453 E0E0      LDI	R30,0
     454 079E      CPC	R25,R30
     455 F4C9      BNE	0x046F
(0412)  {
(0413)   	I2C_Initial();
     456 940E 05B1 CALL	_I2C_Initial
(0414)   	AT24_Write((unsigned char *)&p_buf->Data,SystemConfig_Address,sizeof(SystemConfig));
     458 E280      LDI	R24,0x20
     459 8388      STD	Y+0,R24
     45A 2722      CLR	R18
     45B 2733      CLR	R19
     45C 018A      MOVW	R16,R20
     45D 5F0C      SUBI	R16,0xFC
     45E 4F1F      SBCI	R17,0xFF
     45F 940E 0651 CALL	_AT24_Write
(0415) 	I2C_Close();
     461 940E 05B6 CALL	_I2C_Close
(0416)     if (p_buf->Address != 0xff)     
     463 01FA      MOVW	R30,R20
     464 8180      LDD	R24,Z+0
     465 3F8F      CPI	R24,0xFF
     466 F049      BEQ	0x0470
(0417) 	{
(0418) 	   Cyc_manage |= 0x04;//打开更新51控制板的数据
     467 9180 0078 LDS	R24,Cyc_manage
     469 6084      ORI	R24,4
     46A 9380 0078 STS	Cyc_manage,R24
(0419)        CommandReply(RESP_CMD_OK);
     46C E801      LDI	R16,0x81
     46D DCE7      RCALL	_CommandReply
(0420) 	}
(0421)   }
     46E C001      RJMP	0x0470
(0422)   else if (TEST && p_buf->Address != 0xff)    
     46F C000      RJMP	0x0470
     470 9621      ADIW	R28,1
     471 9159      LD	R21,Y+
     472 9149      LD	R20,Y+
     473 9508      RET
_GET_PRODUCT_CODE:
  communication        --> R20
  p_buf                --> R22
     474 940E 0DA5 CALL	push_xgsetF000
     476 9721      SBIW	R28,1
(0423)   	   CommandReply(RESP_INVALID_DATA);
(0424) } 
(0425) //------------------------------------------------------------------------------
(0426) //------------------------------------------------------------------------------
(0427)  /*取产品标签代码*/
(0428) void GET_PRODUCT_CODE(void)
(0429) {
(0430)  struct StructOfProtocol *p_buf;
(0431)  struct data *communication;
(0432)  p_buf = (struct StructOfProtocol *)Buffer485;
     477 E769      LDI	R22,0x79
     478 E071      LDI	R23,1
(0433)  if (p_buf->Address == Device_Address)                                /*本机地址响应*/
     479 9020 0077 LDS	R2,Device_Address
     47B 01FB      MOVW	R30,R22
     47C 8030      LDD	R3,Z+0
     47D 1432      CP	R3,R2
     47E F4F9      BNE	0x049E
(0434)  {
(0435)   if (p_buf->Length == 1)                                     /*接收数据包长度确认*/
     47F 8181      LDD	R24,Z+1
     480 8192      LDD	R25,Z+2
     481 3081      CPI	R24,1
     482 E0A0      LDI	R26,0
     483 079A      CPC	R25,R26
     484 F4C1      BNE	0x049D
(0436)   {
(0437)      p_buf->Length = sizeof(struct StructOfProductCode) + 1;
     485 EF8B      LDI	R24,0xFB
     486 E090      LDI	R25,0
     487 8392      STD	Z+2,R25
     488 8381      STD	Z+1,R24
(0438) 	 I2C_Initial();
     489 940E 05B1 CALL	_I2C_Initial
(0439) 	 AT24_Read((unsigned char *)&p_buf->Data,StructOfProductCode_Address,p_buf->Length-1);
     48B 01FB      MOVW	R30,R22
     48C 8181      LDD	R24,Z+1
     48D 8192      LDD	R25,Z+2
     48E 9701      SBIW	R24,1
     48F 8388      STD	Y+0,R24
     490 EB2A      LDI	R18,0xBA
     491 E93A      LDI	R19,0x9A
     492 018F      MOVW	R16,R30
     493 5F0C      SUBI	R16,0xFC
     494 4F1F      SBCI	R17,0xFF
     495 940E 0615 CALL	_AT24_Read
(0440) 	 I2C_Close();
     497 940E 05B6 CALL	_I2C_Close
(0441)   	 communication->pc_txd = 1; 
     499 E081      LDI	R24,1
     49A 01FA      MOVW	R30,R20
     49B 8381      STD	Z+1,R24
(0442)   }
     49C C001      RJMP	0x049E
(0443)   else if(TEST)     
     49D C000      RJMP	0x049E
(0444)   	  CommandReply(RESP_INVALID_DATA);          /*包长度异常*/
(0445)  }
     49E 9621      ADIW	R28,1
     49F 940C 0DAA JMP	pop_xgsetF000
_SET_PRODUCT_CODE:
  p_buf                --> R20
     4A1 934A      ST	R20,-Y
     4A2 935A      ST	R21,-Y
     4A3 9721      SBIW	R28,1
(0446) }
(0447) //------------------------------------------------------------------------------
(0448) /*设置产品标签代码*/
(0449) void SET_PRODUCT_CODE(void)
(0450) {
(0451)  struct StructOfProtocol *p_buf;
(0452)  p_buf = (struct StructOfProtocol *)Buffer485;
     4A4 E749      LDI	R20,0x79
     4A5 E051      LDI	R21,1
(0453)  *C51Buffer485 = *Buffer485;
     4A6 9020 0179 LDS	R2,Buffer485
     4A8 9220 0079 STS	C51Buffer485,R2
(0454)  if (p_buf->Length == sizeof(struct StructOfProductCode) + 1)  /*接收数据包长度确认*/
     4AA 01FA      MOVW	R30,R20
     4AB 8181      LDD	R24,Z+1
     4AC 8192      LDD	R25,Z+2
     4AD 3F8B      CPI	R24,0xFB
     4AE E0E0      LDI	R30,0
     4AF 079E      CPC	R25,R30
     4B0 F4C9      BNE	0x04CA
(0455)  {	
(0456)  	I2C_Initial();
     4B1 940E 05B1 CALL	_I2C_Initial
(0457) 	AT24_Write((unsigned char *)&p_buf->Data,StructOfProductCode_Address,sizeof(struct StructOfProductCode));	
     4B3 EF8A      LDI	R24,0xFA
     4B4 8388      STD	Y+0,R24
     4B5 EB2A      LDI	R18,0xBA
     4B6 E93A      LDI	R19,0x9A
     4B7 018A      MOVW	R16,R20
     4B8 5F0C      SUBI	R16,0xFC
     4B9 4F1F      SBCI	R17,0xFF
     4BA 940E 0651 CALL	_AT24_Write
(0458) 	I2C_Close();	
     4BC 940E 05B6 CALL	_I2C_Close
(0459)     if (p_buf->Address != 0xff)  
     4BE 01FA      MOVW	R30,R20
     4BF 8180      LDD	R24,Z+0
     4C0 3F8F      CPI	R24,0xFF
     4C1 F049      BEQ	0x04CB
(0460)     { 
(0461) 	  Cyc_manage |= 0x04;//打开更新51控制板的数据
     4C2 9180 0078 LDS	R24,Cyc_manage
     4C4 6084      ORI	R24,4
     4C5 9380 0078 STS	Cyc_manage,R24
(0462)       CommandReply(RESP_CMD_OK);
     4C7 E801      LDI	R16,0x81
     4C8 DC8C      RCALL	_CommandReply
(0463)     }
(0464)  }
     4C9 C001      RJMP	0x04CB
(0465)  else if(TEST && p_buf->Address != 0xff)   
     4CA C000      RJMP	0x04CB
     4CB 9621      ADIW	R28,1
     4CC 9159      LD	R21,Y+
     4CD 9149      LD	R20,Y+
     4CE 9508      RET
(0466)  	  CommandReply(RESP_INVALID_DATA);
(0467) }
(0468) //------------------------------------------------------------------------------
(0469) //------------------------------------------------------------------------------
(0470)  /*取控制器状态*/
(0471) void GET_UNIT_STATUS(void)
(0472) {
(0473)  struct StructOfProtocol *p_buf;
(0474)  struct data *communication;
(0475)  p_buf = (struct StructOfProtocol *)Buffer485;
_GET_UNIT_STATUS:
  communication        --> R16
  p_buf                --> R18
     4CF E729      LDI	R18,0x79
     4D0 E031      LDI	R19,1
(0476)  if (p_buf->Address == Device_Address)  /*本机地址响应*/
     4D1 9020 0077 LDS	R2,Device_Address
     4D3 01F9      MOVW	R30,R18
     4D4 8030      LDD	R3,Z+0
     4D5 1432      CP	R3,R2
     4D6 F4B1      BNE	0x04ED
(0477)  {
(0478)   if (p_buf->Length == 1)   /*接收数据包长度确认*/
     4D7 8181      LDD	R24,Z+1
     4D8 8192      LDD	R25,Z+2
     4D9 3081      CPI	R24,1
     4DA E0A0      LDI	R26,0
     4DB 079A      CPC	R25,R26
     4DC F481      BNE	0x04ED
(0479)   {
(0480)     p_buf->Length = 4;
     4DD E084      LDI	R24,4
     4DE E090      LDI	R25,0
     4DF 8392      STD	Z+2,R25
     4E0 8381      STD	Z+1,R24
(0481)     p_buf->Data[0] = WorkingMode;        /*工作模式状态*/
     4E1 9020 0072 LDS	R2,WorkingMode
     4E3 8224      STD	Z+4,R2
(0482)     p_buf->Data[1] = StopSwitchStatus;   /*停止开关状态*/
     4E4 9020 0071 LDS	R2,StopSwitchStatus
     4E6 8225      STD	Z+5,R2
(0483)     p_buf->Data[2] = FireSwitchStatus;   /*火警开关状态*/
     4E7 9020 0070 LDS	R2,FireSwitchStatus
     4E9 8226      STD	Z+6,R2
(0484)   	communication->pc_txd = 1;
     4EA E081      LDI	R24,1
     4EB 01F8      MOVW	R30,R16
     4EC 8381      STD	Z+1,R24
(0485)   }
(0486)  }
     4ED 9508      RET
(0487) }
(0488) //------------------------------------------------------------------------------
(0489)  /*设置控制器状态*/
(0490) void SET_UNIT_STATUS(void)
(0491) {
_SET_UNIT_STATUS:
     4EE 9508      RET
(0492) /*
(0493)  struct StructOfProtocol *p_buf;
(0494)  struct Device51_StructOfProtocol *C51_buf;
(0495)  struct ControlStream *p_stream;
(0496)  p_buf = (struct StructOfProtocol *)Buffer485;
(0497)  C51_buf = (struct Device51_StructOfProtocol *)Buffer485;
(0498)  if (p_buf->Length == 3)                      //接收数据包长度确认
(0499)  {
(0500)    p_stream = (struct ControlStream *)p_buf->Data;
(0501)    if (!p_stream->Device_Address)             //复位控制器
(0502)    {
(0503)       if (!p_stream->Status)
(0504)       {
(0505)         b_reset = 1;
(0506)         EventRecord(MSG_WARM_RESET);
(0507)         if (p_buf->Address != 0xff)   
(0508) 		   CommandReply(RESP_CMD_OK);
(0509)       }
(0510)       else if (p_stream->Status == 1)
(0511)       {
(0512)         CleanDatabase();
(0513)         EventRecord(MSG_COLD_RESET);
(0514)         b_reset = 1;
(0515)       }
(0516)    }
(0517)    else if (p_stream->Address == 1)         //设置工作模式
(0518)    {
(0519)      if (p_stream->Status == SLEEP_MODE ||
(0520)       p_stream->Status == UNLOCK_MODE || p_stream->Status == SAFETY_MODE)
(0521)      {
(0522)         tmp = WorkingMode & ~MANUAL;
(0523)         WorkingMode = p_stream->Status | MANUAL;
(0524)         if (!(tmp & MANUAL) || p_stream->Status != (tmp & 0x0f))
(0525)         {
(0526)           EventRecord(MSG_WORKING_MODE_CHANGED);
(0527)           if (p_stream->Status == UNLOCK_MODE)
(0528)           {
(0529)             if (SystemConfig.FirstKeyUnlock)    b_unlock = 0;
(0530)             else        b_unlock = 1;
(0531)           }
(0532)         }
(0533)       }
(0534)       else    WorkingMode = MANUAL;
(0535)       b_minute = 1;
(0536)       if (p_buf->Address != 0xff)    
(0537) 	  	  CommandReply(RESP_CMD_OK);
(0538)    }
(0539)    else if (TEST && p_buf->Address != 0xff) 
(0540)    		CommandReply(RESP_INVALID_DATA);
(0541)   }
(0542)   else if (TEST && p_buf->Address != 0xff)    
(0543)   	CommandReply(RESP_INVALID_DATA);
(0544) 	*/
(0545) }
(0546) //------------------------------------------------------------------------------
(0547) //------------------------------------------------------------------------------
(0548) /*取控制器历史事件*/ 
(0549) void GET_EVENT(void)
(0550) {
_GET_EVENT:
     4EF 9508      RET
_communication_with_pc:
  p_buf                --> R20
  communication        --> R22
     4F0 940E 0DA5 CALL	push_xgsetF000
(0551) 
(0552) /*
(0553) 
(0554)   	 		if (p_buf->Address == Address)
(0555)             {
(0556)             if (p_buf->Length == 3)                                     //接收数据包长度确认
(0557)               {
(0558)               tmp = p_buf->Data[0];                                     //取删除记录数
(0559)               if (tmp == 0xff)                                          //删除所有记录
(0560)                 {
(0561)                 Record.TopPoint = Record.BottomPoint = Record.Overflow = 0;
(0562)                 SequentialWrite((unsigned char *)&Record,OFFSET_RECORD_POINT,sizeof(Record));
(0563)                 }
(0564)               else if (p_buf->Data[1] == (unsigned char)Record.BottomPoint)//数据包标志比较
(0565)                 {
(0566)                 count = GetRecordNumber();                              //计算现有记录数
(0567)                 if (tmp)                                                //删除部分记录
(0568)                   {
(0569)                   if (tmp <= count && tmp <= ((sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord)))
(0570)                     {
(0571)                     count = tmp + Record.BottomPoint;
(0572)                     if (count < MAX_RECORD_NUMBER)    Record.BottomPoint = count;
(0573)                     else    Record.BottomPoint = count - MAX_RECORD_NUMBER;
(0574)                     Record.Overflow = 0;
(0575)                     SequentialWrite((unsigned char *)&Record,OFFSET_RECORD_POINT,sizeof(Record));
(0576)                     }
(0577)                   else if (TEST)                                        //删除记录数据异常
(0578)                     {
(0579)                     CommandReply(RESP_INVALID_DATA);
(0580)                     break;
(0581)                     }
(0582)                   }
(0583)                 }
(0584)                 count = GetRecordNumber();                                //计算删除后的记录数
(0585)                 if (count)
(0586)                 {
(0587)                 if (count > ((sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord)))
(0588)                   count = (sizeof(Buffer485) - 10) / sizeof(struct StructOfRecord);
(0589)                 count *= sizeof(struct StructOfRecord);

⌨️ 快捷键说明

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