rs485_pc.lis

来自「电梯楼层采集器代码」· LIS 代码 · 共 1,613 行 · 第 1/5 页

LIS
1,613
字号
 021E                   .dbline 178
 021E           ;   unsigned int point,count;
 021E           ;   struct StructOfProtocol *p_buf;
 021E           ;   struct data *communication;
 021E           ;   p_buf = (struct StructOfProtocol *)Buffer485;
 021E 60E0              ldi R22,<_Buffer485
 0220 70E0              ldi R23,>_Buffer485
 0222                   .dbline 179
 0222           ;   if(p_buf->Address==Device_Address)
 0222 20900000          lds R2,_Device_Address
 0226 FB01              movw R30,R22
 0228 3080              ldd R3,z+0
 022A 3214              cp R3,R2
 022C 09F0              breq X22
 022E 3BC0              xjmp L49
 0230           X22:
 0230           X18:
 0230                   .dbline 180
 0230           ;   {
 0230                   .dbline 181
 0230           ;     if(p_buf->Length==3)
 0230 8181              ldd R24,z+1
 0232 9281              ldd R25,z+2
 0234 8330              cpi R24,3
 0236 A0E0              ldi R26,0
 0238 9A07              cpc R25,R26
 023A 09F0              breq X23
 023C 33C0              xjmp L51
 023E           X23:
 023E           X19:
 023E                   .dbline 182
 023E           ;     {
 023E                   .dbline 183
 023E           ;        point = *(unsigned int *)p_buf->Data;
 023E A480              ldd R10,z+4
 0240 B580              ldd R11,z+5
 0242                   .dbline 184
 0242           ;        if (point < sizeof(struct StructOfUserInformation))
 0242 C501              movw R24,R10
 0244 8033              cpi R24,48
 0246 A5E7              ldi R26,117
 0248 9A07              cpc R25,R26
 024A 08F0              brlo X24
 024C 2AC0              xjmp L53
 024E           X24:
 024E           X20:
 024E                   .dbline 185
 024E           ;        {
 024E                   .dbline 186
 024E           ;            count = sizeof(struct StructOfUserInformation) - point;
 024E 80E3              ldi R24,30000
 0250 95E7              ldi R25,117
 0252 6C01              movw R12,R24
 0254 CA18              sub R12,R10
 0256 DB08              sbc R13,R11
 0258                   .dbline 187
 0258           ;             if (count < 256 - 8)   p_buf->Length = count + 1;
 0258 C601              movw R24,R12
 025A 883F              cpi R24,248
 025C A0E0              ldi R26,0
 025E 9A07              cpc R25,R26
 0260 20F4              brsh L55
 0262           X21:
 0262                   .dbline 187
 0262 0196              adiw R24,1
 0264 9283              std z+2,R25
 0266 8183              std z+1,R24
 0268 05C0              xjmp L56
 026A           L55:
 026A                   .dbline 188
 026A           ;           else  p_buf->Length = 256 - 8;
 026A 88EF              ldi R24,248
 026C 90E0              ldi R25,0
 026E FB01              movw R30,R22
 0270 9283              std z+2,R25
 0272 8183              std z+1,R24
 0274           L56:
 0274                   .dbline 189
 0274           ;                 point += USER_INFORMATION_Address;
 0274 C501              movw R24,R10
 0276 8357              subi R24,115  ; offset = 8077
 0278 904E              sbci R25,224
 027A 5C01              movw R10,R24
 027C                   .dbline 190
 027C           ;                 I2C_Initial();
 027C 0E940000          xcall _I2C_Initial
 0280                   .dbline 191
 0280           ;             AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
 0280 FB01              movw R30,R22
 0282 8181              ldd R24,z+1
 0284 9281              ldd R25,z+2
 0286 0197              sbiw R24,1
 0288 8883              std y+0,R24
 028A 9501              movw R18,R10
 028C 8F01              movw R16,R30
 028E 0C5F              subi R16,252  ; offset = 4
 0290 1F4F              sbci R17,255
 0292 0E940000          xcall _AT24_Read
 0296                   .dbline 192
 0296           ;                 I2C_Close();
 0296 0E940000          xcall _I2C_Close
 029A                   .dbline 193
 029A           ;                 communication->pc_txd = 1; 
 029A 81E0              ldi R24,1
 029C FA01              movw R30,R20
 029E 8183              std z+1,R24
 02A0                   .dbline 194
 02A0           ;          }
 02A0 02C0              xjmp L52
 02A2           L53:
 02A2                   .dbline 195
 02A2           ;          else if(TEST) CommandReply(RESP_INVALID_DATA);
 02A2 01C0              xjmp L52
 02A4           L51:
 02A4                   .dbline 197
 02A4           ;       }
 02A4           ;       else if(TEST) CommandReply(RESP_INVALID_DATA);
 02A4 00C0              xjmp L59
 02A6           L59:
 02A6           L52:
 02A6                   .dbline 198
 02A6           ;   }
 02A6           L49:
 02A6                   .dbline -2
 02A6           L48:
 02A6                   .dbline 0 ; func end
 02A6 2196              adiw R28,1
 02A8 0C940000          xjmp pop_xgsetF03C
 02AC                   .dbsym r communication 20 pS[data]
 02AC                   .dbsym r count 12 i
 02AC                   .dbsym r point 10 i
 02AC                   .dbsym r p_buf 22 pS[StructOfProtocol]
 02AC                   .dbend
 02AC                   .dbfunc e SET_USER _SET_USER fV
 02AC           ;          count -> R10,R11
 02AC           ;          point -> R22,R23
 02AC           ;          p_buf -> R20,R21
                        .even
 02AC           _SET_USER::
 02AC 0E940000          xcall push_xgsetF00C
 02B0 2197              sbiw R28,1
 02B2                   .dbline -1
 02B2                   .dbline 208
 02B2           ; }
 02B2           ; //------------------------------------------------------------------------------
 02B2           ; /*
 02B2           ; 下载门禁时间组(设用户楼层授权资料)
 02B2           ; 命令码:CMD_SET_USER
 02B2           ; 数据:        门禁时间组
 02B2           ; 正常回应:    [OK]
 02B2           ; */
 02B2           ; void SET_USER(void)
 02B2           ; {
 02B2                   .dbline 211
 02B2           ;  unsigned int point,count;
 02B2           ;  struct StructOfProtocol *p_buf;
 02B2           ;  p_buf = (struct StructOfProtocol *)Buffer485;
 02B2 40E0              ldi R20,<_Buffer485
 02B4 50E0              ldi R21,>_Buffer485
 02B6                   .dbline 212
 02B6           ;  *C51Buffer485 = *Buffer485;
 02B6 20900000          lds R2,_Buffer485
 02BA 20920000          sts _C51Buffer485,R2
 02BE                   .dbline 213
 02BE           ;  point = *(unsigned int *)p_buf->Data;
 02BE FA01              movw R30,R20
 02C0 6481              ldd R22,z+4
 02C2 7581              ldd R23,z+5
 02C4                   .dbline 214
 02C4           ;  if (point < sizeof(struct StructOfUserInformation))
 02C4 6033              cpi R22,48
 02C6 A5E7              ldi R26,117
 02C8 7A07              cpc R23,R26
 02CA 08F0              brlo X29
 02CC 34C0              xjmp L62
 02CE           X29:
 02CE           X25:
 02CE                   .dbline 215
 02CE           ;  {
 02CE                   .dbline 216
 02CE           ;       count = sizeof(struct StructOfUserInformation) - point;
 02CE 80E3              ldi R24,30000
 02D0 95E7              ldi R25,117
 02D2 5C01              movw R10,R24
 02D4 A61A              sub R10,R22
 02D6 B70A              sbc R11,R23
 02D8                   .dbline 217
 02D8           ;     p_buf->Length -= 3;
 02D8 CF01              movw R24,R30
 02DA 0196              adiw R24,1
 02DC FC01              movw R30,R24
 02DE 8081              ldd R24,z+0
 02E0 9181              ldd R25,z+1
 02E2 0397              sbiw R24,3
 02E4 9183              std z+1,R25
 02E6 8083              std z+0,R24
 02E8                   .dbline 218
 02E8           ;       if(p_buf->Length&&(p_buf->Length<=count))
 02E8 FA01              movw R30,R20
 02EA 2180              ldd R2,z+1
 02EC 3280              ldd R3,z+2
 02EE 2220              tst R2
 02F0 11F4              brne X26
 02F2 3320              tst R3
 02F4 F9F0              breq L64
 02F6           X26:
 02F6 A214              cp R10,R2
 02F8 B304              cpc R11,R3
 02FA E0F0              brlo L64
 02FC           X27:
 02FC                   .dbline 219
 02FC           ;       {
 02FC                   .dbline 220
 02FC           ;         point += USER_INFORMATION_Address;
 02FC 6357              subi R22,115  ; offset = 8077
 02FE 704E              sbci R23,224
 0300                   .dbline 221
 0300           ;         I2C_Initial();
 0300 0E940000          xcall _I2C_Initial
 0304                   .dbline 222
 0304           ;       AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);       
 0304 FA01              movw R30,R20
 0306 2180              ldd R2,z+1
 0308 3280              ldd R3,z+2
 030A 2882              std y+0,R2
 030C 9B01              movw R18,R22
 030E 8F01              movw R16,R30
 0310 0A5F              subi R16,250  ; offset = 6
 0312 1F4F              sbci R17,255
 0314 0E940000          xcall _AT24_Write
 0318                   .dbline 223
 0318           ;         I2C_Close();
 0318 0E940000          xcall _I2C_Close
 031C                   .dbline 224
 031C           ;         if (p_buf->Address  != 0xff) 
 031C FA01              movw R30,R20
 031E 8081              ldd R24,z+0
 0320 8F3F              cpi R24,255
 0322 51F0              breq L63
 0324           X28:
 0324                   .dbline 225
 0324           ;         {
 0324                   .dbline 226
 0324           ;           Cyc_manage |= 0x04;//打开更新51控制板的数据
 0324 80910000          lds R24,_Cyc_manage
 0328 8460              ori R24,4
 032A 80930000          sts _Cyc_manage,R24
 032E                   .dbline 227
 032E           ;         CommandReply(RESP_CMD_OK);
 032E 01E8              ldi R16,129
 0330 67DE              xcall _CommandReply
 0332                   .dbline 228
 0332           ;         }
 0332                   .dbline 229
 0332           ;    }
 0332 02C0              xjmp L63
 0334           L64:
 0334                   .dbline 230
 0334           ;     else if(TEST && p_buf->Address != 0xff)
 0334 01C0              xjmp L63
 0336           L62:
 0336                   .dbline 233
 0336           ;        CommandReply(RESP_INVALID_DATA);
 0336           ;  }
 0336           ;  else if(TEST && p_buf->Address != 0xff)
 0336 00C0              xjmp L70
 0338           L70:
 0338           L63:
 0338                   .dbline -2
 0338           L61:
 0338                   .dbline 0 ; func end
 0338 2196              adiw R28,1
 033A 0C940000          xjmp pop_xgsetF00C
 033E                   .dbsym r count 10 i
 033E                   .dbsym r point 22 i
 033E                   .dbsym r p_buf 20 pS[StructOfProtocol]
 033E                   .dbend
 033E                   .dbfunc e GET_USER_TIME _GET_USER_TIME fV
 033E           ;  communication -> R20,R21
 033E           ;          count -> R12,R13
 033E           ;          point -> R10,R11
 033E           ;          p_buf -> R22,R23
                        .even
 033E           _GET_USER_TIME::
 033E 0E940000          xcall push_xgsetF03C
 0342 2197              sbiw R28,1
 0344                   .dbline -1
 0344                   .dbline 246
 0344           ;      CommandReply(RESP_INVALID_DATA);
 0344           ; }
 0344           ; //------------------------------------------------------------------------------
 0344           ; //------------------------------------------------------------------------------
 0344           ; /*
 0344           ; 取用户时间组授权资料
 0344           ; 命令码:              CMD_GET_USER_TIME
 0344           ; 数据:                    内存位置  2字节,高字节在前,值域 0 - 7499
 0344           ; 正常回应数据:        
 0344           ;       从指定位置开始的资料,不超过255字节
 0344           ; */
 0344           ; void GET_USER_TIME(void)
 0344           ; {
 0344                   .dbline 250
 0344           ;   unsigned int point,count;
 0344           ;   struct StructOfProtocol *p_buf;
 0344           ;   struct data *communication;
 0344           ;   p_buf = (struct StructOfProtocol *)Buffer485;
 0344 60E0              ldi R22,<_Buffer485
 0346 70E0              ldi R23,>_Buffer485
 0348                   .dbline 251
 0348           ;   if(p_buf->Address==Device_Address)
 0348 20900000          lds R2,_Device_Address
 034C FB01              movw R30,R22
 034E 3080              ldd R3,z+0
 0350 3214              cp R3,R2
 0352 09F0              breq X34
 0354 3BC0              xjmp L73
 0356           X34:
 0356           X30:
 0356                   .dbline 252
 0356           ;   {
 0356                   .dbline 253
 0356           ;     if(p_buf->Length==3)
 0356 8181              ldd R24,z+1

⌨️ 快捷键说明

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