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