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

📄 rd_useserialframe_proc.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 009A 21F4              brne L13
 009C           X4:
 009C                   .dbline 160
 009C           ;             {
 009C                   .dbline 162
 009C           ;                 //变长数据帧
 009C           ;                 SFP_WAIT_FOR_FRAME_SIZE = TRUE;
 009C 8881              ldd R24,y+0
 009E 8260              ori R24,2
 00A0 8883              std y+0,R24
 00A2                   .dbline 163
 00A2           ;             }
 00A2 06C0              xjmp L14
 00A4           L13:
 00A4                   .dbline 165
 00A4           ;             else
 00A4           ;             {
 00A4                   .dbline 167
 00A4           ;                 //固定长度的数据帧
 00A4           ;                 SFP_WAIT_FOR_ALL_DATA = TRUE;
 00A4 8881              ldd R24,y+0
 00A6 8460              ori R24,4
 00A8 8883              std y+0,R24
 00AA                   .dbline 168
 00AA           ;                 pSFP->cFrameSize = pSFP->cFixLength;
 00AA FA01              movw R30,R20
 00AC 228C              ldd R2,z+26
 00AE 24A2              std z+36,R2
 00B0                   .dbline 169
 00B0           ;             }
 00B0           L14:
 00B0                   .dbline 171
 00B0           ;             
 00B0           ;             SFP_WAIT_FOR_FRAME_HEAD = FALSE;
 00B0 8881              ldd R24,y+0
 00B2 8E7F              andi R24,254
 00B4 8883              std y+0,R24
 00B6                   .dbline 172
 00B6           ;             pSFP->cActionFlag = cTempActionFlag;
 00B6 282E              mov R2,R24
 00B8 FA01              movw R30,R20
 00BA 22A2              std z+34,R2
 00BC                   .dbline 174
 00BC           ;             
 00BC           ;         }
 00BC                   .dbline 176
 00BC           ;         
 00BC           ;         return ;
 00BC 8FC0              xjmp L4
 00BE           L9:
 00BE                   .dbline 179
 00BE           ;     }
 00BE           ;     
 00BE           ;     if (SFP_WAIT_FOR_FRAME_SIZE)
 00BE FE01              movw R30,R28
 00C0 8081              ldd R24,z+0
 00C2 8695              lsr R24
 00C4 8170              andi R24,1
 00C6 09F4              brne X15
 00C8 2FC0              xjmp L15
 00CA           X15:
 00CA           X5:
 00CA                   .dbline 180
 00CA           ;     {
 00CA                   .dbline 182
 00CA           ;         
 00CA           ;         if (cTempData > (pQueue->nSize))
 00CA FB01              movw R30,R22
 00CC 2280              ldd R2,z+2
 00CE 3380              ldd R3,z+3
 00D0 4980              ldd R4,y+1
 00D2 5524              clr R5
 00D4 2414              cp R2,R4
 00D6 3504              cpc R3,R5
 00D8 50F4              brsh L17
 00DA           X6:
 00DA                   .dbline 183
 00DA           ;         {
 00DA                   .dbline 186
 00DA           ;             //错误的数据帧长度
 00DA           ;            
 00DA           ;             ADT_QUEUE_LET_EMPTY((*pQueue))                  //清空队列
 00DA                   .dbline 186
 00DA 2224              clr R2
 00DC 3324              clr R3
 00DE 3582              std z+5,R3
 00E0 2482              std z+4,R2
 00E2                   .dbline 186
 00E2 3782              std z+7,R3
 00E4 2682              std z+6,R2
 00E6                   .dbline 186
 00E6 3186              std z+9,R3
 00E8 2086              std z+8,R2
 00EA                   .dbline 186
 00EA                   .dbline 188
 00EA           ; 
 00EA           ;             SFP_STOP_ALL_ACTION
 00EA 2882              std y+0,R2
 00EC                   .dbline 189
 00EC           ;         }
 00EC 19C0              xjmp L18
 00EE           L17:
 00EE                   .dbline 191
 00EE           ;         else
 00EE           ;         {
 00EE                   .dbline 193
 00EE           ;             //有效的数据帧长度
 00EE           ;             pSFP->cFrameSize = cTempData;                   //更新数据帧长度信息
 00EE 2980              ldd R2,y+1
 00F0 FA01              movw R30,R20
 00F2 24A2              std z+36,R2
 00F4                   .dbline 194
 00F4           ;             pSFP->cXORCheck ^= cTempData;
 00F4 CF01              movw R24,R30
 00F6 8396              adiw R24,35
 00F8 FC01              movw R30,R24
 00FA 3080              ldd R3,z+0
 00FC 3224              eor R3,R2
 00FE 3082              std z+0,R3
 0100                   .dbline 196
 0100           ;             
 0100           ;             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);     //将该信息添加到缓冲区
 0100 222D              mov R18,R2
 0102 8B01              movw R16,R22
 0104 CB01              movw R24,R22
 0106 0A96              adiw R24,10
 0108 5C01              movw R10,R24
 010A FC01              movw R30,R24
 010C A081              ldd R26,z+0
 010E B181              ldd R27,z+1
 0110 FD01              movw R30,R26
 0112 0E940000          xcall xicallx
 0116                   .dbline 199
 0116           ;             
 0116           ;             
 0116           ;             SFP_WAIT_FOR_ALL_DATA = TRUE;
 0116 8881              ldd R24,y+0
 0118 8460              ori R24,4
 011A 8883              std y+0,R24
 011C                   .dbline 200
 011C           ;             SFP_WAIT_FOR_FRAME_SIZE = FALSE;        
 011C 8D7F              andi R24,253
 011E 8883              std y+0,R24
 0120                   .dbline 201
 0120           ;         }
 0120           L18:
 0120                   .dbline 203
 0120           ;         
 0120           ;         pSFP->cActionFlag = cTempActionFlag;
 0120 2880              ldd R2,y+0
 0122 FA01              movw R30,R20
 0124 22A2              std z+34,R2
 0126                   .dbline 204
 0126           ;         return ;
 0126 5AC0              xjmp L4
 0128           L15:
 0128                   .dbline 207
 0128           ;     }
 0128           ;     
 0128           ;     if (SFP_WAIT_FOR_ALL_DATA)
 0128 FE01              movw R30,R28
 012A 8081              ldd R24,z+0
 012C 8695              lsr R24
 012E 8695              lsr R24
 0130 8170              andi R24,1
 0132 09F4              brne X16
 0134 53C0              xjmp L19
 0136           X16:
 0136           X7:
 0136                   .dbline 208
 0136           ;     {
 0136                   .dbline 209
 0136           ;         if ((pQueue->nCount) < (pSFP->cFrameSize))
 0136 FA01              movw R30,R20
 0138 24A0              ldd R2,z+36
 013A 3324              clr R3
 013C FB01              movw R30,R22
 013E 4084              ldd R4,z+8
 0140 5184              ldd R5,z+9
 0142 4214              cp R4,R2
 0144 5304              cpc R5,R3
 0146 90F4              brsh L21
 0148           X8:
 0148                   .dbline 210
 0148           ;         {
 0148                   .dbline 211
 0148           ;             pSFP->cXORCheck ^= cTempData;
 0148 CA01              movw R24,R20
 014A 8396              adiw R24,35
 014C 2980              ldd R2,y+1
 014E FC01              movw R30,R24
 0150 3080              ldd R3,z+0
 0152 3224              eor R3,R2
 0154 3082              std z+0,R3
 0156                   .dbline 212
 0156           ;             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);     //将该信息添加到缓冲区
 0156 222D              mov R18,R2
 0158 8B01              movw R16,R22
 015A CB01              movw R24,R22
 015C 0A96              adiw R24,10
 015E 5C01              movw R10,R24
 0160 FC01              movw R30,R24
 0162 A081              ldd R26,z+0
 0164 B181              ldd R27,z+1
 0166 FD01              movw R30,R26
 0168 0E940000          xcall xicallx
 016C                   .dbline 214
 016C           ;             
 016C           ;         }
 016C           L21:
 016C                   .dbline 216
 016C           ;         
 016C           ;         if ((pQueue->nCount) == ((pSFP->cFrameSize) - 1))
 016C FA01              movw R30,R20
 016E 84A1              ldd R24,z+36
 0170 8150              subi R24,1
 0172 282E              mov R2,R24
 0174 3324              clr R3
 0176 FB01              movw R30,R22
 0178 4084              ldd R4,z+8
 017A 5184              ldd R5,z+9
 017C 4214              cp R4,R2
 017E 5304              cpc R5,R3
 0180 89F4              brne L23
 0182           X9:
 0182                   .dbline 217
 0182           ;         {
 0182                   .dbline 218
 0182           ;             if (pSFP->cXORCheck)
 0182 FA01              movw R30,R20
 0184 23A0              ldd R2,z+35
 0186 2220              tst R2
 0188 09F4              brne X17
 018A 28C0              xjmp L4
 018C           X17:
 018C           X10:
 018C                   .dbline 219
 018C           ;             {
 018C                   .dbline 222
 018C           ;                 //XOR校验错误
 018C           ;                 //错误的数据帧长度
 018C           ;                 ADT_QUEUE_LET_EMPTY((*pQueue))              //清空队列
 018C                   .dbline 222
 018C 2224              clr R2
 018E FB01              movw R30,R22
 0190 3582              std z+5,R3
 0192 2482              std z+4,R2
 0194                   .dbline 222
 0194 3782              std z+7,R3
 0196 2682              std z+6,R2
 0198                   .dbline 222
 0198 3186              std z+9,R3
 019A 2086              std z+8,R2
 019C                   .dbline 222
 019C                   .dbline 224
 019C           ;                 
 019C           ;                 SFP_STOP_ALL_ACTION
 019C 2882              std y+0,R2
 019E                   .dbline 226
 019E           ;                 
 019E           ;                 pSFP->cActionFlag = cTempActionFlag;
 019E FA01              movw R30,R20
 01A0 22A2              std z+34,R2
 01A2                   .dbline 228
 01A2           ;                 
 01A2           ;                 return ;
 01A2 1CC0              xjmp L4
 01A4           L23:
 01A4                   .dbline 235
 01A4           ;             }
 01A4           ;             else
 01A4           ;             {
 01A4           ;                 //ReceiveData = cTempData;
 01A4           ;             }
 01A4           ;         }
 01A4           ;         else if ((pQueue->nCount) == (pSFP->cFrameSize))
 01A4 FA01              movw R30,R20
 01A6 24A0              ldd R2,z+36
 01A8 3324              clr R3
 01AA FB01              movw R30,R22
 01AC 4084              ldd R4,z+8
 01AE 5184              ldd R5,z+9
 01B0 4214              cp R4,R2
 01B2 5304              cpc R5,R3
 01B4 99F4              brne L4
 01B6           X11:
 01B6                   .dbline 236
 01B6           ;         {
 01B6                   .dbline 238
 01B6           ;             //所有的数据都添加完成
 01B6           ;             if (cTempData == pSFP->cEndByte)
 01B6 FA01              movw R30,R20
 01B8 218C              ldd R2,z+25
 01BA 3980              ldd R3,y+1
 01BC 3214              cp R3,R2
 01BE 11F4              brne L29
 01C0           X12:
 01C0                   .dbline 239
 01C0           ;             {
 01C0                   .dbline 241
 01C0           ;                 //获得了所有的数据,并且数据帧正确
 01C0           ;                 SFP_Check_Frames(pSFP);                     //进行数据帧检测
 01C0 8F01              movw R16,R30
 01C2 0FD0              xcall _SFP_Check_Frames
 01C4                   .dbline 242
 01C4           ;             }                
 01C4           L29:
 01C4                   .dbline 244
 01C4           ;             
 01C4           ;             ADT_QUEUE_LET_EMPTY((*pQueue))                  //清空队列
 01C4                   .dbline 244
 01C4 2224              clr R2
 01C6 3324              clr R3
 01C8 FB01              movw R30,R22
 01CA 3582              std z+5,R3
 01CC 2482              std z+4,R2
 01CE                   .dbline 244
 01CE 3782              std z+7,R3
 01D0 2682              std z+6,R2
 01D2                   .dbline 244
 01D2 3186              std z+9,R3
 01D4 2086              std z+8,R2
 01D6                   .dbline 244
 01D6                   .dbline 246
 01D6           ;             
 01D6           ;             SFP_STOP_ALL_ACTION
 01D6 2882              std y+0,R2
 01D8                   .dbline 247
 01D8           ;             pSFP->cActionFlag = cTempActionFlag;
 01D8 FA01              movw R30,R20
 01DA 22A2              std z+34,R2
 01DC                   .dbline 249
 01DC           ;             
 01DC           ;             return ;
 01DC                   .dbline 254
 01DC           ;         }
 01DC           ;         
 01DC           ;         
 01DC           ;         
 01DC           ;         return ;
 01DC           L19:
 01DC                   .dbline -2
 01DC           L4:
 01DC                   .dbline 0 ; func end
 01DC 2296              adiw R28,2
 01DE 0C940000          xjmp pop_xgsetF00C
 01E2                   .dbsym l cTempData 1 c
 01E2                   .dbsym r pQueue 22 pS[AbstructDataTypeQueue]
 01E2                   .dbsym l cTempActionFlag 0 c
 01E2                   .dbsym r pSFP 20 pS[SerialFrameProcess]
 01E2                   .dbend

⌨️ 快捷键说明

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