📄 rs485_pc.s
字号:
sbiw R28,1
.dbline -1
.dbline 174
; CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*
; 用户楼层授权资料(取控制器门禁时间组)
; 命令码: CMD_GET_USER
; 数据: NONE
;
; 正常回应数据:
; 门禁时间组数据结构
; */
; void GET_USER(void)
; {
.dbline 178
; unsigned int point,count;
; struct StructOfProtocol *p_buf;
; struct data *communication;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R22,<_Buffer485
ldi R23,>_Buffer485
.dbline 179
; if(p_buf->Address==Device_Address)
lds R2,_Device_Address
movw R30,R22
ldd R3,z+0
cp R3,R2
breq X22
xjmp L49
X22:
X18:
.dbline 180
; {
.dbline 181
; if(p_buf->Length==3)
ldd R24,z+1
ldd R25,z+2
cpi R24,3
ldi R26,0
cpc R25,R26
breq X23
xjmp L51
X23:
X19:
.dbline 182
; {
.dbline 183
; point = *(unsigned int *)p_buf->Data;
ldd R10,z+4
ldd R11,z+5
.dbline 184
; if (point < sizeof(struct StructOfUserInformation))
movw R24,R10
cpi R24,48
ldi R26,117
cpc R25,R26
brlo X24
xjmp L53
X24:
X20:
.dbline 185
; {
.dbline 186
; count = sizeof(struct StructOfUserInformation) - point;
ldi R24,30000
ldi R25,117
movw R12,R24
sub R12,R10
sbc R13,R11
.dbline 187
; if (count < 256 - 8) p_buf->Length = count + 1;
movw R24,R12
cpi R24,248
ldi R26,0
cpc R25,R26
brsh L55
X21:
.dbline 187
adiw R24,1
std z+2,R25
std z+1,R24
xjmp L56
L55:
.dbline 188
; else p_buf->Length = 256 - 8;
ldi R24,248
ldi R25,0
movw R30,R22
std z+2,R25
std z+1,R24
L56:
.dbline 189
; point += USER_INFORMATION_Address;
movw R24,R10
subi R24,115 ; offset = 8077
sbci R25,224
movw R10,R24
.dbline 190
; I2C_Initial();
xcall _I2C_Initial
.dbline 191
; AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
movw R30,R22
ldd R24,z+1
ldd R25,z+2
sbiw R24,1
std y+0,R24
movw R18,R10
movw R16,R30
subi R16,252 ; offset = 4
sbci R17,255
xcall _AT24_Read
.dbline 192
; I2C_Close();
xcall _I2C_Close
.dbline 193
; communication->pc_txd = 1;
ldi R24,1
movw R30,R20
std z+1,R24
.dbline 194
; }
xjmp L52
L53:
.dbline 195
; else if(TEST) CommandReply(RESP_INVALID_DATA);
xjmp L52
L51:
.dbline 197
; }
; else if(TEST) CommandReply(RESP_INVALID_DATA);
xjmp L59
L59:
L52:
.dbline 198
; }
L49:
.dbline -2
L48:
.dbline 0 ; func end
adiw R28,1
xjmp pop_xgsetF03C
.dbsym r communication 20 pS[data]
.dbsym r count 12 i
.dbsym r point 10 i
.dbsym r p_buf 22 pS[StructOfProtocol]
.dbend
.dbfunc e SET_USER _SET_USER fV
; count -> R10,R11
; point -> R22,R23
; p_buf -> R20,R21
.even
_SET_USER::
xcall push_xgsetF00C
sbiw R28,1
.dbline -1
.dbline 208
; }
; //------------------------------------------------------------------------------
; /*
; 下载门禁时间组(设用户楼层授权资料)
; 命令码:CMD_SET_USER
; 数据: 门禁时间组
; 正常回应: [OK]
; */
; void SET_USER(void)
; {
.dbline 211
; unsigned int point,count;
; struct StructOfProtocol *p_buf;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R20,<_Buffer485
ldi R21,>_Buffer485
.dbline 212
; *C51Buffer485 = *Buffer485;
lds R2,_Buffer485
sts _C51Buffer485,R2
.dbline 213
; point = *(unsigned int *)p_buf->Data;
movw R30,R20
ldd R22,z+4
ldd R23,z+5
.dbline 214
; if (point < sizeof(struct StructOfUserInformation))
cpi R22,48
ldi R26,117
cpc R23,R26
brlo X29
xjmp L62
X29:
X25:
.dbline 215
; {
.dbline 216
; count = sizeof(struct StructOfUserInformation) - point;
ldi R24,30000
ldi R25,117
movw R10,R24
sub R10,R22
sbc R11,R23
.dbline 217
; p_buf->Length -= 3;
movw R24,R30
adiw R24,1
movw R30,R24
ldd R24,z+0
ldd R25,z+1
sbiw R24,3
std z+1,R25
std z+0,R24
.dbline 218
; if(p_buf->Length&&(p_buf->Length<=count))
movw R30,R20
ldd R2,z+1
ldd R3,z+2
tst R2
brne X26
tst R3
breq L64
X26:
cp R10,R2
cpc R11,R3
brlo L64
X27:
.dbline 219
; {
.dbline 220
; point += USER_INFORMATION_Address;
subi R22,115 ; offset = 8077
sbci R23,224
.dbline 221
; I2C_Initial();
xcall _I2C_Initial
.dbline 222
; AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
movw R30,R20
ldd R2,z+1
ldd R3,z+2
std y+0,R2
movw R18,R22
movw R16,R30
subi R16,250 ; offset = 6
sbci R17,255
xcall _AT24_Write
.dbline 223
; I2C_Close();
xcall _I2C_Close
.dbline 224
; if (p_buf->Address != 0xff)
movw R30,R20
ldd R24,z+0
cpi R24,255
breq L63
X28:
.dbline 225
; {
.dbline 226
; Cyc_manage |= 0x04;//打开更新51控制板的数据
lds R24,_Cyc_manage
ori R24,4
sts _Cyc_manage,R24
.dbline 227
; CommandReply(RESP_CMD_OK);
ldi R16,129
xcall _CommandReply
.dbline 228
; }
.dbline 229
; }
xjmp L63
L64:
.dbline 230
; else if(TEST && p_buf->Address != 0xff)
xjmp L63
L62:
.dbline 233
; CommandReply(RESP_INVALID_DATA);
; }
; else if(TEST && p_buf->Address != 0xff)
xjmp L70
L70:
L63:
.dbline -2
L61:
.dbline 0 ; func end
adiw R28,1
xjmp pop_xgsetF00C
.dbsym r count 10 i
.dbsym r point 22 i
.dbsym r p_buf 20 pS[StructOfProtocol]
.dbend
.dbfunc e GET_USER_TIME _GET_USER_TIME fV
; communication -> R20,R21
; count -> R12,R13
; point -> R10,R11
; p_buf -> R22,R23
.even
_GET_USER_TIME::
xcall push_xgsetF03C
sbiw R28,1
.dbline -1
.dbline 246
; CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*
; 取用户时间组授权资料
; 命令码: CMD_GET_USER_TIME
; 数据: 内存位置 2字节,高字节在前,值域 0 - 7499
; 正常回应数据:
; 从指定位置开始的资料,不超过255字节
; */
; void GET_USER_TIME(void)
; {
.dbline 250
; unsigned int point,count;
; struct StructOfProtocol *p_buf;
; struct data *communication;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R22,<_Buffer485
ldi R23,>_Buffer485
.dbline 251
; if(p_buf->Address==Device_Address)
lds R2,_Device_Address
movw R30,R22
ldd R3,z+0
cp R3,R2
breq X34
xjmp L73
X34:
X30:
.dbline 252
; {
.dbline 253
; if(p_buf->Length==3)
ldd R24,z+1
ldd R25,z+2
cpi R24,3
ldi R26,0
cpc R25,R26
breq X35
xjmp L75
X35:
X31:
.dbline 254
; {
.dbline 255
; point = *(unsigned int *)p_buf->Data;
ldd R10,z+4
ldd R11,z+5
.dbline 256
; if (point < sizeof(struct StructOfUserTimezone))
movw R24,R10
cpi R24,76
ldi R26,29
cpc R25,R26
brlo X36
xjmp L77
X36:
X32:
.dbline 257
; {
.dbline 258
; count = sizeof(struct StructOfUserTimezone) - point;
ldi R24,7500
ldi R25,29
movw R12,R24
sub R12,R10
sbc R13,R11
.dbline 259
; if (count < 256 - 8) p_buf->Length = count + 1;
movw R24,R12
cpi R24,248
ldi R26,0
cpc R25,R26
brsh L79
X33:
.dbline 259
adiw R24,1
std z+2,R25
std z+1,R24
xjmp L80
L79:
.dbline 260
; else p_buf->Length = 256 - 8;
ldi R24,248
ldi R25,0
movw R30,R22
std z+2,R25
std z+1,R24
L80:
.dbline 261
; point += USER_TIMEZONE_Address;
movw R24,R10
subi R24,189 ; offset = 579
sbci R25,253
movw R10,R24
.dbline 262
; I2C_Initial();
xcall _I2C_Initial
.dbline 263
; AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
movw R30,R22
ldd R24,z+1
ldd R25,z+2
sbiw R24,1
std y+0,R24
movw R18,R10
movw R16,R30
subi R16,252 ; offset = 4
sbci R17,255
xcall _AT24_Read
.dbline 264
; I2C_Close();
xcall _I2C_Close
.dbline 265
; communication->pc_txd = 1;
ldi R24,1
movw R30,R20
std z+1,R24
.dbline 266
; }
xjmp L76
L77:
.dbline 267
; else if(TEST) CommandReply(RESP_INVALID_DATA);
xjmp L76
L75:
.dbline 269
; }
; else if(TEST) CommandReply(RESP_INVALID_DATA);
xjmp L83
L83:
L76:
.dbline 270
; }
L73:
.dbline -2
L72:
.dbline 0 ; func end
adiw R28,1
xjmp pop_xgsetF03C
.dbsym r communication 20 pS[data]
.dbsym r count 12 i
.dbsym r point 10 i
.dbsym r p_buf 22 pS[StructOfProtocol]
.dbend
.dbfunc e SET_USER_TIME _SET_USER_TIME fV
; count -> R10,R11
; point -> R22,R23
; p_buf -> R20,R21
.even
_SET_USER_TIME::
xcall push_xgsetF00C
sbiw R28,1
.dbline -1
.dbline 281
; }
; //------------------------------------------------------------------------------
; /*
; 设用户时间组授权资料
; 命令码:CMD_SET_USER_TIME
; 数据: 内存位置 2字节,高字节在前,值域 0 - 7499
; 从指定位置开始的资料,不超过250字节
; 正常回应: [OK]
; */
; void SET_USER_TIME(void)
; {
.dbline 284
; unsigned int point,count;
; struct StructOfProtocol *p_buf;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R20,<_Buffer485
ldi R21,>_Buffer485
.dbline 285
; *C51Buffer485 = *Buffer485;
lds R2,_Buffer485
sts _C51Buffer485,R2
.dbline 286
; point = *(unsigned int *)p_buf->Data;
movw R30,R20
ldd R22,z+4
ldd R23,z+5
.dbline 287
; if(point < sizeof(struct StructOfUserTimezone))
cpi R22,76
ldi R26,29
cpc R23,R26
brlo X41
xjmp L86
X41:
X37:
.dbline 288
; {
.dbline 289
; count = sizeof(struct StructOfUserTimezone) - point ;
ldi R24,7500
ldi R25,29
movw R10,R24
sub R10,R22
sbc R11,R23
.dbline 290
; p_buf->Length -= 3;
movw R24,R30
adiw R24,1
movw R30,R24
ldd R24,z+0
ldd R25,z+1
sbiw R24,3
std z+1,R25
std z+0,R24
.dbline 291
; if(p_buf->Length&&(p_buf->Length<=count))
movw R30,R20
ldd R2,z+1
ldd R3,z+2
tst R2
brne X38
tst R3
breq L88
X38:
cp R10,R2
cpc R11,R3
brlo L88
X39:
.dbline 292
; {
.dbline 293
; point += USER_TIMEZONE_Address;
subi R22,189 ; offset = 579
sbci R23,253
.dbline 294
; I2C_Initial();
xcall _I2C_Initial
.dbline 295
; AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
movw R30,R20
ldd R2,z+1
ldd R3,z+2
std y+0,R2
movw R18,R22
movw R16,R30
subi R16,250 ; offset = 6
sbci R17,255
xcall _AT24_Write
.dbline 296
; I2C_Close();
xcall _I2C_Close
.dbline 297
; if (p_buf->Address != 0xff)
movw R30,R20
ldd R24,z+0
cpi R24,255
breq L87
X40:
.dbline 298
; {
.dbline 299
; Cyc_manage |= 0x04;//打开更新51控制板的数据
lds R24,_Cyc_manage
ori R24,4
sts _Cyc_manage,R24
.dbline 300
; CommandReply(RESP_CMD_OK);
ldi R16,129
xcall _CommandReply
.dbline 301
; }
.dbline 302
; }
xjmp L87
L88:
.dbline 303
; else if(TEST && p_buf->Address != 0xff)
xjmp L87
L86:
.dbline 306
; CommandReply(RESP_INVALID_DATA);
; }
; else if(TEST && p_buf->Address != 0xff)
xjmp L94
L94:
L87:
.dbline -2
L85:
.dbline 0 ; func end
adiw R28,1
xjmp pop_xgsetF00C
.dbsym r count 10 i
.dbsym r point 22 i
.dbsym r p_buf 20 pS[StructOfProtocol]
.dbend
.dbfunc e GET_AUTH_TIME _GET_AUTH_TIME fV
; communication -> R20,R21
; count -> R12,R13
; point -> R10,R11
; p_buf -> R22,R23
.even
_GET_AUTH_TIME::
xcall push_xgsetF03C
sbiw R28,1
.dbline -1
.dbline 319
; CommandReply(RESP_INVALID_DATA);
; }
; //------------------------------------------------------------------------------
; //------------------------------------------------------------------------------
; /*
; 8. 取电梯授权时间组
; 命令码: CMD_GET_AUTH_TIME
; 数据: 内存位置 2字节,高字节在前,值域 0 - 524
; 正常回应数据:
; 从指定位置开始的资料,不超过255字节
; */
; void GET_AUTH_TIME(void)
; {
.dbline 323
; unsigned int point,count;
; struct StructOfProtocol *p_buf;
; struct data *communication;
; p_buf = (struct StructOfProtocol *)Buffer485;
ldi R22,<_Buffer485
ldi R23,>_Buffer485
.dbline 324
; if(p_buf->Address==Device_Address)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -