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

📄 rd_useserialframe_proc.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01E2                   .dbfunc s SFP_Check_Frames _SFP_Check_Frames fV
 01E2           ;       pMsgItem -> R22,R23
 01E2           ;         pQueue -> R10,R11
 01E2           ;              n -> y+0
 01E2           ;           pSFP -> R20,R21
                        .even
 01E2           _SFP_Check_Frames:
 01E2 0E940000          xcall push_xgsetF03C
 01E6 A801              movw R20,R16
 01E8 2197              sbiw R28,1
 01EA                   .dbline -1
 01EA                   .dbline 266
 01EA           ;     }
 01EA           ; 
 01EA           ; }
 01EA           ; 
 01EA           ; /***********************************************************
 01EA           ; *   函数说明:数据帧提取检测函数                           *
 01EA           ; *   输入:    串行数据帧检测结构指针                       *
 01EA           ; *   输出:    无                                           *
 01EA           ; *   调用函数:无                                           *
 01EA           ; ***********************************************************/
 01EA           ; static void SFP_Check_Frames(SERIAL_FRAME_PROCESS *pSFP)
 01EA           ; {
 01EA                   .dbline 267
 01EA           ;     uint8 n = 0;
 01EA 2224              clr R2
 01EC 2882              std y+0,R2
 01EE                   .dbline 268
 01EE           ;     MSG_ITEM *pMsgItem = &(pSFP->MsgItem);
 01EE BA01              movw R22,R20
 01F0 6C5E              subi R22,236  ; offset = 20
 01F2 7F4F              sbci R23,255
 01F4                   .dbline 269
 01F4           ;     ADT_QUEUE *pQueue = &(pSFP->FrameBuffer);
 01F4 5A01              movw R10,R20
 01F6                   .dbline 272
 01F6           ;     
 01F6           ;     //将头部去除
 01F6           ;     ADT_GET_DATA_FROM_QUEUE((*pQueue),n);          
 01F6 9E01              movw R18,R28
 01F8 8501              movw R16,R10
 01FA C501              movw R24,R10
 01FC 0C96              adiw R24,12
 01FE FC01              movw R30,R24
 0200 A081              ldd R26,z+0
 0202 B181              ldd R27,z+1
 0204 FD01              movw R30,R26
 0206 0E940000          xcall xicallx
 020A                   .dbline 275
 020A           ;     
 020A           ;     //获取消息长度
 020A           ;     if (!(pSFP->cFixLength))
 020A FA01              movw R30,R20
 020C 228C              ldd R2,z+26
 020E 2220              tst R2
 0210 89F4              brne L32
 0212           X18:
 0212                   .dbline 276
 0212           ;     {
 0212                   .dbline 277
 0212           ;         ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cDataLength));
 0212 9B01              movw R18,R22
 0214 2F5F              subi R18,255  ; offset = 1
 0216 3F4F              sbci R19,255
 0218 8F01              movw R16,R30
 021A A485              ldd R26,z+12
 021C B585              ldd R27,z+13
 021E FD01              movw R30,R26
 0220 0E940000          xcall xicallx
 0224                   .dbline 279
 0224           ;     
 0224           ;         pMsgItem->cDataLength -= 5;
 0224 CB01              movw R24,R22
 0226 0196              adiw R24,1
 0228 6C01              movw R12,R24
 022A FC01              movw R30,R24
 022C 8081              ldd R24,z+0
 022E 8550              subi R24,5
 0230 8083              std z+0,R24
 0232                   .dbline 280
 0232           ;     }
 0232 05C0              xjmp L33
 0234           L32:
 0234                   .dbline 282
 0234           ;     else
 0234           ;     {
 0234                   .dbline 283
 0234           ;         pMsgItem->cDataLength = pSFP->cFixLength - 4;
 0234 FA01              movw R30,R20
 0236 828D              ldd R24,z+26
 0238 8450              subi R24,4
 023A FB01              movw R30,R22
 023C 8183              std z+1,R24
 023E                   .dbline 284
 023E           ;     }
 023E           L33:
 023E                   .dbline 287
 023E           ;     
 023E           ;     //获取指令字
 023E           ;     ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->cCMD));   
 023E 9B01              movw R18,R22
 0240 8501              movw R16,R10
 0242 C501              movw R24,R10
 0244 0C96              adiw R24,12
 0246 6C01              movw R12,R24
 0248 FC01              movw R30,R24
 024A A081              ldd R26,z+0
 024C B181              ldd R27,z+1
 024E FD01              movw R30,R26
 0250 0E940000          xcall xicallx
 0254                   .dbline 289
 0254           ;     
 0254           ;     for (n = 0;n < (pMsgItem->cDataLength);n++)
 0254 2224              clr R2
 0256 2882              std y+0,R2
 0258 14C0              xjmp L37
 025A           L34:
 025A                   .dbline 290
 025A           ;     {
 025A                   .dbline 292
 025A           ;         //依次获取所有数据
 025A           ;         ADT_GET_DATA_FROM_QUEUE((*pQueue),(pMsgItem->pData[n]));
 025A FB01              movw R30,R22
 025C 2280              ldd R2,z+2
 025E 3380              ldd R3,z+3
 0260 2881              ldd R18,y+0
 0262 3327              clr R19
 0264 220D              add R18,R2
 0266 331D              adc R19,R3
 0268 8501              movw R16,R10
 026A C501              movw R24,R10
 026C 0C96              adiw R24,12
 026E 6C01              movw R12,R24
 0270 FC01              movw R30,R24
 0272 A081              ldd R26,z+0
 0274 B181              ldd R27,z+1
 0276 FD01              movw R30,R26
 0278 0E940000          xcall xicallx
 027C                   .dbline 293
 027C           ;     }
 027C           L35:
 027C                   .dbline 289
 027C 8881              ldd R24,y+0
 027E 8F5F              subi R24,255    ; addi 1
 0280 8883              std y+0,R24
 0282           L37:
 0282                   .dbline 289
 0282 FB01              movw R30,R22
 0284 2180              ldd R2,z+1
 0286 3880              ldd R3,y+0
 0288 3214              cp R3,R2
 028A 38F3              brlo L34
 028C           X19:
 028C                   .dbline 295
 028C           ;     
 028C           ;     if (!MsgMapProcess(pSFP->pMsgMap,pMsgItem))
 028C 9F01              movw R18,R30
 028E FA01              movw R30,R20
 0290 0289              ldd R16,z+18
 0292 1389              ldd R17,z+19
 0294 0E940000          xcall _MsgMapProcess
 0298 A02E              mov R10,R16
 029A 0023              tst R16
 029C 01F4              brne L38
 029E           X20:
 029E                   .dbline 296
 029E           ;     {
 029E                   .dbline 299
 029E           ;         //信息未被正确处理
 029E           ;         //有待添加代码
 029E           ;     }                       
 029E           L38:
 029E                   .dbline -2
 029E           L31:
 029E                   .dbline 0 ; func end
 029E 2196              adiw R28,1
 02A0 0C940000          xjmp pop_xgsetF03C
 02A4                   .dbsym r pMsgItem 22 pS[MsgItem]
 02A4                   .dbsym r pQueue 10 pS[AbstructDataTypeQueue]
 02A4                   .dbsym l n 0 c
 02A4                   .dbsym r pSFP 20 pS[SerialFrameProcess]
 02A4                   .dbend
 02A4                   .dbfunc e SPF_Send_MSG _SPF_Send_MSG fc
 02A4           ;           Reg2 -> R20,R21
 02A4           ;           Reg8 -> R22,R23
 02A4           ;             n1 -> R12
 02A4           ;     cXORCheck0 -> R10
 02A4           ;         Length -> R14
 02A4           ;           pMSG -> y+14
 02A4           ;           cCMD -> R12
 02A4           ;           pSFP -> y+10
                        .even
 02A4           _SPF_Send_MSG::
 02A4 0E940000          xcall push_arg4
 02A8 0E940000          xcall push_xgsetF0FC
 02AC C22E              mov R12,R18
 02AE E888              ldd R14,y+16
 02B0                   .dbline -1
 02B0                   .dbline 310
 02B0           ; }
 02B0           ; 
 02B0           ; /***********************************************************
 02B0           ; *   函数说明:消息发送函数                                 *
 02B0           ; *   输入:    串行数据帧检测结构指针,指令,消息,消息长度 *
 02B0           ; *   输出:    TRUE                                         *
 02B0           ; *   调用函数:无                                           *
 02B0           ; ***********************************************************/
 02B0           ; BOOL SPF_Send_MSG(SERIAL_FRAME_PROCESS *pSFP,
 02B0           ;                   uint8 cCMD,uint8 *pMSG,uint8 Length)
 02B0           ; {
 02B0                   .dbline 311
 02B0           ;     uint8 n = 0;
 02B0                   .dbline 312
 02B0           ;     uint8 cXORCheck = 0;
 02B0 AA24              clr R10
 02B2                   .dbline 314
 02B2           ;     
 02B2           ;     (*(pSFP->OutputDataFunc))(pSFP->cHeadByte);             //发送消息头部
 02B2 EA85              ldd R30,y+10
 02B4 FB85              ldd R31,y+11
 02B6 008D              ldd R16,z+24
 02B8 AF01              movw R20,R30
 02BA 425E              subi R20,226  ; offset = 30
 02BC 5F4F              sbci R21,255
 02BE FA01              movw R30,R20
 02C0 A081              ldd R26,z+0
 02C2 B181              ldd R27,z+1
 02C4 FD01              movw R30,R26
 02C6 0E940000          xcall xicallx
 02CA                   .dbline 316
 02CA           ;     
 02CA           ;     if (!(pSFP->cFixLength))
 02CA EA85              ldd R30,y+10
 02CC FB85              ldd R31,y+11
 02CE 228C              ldd R2,z+26
 02D0 2220              tst R2
 02D2 59F4              brne L41
 02D4           X21:
 02D4                   .dbline 317
 02D4           ;     {
 02D4                   .dbline 318
 02D4           ;         (*(pSFP->OutputDataFunc))((Length+5));              //发送消息长度
 02D4 0E2D              mov R16,R14
 02D6 0B5F              subi R16,251    ; addi 5
 02D8 FA01              movw R30,R20
 02DA A081              ldd R26,z+0
 02DC B181              ldd R27,z+1
 02DE FD01              movw R30,R26
 02E0 0E940000          xcall xicallx
 02E4                   .dbline 319
 02E4           ;         cXORCheck ^= (Length + 5);
 02E4 8E2D              mov R24,R14
 02E6 8B5F              subi R24,251    ; addi 5
 02E8 A826              eor R10,R24
 02EA                   .dbline 320
 02EA           ;     }
 02EA           L41:
 02EA                   .dbline 322
 02EA           ;     
 02EA           ;     (*(pSFP->OutputDataFunc))(cCMD);                        //发送指令字节
 02EA 0C2D              mov R16,R12
 02EC FA01              movw R30,R20
 02EE A081              ldd R26,z+0
 02F0 B181              ldd R27,z+1
 02F2 FD01              movw R30,R26
 02F4 0E940000          xcall xicallx
 02F8                   .dbline 323
 02F8           ;     cXORCheck ^= cCMD;
 02F8 AC24              eor R10,R12
 02FA                   .dbline 325
 02FA           ; 
 02FA           ;     for (n = 0;n < Length;n++)
 02FA CC24              clr R12
 02FC 12C0              xjmp L46
 02FE           L43:
 02FE                   .dbline 326
 02FE           ;     {
 02FE                   .dbline 327
 02FE           ;         (*(pSFP->OutputDataFunc))(pMSG[n]);                 //发送消息本体
 02FE 6C2D              mov R22,R12
 0300 7727              clr R23
 0302 0E84              ldd R0,y+14
 0304 1F84              ldd R1,y+15
 0306 600D              add R22,R0
 0308 711D              adc R23,R1
 030A FB01              movw R30,R22
 030C 0081              ldd R16,z+0
 030E FA01              movw R30,R20
 0310 A081              ldd R26,z+0
 0312 B181              ldd R27,z+1
 0314 FD01              movw R30,R26
 0316 0E940000          xcall xicallx
 031A                   .dbline 328
 031A           ;         cXORCheck ^= pMSG[n];
 031A FB01              movw R30,R22
 031C 2080              ldd R2,z+0
 031E A224              eor R10,R2
 0320                   .dbline 329
 0320           ;     }
 0320           L44:
 0320                   .dbline 325
 0320 C394              inc R12
 0322           L46:
 0322                   .dbline 325
 0322 CE14              cp R12,R14
 0324 60F3              brlo L43
 0326           X22:
 0326                   .dbline 331
 0326           ;     
 0326           ;     (*(pSFP->OutputDataFunc))(cXORCheck);                   //发送校验字节
 0326 0A2D              mov R16,R10
 0328 FA01              movw R30,R20
 032A A081              ldd R26,z+0
 032C B181              ldd R27,z+1
 032E FD01              movw R30,R26
 0330 0E940000          xcall xicallx
 0334                   .dbline 332
 0334           ;     (*(pSFP->OutputDataFunc))(pSFP->cEndByte);              //发送消息头部
 0334 EA85              ldd R30,y+10
 0336 FB85              ldd R31,y+11
 0338 018D              ldd R16,z+25
 033A FA01              movw R30,R20
 033C A081              ldd R26,z+0
 033E B181              ldd R27,z+1
 0340 FD01              movw R30,R26
 0342 0E940000          xcall xicallx
 0346                   .dbline 334
 0346           ;     
 0346           ;     return TRUE;
 0346 01E0              ldi R16,1
 0348                   .dbline -2
 0348           L40:
 0348                   .dbline 0 ; func end
 0348 0E940000          xcall pop_xgsetF0FC
 034C 2496              adiw R28,4
 034E 0895              ret
 0350                   .dbsym r Reg2 20 pV
 0350                   .dbsym r Reg8 22 pV
 0350                   .dbsym r n1 12 c
 0350                   .dbsym r cXORCheck0 10 c
 0350                   .dbsym r Length 14 c
 0350                   .dbsym l pMSG 14 pc
 0350                   .dbsym r cCMD 12 c
 0350                   .dbsym l pSFP 10 pS[SerialFrameProcess]
 0350                   .dbend
 0350           ; }
 0350           ; 

⌨️ 快捷键说明

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