⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rd_useserialframe_proc.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0142 8396              adiw R24,35
 0144 2C80              ldd R2,y+4
 0146 FC01              movw R30,R24
 0148 3080              ldd R3,z+0
 014A 3224              eor R3,R2
 014C 3082              std z+0,R3
 014E                   .dbline 223
 014E           ;             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);     //将该信息添加到缓冲区
 014E 222D              mov R18,R2
 0150 8B01              movw R16,R22
 0152 CB01              movw R24,R22
 0154 0A96              adiw R24,10
 0156 5C01              movw R10,R24
 0158 FC01              movw R30,R24
 015A A081              ldd R26,z+0
 015C B181              ldd R27,z+1
 015E FD01              movw R30,R26
 0160 00D0              rcall xicall
 0162                   .dbline 225
 0162           ;             
 0162           ;         }
 0162           L21:
 0162                   .dbline 227
 0162           ;         
 0162           ;         if ((pQueue->nCount) == ((pSFP->cFrameSize) - 1))
 0162 FA01              movw R30,R20
 0164 84A1              ldd R24,z+36
 0166 8150              subi R24,1
 0168 9927              clr R25
 016A FB01              movw R30,R22
 016C 2084              ldd R2,z+8
 016E 3184              ldd R3,z+9
 0170 2816              cp R2,R24
 0172 3906              cpc R3,R25
 0174 E1F4              brne L23
 0176           X9:
 0176                   .dbline 228
 0176           ;         {
 0176                   .dbline 229
 0176           ;             if (pSFP->cXORCheck)
 0176 FA01              movw R30,R20
 0178 23A0              ldd R2,z+35
 017A 2220              tst R2
 017C 09F4              brne X17
 017E 33C0              rjmp L4
 0180           X17:
 0180           X10:
 0180                   .dbline 230
 0180           ;             {
 0180                   .dbline 233
 0180           ;                 //XOR校验错误
 0180           ;                 //错误的数据帧长度
 0180           ;                 ADT_QUEUE_LET_EMPTY((*pQueue))              //清空队列
 0180                   .dbline 233
 0180 2224              clr R2
 0182 3324              clr R3
 0184 FB01              movw R30,R22
 0186 3582              std z+5,R3
 0188 2482              std z+4,R2
 018A                   .dbline 233
 018A 3782              std z+7,R3
 018C 2682              std z+6,R2
 018E                   .dbline 233
 018E 3186              std z+9,R3
 0190 2086              std z+8,R2
 0192                   .dbline 233
 0192                   .dbline 235
 0192           ;                 
 0192           ;                 SFP_STOP_ALL_ACTION
 0192 2B82              std y+3,R2
 0194                   .dbline 237
 0194           ;                 
 0194           ;                 pSFP->cActionFlag = cTempActionFlag;
 0194 FA01              movw R30,R20
 0196 22A2              std z+34,R2
 0198                   .dbline 238
 0198           ;                 cTempData = SFP_ERROR_XOR;
 0198 81E0              ldi R24,1
 019A 8C83              std y+4,R24
 019C                   .dbline 239
 019C           ;                 SPF_Send_MSG(pSFP,SFP_CMD_ERROR,&cTempData,1);
 019C 8A83              std y+2,R24
 019E CE01              movw R24,R28
 01A0 0496              adiw R24,4
 01A2 9983              std y+1,R25
 01A4 8883              std y+0,R24
 01A6 2DEE              ldi R18,237
 01A8 8F01              movw R16,R30
 01AA 87D0              rcall _SPF_Send_MSG
 01AC                   .dbline 240
 01AC           ;                 return ;
 01AC 1CC0              rjmp L4
 01AE           L23:
 01AE                   .dbline 247
 01AE           ;             }
 01AE           ;             else
 01AE           ;             {
 01AE           ;                 //ReceiveData = cTempData;
 01AE           ;             }
 01AE           ;         }
 01AE           ;         else if ((pQueue->nCount) == (pSFP->cFrameSize))
 01AE FA01              movw R30,R20
 01B0 24A0              ldd R2,z+36
 01B2 3324              clr R3
 01B4 FB01              movw R30,R22
 01B6 4084              ldd R4,z+8
 01B8 5184              ldd R5,z+9
 01BA 4214              cp R4,R2
 01BC 5304              cpc R5,R3
 01BE 99F4              brne L4
 01C0           X11:
 01C0                   .dbline 248
 01C0           ;         {
 01C0                   .dbline 250
 01C0           ;             //所有的数据都添加完成
 01C0           ;             if (cTempData == pSFP->cEndByte)
 01C0 FA01              movw R30,R20
 01C2 218C              ldd R2,z+25
 01C4 3C80              ldd R3,y+4
 01C6 3214              cp R3,R2
 01C8 11F4              brne L29
 01CA           X12:
 01CA                   .dbline 251
 01CA           ;             {
 01CA                   .dbline 253
 01CA           ;                 //获得了所有的数据,并且数据帧正确
 01CA           ;                 SFP_Check_Frames(pSFP);                     //进行数据帧检测
 01CA 8F01              movw R16,R30
 01CC 0ED0              rcall _SFP_Check_Frames
 01CE                   .dbline 254
 01CE           ;             }                
 01CE           L29:
 01CE                   .dbline 256
 01CE           ;             
 01CE           ;             ADT_QUEUE_LET_EMPTY((*pQueue))                  //清空队列
 01CE                   .dbline 256
 01CE 2224              clr R2
 01D0 3324              clr R3
 01D2 FB01              movw R30,R22
 01D4 3582              std z+5,R3
 01D6 2482              std z+4,R2
 01D8                   .dbline 256
 01D8 3782              std z+7,R3
 01DA 2682              std z+6,R2
 01DC                   .dbline 256
 01DC 3186              std z+9,R3
 01DE 2086              std z+8,R2
 01E0                   .dbline 256
 01E0                   .dbline 258
 01E0           ;             
 01E0           ;             SFP_STOP_ALL_ACTION
 01E0 2B82              std y+3,R2
 01E2                   .dbline 259
 01E2           ;             pSFP->cActionFlag = cTempActionFlag;
 01E2 FA01              movw R30,R20
 01E4 22A2              std z+34,R2
 01E6                   .dbline 261
 01E6           ;             
 01E6           ;             return ;
 01E6                   .dbline 266
 01E6           ;         }
 01E6           ;         
 01E6           ;         
 01E6           ;         
 01E6           ;         return ;
 01E6           L19:
 01E6                   .dbline -2
 01E6           L4:
 01E6                   .dbline 0 ; func end
 01E6 2596              adiw R28,5
 01E8 00C0              rjmp pop_xgsetF00C
 01EA                   .dbsym l cTempData 4 c
 01EA                   .dbsym r pQueue 22 pS[AbstructDataTypeQueue]
 01EA                   .dbsym l cTempActionFlag 3 c
 01EA                   .dbsym r pSFP 20 pS[SerialFrameProcess]
 01EA                   .dbend
 01EA                   .dbfunc s SFP_Check_Frames _SFP_Check_Frames fV
 01EA           ;      cTempData -> y+4
 01EA           ;       pMsgItem -> R22,R23
 01EA           ;         pQueue -> R10,R11
 01EA           ;              n -> y+3
 01EA           ;           pSFP -> R20,R21
                        .even
 01EA           _SFP_Check_Frames:
 01EA 00D0              rcall push_xgsetF03C
 01EC A801              movw R20,R16
 01EE 2597              sbiw R28,5
 01F0                   .dbline -1
 01F0                   .dbline 278
 01F0           ;     }
 01F0           ; 
 01F0           ; }
 01F0           ; 
 01F0           ; /***********************************************************
 01F0           ; *   函数说明:数据帧提取检测函数                           *
 01F0           ; *   输入:    串行数据帧检测结构指针                       *
 01F0           ; *   输出:    无                                           *
 01F0           ; *   调用函数:无                                           *
 01F0           ; ***********************************************************/
 01F0           ; static void SFP_Check_Frames(SERIAL_FRAME_PROCESS *pSFP)
 01F0           ; {
 01F0                   .dbline 279
 01F0           ;     uint8 n = 0;
 01F0 2224              clr R2
 01F2 2B82              std y+3,R2
 01F4                   .dbline 280
 01F4           ;     uint8 cTempData = 0;
 01F4 2C82              std y+4,R2
 01F6                   .dbline 281
 01F6           ;     MSG_ITEM *pMsgItem = &(pSFP->MsgItem);
 01F6 BA01              movw R22,R20
 01F8 6C5E              subi R22,236  ; offset = 20
 01FA 7F4F              sbci R23,255
 01FC                   .dbline 282
 01FC           ;     ADT_QUEUE *pQueue = &(pSFP->FrameBuffer);
 01FC 5A01              movw R10,R20
 01FE                   .dbline 285
 01FE           ;     
 01FE           ;     //将头部去除
 01FE           ;     ADT_GET_DATA_FROM_QUEUE((*pQueue),n);          
 01FE 9E01              movw R18,R28
 0200 2D5F              subi R18,253  ; offset = 3
 0202 3F4F              sbci R19,255
 0204 8501              movw R16,R10
 0206 C501              movw R24,R10
 0208 0C96              adiw R24,12
 020A FC01              movw R30,R24
 020C A081              ldd R26,z+0
 020E B181              ldd R27,z+1
 0210 FD01              movw R30,R26
 0212 00D0              rcall xicall
 0214                   .dbline 288
 0214           ;     
 0214           ;     //获取消息长度
 0214           ;     if (!(pSFP->cFixLength))
 0214 FA01              movw R30,R20
 0216 228C              ldd R2,z+26
 0218 2220              tst R2
 021A 81F4              brne L32
 021C           X18:
 021C                   .dbline 289
 021C           ;     {
 021C                   .dbline 290
 021C           ;         ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cDataLength));
 021C 9B01              movw R18,R22
 021E 2F5F              subi R18,255  ; offset = 1
 0220 3F4F              sbci R19,255
 0222 8F01              movw R16,R30
 0224 A485              ldd R26,z+12
 0226 B585              ldd R27,z+13
 0228 FD01              movw R30,R26
 022A 00D0              rcall xicall
 022C                   .dbline 292
 022C           ;     
 022C           ;         pMsgItem->cDataLength -= 5;
 022C CB01              movw R24,R22
 022E 0196              adiw R24,1
 0230 6C01              movw R12,R24
 0232 FC01              movw R30,R24
 0234 8081              ldd R24,z+0
 0236 8550              subi R24,5
 0238 8083              std z+0,R24
 023A                   .dbline 293
 023A           ;     }
 023A 05C0              rjmp L33
 023C           L32:
 023C                   .dbline 295
 023C           ;     else
 023C           ;     {
 023C                   .dbline 296
 023C           ;         pMsgItem->cDataLength = pSFP->cFixLength - 4;
 023C FA01              movw R30,R20
 023E 828D              ldd R24,z+26
 0240 8450              subi R24,4
 0242 FB01              movw R30,R22

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -