rs485_pc.lis
来自「电梯楼层采集器代码」· LIS 代码 · 共 1,613 行 · 第 1/5 页
LIS
1,613 行
0358 9281 ldd R25,z+2
035A 8330 cpi R24,3
035C A0E0 ldi R26,0
035E 9A07 cpc R25,R26
0360 09F0 breq X35
0362 33C0 xjmp L75
0364 X35:
0364 X31:
0364 .dbline 254
0364 ; {
0364 .dbline 255
0364 ; point = *(unsigned int *)p_buf->Data;
0364 A480 ldd R10,z+4
0366 B580 ldd R11,z+5
0368 .dbline 256
0368 ; if (point < sizeof(struct StructOfUserTimezone))
0368 C501 movw R24,R10
036A 8C34 cpi R24,76
036C ADE1 ldi R26,29
036E 9A07 cpc R25,R26
0370 08F0 brlo X36
0372 2AC0 xjmp L77
0374 X36:
0374 X32:
0374 .dbline 257
0374 ; {
0374 .dbline 258
0374 ; count = sizeof(struct StructOfUserTimezone) - point;
0374 8CE4 ldi R24,7500
0376 9DE1 ldi R25,29
0378 6C01 movw R12,R24
037A CA18 sub R12,R10
037C DB08 sbc R13,R11
037E .dbline 259
037E ; if (count < 256 - 8) p_buf->Length = count + 1;
037E C601 movw R24,R12
0380 883F cpi R24,248
0382 A0E0 ldi R26,0
0384 9A07 cpc R25,R26
0386 20F4 brsh L79
0388 X33:
0388 .dbline 259
0388 0196 adiw R24,1
038A 9283 std z+2,R25
038C 8183 std z+1,R24
038E 05C0 xjmp L80
0390 L79:
0390 .dbline 260
0390 ; else p_buf->Length = 256 - 8;
0390 88EF ldi R24,248
0392 90E0 ldi R25,0
0394 FB01 movw R30,R22
0396 9283 std z+2,R25
0398 8183 std z+1,R24
039A L80:
039A .dbline 261
039A ; point += USER_TIMEZONE_Address;
039A C501 movw R24,R10
039C 8D5B subi R24,189 ; offset = 579
039E 9D4F sbci R25,253
03A0 5C01 movw R10,R24
03A2 .dbline 262
03A2 ; I2C_Initial();
03A2 0E940000 xcall _I2C_Initial
03A6 .dbline 263
03A6 ; AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
03A6 FB01 movw R30,R22
03A8 8181 ldd R24,z+1
03AA 9281 ldd R25,z+2
03AC 0197 sbiw R24,1
03AE 8883 std y+0,R24
03B0 9501 movw R18,R10
03B2 8F01 movw R16,R30
03B4 0C5F subi R16,252 ; offset = 4
03B6 1F4F sbci R17,255
03B8 0E940000 xcall _AT24_Read
03BC .dbline 264
03BC ; I2C_Close();
03BC 0E940000 xcall _I2C_Close
03C0 .dbline 265
03C0 ; communication->pc_txd = 1;
03C0 81E0 ldi R24,1
03C2 FA01 movw R30,R20
03C4 8183 std z+1,R24
03C6 .dbline 266
03C6 ; }
03C6 02C0 xjmp L76
03C8 L77:
03C8 .dbline 267
03C8 ; else if(TEST) CommandReply(RESP_INVALID_DATA);
03C8 01C0 xjmp L76
03CA L75:
03CA .dbline 269
03CA ; }
03CA ; else if(TEST) CommandReply(RESP_INVALID_DATA);
03CA 00C0 xjmp L83
03CC L83:
03CC L76:
03CC .dbline 270
03CC ; }
03CC L73:
03CC .dbline -2
03CC L72:
03CC .dbline 0 ; func end
03CC 2196 adiw R28,1
03CE 0C940000 xjmp pop_xgsetF03C
03D2 .dbsym r communication 20 pS[data]
03D2 .dbsym r count 12 i
03D2 .dbsym r point 10 i
03D2 .dbsym r p_buf 22 pS[StructOfProtocol]
03D2 .dbend
03D2 .dbfunc e SET_USER_TIME _SET_USER_TIME fV
03D2 ; count -> R10,R11
03D2 ; point -> R22,R23
03D2 ; p_buf -> R20,R21
.even
03D2 _SET_USER_TIME::
03D2 0E940000 xcall push_xgsetF00C
03D6 2197 sbiw R28,1
03D8 .dbline -1
03D8 .dbline 281
03D8 ; }
03D8 ; //------------------------------------------------------------------------------
03D8 ; /*
03D8 ; 设用户时间组授权资料
03D8 ; 命令码:CMD_SET_USER_TIME
03D8 ; 数据: 内存位置 2字节,高字节在前,值域 0 - 7499
03D8 ; 从指定位置开始的资料,不超过250字节
03D8 ; 正常回应: [OK]
03D8 ; */
03D8 ; void SET_USER_TIME(void)
03D8 ; {
03D8 .dbline 284
03D8 ; unsigned int point,count;
03D8 ; struct StructOfProtocol *p_buf;
03D8 ; p_buf = (struct StructOfProtocol *)Buffer485;
03D8 40E0 ldi R20,<_Buffer485
03DA 50E0 ldi R21,>_Buffer485
03DC .dbline 285
03DC ; *C51Buffer485 = *Buffer485;
03DC 20900000 lds R2,_Buffer485
03E0 20920000 sts _C51Buffer485,R2
03E4 .dbline 286
03E4 ; point = *(unsigned int *)p_buf->Data;
03E4 FA01 movw R30,R20
03E6 6481 ldd R22,z+4
03E8 7581 ldd R23,z+5
03EA .dbline 287
03EA ; if(point < sizeof(struct StructOfUserTimezone))
03EA 6C34 cpi R22,76
03EC ADE1 ldi R26,29
03EE 7A07 cpc R23,R26
03F0 08F0 brlo X41
03F2 34C0 xjmp L86
03F4 X41:
03F4 X37:
03F4 .dbline 288
03F4 ; {
03F4 .dbline 289
03F4 ; count = sizeof(struct StructOfUserTimezone) - point ;
03F4 8CE4 ldi R24,7500
03F6 9DE1 ldi R25,29
03F8 5C01 movw R10,R24
03FA A61A sub R10,R22
03FC B70A sbc R11,R23
03FE .dbline 290
03FE ; p_buf->Length -= 3;
03FE CF01 movw R24,R30
0400 0196 adiw R24,1
0402 FC01 movw R30,R24
0404 8081 ldd R24,z+0
0406 9181 ldd R25,z+1
0408 0397 sbiw R24,3
040A 9183 std z+1,R25
040C 8083 std z+0,R24
040E .dbline 291
040E ; if(p_buf->Length&&(p_buf->Length<=count))
040E FA01 movw R30,R20
0410 2180 ldd R2,z+1
0412 3280 ldd R3,z+2
0414 2220 tst R2
0416 11F4 brne X38
0418 3320 tst R3
041A F9F0 breq L88
041C X38:
041C A214 cp R10,R2
041E B304 cpc R11,R3
0420 E0F0 brlo L88
0422 X39:
0422 .dbline 292
0422 ; {
0422 .dbline 293
0422 ; point += USER_TIMEZONE_Address;
0422 6D5B subi R22,189 ; offset = 579
0424 7D4F sbci R23,253
0426 .dbline 294
0426 ; I2C_Initial();
0426 0E940000 xcall _I2C_Initial
042A .dbline 295
042A ; AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
042A FA01 movw R30,R20
042C 2180 ldd R2,z+1
042E 3280 ldd R3,z+2
0430 2882 std y+0,R2
0432 9B01 movw R18,R22
0434 8F01 movw R16,R30
0436 0A5F subi R16,250 ; offset = 6
0438 1F4F sbci R17,255
043A 0E940000 xcall _AT24_Write
043E .dbline 296
043E ; I2C_Close();
043E 0E940000 xcall _I2C_Close
0442 .dbline 297
0442 ; if (p_buf->Address != 0xff)
0442 FA01 movw R30,R20
0444 8081 ldd R24,z+0
0446 8F3F cpi R24,255
0448 51F0 breq L87
044A X40:
044A .dbline 298
044A ; {
044A .dbline 299
044A ; Cyc_manage |= 0x04;//打开更新51控制板的数据
044A 80910000 lds R24,_Cyc_manage
044E 8460 ori R24,4
0450 80930000 sts _Cyc_manage,R24
0454 .dbline 300
0454 ; CommandReply(RESP_CMD_OK);
0454 01E8 ldi R16,129
0456 D4DD xcall _CommandReply
0458 .dbline 301
0458 ; }
0458 .dbline 302
0458 ; }
0458 02C0 xjmp L87
045A L88:
045A .dbline 303
045A ; else if(TEST && p_buf->Address != 0xff)
045A 01C0 xjmp L87
045C L86:
045C .dbline 306
045C ; CommandReply(RESP_INVALID_DATA);
045C ; }
045C ; else if(TEST && p_buf->Address != 0xff)
045C 00C0 xjmp L94
045E L94:
045E L87:
045E .dbline -2
045E L85:
045E .dbline 0 ; func end
045E 2196 adiw R28,1
0460 0C940000 xjmp pop_xgsetF00C
0464 .dbsym r count 10 i
0464 .dbsym r point 22 i
0464 .dbsym r p_buf 20 pS[StructOfProtocol]
0464 .dbend
0464 .dbfunc e GET_AUTH_TIME _GET_AUTH_TIME fV
0464 ; communication -> R20,R21
0464 ; count -> R12,R13
0464 ; point -> R10,R11
0464 ; p_buf -> R22,R23
.even
0464 _GET_AUTH_TIME::
0464 0E940000 xcall push_xgsetF03C
0468 2197 sbiw R28,1
046A .dbline -1
046A .dbline 319
046A ; CommandReply(RESP_INVALID_DATA);
046A ; }
046A ; //------------------------------------------------------------------------------
046A ; //------------------------------------------------------------------------------
046A ; /*
046A ; 8. 取电梯授权时间组
046A ; 命令码: CMD_GET_AUTH_TIME
046A ; 数据: 内存位置 2字节,高字节在前,值域 0 - 524
046A ; 正常回应数据:
046A ; 从指定位置开始的资料,不超过255字节
046A ; */
046A ; void GET_AUTH_TIME(void)
046A ; {
046A .dbline 323
046A ; unsigned int point,count;
046A ; struct StructOfProtocol *p_buf;
046A ; struct data *communication;
046A ; p_buf = (struct StructOfProtocol *)Buffer485;
046A 60E0 ldi R22,<_Buffer485
046C 70E0 ldi R23,>_Buffer485
046E .dbline 324
046E ; if(p_buf->Address==Device_Address)
046E 20900000 lds R2,_Device_Address
0472 FB01 movw R30,R22
0474 3080 ldd R3,z+0
0476 3214 cp R3,R2
0478 09F0 breq X46
047A 3AC0 xjmp L97
047C X46:
047C X42:
047C .dbline 325
047C ; {
047C .dbline 326
047C ; if(p_buf->Length==3)
047C 8181 ldd R24,z+1
047E 9281 ldd R25,z+2
0480 8330 cpi R24,3
0482 A0E0 ldi R26,0
0484 9A07 cpc R25,R26
0486 09F0 breq X47
0488 32C0 xjmp L99
048A X47:
048A X43:
048A .dbline 327
048A ; {
048A .dbline 328
048A ; point = *(unsigned int *)p_buf->Data;
048A A480 ldd R10,z+4
048C B580 ldd R11,z+5
048E .dbline 329
048E ; if(point < sizeof(struct StructOfLiftSchedule))
048E C501 movw R24,R10
0490 8936 cpi R24,105
0492 A0E0 ldi R26,0
0494 9A07 cpc R25,R26
0496 08F0 brlo X48
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?