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

📄 rd_useserialframe_proc.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 003E           ; 
 003E           ;     
 003E           ;     if (!(*(pSFP->InputDataFunc))(&cTempData))              //利用函数指针调用函数
 003E 8E01              movw R16,R28
 0040 0C5F              subi R16,252  ; offset = 4
 0042 1F4F              sbci R17,255
 0044 A48D              ldd R26,z+28
 0046 B58D              ldd R27,z+29
 0048 FD01              movw R30,R26
 004A 00D0              rcall xicall
 004C 0023              tst R16
 004E 09F4              brne L5
 0050           X0:
 0050                   .dbline 152
 0050           ;     {
 0050                   .dbline 153
 0050           ;         return ;
 0050 CAC0              rjmp L4
 0052           L5:
 0052                   .dbline 156
 0052           ;     }
 0052           ;     
 0052           ;     if (cTempActionFlag == NULL)
 0052 2B80              ldd R2,y+3
 0054 2220              tst R2
 0056 39F4              brne L7
 0058           X1:
 0058                   .dbline 157
 0058           ;     {
 0058                   .dbline 158
 0058           ;         pSFP->cXORCheck = 0;
 0058 2224              clr R2
 005A FA01              movw R30,R20
 005C 23A2              std z+35,R2
 005E                   .dbline 159
 005E           ;         pSFP->cFrameSize = 0;
 005E 24A2              std z+36,R2
 0060                   .dbline 160
 0060           ;         SFP_WAIT_FOR_FRAME_HEAD = TRUE;
 0060 8B81              ldd R24,y+3
 0062 8160              ori R24,1
 0064 8B83              std y+3,R24
 0066                   .dbline 161
 0066           ;     }
 0066           L7:
 0066                   .dbline 163
 0066           ;     
 0066           ;     if (SFP_WAIT_FOR_FRAME_HEAD)
 0066 FE01              movw R30,R28
 0068 8381              ldd R24,z+3
 006A 8170              andi R24,1
 006C 09F4              brne X13
 006E 24C0              rjmp L9
 0070           X13:
 0070           X2:
 0070                   .dbline 164
 0070           ;     {
 0070                   .dbline 165
 0070           ;         if (cTempData == pSFP->cHeadByte)
 0070 FA01              movw R30,R20
 0072 208C              ldd R2,z+24
 0074 3C80              ldd R3,y+4
 0076 3214              cp R3,R2
 0078 09F0              breq X14
 007A B5C0              rjmp L4
 007C           X14:
 007C           X3:
 007C                   .dbline 166
 007C           ;         {
 007C                   .dbline 167
 007C           ;             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);
 007C 232D              mov R18,R3
 007E 8B01              movw R16,R22
 0080 CB01              movw R24,R22
 0082 0A96              adiw R24,10
 0084 FC01              movw R30,R24
 0086 A081              ldd R26,z+0
 0088 B181              ldd R27,z+1
 008A FD01              movw R30,R26
 008C 00D0              rcall xicall
 008E                   .dbline 170
 008E           ;             
 008E           ;             
 008E           ;             if (!(pSFP->cFixLength))
 008E FA01              movw R30,R20
 0090 228C              ldd R2,z+26
 0092 2220              tst R2
 0094 21F4              brne L13
 0096           X4:
 0096                   .dbline 171
 0096           ;             {
 0096                   .dbline 173
 0096           ;                 //变长数据帧
 0096           ;                 SFP_WAIT_FOR_FRAME_SIZE = TRUE;
 0096 8B81              ldd R24,y+3
 0098 8260              ori R24,2
 009A 8B83              std y+3,R24
 009C                   .dbline 174
 009C           ;             }
 009C 06C0              rjmp L14
 009E           L13:
 009E                   .dbline 176
 009E           ;             else
 009E           ;             {
 009E                   .dbline 178
 009E           ;                 //固定长度的数据帧
 009E           ;                 SFP_WAIT_FOR_ALL_DATA = TRUE;
 009E 8B81              ldd R24,y+3
 00A0 8460              ori R24,4
 00A2 8B83              std y+3,R24
 00A4                   .dbline 179
 00A4           ;                 pSFP->cFrameSize = pSFP->cFixLength;
 00A4 FA01              movw R30,R20
 00A6 228C              ldd R2,z+26
 00A8 24A2              std z+36,R2
 00AA                   .dbline 180
 00AA           ;             }
 00AA           L14:
 00AA                   .dbline 182
 00AA           ;             
 00AA           ;             SFP_WAIT_FOR_FRAME_HEAD = FALSE;
 00AA 8B81              ldd R24,y+3
 00AC 8E7F              andi R24,254
 00AE 8B83              std y+3,R24
 00B0                   .dbline 183
 00B0           ;             pSFP->cActionFlag = cTempActionFlag;
 00B0 282E              mov R2,R24
 00B2 FA01              movw R30,R20
 00B4 22A2              std z+34,R2
 00B6                   .dbline 185
 00B6           ;             
 00B6           ;         }
 00B6                   .dbline 187
 00B6           ;         
 00B6           ;         return ;
 00B6 97C0              rjmp L4
 00B8           L9:
 00B8                   .dbline 190
 00B8           ;     }
 00B8           ;     
 00B8           ;     if (SFP_WAIT_FOR_FRAME_SIZE)
 00B8 FE01              movw R30,R28
 00BA 8381              ldd R24,z+3
 00BC 8695              lsr R24
 00BE 8170              andi R24,1
 00C0 09F4              brne X15
 00C2 2EC0              rjmp L15
 00C4           X15:
 00C4           X5:
 00C4                   .dbline 191
 00C4           ;     {
 00C4                   .dbline 193
 00C4           ;         
 00C4           ;         if (cTempData > (pQueue->nSize))
 00C4 FB01              movw R30,R22
 00C6 2280              ldd R2,z+2
 00C8 3380              ldd R3,z+3
 00CA 4C80              ldd R4,y+4
 00CC 5524              clr R5
 00CE 2414              cp R2,R4
 00D0 3504              cpc R3,R5
 00D2 50F4              brsh L17
 00D4           X6:
 00D4                   .dbline 194
 00D4           ;         {
 00D4                   .dbline 197
 00D4           ;             //错误的数据帧长度
 00D4           ;            
 00D4           ;             ADT_QUEUE_LET_EMPTY((*pQueue))                  //清空队列
 00D4                   .dbline 197
 00D4 2224              clr R2
 00D6 3324              clr R3
 00D8 3582              std z+5,R3
 00DA 2482              std z+4,R2
 00DC                   .dbline 197
 00DC 3782              std z+7,R3
 00DE 2682              std z+6,R2
 00E0                   .dbline 197
 00E0 3186              std z+9,R3
 00E2 2086              std z+8,R2
 00E4                   .dbline 197
 00E4                   .dbline 199
 00E4           ; 
 00E4           ;             SFP_STOP_ALL_ACTION
 00E4 2B82              std y+3,R2
 00E6                   .dbline 200
 00E6           ;         }
 00E6 18C0              rjmp L18
 00E8           L17:
 00E8                   .dbline 202
 00E8           ;         else
 00E8           ;         {
 00E8                   .dbline 204
 00E8           ;             //有效的数据帧长度
 00E8           ;             pSFP->cFrameSize = cTempData;                   //更新数据帧长度信息
 00E8 2C80              ldd R2,y+4
 00EA FA01              movw R30,R20
 00EC 24A2              std z+36,R2
 00EE                   .dbline 205
 00EE           ;             pSFP->cXORCheck ^= cTempData;
 00EE CF01              movw R24,R30
 00F0 8396              adiw R24,35
 00F2 FC01              movw R30,R24
 00F4 3080              ldd R3,z+0
 00F6 3224              eor R3,R2
 00F8 3082              std z+0,R3
 00FA                   .dbline 207
 00FA           ;             
 00FA           ;             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);     //将该信息添加到缓冲区
 00FA 222D              mov R18,R2
 00FC 8B01              movw R16,R22
 00FE CB01              movw R24,R22
 0100 0A96              adiw R24,10
 0102 5C01              movw R10,R24
 0104 FC01              movw R30,R24
 0106 A081              ldd R26,z+0
 0108 B181              ldd R27,z+1
 010A FD01              movw R30,R26
 010C 00D0              rcall xicall
 010E                   .dbline 210
 010E           ;             
 010E           ;             
 010E           ;             SFP_WAIT_FOR_ALL_DATA = TRUE;
 010E 8B81              ldd R24,y+3
 0110 8460              ori R24,4
 0112 8B83              std y+3,R24
 0114                   .dbline 211
 0114           ;             SFP_WAIT_FOR_FRAME_SIZE = FALSE;        
 0114 8D7F              andi R24,253
 0116 8B83              std y+3,R24
 0118                   .dbline 212
 0118           ;         }
 0118           L18:
 0118                   .dbline 214
 0118           ;         
 0118           ;         pSFP->cActionFlag = cTempActionFlag;
 0118 2B80              ldd R2,y+3
 011A FA01              movw R30,R20
 011C 22A2              std z+34,R2
 011E                   .dbline 215
 011E           ;         return ;
 011E 63C0              rjmp L4
 0120           L15:
 0120                   .dbline 218
 0120           ;     }
 0120           ;     
 0120           ;     if (SFP_WAIT_FOR_ALL_DATA)
 0120 FE01              movw R30,R28
 0122 8381              ldd R24,z+3
 0124 8695              lsr R24
 0126 8695              lsr R24
 0128 8170              andi R24,1
 012A 09F4              brne X16
 012C 5CC0              rjmp L19
 012E           X16:
 012E           X7:
 012E                   .dbline 219
 012E           ;     {
 012E                   .dbline 220
 012E           ;         if ((pQueue->nCount) < (pSFP->cFrameSize))
 012E FA01              movw R30,R20
 0130 24A0              ldd R2,z+36
 0132 3324              clr R3
 0134 FB01              movw R30,R22
 0136 4084              ldd R4,z+8
 0138 5184              ldd R5,z+9
 013A 4214              cp R4,R2
 013C 5304              cpc R5,R3
 013E 88F4              brsh L21
 0140           X8:
 0140                   .dbline 221
 0140           ;         {
 0140                   .dbline 222
 0140           ;             pSFP->cXORCheck ^= cTempData;
 0140 CA01              movw R24,R20

⌨️ 快捷键说明

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