rs485_pc.lis
来自「电梯楼层采集器代码」· LIS 代码 · 共 1,613 行 · 第 1/5 页
LIS
1,613 行
0498 29C0 xjmp L101
049A X48:
049A X44:
049A .dbline 330
049A ; {
049A .dbline 331
049A ; count = sizeof(struct StructOfLiftSchedule) - point;
049A 89E6 ldi R24,105
049C 90E0 ldi R25,0
049E 6C01 movw R12,R24
04A0 CA18 sub R12,R10
04A2 DB08 sbc R13,R11
04A4 .dbline 332
04A4 ; if(count< 256 - 8) p_buf->Length = count + 1;
04A4 C601 movw R24,R12
04A6 883F cpi R24,248
04A8 A0E0 ldi R26,0
04AA 9A07 cpc R25,R26
04AC 20F4 brsh L103
04AE X45:
04AE .dbline 332
04AE 0196 adiw R24,1
04B0 9283 std z+2,R25
04B2 8183 std z+1,R24
04B4 05C0 xjmp L104
04B6 L103:
04B6 .dbline 333
04B6 ; else p_buf->Length = 256 - 8;
04B6 88EF ldi R24,248
04B8 90E0 ldi R25,0
04BA FB01 movw R30,R22
04BC 9283 std z+2,R25
04BE 8183 std z+1,R24
04C0 L104:
04C0 .dbline 334
04C0 ; point += LIFT_SCHEDULE_Address;
04C0 C501 movw R24,R10
04C2 C696 adiw R24,54
04C4 5C01 movw R10,R24
04C6 .dbline 335
04C6 ; I2C_Initial();
04C6 0E940000 xcall _I2C_Initial
04CA .dbline 336
04CA ; AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
04CA FB01 movw R30,R22
04CC 8181 ldd R24,z+1
04CE 9281 ldd R25,z+2
04D0 0197 sbiw R24,1
04D2 8883 std y+0,R24
04D4 9501 movw R18,R10
04D6 8F01 movw R16,R30
04D8 0C5F subi R16,252 ; offset = 4
04DA 1F4F sbci R17,255
04DC 0E940000 xcall _AT24_Read
04E0 .dbline 337
04E0 ; I2C_Close();
04E0 0E940000 xcall _I2C_Close
04E4 .dbline 338
04E4 ; communication->pc_txd = 1;
04E4 81E0 ldi R24,1
04E6 FA01 movw R30,R20
04E8 8183 std z+1,R24
04EA .dbline 339
04EA ; }
04EA 02C0 xjmp L100
04EC L101:
04EC .dbline 340
04EC ; else if(TEST) CommandReply(RESP_INVALID_DATA);
04EC 01C0 xjmp L100
04EE L99:
04EE .dbline 342
04EE ; }
04EE ; else if(TEST) CommandReply(RESP_INVALID_DATA);
04EE 00C0 xjmp L107
04F0 L107:
04F0 L100:
04F0 .dbline 343
04F0 ; }
04F0 L97:
04F0 .dbline -2
04F0 L96:
04F0 .dbline 0 ; func end
04F0 2196 adiw R28,1
04F2 0C940000 xjmp pop_xgsetF03C
04F6 .dbsym r communication 20 pS[data]
04F6 .dbsym r count 12 i
04F6 .dbsym r point 10 i
04F6 .dbsym r p_buf 22 pS[StructOfProtocol]
04F6 .dbend
04F6 .dbfunc e SET_AUTH_TIME _SET_AUTH_TIME fV
04F6 ; count -> R10,R11
04F6 ; point -> R22,R23
04F6 ; p_buf -> R20,R21
.even
04F6 _SET_AUTH_TIME::
04F6 0E940000 xcall push_xgsetF00C
04FA 2197 sbiw R28,1
04FC .dbline -1
04FC .dbline 354
04FC ; }
04FC ; //------------------------------------------------------------------------------
04FC ; /*
04FC ; 15. 设电梯授权时间组 = CMD_SET_AUTH_TIME
04FC ; 命令码: CMD_SET_AUTH_TIME
04FC ; 数据: 内存位置 2字节,高字节在前,值域 0 - 524
04FC ; 从指定位置开始的资料,不超过250字节
04FC ; 正常回应: [OK]
04FC ; */
04FC ; void SET_AUTH_TIME(void)
04FC ; {
04FC .dbline 357
04FC ; unsigned int point,count;
04FC ; struct StructOfProtocol *p_buf;
04FC ; p_buf = (struct StructOfProtocol *)Buffer485;
04FC 40E0 ldi R20,<_Buffer485
04FE 50E0 ldi R21,>_Buffer485
0500 .dbline 358
0500 ; *C51Buffer485 = *Buffer485;
0500 20900000 lds R2,_Buffer485
0504 20920000 sts _C51Buffer485,R2
0508 .dbline 359
0508 ; point = *(unsigned int *)p_buf->Data;
0508 FA01 movw R30,R20
050A 6481 ldd R22,z+4
050C 7581 ldd R23,z+5
050E .dbline 360
050E ; if(point < sizeof(struct StructOfLiftSchedule))
050E 6936 cpi R22,105
0510 A0E0 ldi R26,0
0512 7A07 cpc R23,R26
0514 08F0 brlo X53
0516 34C0 xjmp L110
0518 X53:
0518 X49:
0518 .dbline 361
0518 ; {
0518 .dbline 362
0518 ; count = sizeof(struct StructOfLiftSchedule) - point;
0518 89E6 ldi R24,105
051A 90E0 ldi R25,0
051C 5C01 movw R10,R24
051E A61A sub R10,R22
0520 B70A sbc R11,R23
0522 .dbline 363
0522 ; p_buf->Length -= 3;
0522 CF01 movw R24,R30
0524 0196 adiw R24,1
0526 FC01 movw R30,R24
0528 8081 ldd R24,z+0
052A 9181 ldd R25,z+1
052C 0397 sbiw R24,3
052E 9183 std z+1,R25
0530 8083 std z+0,R24
0532 .dbline 364
0532 ; if(p_buf->Length&&(p_buf->Length<=count))
0532 FA01 movw R30,R20
0534 2180 ldd R2,z+1
0536 3280 ldd R3,z+2
0538 2220 tst R2
053A 11F4 brne X50
053C 3320 tst R3
053E F9F0 breq L112
0540 X50:
0540 A214 cp R10,R2
0542 B304 cpc R11,R3
0544 E0F0 brlo L112
0546 X51:
0546 .dbline 365
0546 ; {
0546 .dbline 366
0546 ; point += LIFT_SCHEDULE_Address;
0546 6A5C subi R22,202 ; offset = 54
0548 7F4F sbci R23,255
054A .dbline 367
054A ; I2C_Initial();
054A 0E940000 xcall _I2C_Initial
054E .dbline 368
054E ; AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
054E FA01 movw R30,R20
0550 2180 ldd R2,z+1
0552 3280 ldd R3,z+2
0554 2882 std y+0,R2
0556 9B01 movw R18,R22
0558 8F01 movw R16,R30
055A 0A5F subi R16,250 ; offset = 6
055C 1F4F sbci R17,255
055E 0E940000 xcall _AT24_Write
0562 .dbline 369
0562 ; I2C_Close();
0562 0E940000 xcall _I2C_Close
0566 .dbline 370
0566 ; if (p_buf->Address!= 0xff)
0566 FA01 movw R30,R20
0568 8081 ldd R24,z+0
056A 8F3F cpi R24,255
056C 51F0 breq L111
056E X52:
056E .dbline 371
056E ; {
056E .dbline 372
056E ; Cyc_manage |= 0x04;//打开更新51控制板的数据
056E 80910000 lds R24,_Cyc_manage
0572 8460 ori R24,4
0574 80930000 sts _Cyc_manage,R24
0578 .dbline 373
0578 ; CommandReply(RESP_CMD_OK);
0578 01E8 ldi R16,129
057A 42DD xcall _CommandReply
057C .dbline 374
057C ; }
057C .dbline 375
057C ; }
057C 02C0 xjmp L111
057E L112:
057E .dbline 376
057E ; else if(TEST && p_buf->Address != 0xff)
057E 01C0 xjmp L111
0580 L110:
0580 .dbline 379
0580 ; CommandReply(RESP_INVALID_DATA);
0580 ; }
0580 ; else if(TEST && p_buf->Address != 0xff)
0580 00C0 xjmp L118
0582 L118:
0582 L111:
0582 .dbline -2
0582 L109:
0582 .dbline 0 ; func end
0582 2196 adiw R28,1
0584 0C940000 xjmp pop_xgsetF00C
0588 .dbsym r count 10 i
0588 .dbsym r point 22 i
0588 .dbsym r p_buf 20 pS[StructOfProtocol]
0588 .dbend
0588 .dbfunc e GET_CONFIG _GET_CONFIG fV
0588 ; communication -> R20,R21
0588 ; p_buf -> R22,R23
.even
0588 _GET_CONFIG::
0588 0E940000 xcall push_xgsetF000
058C 2197 sbiw R28,1
058E .dbline -1
058E .dbline 386
058E ; CommandReply(RESP_INVALID_DATA);
058E ; }
058E ; //------------------------------------------------------------------------------
058E ; //------------------------------------------------------------------------------
058E ; /*取系统配置参数*/
058E ; void GET_CONFIG(void)
058E ; {
058E .dbline 389
058E ; struct StructOfProtocol *p_buf;
058E ; struct data *communication;
058E ; p_buf = (struct StructOfProtocol *)Buffer485;
058E 60E0 ldi R22,<_Buffer485
0590 70E0 ldi R23,>_Buffer485
0592 .dbline 390
0592 ; if(p_buf->Address==Device_Address)
0592 20900000 lds R2,_Device_Address
0596 FB01 movw R30,R22
0598 3080 ldd R3,z+0
059A 3214 cp R3,R2
059C F9F4 brne L121
059E X54:
059E .dbline 391
059E ; {
059E .dbline 392
059E ; if (p_buf->Length == 1) /*接收数据包长度确认*/
059E 8181 ldd R24,z+1
05A0 9281 ldd R25,z+2
05A2 8130 cpi R24,1
05A4 A0E0 ldi R26,0
05A6 9A07 cpc R25,R26
05A8 C1F4 brne L123
05AA X55:
05AA .dbline 393
05AA ; {
05AA .dbline 394
05AA ; p_buf->Length = sizeof(SystemConfig) + 1;
05AA 81E2 ldi R24,33
05AC 90E0 ldi R25,0
05AE 9283 std z+2,R25
05B0 8183 std z+1,R24
05B2 .dbline 395
05B2 ; I2C_Initial();
05B2 0E940000 xcall _I2C_Initial
05B6 .dbline 396
05B6 ; AT24_Read((unsigned char *)&p_buf->Data,SystemConfig_Address,p_buf->Length-1);
05B6 FB01 movw R30,R22
05B8 8181 ldd R24,z+1
05BA 9281 ldd R25,z+2
05BC 0197 sbiw R24,1
05BE 8883 std y+0,R24
05C0 2227 clr R18
05C2 3327 clr R19
05C4 8F01 movw R16,R30
05C6 0C5F subi R16,252 ; offset = 4
05C8 1F4F sbci R17,255
05CA 0E940000 xcall _AT24_Read
05CE .dbline 397
05CE ; I2C_Close();
05CE 0E940000 xcall _I2C_Close
05D2 .dbline 398
05D2 ; communication->pc_txd = 1;
05D2 81E0 ldi R24,1
05D4 FA01 movw R30,R20
05D6 8183 std z+1,R24
05D8 .dbline 399
05D8 ; }
05D8 01C0 xjmp L124
05DA L123:
05DA .dbline 400
05DA ; else if(TEST) CommandReply(RESP_INVALID_DATA); /*包长度异常*/
05DA 00C0 xjmp L125
05DC L125:
05DC L124:
05DC .dbline 401
05DC ; }
05DC L121:
05DC .dbline -2
05DC L
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?