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 + -
显示快捷键?