📄 sd8060.lst
字号:
222 8164 LDD R22,Z+4
223 8175 LDD R23,Z+5
(0141) if (point < sizeof(struct StructOfRegister))
224 3F6C CPI R22,0xFC
225 E0A5 LDI R26,5
226 077A CPC R23,R26
227 F008 BCS 0x0229
228 C034 RJMP 0x025D
(0142) {
(0143) count = sizeof(struct StructOfRegister) - point;
229 EF8C LDI R24,0xFC
22A E095 LDI R25,5
22B 015C MOVW R10,R24
22C 1AA6 SUB R10,R22
22D 0AB7 SBC R11,R23
(0144) p_buf->Length -= 3;
22E 01CF MOVW R24,R30
22F 9601 ADIW R24,1
230 01FC MOVW R30,R24
231 8180 LDD R24,Z+0
232 8191 LDD R25,Z+1
233 9703 SBIW R24,3
234 8391 STD Z+1,R25
235 8380 STD Z+0,R24
(0145) if (p_buf->Length && (p_buf->Length <= count))
236 01FA MOVW R30,R20
237 8021 LDD R2,Z+1
238 8032 LDD R3,Z+2
239 2022 TST R2
23A F411 BNE 0x023D
23B 2033 TST R3
23C F0F9 BEQ 0x025C
23D 14A2 CP R10,R2
23E 04B3 CPC R11,R3
23F F0E0 BCS 0x025C
(0146) {//保存系统卡注册表
(0147) point += CARDSET_Address;
240 5461 SUBI R22,0x41
241 467B SBCI R23,0x6B
(0148) I2C_Initial();
242 940E 05B1 CALL _I2C_Initial
(0149) AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
244 01FA MOVW R30,R20
245 8021 LDD R2,Z+1
246 8032 LDD R3,Z+2
247 8228 STD Y+0,R2
248 019B MOVW R18,R22
249 018F MOVW R16,R30
24A 5F0A SUBI R16,0xFA
24B 4F1F SBCI R17,0xFF
24C 940E 0651 CALL _AT24_Write
(0150) I2C_Close();
24E 940E 05B6 CALL _I2C_Close
(0151) if (p_buf->Address != 0xff)
250 01FA MOVW R30,R20
251 8180 LDD R24,Z+0
252 3F8F CPI R24,0xFF
253 F051 BEQ 0x025E
(0152) {
(0153) Cyc_manage |= 0x04;//打开更新51控制板的数据
254 9180 0078 LDS R24,Cyc_manage
256 6084 ORI R24,4
257 9380 0078 STS Cyc_manage,R24
(0154) CommandReply(RESP_CMD_OK);
259 E801 LDI R16,0x81
25A DEFA RCALL _CommandReply
(0155) }
(0156) }
25B C002 RJMP 0x025E
(0157) else if(TEST && p_buf->Address != 0xff)
25C C001 RJMP 0x025E
(0158) CommandReply(RESP_INVALID_DATA);
(0159) }
(0160) else if(TEST && p_buf->Address != 0xff)
25D C000 RJMP 0x025E
25E 9621 ADIW R28,1
25F 940C 0DB6 JMP pop_xgsetF00C
_GET_USER:
communication --> R20
count --> R12
point --> R10
p_buf --> R22
261 940E 0DCB CALL push_xgsetF03C
263 9721 SBIW R28,1
(0161) CommandReply(RESP_INVALID_DATA);
(0162) }
(0163) //------------------------------------------------------------------------------
(0164) //------------------------------------------------------------------------------
(0165) /*
(0166) 用户楼层授权资料(取控制器门禁时间组)
(0167) 命令码: CMD_GET_USER
(0168) 数据: NONE
(0169)
(0170) 正常回应数据:
(0171) 门禁时间组数据结构
(0172) */
(0173) void GET_USER(void)
(0174) {
(0175) unsigned int point,count;
(0176) struct StructOfProtocol *p_buf;
(0177) struct data *communication;
(0178) p_buf = (struct StructOfProtocol *)Buffer485;
264 E769 LDI R22,0x79
265 E071 LDI R23,1
(0179) if(p_buf->Address==Device_Address)
266 9020 0077 LDS R2,Device_Address
268 01FB MOVW R30,R22
269 8030 LDD R3,Z+0
26A 1432 CP R3,R2
26B F009 BEQ 0x026D
26C C03B RJMP 0x02A8
(0180) {
(0181) if(p_buf->Length==3)
26D 8181 LDD R24,Z+1
26E 8192 LDD R25,Z+2
26F 3083 CPI R24,3
270 E0A0 LDI R26,0
271 079A CPC R25,R26
272 F009 BEQ 0x0274
273 C033 RJMP 0x02A7
(0182) {
(0183) point = *(unsigned int *)p_buf->Data;
274 80A4 LDD R10,Z+4
275 80B5 LDD R11,Z+5
(0184) if (point < sizeof(struct StructOfUserInformation))
276 01C5 MOVW R24,R10
277 3380 CPI R24,0x30
278 E7A5 LDI R26,0x75
279 079A CPC R25,R26
27A F008 BCS 0x027C
27B C02A RJMP 0x02A6
(0185) {
(0186) count = sizeof(struct StructOfUserInformation) - point;
27C E380 LDI R24,0x30
27D E795 LDI R25,0x75
27E 016C MOVW R12,R24
27F 18CA SUB R12,R10
280 08DB SBC R13,R11
(0187) if (count < 256 - 8) p_buf->Length = count + 1;
281 01C6 MOVW R24,R12
282 3F88 CPI R24,0xF8
283 E0A0 LDI R26,0
284 079A CPC R25,R26
285 F420 BCC 0x028A
286 9601 ADIW R24,1
287 8392 STD Z+2,R25
288 8381 STD Z+1,R24
289 C005 RJMP 0x028F
(0188) else p_buf->Length = 256 - 8;
28A EF88 LDI R24,0xF8
28B E090 LDI R25,0
28C 01FB MOVW R30,R22
28D 8392 STD Z+2,R25
28E 8381 STD Z+1,R24
(0189) point += USER_INFORMATION_Address;
28F 01C5 MOVW R24,R10
290 5783 SUBI R24,0x73
291 4E90 SBCI R25,0xE0
292 015C MOVW R10,R24
(0190) I2C_Initial();
293 940E 05B1 CALL _I2C_Initial
(0191) AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
295 01FB MOVW R30,R22
296 8181 LDD R24,Z+1
297 8192 LDD R25,Z+2
298 9701 SBIW R24,1
299 8388 STD Y+0,R24
29A 0195 MOVW R18,R10
29B 018F MOVW R16,R30
29C 5F0C SUBI R16,0xFC
29D 4F1F SBCI R17,0xFF
29E 940E 0615 CALL _AT24_Read
(0192) I2C_Close();
2A0 940E 05B6 CALL _I2C_Close
(0193) communication->pc_txd = 1;
2A2 E081 LDI R24,1
2A3 01FA MOVW R30,R20
2A4 8381 STD Z+1,R24
(0194) }
2A5 C002 RJMP 0x02A8
(0195) else if(TEST) CommandReply(RESP_INVALID_DATA);
2A6 C001 RJMP 0x02A8
(0196) }
(0197) else if(TEST) CommandReply(RESP_INVALID_DATA);
2A7 C000 RJMP 0x02A8
(0198) }
2A8 9621 ADIW R28,1
2A9 940C 0DD4 JMP pop_xgsetF03C
_SET_USER:
count --> R10
point --> R22
p_buf --> R20
2AB 940E 0DAF CALL push_xgsetF00C
2AD 9721 SBIW R28,1
(0199) }
(0200) //------------------------------------------------------------------------------
(0201) /*
(0202) 下载门禁时间组(设用户楼层授权资料)
(0203) 命令码:CMD_SET_USER
(0204) 数据: 门禁时间组
(0205) 正常回应: [OK]
(0206) */
(0207) void SET_USER(void)
(0208) {
(0209) unsigned int point,count;
(0210) struct StructOfProtocol *p_buf;
(0211) p_buf = (struct StructOfProtocol *)Buffer485;
2AE E749 LDI R20,0x79
2AF E051 LDI R21,1
(0212) *C51Buffer485 = *Buffer485;
2B0 9020 0179 LDS R2,Buffer485
2B2 9220 0079 STS C51Buffer485,R2
(0213) point = *(unsigned int *)p_buf->Data;
2B4 01FA MOVW R30,R20
2B5 8164 LDD R22,Z+4
2B6 8175 LDD R23,Z+5
(0214) if (point < sizeof(struct StructOfUserInformation))
2B7 3360 CPI R22,0x30
2B8 E7A5 LDI R26,0x75
2B9 077A CPC R23,R26
2BA F008 BCS 0x02BC
2BB C034 RJMP 0x02F0
(0215) {
(0216) count = sizeof(struct StructOfUserInformation) - point;
2BC E380 LDI R24,0x30
2BD E795 LDI R25,0x75
2BE 015C MOVW R10,R24
2BF 1AA6 SUB R10,R22
2C0 0AB7 SBC R11,R23
(0217) p_buf->Length -= 3;
2C1 01CF MOVW R24,R30
2C2 9601 ADIW R24,1
2C3 01FC MOVW R30,R24
2C4 8180 LDD R24,Z+0
2C5 8191 LDD R25,Z+1
2C6 9703 SBIW R24,3
2C7 8391 STD Z+1,R25
2C8 8380 STD Z+0,R24
(0218) if(p_buf->Length&&(p_buf->Length<=count))
2C9 01FA MOVW R30,R20
2CA 8021 LDD R2,Z+1
2CB 8032 LDD R3,Z+2
2CC 2022 TST R2
2CD F411 BNE 0x02D0
2CE 2033 TST R3
2CF F0F9 BEQ 0x02EF
2D0 14A2 CP R10,R2
2D1 04B3 CPC R11,R3
2D2 F0E0 BCS 0x02EF
(0219) {
(0220) point += USER_INFORMATION_Address;
2D3 5763 SUBI R22,0x73
2D4 4E70 SBCI R23,0xE0
(0221) I2C_Initial();
2D5 940E 05B1 CALL _I2C_Initial
(0222) AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
2D7 01FA MOVW R30,R20
2D8 8021 LDD R2,Z+1
2D9 8032 LDD R3,Z+2
2DA 8228 STD Y+0,R2
2DB 019B MOVW R18,R22
2DC 018F MOVW R16,R30
2DD 5F0A SUBI R16,0xFA
2DE 4F1F SBCI R17,0xFF
2DF 940E 0651 CALL _AT24_Write
(0223) I2C_Close();
2E1 940E 05B6 CALL _I2C_Close
(0224) if (p_buf->Address != 0xff)
2E3 01FA MOVW R30,R20
2E4 8180 LDD R24,Z+0
2E5 3F8F CPI R24,0xFF
2E6 F051 BEQ 0x02F1
(0225) {
(0226) Cyc_manage |= 0x04;//打开更新51控制板的数据
2E7 9180 0078 LDS R24,Cyc_manage
2E9 6084 ORI R24,4
2EA 9380 0078 STS Cyc_manage,R24
(0227) CommandReply(RESP_CMD_OK);
2EC E801 LDI R16,0x81
2ED DE67 RCALL _CommandReply
(0228) }
(0229) }
2EE C002 RJMP 0x02F1
(0230) else if(TEST && p_buf->Address != 0xff)
2EF C001 RJMP 0x02F1
(0231) CommandReply(RESP_INVALID_DATA);
(0232) }
(0233) else if(TEST && p_buf->Address != 0xff)
2F0 C000 RJMP 0x02F1
2F1 9621 ADIW R28,1
2F2 940C 0DB6 JMP pop_xgsetF00C
_GET_USER_TIME:
communication --> R20
count --> R12
point --> R10
p_buf --> R22
2F4 940E 0DCB CALL push_xgsetF03C
2F6 9721 SBIW R28,1
(0234) CommandReply(RESP_INVALID_DATA);
(0235) }
(0236) //------------------------------------------------------------------------------
(0237) //------------------------------------------------------------------------------
(0238) /*
(0239) 取用户时间组授权资料
(0240) 命令码: CMD_GET_USER_TIME
(0241) 数据: 内存位置 2字节,高字节在前,值域 0 - 7499
(0242) 正常回应数据:
(0243) 从指定位置开始的资料,不超过255字节
(0244) */
(0245) void GET_USER_TIME(void)
(0246) {
(0247) unsigned int point,count;
(0248) struct StructOfProtocol *p_buf;
(0249) struct data *communication;
(0250) p_buf = (struct StructOfProtocol *)Buffer485;
2F7 E769 LDI R22,0x79
2F8 E071 LDI R23,1
(0251) if(p_buf->Address==Device_Address)
2F9 9020 0077 LDS R2,Device_Address
2FB 01FB MOVW R30,R22
2FC 8030 LDD R3,Z+0
2FD 1432 CP R3,R2
2FE F009 BEQ 0x0300
2FF C03B RJMP 0x033B
(0252) {
(0253) if(p_buf->Length==3)
300 8181 LDD R24,Z+1
301 8192 LDD R25,Z+2
302 3083 CPI R24,3
303 E0A0 LDI R26,0
304 079A CPC R25,R26
305 F009 BEQ 0x0307
306 C033 RJMP 0x033A
(0254) {
(0255) point = *(unsigned int *)p_buf->Data;
307 80A4 LDD R10,Z+4
308 80B5 LDD R11,Z+5
(0256) if (point < sizeof(struct StructOfUserTimezone))
309 01C5 MOVW R24,R10
30A 348C CPI R24,0x4C
30B E1AD LDI R26,0x1D
30C 079A CPC R25,R26
30D F008 BCS 0x030F
30E C02A RJMP 0x0339
(0257) {
(0258) count = sizeof(struct StructOfUserTimezone) - point;
30F E48C LDI R24,0x4C
310 E19D LDI R25,0x1D
311 016C MOVW R12,R24
312 18CA SUB R12,R10
313 08DB SBC R13,R11
(0259) if (count < 256 - 8) p_buf->Length = count + 1;
314 01C6 MOVW R24,R12
315 3F88 CPI R24,0xF8
316 E0A0 LDI R26,0
317 079A CPC R25,R26
318 F420 BCC 0x031D
319 9601 ADIW R24,1
31A 8392 STD Z+2,R25
31B 8381 STD Z+1,R24
31C C005 RJMP 0x0322
(0260) else p_buf->Length = 256 - 8;
31D EF88 LDI R24,0xF8
31E E090 LDI R25,0
31F 01FB MOVW R30,R22
320 8392 STD Z+2,R25
321 8381 STD Z+1,R24
(0261) point += USER_TIMEZONE_Address;
322 01C5 MOVW R24,R10
323 5B8D SUBI R24,0xBD
324 4F9D SBCI R25,0xFD
325 015C MOVW R10,R24
(0262) I2C_Initial();
326 940E 05B1 CALL _I2C_Initial
(0263) AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
328 01FB MOVW R30,R22
329 8181 LDD R24,Z+1
32A 8192 LDD R25,Z+2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -