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

📄 model.lst

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
     221 818B      LDD	R24,Y+3
     222 6084      ORI	R24,4
     223 838B      STD	Y+3,R24
(0211)             SFP_WAIT_FOR_FRAME_SIZE = FALSE;        
     224 7F8D      ANDI	R24,0xFD
     225 838B      STD	Y+3,R24
(0212)         }
(0213)         
(0214)         pSFP->cActionFlag = cTempActionFlag;
     226 802B      LDD	R2,Y+3
     227 01FA      MOVW	R30,R20
     228 A222      STD	Z+34,R2
(0215)         return ;
     229 C063      RJMP	0x028D
(0216)     }
(0217)     
(0218)     if (SFP_WAIT_FOR_ALL_DATA)
     22A 01FE      MOVW	R30,R28
     22B 8183      LDD	R24,Z+3
     22C 9586      LSR	R24
     22D 9586      LSR	R24
     22E 7081      ANDI	R24,1
     22F F409      BNE	0x0231
     230 C05C      RJMP	0x028D
(0219)     {
(0220)         if ((pQueue->nCount) < (pSFP->cFrameSize))
     231 01FA      MOVW	R30,R20
     232 A024      LDD	R2,Z+36
     233 2433      CLR	R3
     234 01FB      MOVW	R30,R22
     235 8440      LDD	R4,Z+8
     236 8451      LDD	R5,Z+9
     237 1442      CP	R4,R2
     238 0453      CPC	R5,R3
     239 F488      BCC	0x024B
(0221)         {
(0222)             pSFP->cXORCheck ^= cTempData;
     23A 01CA      MOVW	R24,R20
     23B 9683      ADIW	R24,0x23
     23C 802C      LDD	R2,Y+4
     23D 01FC      MOVW	R30,R24
     23E 8030      LDD	R3,Z+0
     23F 2432      EOR	R3,R2
     240 8230      STD	Z+0,R3
(0223)             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);     //将该信息添加到缓冲区
     241 2D22      MOV	R18,R2
     242 018B      MOVW	R16,R22
     243 01CB      MOVW	R24,R22
     244 960A      ADIW	R24,0xA
     245 015C      MOVW	R10,R24
     246 01FC      MOVW	R30,R24
     247 81A0      LDD	R26,Z+0
     248 81B1      LDD	R27,Z+1
     249 01FD      MOVW	R30,R26
     24A D84D      RCALL	xicall
(0224)             
(0225)         }
(0226)         
(0227)         if ((pQueue->nCount) == ((pSFP->cFrameSize) - 1))
     24B 01FA      MOVW	R30,R20
     24C A184      LDD	R24,Z+36
     24D 5081      SUBI	R24,1
     24E 2799      CLR	R25
     24F 01FB      MOVW	R30,R22
     250 8420      LDD	R2,Z+8
     251 8431      LDD	R3,Z+9
     252 1628      CP	R2,R24
     253 0639      CPC	R3,R25
     254 F4E1      BNE	0x0271
(0228)         {
(0229)             if (pSFP->cXORCheck)
     255 01FA      MOVW	R30,R20
     256 A023      LDD	R2,Z+35
     257 2022      TST	R2
     258 F409      BNE	0x025A
     259 C033      RJMP	0x028D
(0230)             {
(0231)                 //XOR校验错误
(0232)                 //错误的数据帧长度
(0233)                 ADT_QUEUE_LET_EMPTY((*pQueue))              //清空队列
     25A 2422      CLR	R2
     25B 2433      CLR	R3
     25C 01FB      MOVW	R30,R22
     25D 8235      STD	Z+5,R3
     25E 8224      STD	Z+4,R2
     25F 8237      STD	Z+7,R3
     260 8226      STD	Z+6,R2
     261 8631      STD	Z+9,R3
     262 8620      STD	Z+8,R2
(0234)                 
(0235)                 SFP_STOP_ALL_ACTION
     263 822B      STD	Y+3,R2
(0236)                 
(0237)                 pSFP->cActionFlag = cTempActionFlag;
     264 01FA      MOVW	R30,R20
     265 A222      STD	Z+34,R2
(0238)                 cTempData = SFP_ERROR_XOR;
     266 E081      LDI	R24,1
     267 838C      STD	Y+4,R24
(0239)                 SPF_Send_MSG(pSFP,SFP_CMD_ERROR,&cTempData,1);
     268 838A      STD	Y+2,R24
     269 01CE      MOVW	R24,R28
     26A 9604      ADIW	R24,4
     26B 8399      STD	Y+1,R25
     26C 8388      STD	Y+0,R24
     26D EE2D      LDI	R18,0xED
     26E 018F      MOVW	R16,R30
     26F D087      RCALL	_SPF_Send_MSG
(0240)                 return ;
     270 C01C      RJMP	0x028D
(0241)             }
(0242)             else
(0243)             {
(0244)                 //ReceiveData = cTempData;
(0245)             }
(0246)         }
(0247)         else if ((pQueue->nCount) == (pSFP->cFrameSize))
     271 01FA      MOVW	R30,R20
     272 A024      LDD	R2,Z+36
     273 2433      CLR	R3
     274 01FB      MOVW	R30,R22
     275 8440      LDD	R4,Z+8
     276 8451      LDD	R5,Z+9
     277 1442      CP	R4,R2
     278 0453      CPC	R5,R3
     279 F499      BNE	0x028D
(0248)         {
(0249)             //所有的数据都添加完成
(0250)             if (cTempData == pSFP->cEndByte)
     27A 01FA      MOVW	R30,R20
     27B 8C21      LDD	R2,Z+25
     27C 803C      LDD	R3,Y+4
     27D 1432      CP	R3,R2
     27E F411      BNE	0x0281
(0251)             {
(0252)                 //获得了所有的数据,并且数据帧正确
(0253)                 SFP_Check_Frames(pSFP);                     //进行数据帧检测
     27F 018F      MOVW	R16,R30
     280 D00E      RCALL	RD_UseSerialFrame_PROC.c:SFP_Check_Frames
(0254)             }                
(0255)             
(0256)             ADT_QUEUE_LET_EMPTY((*pQueue))                  //清空队列
     281 2422      CLR	R2
     282 2433      CLR	R3
     283 01FB      MOVW	R30,R22
     284 8235      STD	Z+5,R3
     285 8224      STD	Z+4,R2
     286 8237      STD	Z+7,R3
     287 8226      STD	Z+6,R2
     288 8631      STD	Z+9,R3
     289 8620      STD	Z+8,R2
(0257)             
(0258)             SFP_STOP_ALL_ACTION
     28A 822B      STD	Y+3,R2
(0259)             pSFP->cActionFlag = cTempActionFlag;
     28B 01FA      MOVW	R30,R20
     28C A222      STD	Z+34,R2
(0260)             
(0261)             return ;
(0262)         }
(0263)         
(0264)         
(0265)         
(0266)         return ;
     28D 9625      ADIW	R28,5
     28E C7F0      RJMP	pop_xgsetF00C
RD_UseSerialFrame_PROC.c:SFP_Check_Frames:
_SFP_Check_Frames:
  cTempData            --> Y,+4
  pMsgItem             --> R22
  pQueue               --> R10
  n                    --> Y,+3
  pSFP                 --> R20
     28F D7F6      RCALL	push_xgsetF03C
     290 01A8      MOVW	R20,R16
     291 9725      SBIW	R28,5
(0267)     }
(0268) 
(0269) }
(0270) 
(0271) /***********************************************************
(0272) *   函数说明:数据帧提取检测函数                           *
(0273) *   输入:    串行数据帧检测结构指针                       *
(0274) *   输出:    无                                           *
(0275) *   调用函数:无                                           *
(0276) ***********************************************************/
(0277) static void SFP_Check_Frames(SERIAL_FRAME_PROCESS *pSFP)
(0278) {
(0279)     uint8 n = 0;
     292 2422      CLR	R2
     293 822B      STD	Y+3,R2
(0280)     uint8 cTempData = 0;
     294 822C      STD	Y+4,R2
(0281)     MSG_ITEM *pMsgItem = &(pSFP->MsgItem);
     295 01BA      MOVW	R22,R20
     296 5E6C      SUBI	R22,0xEC
     297 4F7F      SBCI	R23,0xFF
(0282)     ADT_QUEUE *pQueue = &(pSFP->FrameBuffer);
     298 015A      MOVW	R10,R20
(0283)     
(0284)     //将头部去除
(0285)     ADT_GET_DATA_FROM_QUEUE((*pQueue),n);          
     299 019E      MOVW	R18,R28
     29A 5F2D      SUBI	R18,0xFD
     29B 4F3F      SBCI	R19,0xFF
     29C 0185      MOVW	R16,R10
     29D 01C5      MOVW	R24,R10
     29E 960C      ADIW	R24,0xC
     29F 01FC      MOVW	R30,R24
     2A0 81A0      LDD	R26,Z+0
     2A1 81B1      LDD	R27,Z+1
     2A2 01FD      MOVW	R30,R26
     2A3 D7F4      RCALL	xicall
(0286)     
(0287)     //获取消息长度
(0288)     if (!(pSFP->cFixLength))
     2A4 01FA      MOVW	R30,R20
     2A5 8C22      LDD	R2,Z+26
     2A6 2022      TST	R2
     2A7 F481      BNE	0x02B8
(0289)     {
(0290)         ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cDataLength));
     2A8 019B      MOVW	R18,R22
     2A9 5F2F      SUBI	R18,0xFF
     2AA 4F3F      SBCI	R19,0xFF
     2AB 018F      MOVW	R16,R30
     2AC 85A4      LDD	R26,Z+12
     2AD 85B5      LDD	R27,Z+13
     2AE 01FD      MOVW	R30,R26
     2AF D7E8      RCALL	xicall
(0291)     
(0292)         pMsgItem->cDataLength -= 5;
     2B0 01CB      MOVW	R24,R22
     2B1 9601      ADIW	R24,1
     2B2 016C      MOVW	R12,R24
     2B3 01FC      MOVW	R30,R24
     2B4 8180      LDD	R24,Z+0
     2B5 5085      SUBI	R24,5
     2B6 8380      STD	Z+0,R24
