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