rs485_pc.lis
来自「电梯楼层采集器代码」· LIS 代码 · 共 1,613 行 · 第 1/5 页
LIS
1,613 行
00F2 ; point -> R10,R11
00F2 ; p_buf -> R22,R23
.even
00F2 _GET_CARDSET::
00F2 0E940000 xcall push_xgsetF03C
00F6 2197 sbiw R28,1
00F8 .dbline -1
00F8 .dbline 101
00F8 ; CommandReply(RESP_INVALID_DATA);
00F8 ; }
00F8 ; //------------------------------------------------------------------------------
00F8 ; //------------------------------------------------------------------------------
00F8 ; /*
00F8 ; 取系统卡注册表
00F8 ; 命令码: CMD_GET_CARDSET
00F8 ; 数据: NONE
00F8 ; 正常回应数据:
00F8 ; 卡注册表数据结构
00F8 ; */
00F8 ; void GET_CARDSET(void)
00F8 ; {
00F8 .dbline 105
00F8 ; unsigned int point,count;
00F8 ; struct StructOfProtocol *p_buf;
00F8 ; struct data *communication;
00F8 ; p_buf = (struct StructOfProtocol *)Buffer485;
00F8 60E0 ldi R22,<_Buffer485
00FA 70E0 ldi R23,>_Buffer485
00FC .dbline 106
00FC ; if(p_buf->Address==Device_Address)
00FC 20900000 lds R2,_Device_Address
0100 FB01 movw R30,R22
0102 3080 ldd R3,z+0
0104 3214 cp R3,R2
0106 09F0 breq X10
0108 3BC0 xjmp L25
010A X10:
010A X6:
010A .dbline 107
010A ; {
010A .dbline 108
010A ; if(p_buf->Length==3)
010A 8181 ldd R24,z+1
010C 9281 ldd R25,z+2
010E 8330 cpi R24,3
0110 A0E0 ldi R26,0
0112 9A07 cpc R25,R26
0114 09F0 breq X11
0116 33C0 xjmp L27
0118 X11:
0118 X7:
0118 .dbline 109
0118 ; {
0118 .dbline 110
0118 ; point = *(unsigned int *)p_buf->Data;
0118 A480 ldd R10,z+4
011A B580 ldd R11,z+5
011C .dbline 111
011C ; if (point < sizeof(struct StructOfRegister))
011C C501 movw R24,R10
011E 8C3F cpi R24,252
0120 A5E0 ldi R26,5
0122 9A07 cpc R25,R26
0124 08F0 brlo X12
0126 2AC0 xjmp L29
0128 X12:
0128 X8:
0128 .dbline 112
0128 ; {//发送系统卡注册表给PC
0128 .dbline 113
0128 ; count = sizeof(struct StructOfRegister) - point;
0128 8CEF ldi R24,1532
012A 95E0 ldi R25,5
012C 6C01 movw R12,R24
012E CA18 sub R12,R10
0130 DB08 sbc R13,R11
0132 .dbline 114
0132 ; if (count < 256 - 8) p_buf->Length = count + 1;
0132 C601 movw R24,R12
0134 883F cpi R24,248
0136 A0E0 ldi R26,0
0138 9A07 cpc R25,R26
013A 20F4 brsh L31
013C X9:
013C .dbline 114
013C 0196 adiw R24,1
013E 9283 std z+2,R25
0140 8183 std z+1,R24
0142 05C0 xjmp L32
0144 L31:
0144 .dbline 115
0144 ; else p_buf->Length = 256 - 8;
0144 88EF ldi R24,248
0146 90E0 ldi R25,0
0148 FB01 movw R30,R22
014A 9283 std z+2,R25
014C 8183 std z+1,R24
014E L32:
014E .dbline 116
014E ; point += CARDSET_Address;
014E C501 movw R24,R10
0150 8154 subi R24,65 ; offset = 38079
0152 9B46 sbci R25,107
0154 5C01 movw R10,R24
0156 .dbline 117
0156 ; I2C_Initial();
0156 0E940000 xcall _I2C_Initial
015A .dbline 118
015A ; AT24_Read((unsigned char *)&p_buf->Data,point,p_buf->Length-1);
015A FB01 movw R30,R22
015C 8181 ldd R24,z+1
015E 9281 ldd R25,z+2
0160 0197 sbiw R24,1
0162 8883 std y+0,R24
0164 9501 movw R18,R10
0166 8F01 movw R16,R30
0168 0C5F subi R16,252 ; offset = 4
016A 1F4F sbci R17,255
016C 0E940000 xcall _AT24_Read
0170 .dbline 119
0170 ; I2C_Close();
0170 0E940000 xcall _I2C_Close
0174 .dbline 120
0174 ; communication->pc_txd = 1;
0174 81E0 ldi R24,1
0176 FA01 movw R30,R20
0178 8183 std z+1,R24
017A .dbline 121
017A ; }
017A 02C0 xjmp L28
017C L29:
017C .dbline 122
017C ; else if(TEST) CommandReply(RESP_INVALID_DATA);
017C 01C0 xjmp L28
017E L27:
017E .dbline 124
017E ; }
017E ; else if(TEST) CommandReply(RESP_INVALID_DATA);
017E 00C0 xjmp L35
0180 L35:
0180 L28:
0180 .dbline 125
0180 ; }
0180 L25:
0180 .dbline -2
0180 L24:
0180 .dbline 0 ; func end
0180 2196 adiw R28,1
0182 0C940000 xjmp pop_xgsetF03C
0186 .dbsym r communication 20 pS[data]
0186 .dbsym r count 12 i
0186 .dbsym r point 10 i
0186 .dbsym r p_buf 22 pS[StructOfProtocol]
0186 .dbend
0186 .dbfunc e SET_CARDSET _SET_CARDSET fV
0186 ; count -> R10,R11
0186 ; point -> R22,R23
0186 ; p_buf -> R20,R21
.even
0186 _SET_CARDSET::
0186 0E940000 xcall push_xgsetF00C
018A 2197 sbiw R28,1
018C .dbline -1
018C .dbline 135
018C ; }
018C ; //------------------------------------------------------------------------------
018C ; /*
018C ; 下载系统卡注册表
018C ; 命令码: CMD_SET_CARDSET
018C ; 数据: 卡注册表
018C ; 正常回应: [OK]
018C ; */
018C ; void SET_CARDSET(void)
018C ; {
018C .dbline 138
018C ; unsigned int point,count;
018C ; struct StructOfProtocol *p_buf;
018C ; p_buf = (struct StructOfProtocol *)Buffer485;
018C 40E0 ldi R20,<_Buffer485
018E 50E0 ldi R21,>_Buffer485
0190 .dbline 139
0190 ; *C51Buffer485 = *Buffer485;
0190 20900000 lds R2,_Buffer485
0194 20920000 sts _C51Buffer485,R2
0198 .dbline 140
0198 ; point = *(unsigned int *)p_buf->Data;
0198 FA01 movw R30,R20
019A 6481 ldd R22,z+4
019C 7581 ldd R23,z+5
019E .dbline 141
019E ; if (point < sizeof(struct StructOfRegister))
019E 6C3F cpi R22,252
01A0 A5E0 ldi R26,5
01A2 7A07 cpc R23,R26
01A4 08F0 brlo X17
01A6 34C0 xjmp L38
01A8 X17:
01A8 X13:
01A8 .dbline 142
01A8 ; {
01A8 .dbline 143
01A8 ; count = sizeof(struct StructOfRegister) - point;
01A8 8CEF ldi R24,1532
01AA 95E0 ldi R25,5
01AC 5C01 movw R10,R24
01AE A61A sub R10,R22
01B0 B70A sbc R11,R23
01B2 .dbline 144
01B2 ; p_buf->Length -= 3;
01B2 CF01 movw R24,R30
01B4 0196 adiw R24,1
01B6 FC01 movw R30,R24
01B8 8081 ldd R24,z+0
01BA 9181 ldd R25,z+1
01BC 0397 sbiw R24,3
01BE 9183 std z+1,R25
01C0 8083 std z+0,R24
01C2 .dbline 145
01C2 ; if (p_buf->Length && (p_buf->Length <= count))
01C2 FA01 movw R30,R20
01C4 2180 ldd R2,z+1
01C6 3280 ldd R3,z+2
01C8 2220 tst R2
01CA 11F4 brne X14
01CC 3320 tst R3
01CE F9F0 breq L40
01D0 X14:
01D0 A214 cp R10,R2
01D2 B304 cpc R11,R3
01D4 E0F0 brlo L40
01D6 X15:
01D6 .dbline 146
01D6 ; {//保存系统卡注册表
01D6 .dbline 147
01D6 ; point += CARDSET_Address;
01D6 6154 subi R22,65 ; offset = 38079
01D8 7B46 sbci R23,107
01DA .dbline 148
01DA ; I2C_Initial();
01DA 0E940000 xcall _I2C_Initial
01DE .dbline 149
01DE ; AT24_Write((unsigned char *)&p_buf->Data[2],point,p_buf->Length);
01DE FA01 movw R30,R20
01E0 2180 ldd R2,z+1
01E2 3280 ldd R3,z+2
01E4 2882 std y+0,R2
01E6 9B01 movw R18,R22
01E8 8F01 movw R16,R30
01EA 0A5F subi R16,250 ; offset = 6
01EC 1F4F sbci R17,255
01EE 0E940000 xcall _AT24_Write
01F2 .dbline 150
01F2 ; I2C_Close();
01F2 0E940000 xcall _I2C_Close
01F6 .dbline 151
01F6 ; if (p_buf->Address != 0xff)
01F6 FA01 movw R30,R20
01F8 8081 ldd R24,z+0
01FA 8F3F cpi R24,255
01FC 51F0 breq L39
01FE X16:
01FE .dbline 152
01FE ; {
01FE .dbline 153
01FE ; Cyc_manage |= 0x04;//打开更新51控制板的数据
01FE 80910000 lds R24,_Cyc_manage
0202 8460 ori R24,4
0204 80930000 sts _Cyc_manage,R24
0208 .dbline 154
0208 ; CommandReply(RESP_CMD_OK);
0208 01E8 ldi R16,129
020A FADE xcall _CommandReply
020C .dbline 155
020C ; }
020C .dbline 156
020C ; }
020C 02C0 xjmp L39
020E L40:
020E .dbline 157
020E ; else if(TEST && p_buf->Address != 0xff)
020E 01C0 xjmp L39
0210 L38:
0210 .dbline 160
0210 ; CommandReply(RESP_INVALID_DATA);
0210 ; }
0210 ; else if(TEST && p_buf->Address != 0xff)
0210 00C0 xjmp L46
0212 L46:
0212 L39:
0212 .dbline -2
0212 L37:
0212 .dbline 0 ; func end
0212 2196 adiw R28,1
0214 0C940000 xjmp pop_xgsetF00C
0218 .dbsym r count 10 i
0218 .dbsym r point 22 i
0218 .dbsym r p_buf 20 pS[StructOfProtocol]
0218 .dbend
0218 .dbfunc e GET_USER _GET_USER fV
0218 ; communication -> R20,R21
0218 ; count -> R12,R13
0218 ; point -> R10,R11
0218 ; p_buf -> R22,R23
.even
0218 _GET_USER::
0218 0E940000 xcall push_xgsetF03C
021C 2197 sbiw R28,1
021E .dbline -1
021E .dbline 174
021E ; CommandReply(RESP_INVALID_DATA);
021E ; }
021E ; //------------------------------------------------------------------------------
021E ; //------------------------------------------------------------------------------
021E ; /*
021E ; 用户楼层授权资料(取控制器门禁时间组)
021E ; 命令码: CMD_GET_USER
021E ; 数据: NONE
021E ;
021E ; 正常回应数据:
021E ; 门禁时间组数据结构
021E ; */
021E ; void GET_USER(void)
021E ; {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?