📄 sd8060.lst
字号:
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 + -