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

📄 sd8060.lst

📁 电梯楼层采集器代码
💻 LST
📖 第 1 页 / 共 5 页
字号:
     32B 9701      SBIW	R24,1
     32C 8388      STD	Y+0,R24
     32D 0195      MOVW	R18,R10
     32E 018F      MOVW	R16,R30
     32F 5F0C      SUBI	R16,0xFC
     330 4F1F      SBCI	R17,0xFF
     331 940E 0615 CALL	_AT24_Read
(0264) 		I2C_Close();
     333 940E 05B6 CALL	_I2C_Close
(0265)   		communication->pc_txd = 1;
     335 E081      LDI	R24,1
     336 01FA      MOVW	R30,R20
     337 8381      STD	Z+1,R24
(0266)       }
     338 C002      RJMP	0x033B
(0267) 	  else if(TEST) CommandReply(RESP_INVALID_DATA);
     339 C001      RJMP	0x033B
(0268)   	}
(0269) 	else if(TEST) CommandReply(RESP_INVALID_DATA);
     33A C000      RJMP	0x033B
(0270)   }
     33B 9621      ADIW	R28,1
     33C 940C 0DD4 JMP	pop_xgsetF03C
_SET_USER_TIME:
  count                --> R10
  point                --> R22
  p_buf                --> R20
     33E 940E 0DAF CALL	push_xgsetF00C
     340 9721      SBIW	R28,1
(0271) }
(0272) //------------------------------------------------------------------------------
(0273) /*
(0274) 设用户时间组授权资料 
(0275) 命令码:CMD_SET_USER_TIME
(0276) 数据:	内存位置  2字节,高字节在前,值域 0 - 7499	
(0277)       从指定位置开始的资料,不超过250字节
(0278) 正常回应:	    [OK]
(0279) */
(0280) void SET_USER_TIME(void)
(0281) {
(0282)  unsigned int point,count;
(0283)  struct StructOfProtocol *p_buf;
(0284)  p_buf = (struct StructOfProtocol *)Buffer485;
     341 E749      LDI	R20,0x79
     342 E051      LDI	R21,1
(0285)  *C51Buffer485 = *Buffer485;
     343 9020 0179 LDS	R2,Buffer485
     345 9220 0079 STS	C51Buffer485,R2
(0286)  point = *(unsigned int *)p_buf->Data;
     347 01FA      MOVW	R30,R20
     348 8164      LDD	R22,Z+4
     349 8175      LDD	R23,Z+5
(0287)  if(point < sizeof(struct StructOfUserTimezone))
     34A 346C      CPI	R22,0x4C
     34B E1AD      LDI	R26,0x1D
     34C 077A      CPC	R23,R26
     34D F008      BCS	0x034F
     34E C034      RJMP	0x0383
(0288)  {
(0289)    count = sizeof(struct StructOfUserTimezone) - point ;
     34F E48C      LDI	R24,0x4C
     350 E19D      LDI	R25,0x1D
     351 015C      MOVW	R10,R24
     352 1AA6      SUB	R10,R22
     353 0AB7      SBC	R11,R23
(0290)    p_buf->Length -= 3;
     354 01CF      MOVW	R24,R30
     355 9601      ADIW	R24,1
     356 01FC      MOVW	R30,R24
     357 8180      LDD	R24,Z+0
     358 8191      LDD	R25,Z+1
     359 9703      SBIW	R24,3
     35A 8391      STD	Z+1,R25
     35B 8380      STD	Z+0,R24
(0291)    if(p_buf->Length&&(p_buf->Length<=count))
     35C 01FA      MOVW	R30,R20
     35D 8021      LDD	R2,Z+1
     35E 8032      LDD	R3,Z+2
     35F 2022      TST	R2
     360 F411      BNE	0x0363
     361 2033      TST	R3
     362 F0F9      BEQ	0x0382
     363 14A2      CP	R10,R2
     364 04B3      CPC	R11,R3
     365 F0E0      BCS	0x0382
(0292)    {
(0293)      point += USER_TIMEZONE_Address;
     366 5B6D      SUBI	R22,0xBD
     367 4F7D      SBCI	R23,0xFD
(0294) 	 I2C_Initial();
     368 940E 05B1 CALL	_I2C_Initial
(0295)      AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);	
     36A 01FA      MOVW	R30,R20
     36B 8021      LDD	R2,Z+1
     36C 8032      LDD	R3,Z+2
     36D 8228      STD	Y+0,R2
     36E 019B      MOVW	R18,R22
     36F 018F      MOVW	R16,R30
     370 5F0A      SUBI	R16,0xFA
     371 4F1F      SBCI	R17,0xFF
     372 940E 0651 CALL	_AT24_Write
(0296) 	 I2C_Close();
     374 940E 05B6 CALL	_I2C_Close
(0297) 	 if (p_buf->Address  != 0xff) 
     376 01FA      MOVW	R30,R20
     377 8180      LDD	R24,Z+0
     378 3F8F      CPI	R24,0xFF
     379 F051      BEQ	0x0384
(0298) 	 {
(0299) 	    Cyc_manage |= 0x04;//打开更新51控制板的数据
     37A 9180 0078 LDS	R24,Cyc_manage
     37C 6084      ORI	R24,4
     37D 9380 0078 STS	Cyc_manage,R24
(0300)         CommandReply(RESP_CMD_OK);
     37F E801      LDI	R16,0x81
     380 DDD4      RCALL	_CommandReply
(0301) 	 }
(0302)    }
     381 C002      RJMP	0x0384
(0303)     else if(TEST && p_buf->Address != 0xff)
     382 C001      RJMP	0x0384
(0304)        CommandReply(RESP_INVALID_DATA);
(0305)  }
(0306)  else if(TEST && p_buf->Address != 0xff)
     383 C000      RJMP	0x0384
     384 9621      ADIW	R28,1
     385 940C 0DB6 JMP	pop_xgsetF00C
