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

📄 rd_useserialframe_proc.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 0244 8183              std z+1,R24
 0246                   .dbline 297
 0246           ;     }
 0246           L33:
 0246                   .dbline 300
 0246           ;     
 0246           ;     //获取指令字
 0246           ;     ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cCMD));   
 0246 9B01              movw R18,R22
 0248 8501              movw R16,R10
 024A C501              movw R24,R10
 024C 0C96              adiw R24,12
 024E 6C01              movw R12,R24
 0250 FC01              movw R30,R24
 0252 A081              ldd R26,z+0
 0254 B181              ldd R27,z+1
 0256 FD01              movw R30,R26
 0258 00D0              rcall xicall
 025A                   .dbline 302
 025A           ;     
 025A           ;     for (n = 0;n < (pMsgItem->cDataLength);n++)
 025A 2224              clr R2
 025C 2B82              std y+3,R2
 025E 13C0              rjmp L37
 0260           L34:
 0260                   .dbline 303
 0260           ;     {
 0260                   .dbline 305
 0260           ;         //依次获取所有数据
 0260           ;         ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->pData[n]));
 0260 FB01              movw R30,R22
 0262 2280              ldd R2,z+2
 0264 3380              ldd R3,z+3
 0266 2B81              ldd R18,y+3
 0268 3327              clr R19
 026A 220D              add R18,R2
 026C 331D              adc R19,R3
 026E 8501              movw R16,R10
 0270 C501              movw R24,R10
 0272 0C96              adiw R24,12
 0274 6C01              movw R12,R24
 0276 FC01              movw R30,R24
 0278 A081              ldd R26,z+0
 027A B181              ldd R27,z+1
 027C FD01              movw R30,R26
 027E 00D0              rcall xicall
 0280                   .dbline 306
 0280           ;     }
 0280           L35:
 0280                   .dbline 302
 0280 8B81              ldd R24,y+3
 0282 8F5F              subi R24,255    ; addi 1
 0284 8B83              std y+3,R24
 0286           L37:
 0286                   .dbline 302
 0286 FB01              movw R30,R22
 0288 2180              ldd R2,z+1
 028A 3B80              ldd R3,y+3
 028C 3214              cp R3,R2
 028E 40F3              brlo L34
 0290           X19:
 0290                   .dbline 308
 0290           ;     
 0290           ;     if (!MsgMapProcess(pSFP->pMsgMap,pMsgItem))
 0290 9F01              movw R18,R30
 0292 FA01              movw R30,R20
 0294 0289              ldd R16,z+18
 0296 1389              ldd R17,z+19
 0298 00D0              rcall _MsgMapProcess
 029A A02E              mov R10,R16
 029C 0023              tst R16
 029E 59F4              brne L38
 02A0           X20:
 02A0                   .dbline 309
 02A0           ;     {
 02A0                   .dbline 312
 02A0           ;         //信息未被正确处理
 02A0           ;         //有待添加代码
 02A0           ;         cTempData = SFP_ERROR_CMD_ERROR;
 02A0 2224              clr R2
 02A2 2C82              std y+4,R2
 02A4                   .dbline 313
 02A4           ;         SPF_Send_MSG(pSFP,SFP_CMD_ERROR,&cTempData,1);
 02A4 81E0              ldi R24,1
 02A6 8A83              std y+2,R24
 02A8 CE01              movw R24,R28
 02AA 0496              adiw R24,4
 02AC 9983              std y+1,R25
 02AE 8883              std y+0,R24
 02B0 2DEE              ldi R18,237
 02B2 8A01              movw R16,R20
 02B4 02D0              rcall _SPF_Send_MSG
 02B6                   .dbline 314
 02B6           ;     }                       
 02B6           L38:
 02B6                   .dbline -2
 02B6           L31:
 02B6                   .dbline 0 ; func end
 02B6 2596              adiw R28,5
 02B8 00C0              rjmp pop_xgsetF03C
 02BA                   .dbsym l cTempData 4 c
 02BA                   .dbsym r pMsgItem 22 pS[MsgItem]
 02BA                   .dbsym r pQueue 10 pS[AbstructDataTypeQueue]
 02BA                   .dbsym l n 3 c
 02BA                   .dbsym r pSFP 20 pS[SerialFrameProcess]
 02BA                   .dbend
 02BA                   .dbfunc e SPF_Send_MSG _SPF_Send_MSG fc
 02BA           ;           Reg2 -> R20,R21
 02BA           ;           Reg8 -> R22,R23
 02BA           ;             n1 -> R12
 02BA           ;     cXORCheck0 -> R10
 02BA           ;         Length -> R14
 02BA           ;           pMSG -> y+14
 02BA           ;           cCMD -> R12
 02BA           ;           pSFP -> y+10
                        .even
 02BA           _SPF_Send_MSG::
 02BA 00D0              rcall push_arg4
 02BC 00D0              rcall push_xgsetF0FC
 02BE C22E              mov R12,R18
 02C0 E888              ldd R14,y+16
 02C2                   .dbline -1
 02C2                   .dbline 325
 02C2           ; }
 02C2           ; 
 02C2           ; /***********************************************************
 02C2           ; *   函数说明:消息发送函数                                 *
 02C2           ; *   输入:    串行数据帧检测结构指针,指令,消息,消息长度 *
 02C2           ; *   输出:    TRUE                                         *
 02C2           ; *   调用函数:无                                           *
 02C2           ; ***********************************************************/
 02C2           ; BOOL SPF_Send_MSG(SERIAL_FRAME_PROCESS *pSFP,
 02C2           ;                   uint8 cCMD,uint8 *pMSG,uint8 Length)
 02C2           ; {
 02C2                   .dbline 326
 02C2           ;     uint8 n = 0;
 02C2                   .dbline 327
 02C2           ;     uint8 cXORCheck = 0;
 02C2 AA24              clr R10
 02C4                   .dbline 329
 02C4           ;     
 02C4           ;     (*(pSFP->OutputDataFunc))(pSFP->cHeadByte);             //发送消息头部
 02C4 EA85              ldd R30,y+10
 02C6 FB85              ldd R31,y+11
 02C8 008D              ldd R16,z+24
 02CA AF01              movw R20,R30
 02CC 425E              subi R20,226  ; offset = 30
 02CE 5F4F              sbci R21,255
 02D0 FA01              movw R30,R20
 02D2 A081              ldd R26,z+0
 02D4 B181              ldd R27,z+1
 02D6 FD01              movw R30,R26
 02D8 00D0              rcall xicall
 02DA                   .dbline 331
 02DA           ;     
 02DA           ;     if (!(pSFP->cFixLength))
 02DA EA85              ldd R30,y+10
 02DC FB85              ldd R31,y+11
 02DE 228C              ldd R2,z+26
 02E0 2220              tst R2
 02E2 51F4              brne L41
 02E4           X21:
 02E4                   .dbline 332
 02E4           ;     {
 02E4                   .dbline 333
 02E4           ;         (*(pSFP->OutputDataFunc))((Length+5));              //发送消息长度
 02E4 0E2D              mov R16,R14
 02E6 0B5F              subi R16,251    ; addi 5
 02E8 FA01              movw R30,R20
 02EA A081              ldd R26,z+0
 02EC B181              ldd R27,z+1
 02EE FD01              movw R30,R26
 02F0 00D0              rcall xicall
 02F2                   .dbline 334
 02F2           ;         cXORCheck ^= (Length + 5);
 02F2 8E2D              mov R24,R14
 02F4 8B5F              subi R24,251    ; addi 5
 02F6 A826              eor R10,R24
 02F8                   .dbline 335
 02F8           ;     }
 02F8           L41:
 02F8                   .dbline 337
 02F8           ;     
 02F8           ;     (*(pSFP->OutputDataFunc))(cCMD);                        //发送指令字节
 02F8 0C2D              mov R16,R12
 02FA FA01              movw R30,R20
 02FC A081              ldd R26,z+0
 02FE B181              ldd R27,z+1
 0300 FD01              movw R30,R26
 0302 00D0              rcall xicall
 0304                   .dbline 338
 0304           ;     cXORCheck ^= cCMD;
 0304 AC24              eor R10,R12
 0306                   .dbline 340
 0306           ; 
 0306           ;     for (n = 0;n < Length;n++)
 0306 CC24              clr R12
 0308 11C0              rjmp L46
 030A           L43:
 030A                   .dbline 341
 030A           ;     {
 030A                   .dbline 342
 030A           ;         (*(pSFP->OutputDataFunc))(pMSG[n]);                 //发送消息本体
 030A 6C2D              mov R22,R12
 030C 7727              clr R23
 030E 0E84              ldd R0,y+14
 0310 1F84              ldd R1,y+15
 0312 600D              add R22,R0
 0314 711D              adc R23,R1
 0316 FB01              movw R30,R22
 0318 0081              ldd R16,z+0
 031A FA01              movw R30,R20
 031C A081              ldd R26,z+0
 031E B181              ldd R27,z+1
 0320 FD01              movw R30,R26
 0322 00D0              rcall xicall
 0324                   .dbline 343
 0324           ;         cXORCheck ^= pMSG[n];
 0324 FB01              movw R30,R22
 0326 2080              ldd R2,z+0
 0328 A224              eor R10,R2
 032A                   .dbline 344
 032A           ;     }
 032A           L44:
 032A                   .dbline 340
 032A C394              inc R12
 032C           L46:
 032C                   .dbline 340
 032C CE14              cp R12,R14
 032E 68F3              brlo L43
 0330           X22:
 0330                   .dbline 346
 0330           ;     
 0330           ;     (*(pSFP->OutputDataFunc))(cXORCheck);                   //发送校验字节
 0330 0A2D              mov R16,R10
 0332 FA01              movw R30,R20
 0334 A081              ldd R26,z+0
 0336 B181              ldd R27,z+1
 0338 FD01              movw R30,R26
 033A 00D0              rcall xicall
 033C                   .dbline 347
 033C           ;     (*(pSFP->OutputDataFunc))(pSFP->cEndByte);              //发送消息头部
 033C EA85              ldd R30,y+10
 033E FB85              ldd R31,y+11
 0340 018D              ldd R16,z+25
 0342 FA01              movw R30,R20
 0344 A081              ldd R26,z+0
 0346 B181              ldd R27,z+1
 0348 FD01              movw R30,R26
 034A 00D0              rcall xicall
 034C                   .dbline 349
 034C           ;     
 034C           ;     return TRUE;
 034C 01E0              ldi R16,1
 034E                   .dbline -2
 034E           L40:
 034E                   .dbline 0 ; func end
 034E 00D0              rcall pop_xgsetF0FC
 0350 2496              adiw R28,4
 0352 0895              ret
 0354                   .dbsym r Reg2 20 pV
 0354                   .dbsym r Reg8 22 pV
 0354                   .dbsym r n1 12 c
 0354                   .dbsym r cXORCheck0 10 c
 0354                   .dbsym r Length 14 c
 0354                   .dbsym l pMSG 14 pc
 0354                   .dbsym r cCMD 12 c
 0354                   .dbsym l pSFP 10 pS[SerialFrameProcess]
 0354                   .dbend
 0354           ; }
 0354           ; 

⌨️ 快捷键说明

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