(0293)     }
     2B7 C005      RJMP	0x02BD
(0294)     else
(0295)     {
(0296)         pMsgItem->cDataLength = pSFP->cFixLength - 4;
     2B8 01FA      MOVW	R30,R20
     2B9 8D82      LDD	R24,Z+26
     2BA 5084      SUBI	R24,4
     2BB 01FB      MOVW	R30,R22
     2BC 8381      STD	Z+1,R24
(0297)     }
(0298)     
(0299)     //获取指令字
(0300)     ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cCMD));   
     2BD 019B      MOVW	R18,R22
     2BE 0185      MOVW	R16,R10
     2BF 01C5      MOVW	R24,R10
     2C0 960C      ADIW	R24,0xC
     2C1 016C      MOVW	R12,R24
     2C2 01FC      MOVW	R30,R24
     2C3 81A0      LDD	R26,Z+0
     2C4 81B1      LDD	R27,Z+1
     2C5 01FD      MOVW	R30,R26
     2C6 D7D1      RCALL	xicall
(0301)     
(0302)     for (n = 0;n < (pMsgItem->cDataLength);n++)
     2C7 2422      CLR	R2
     2C8 822B      STD	Y+3,R2
     2C9 C013      RJMP	0x02DD
(0303)     {
(0304)         //依次获取所有数据
(0305)         ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->pData[n]));
     2CA 01FB      MOVW	R30,R22
     2CB 8022      LDD	R2,Z+2
     2CC 8033      LDD	R3,Z+3
     2CD 812B      LDD	R18,Y+3
     2CE 2733      CLR	R19
     2CF 0D22      ADD	R18,R2
     2D0 1D33      ADC	R19,R3
     2D1 0185      MOVW	R16,R10
     2D2 01C5      MOVW	R24,R10
     2D3 960C      ADIW	R24,0xC
     2D4 016C      MOVW	R12,R24
     2D5 01FC      MOVW	R30,R24
     2D6 81A0      LDD	R26,Z+0
     2D7 81B1      LDD	R27,Z+1
     2D8 01FD      MOVW	R30,R26
     2D9 D7BE      RCALL	xicall
     2DA 818B      LDD	R24,Y+3
     2DB 5F8F      SUBI	R24,0xFF
     2DC 838B      STD	Y+3,R24
     2DD 01FB      MOVW	R30,R22
     2DE 8021      LDD	R2,Z+1
     2DF 803B      LDD	R3,Y+3
     2E0 1432      CP	R3,R2
     2E1 F340      BCS	0x02CA
(0306)     }
(0307)     
(0308)     if (!MsgMapProcess(pSFP->pMsgMap,pMsgItem))
     2E2 019F      MOVW	R18,R30
     2E3 01FA      MOVW	R30,R20
     2E4 8902      LDD	R16,Z+18
     2E5 8913      LDD	R17,Z+19
     2E6 DDB4      RCALL	_MsgMapProcess
     2E7 2EA0      MOV	R10,R16
     2E8 2300      TST	R16
     2E9 F459      BNE	0x02F5
(0309)     {
(0310)         //信息未被正确处理
(0311)         //有待添加代码
(0312)         cTempData = SFP_ERROR_CMD_ERROR;
     2EA 2422      CLR	R2
     2EB 822C      STD	Y+4,R2
(0313)         SPF_Send_MSG(pSFP,SFP_CMD_ERROR,&cTempData,1);
     2EC E081      LDI	R24,1
     2ED 838A      STD	Y+2,R24
     2EE 01CE      MOVW	R24,R28
     2EF 9604      ADIW	R24,4
     2F0 8399      STD	Y+1,R25
     2F1 8388      STD	Y+0,R24
     2F2 EE2D      LDI	R18,0xED
     2F3 018A      MOVW	R16,R20
     2F4 D002      RCALL	_SPF_Send_MSG
(0314)     }                       
     2F5 9625      ADIW	R28,5
     2F6 C798      RJMP	pop_xgsetF03C
_SPF_Send_MSG:
  Reg2                 --> R20
  Reg8                 --> R22
  n1                   --> R12
  cXORCheck0           --> R10
  Length               --> R14
  pMSG                 --> Y,+14
  cCMD                 --> R12
  pSFP                 --> Y,+10
     2F7 D71D      RCALL	push_arg4
     2F8 D76A      RCALL	push_xgsetF0FC
     2F9 2EC2      MOV	R12,R18
     2FA 88E8      LDD	R14,Y+16
(0315) }
(0316) 
(0317) /***********************************************************
(0318) *   函数说明:消息发送函数                                 *
(0319) *   输入:    串行数据帧检测结构指针,指令,消息,消息长度 *
(0320) *   输出:    TRUE                                         *
(0321) *   调用函数:无                                           *
(0322) ***********************************************************/
(0323) BOOL SPF_Send_MSG(SERIAL_FRAME_PROCESS *pSFP,
(0324)                   uint8 cCMD,uint8 *pMSG,uint8 Length)
(0325) {

⌨️ 快捷键说明

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