_GET_AUTH_TIME:
  communication        --> R20
  count                --> R12
  point                --> R10
  p_buf                --> R22
     387 940E 0DCB CALL	push_xgsetF03C
     389 9721      SBIW	R28,1
(0307)      CommandReply(RESP_INVALID_DATA);
(0308) }
(0309) //------------------------------------------------------------------------------
(0310) //------------------------------------------------------------------------------
(0311) /*
(0312) 8.	取电梯授权时间组            
(0313) 命令码:		CMD_GET_AUTH_TIME
(0314) 数据:		    内存位置  2字节,高字节在前,值域 0 - 524
(0315) 正常回应数据:	
(0316)    从指定位置开始的资料,不超过255字节
(0317) */
(0318) void GET_AUTH_TIME(void)
(0319) {
(0320)  unsigned int point,count;
(0321)  struct StructOfProtocol *p_buf;
(0322)  struct data *communication;
(0323)  p_buf = (struct StructOfProtocol *)Buffer485;
     38A E769      LDI	R22,0x79
     38B E071      LDI	R23,1
(0324)  if(p_buf->Address==Device_Address)
     38C 9020 0077 LDS	R2,Device_Address
     38E 01FB      MOVW	R30,R22
     38F 8030      LDD	R3,Z+0
     390 1432      CP	R3,R2
     391 F009      BEQ	0x0393
     392 C03A      RJMP	0x03CD
(0325)  {
(0326)    if(p_buf->Length==3)
     393 8181      LDD	R24,Z+1
     394 8192      LDD	R25,Z+2
     395 3083      CPI	R24,3
     396 E0A0      LDI	R26,0
     397 079A      CPC	R25,R26
     398 F009      BEQ	0x039A
     399 C032      RJMP	0x03CC
(0327)    {
(0328)      point = *(unsigned int *)p_buf->Data;
     39A 80A4      LDD	R10,Z+4
     39B 80B5      LDD	R11,Z+5
(0329)      if(point < sizeof(struct StructOfLiftSchedule))
     39C 01C5      MOVW	R24,R10
     39D 3689      CPI	R24,0x69
     39E E0A0      LDI	R26,0
     39F 079A      CPC	R25,R26
     3A0 F008      BCS	0x03A2
     3A1 C029      RJMP	0x03CB
(0330) 	 {
(0331) 	   count = sizeof(struct StructOfLiftSchedule) - point;
     3A2 E689      LDI	R24,0x69
     3A3 E090      LDI	R25,0
     3A4 016C      MOVW	R12,R24
     3A5 18CA      SUB	R12,R10
     3A6 08DB      SBC	R13,R11
(0332) 	   if(count< 256 - 8) p_buf->Length = count + 1;
     3A7 01C6      MOVW	R24,R12
     3A8 3F88      CPI	R24,0xF8
     3A9 E0A0      LDI	R26,0
     3AA 079A      CPC	R25,R26
     3AB F420      BCC	0x03B0
     3AC 9601      ADIW	R24,1
     3AD 8392      STD	Z+2,R25
     3AE 8381      STD	Z+1,R24
     3AF C005      RJMP	0x03B5
(0333) 	   else p_buf->Length = 256 - 8;
     3B0 EF88      LDI	R24,0xF8
     3B1 E090      LDI	R25,0
     3B2 01FB      MOVW	R30,R22
     3B3 8392      STD	Z+2,R25
     3B4 8381      STD	Z+1,R24
(0334) 	   point += LIFT_SCHEDULE_Address;
     3B5 01C5      MOVW	R24,R10
     3B6 96C6      ADIW	R24,0x36
     3B7 015C      MOVW	R10,R24
(0335) 	   I2C_Initial();
     3B8 940E 05B1 CALL	_I2C_Initial
(0336) 	   AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
     3BA 01FB      MOVW	R30,R22
     3BB 8181      LDD	R24,Z+1
     3BC 8192      LDD	R25,Z+2
     3BD 9701      SBIW	R24,1
     3BE 8388      STD	Y+0,R24
     3BF 0195      MOVW	R18,R10
     3C0 018F      MOVW	R16,R30
     3C1 5F0C      SUBI	R16,0xFC
     3C2 4F1F      SBCI	R17,0xFF
     3C3 940E 0615 CALL	_AT24_Read
(0337) 	   I2C_Close();
     3C5 940E 05B6 CALL	_I2C_Close
(0338)   	   communication->pc_txd = 1; 
     3C7 E081      LDI	R24,1
     3C8 01FA      MOVW	R30,R20
     3C9 8381      STD	Z+1,R24
(0339) 	 }
     3CA C002      RJMP	0x03CD
(0340) 	 else if(TEST) CommandReply(RESP_INVALID_DATA);
     3CB C001      RJMP	0x03CD
(0341)   	}
(0342) 	else if(TEST) CommandReply(RESP_INVALID_DATA);
     3CC C000      RJMP	0x03CD
(0343)  }
     3CD 9621      ADIW	R28,1
     3CE 940C 0DD4 JMP	pop_xgsetF03C
_SET_AUTH_TIME:
  count                --> R10
  point                --> R22
  p_buf                --> R20
     3D0 940E 0DAF CALL	push_xgsetF00C
     3D2 9721      SBIW	R28,1
(0344) }
(0345) //------------------------------------------------------------------------------
(0346) /*
(0347) 15.	设电梯授权时间组 = CMD_SET_AUTH_TIME
(0348) 命令码:		CMD_SET_AUTH_TIME
(0349) 数据:		    内存位置                  2字节,高字节在前,值域 0 - 524	
(0350)       从指定位置开始的资料,不超过250字节
(0351) 正常回应:	    [OK]
(0352) */
(0353) void SET_AUTH_TIME(void)
(0354) {
(0355)  unsigned int point,count;
(0356)  struct StructOfProtocol *p_buf;
(0357)  p_buf = (struct StructOfProtocol *)Buffer485;
     3D3 E749      LDI	R20,0x79
     3D4 E051      LDI	R21,1
(0358)  *C51Buffer485 = *Buffer485;
     3D5 9020 0179 LDS	R2,Buffer485
     3D7 9220 0079 STS	C51Buffer485,R2
(0359)  point = *(unsigned int *)p_buf->Data;
     3D9 01FA      MOVW	R30,R20
     3DA 8164      LDD	R22,Z+4
     3DB 8175      LDD	R23,Z+5
(0360)  if(point < sizeof(struct StructOfLiftSchedule))
     3DC 3669      CPI	R22,0x69
     3DD E0A0      LDI	R26,0
     3DE 077A      CPC	R23,R26
     3DF F008      BCS	0x03E1
     3E0 C034      RJMP	0x0415
(0361)  {
(0362)    count = sizeof(struct StructOfLiftSchedule) - point;
     3E1 E689      LDI	R24,0x69
     3E2 E090      LDI	R25,0
     3E3 015C      MOVW	R10,R24
     3E4 1AA6      SUB	R10,R22
     3E5 0AB7      SBC	R11,R23
(0363)    p_buf->Length -= 3;
     3E6 01CF      MOVW	R24,R30
     3E7 9601      ADIW	R24,1
     3E8 01FC      MOVW	R30,R24
     3E9 8180      LDD	R24,Z+0
     3EA 8191      LDD	R25,Z+1
     3EB 9703      SBIW	R24,3
     3EC 8391      STD	Z+1,R25
     3ED 8380      STD	Z+0,R24
(0364)    if(p_buf->Length&&(p_buf->Length<=count))
     3EE 01FA      MOVW	R30,R20
     3EF 8021      LDD	R2,Z+1
     3F0 8032      LDD	R3,Z+2
     3F1 2022      TST	R2
     3F2 F411      BNE	0x03F5
     3F3 2033      TST	R3
     3F4 F0F9      BEQ	0x0414
     3F5 14A2      CP	R10,R2
     3F6 04B3      CPC	R11,R3
     3F7 F0E0      BCS	0x0414
(0365)    {
(0366)     point += LIFT_SCHEDULE_Address;
     3F8 5C6A      SUBI	R22,0xCA
     3F9 4F7F      SBCI	R23,0xFF
(0367) 	I2C_Initial();
     3FA 940E 05B1 CALL	_I2C_Initial
(0368)     AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);	
     3FC 01FA      MOVW	R30,R20
     3FD 8021      LDD	R2,Z+1
     3FE 8032      LDD	R3,Z+2
     3FF 8228      STD	Y+0,R2
     400 019B      MOVW	R18,R22
     401 018F      MOVW	R16,R30
     402 5F0A      SUBI	R16,0xFA
     403 4F1F      SBCI	R17,0xFF
     404 940E 0651 CALL	_AT24_Write
(0369) 	I2C_Close();
     406 940E 05B6 CALL	_I2C_Close
(0370)     if (p_buf->Address!= 0xff) 
     408 01FA      MOVW	R30,R20
     409 8180      LDD	R24,Z+0
     40A 3F8F      CPI	R24,0xFF
     40B F051      BEQ	0x0416
(0371) 	{
(0372) 	   Cyc_manage |= 0x04;//打开更新51控制板的数据
     40C 9180 0078 LDS	R24,Cyc_manage
     40E 6084      ORI	R24,4
     40F 9380 0078 STS	Cyc_manage,R24
(0373)    	   CommandReply(RESP_CMD_OK);
     411 E801      LDI	R16,0x81
     412 DD42      RCALL	_CommandReply
(0374) 	 }
(0375)    }
     413 C002      RJMP	0x0416
(0376)    else if(TEST && p_buf->Address != 0xff)
     414 C001      RJMP	0x0416
(0377)        CommandReply(RESP_INVALID_DATA);
(0378)  }
(0379)  else if(TEST && p_buf->Address != 0xff)
     415 C000      RJMP	0x0416
     416 9621      ADIW	R28,1
     417 940C 0DB6 JMP	pop_xgsetF00C
_GET_CONFIG:
  communication        --> R20
  p_buf                --> R22
     419 940E 0DA5 CALL	push_xgsetF000
     41B 9721      SBIW	R28,1
(0380)      CommandReply(RESP_INVALID_DATA);
(0381) }
(0382) //------------------------------------------------------------------------------
(0383) //------------------------------------------------------------------------------
(0384) /*取系统配置参数*/
(0385) void GET_CONFIG(void)
(0386) {
(0387)  struct StructOfProtocol *p_buf;
(0388)  struct data *communication;
(0389)  p_buf = (struct StructOfProtocol *)Buffer485;
     41C E769      LDI	R22,0x79
     41D E071      LDI	R23,1
(0390)  if(p_buf->Address==Device_Address)
     41E 9020 0077 LDS	R2,Device_Address
     420 01FB      MOVW	R30,R22
     421 8030      LDD	R3,Z+0
     422 1432      CP	R3,R2
     423 F4F9      BNE	0x0443
(0391)  {
(0392)    if (p_buf->Length == 1)  /*接收数据包长度确认*/
     424 8181      LDD	R24,Z+1
     425 8192      LDD	R25,Z+2
     426 3081      CPI	R24,1
     427 E0A0      LDI	R26,0
     428 079A      CPC	R25,R26
     429 F4C1      BNE	0x0442
(0393)    {
(0394)      p_buf->Length = sizeof(SystemConfig) + 1;
     42A E281      LDI	R24,0x21
     42B E090      LDI	R25,0
     42C 8392      STD	Z+2,R25
     42D 8381      STD	Z+1,R24
(0395) 	 I2C_Initial();

⌨️ 快捷键说明

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