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

📄 rd_useserialframe_proc.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module RD_UseSerialFrame_PROC.c
                        .area text(rom, con, rel)
 0000                   .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_UseSerialFrame_PROC.c
 0000                   .dbfunc e SFP_NULL_Output_Data_Function _SFP_NULL_Output_Data_Function fc
 0000           ;              p -> R10,R11
 0000           ;          cData -> y+2
                        .even
 0000           _SFP_NULL_Output_Data_Function::
 0000 1A93              st -y,r17
 0002 0A93              st -y,r16
 0004 AA92              st -y,R10
 0006 BA92              st -y,R11
 0008                   .dbline -1
 0008                   .dbline 94
 0008           ; /***********************************************************
 0008           ; *   函数库说明:串行通信数据帧处理函数函数库               *
 0008           ; *   版本:      v1.00                                      *
 0008           ; *   作者:      王卓然                                     *
 0008           ; *   创建日期:  2007年4月6日                               *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [支 持 库]                                              *
 0008           ; *   支持库名称:LIB_Config.h                               *
 0008           ; *   需要版本:  -----                                      *
 0008           ; *   支持库说明:库函数配置声明库                           *
 0008           ; *                                                          *
 0008           ; *   支持库名称:RD_MacroAndConst.h                         *
 0008           ; *   需要版本:  v0.01 &abv                                 *
 0008           ; *   支持库说明:系统常用宏定义库                           *
 0008           ; *                                                          *
 0008           ; *   支持库名称:RD_UseSerialFrame_PROC.h                   *
 0008           ; *   需要版本:  -----                                      *
 0008           ; *   支持库名称:串行通信数据帧处理函数声明库               *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [版本更新]                                              *
 0008           ; *   修改:                                                 *
 0008           ; *   修改日期:                                             *
 0008           ; *   版本:                                                 *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [版本历史]                                              *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [使用说明]                                              *
 0008           ; ***********************************************************/
 0008           ; 
 0008           ; /********************
 0008           ; * 头 文 件 配 置 区 *
 0008           ; ********************/
 0008           ; # include "RD_MacroAndConst.h"
 0008           ; # include "RD_ADT_QUEUE.h"
 0008           ; # include "RD_ADT_MSGMap.h"
 0008           ; # include "RD_UseSerialFrame_PROC.h"
 0008           ; # include "RD_UseBits.h"
 0008           ; 
 0008           ; /********************
 0008           ; *   系 统 宏 定 义  *
 0008           ; ********************/
 0008           ; 
 0008           ; /*------------------*
 0008           ; *   常 数 宏 定 义  *
 0008           ; *------------------*/
 0008           ; 
 0008           ; /*------------------*
 0008           ; *   动 作 宏 定 义  *
 0008           ; *------------------*/
 0008           ; # define SFP_ACTION_FLAG            SET_BIT8_FORMAT(cTempActionFlag)
 0008           ; # define SFP_STOP_ALL_ACTION        cTempActionFlag = NULL;
 0008           ; # define SFP_WAIT_FOR_FRAME_HEAD    SFP_ACTION_FLAG.BIT0
 0008           ; # define SFP_WAIT_FOR_FRAME_SIZE    SFP_ACTION_FLAG.BIT1
 0008           ; # define SFP_WAIT_FOR_ALL_DATA      SFP_ACTION_FLAG.BIT2
 0008           ; 
 0008           ; 
 0008           ; /********************
 0008           ; *  用户变量类型定义 *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *    结构体定义区   *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *   模块函数声明区  *
 0008           ; ********************/
 0008           ; static void SFP_Check_Frames(SERIAL_FRAME_PROCESS *pSFP);
 0008           ; 
 0008           ; /********************
 0008           ; *   全局函数声明区  *
 0008           ; ********************/
 0008           ; void Serial_Frame_Process(SERIAL_FRAME_PROCESS *pSFP);
 0008           ; BOOL SFP_NULL_Output_Data_Function(uint8 cData);
 0008           ; BOOL SFP_NULL_Input_Data_Function(uint8 *pData);
 0008           ; BOOL SFP_NULL_Peek_Data_Function(uint8 *pData);
 0008           ; BOOL SPF_Send_MSG(SERIAL_FRAME_PROCESS *pSFP,
 0008           ;                   uint8 cCMD,uint8 *pMSG,uint8 Length);
 0008           ; /********************
 0008           ; *   模块变量声明区  *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *   全局变量声明区  *
 0008           ; ********************/
 0008           ; 
 0008           ; /***********************************************************
 0008           ; *   函数说明:数据输出空函数                               *
 0008           ; *   输入:    数据                                         *
 0008           ; *   输出:    FALSE                                        *
 0008           ; *   调用函数:无                                           *
 0008           ; ***********************************************************/
 0008           ; BOOL SFP_NULL_Output_Data_Function(uint8 cData)
 0008           ; {
 0008                   .dbline 95
 0008           ;     uint8 *p = &cData;
 0008 CE01              movw R24,R28
 000A 0296              adiw R24,2
 000C 5C01              movw R10,R24
 000E                   .dbline 97
 000E           ;     
 000E           ;     return FALSE;
 000E 0027              clr R16
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 B990              ld R11,y+
 0012 A990              ld R10,y+
 0014 2296              adiw R28,2
 0016 0895              ret
 0018                   .dbsym r p 10 pc
 0018                   .dbsym l cData 2 c
 0018                   .dbend
 0018                   .dbfunc e SFP_NULL_Input_Data_Function _SFP_NULL_Input_Data_Function fc
 0018           ;          pData -> R16,R17
                        .even
 0018           _SFP_NULL_Input_Data_Function::
 0018                   .dbline -1
 0018                   .dbline 107
 0018           ; }
 0018           ; 
 0018           ; /***********************************************************
 0018           ; *   函数说明:数据输入空函数                               *
 0018           ; *   输入:    指针                                         *
 0018           ; *   输出:    FALSE                                        *
 0018           ; *   调用函数:无                                           *
 0018           ; ***********************************************************/
 0018           ; BOOL SFP_NULL_Input_Data_Function(uint8 *pData)
 0018           ; {
 0018                   .dbline 108
 0018           ;     (*pData) = NULL;
 0018 2224              clr R2
 001A F801              movw R30,R16
 001C 2082              std z+0,R2
 001E                   .dbline 110
 001E           ;     
 001E           ;     return FALSE;
 001E 0027              clr R16
 0020                   .dbline -2
 0020           L2:
 0020                   .dbline 0 ; func end
 0020 0895              ret
 0022                   .dbsym r pData 16 pc
 0022                   .dbend
 0022                   .dbfunc e SFP_NULL_Peek_Data_Function _SFP_NULL_Peek_Data_Function fc
 0022           ;          pData -> R16,R17
                        .even
 0022           _SFP_NULL_Peek_Data_Function::
 0022                   .dbline -1
 0022                   .dbline 120
 0022           ; }
 0022           ; 
 0022           ; /***********************************************************
 0022           ; *   函数说明:数据察看空函数                               *
 0022           ; *   输入:    指针                                         *
 0022           ; *   输出:    FALSE                                        *
 0022           ; *   调用函数:无                                           *
 0022           ; ***********************************************************/
 0022           ; BOOL SFP_NULL_Peek_Data_Function(uint8 *pData)
 0022           ; {
 0022                   .dbline 121
 0022           ;     (*pData) = NULL;
 0022 2224              clr R2
 0024 F801              movw R30,R16
 0026 2082              std z+0,R2
 0028                   .dbline 123
 0028           ;     
 0028           ;     return FALSE;
 0028 0027              clr R16
 002A                   .dbline -2
 002A           L3:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbsym r pData 16 pc
 002C                   .dbend
 002C                   .dbfunc e Serial_Frame_Process _Serial_Frame_Process fV
 002C                   .dbstruct 0 18 AbstructDataTypeQueue
 002C                   .dbfield 0 pBuffer pc
 002C                   .dbfield 2 nSize i
 002C                   .dbfield 4 nHead i
 002C                   .dbfield 6 nTail i
 002C                   .dbfield 8 nCount i
 002C                   .dbfield 10 fnAddToBuffer pfc
 002C                   .dbfield 12 fnGetFromBuffer pfc
 002C                   .dbfield 14 fnCheckEmpty pfc
 002C                   .dbfield 16 fnPeekFromBuffer pfc
 002C                   .dbend
 002C                   .dbstruct 0 3 MsgMapItem
 002C                   .dbfield 0 cCMD c
 002C                   .dbfield 1 pMsgFunc pfc
 002C                   .dbend
 002C                   .dbstruct 0 3 MsgMap
 002C                   .dbfield 0 cItemCount c
 002C                   .dbfield 1 pMsgItems pS[MsgMapItem]
 002C                   .dbend
 002C                   .dbstruct 0 4 MsgItem
 002C                   .dbfield 0 cCMD c
 002C                   .dbfield 1 cDataLength c
 002C                   .dbfield 2 pData pc
 002C                   .dbend
 002C                   .dbstruct 0 37 SerialFrameProcess
 002C                   .dbfield 0 FrameBuffer S[AbstructDataTypeQueue]
 002C                   .dbfield 18 pMsgMap pS[MsgMap]
 002C                   .dbfield 20 MsgItem S[MsgItem]
 002C                   .dbfield 24 cHeadByte c
 002C                   .dbfield 25 cEndByte c
 002C                   .dbfield 26 cFixLength c
 002C                   .dbfield 27 cAddress c
 002C                   .dbfield 28 InputDataFunc pfc
 002C                   .dbfield 30 OutputDataFunc pfc
 002C                   .dbfield 32 PeekDataFunc pfc
 002C                   .dbfield 34 cActionFlag c
 002C                   .dbfield 35 cXORCheck c
 002C                   .dbfield 36 cFrameSize c
 002C                   .dbend
 002C           ;      cTempData -> y+1
 002C           ;         pQueue -> R22,R23
 002C           ; cTempActionFlag -> y+0
 002C           ;           pSFP -> R20,R21
                        .even
 002C           _Serial_Frame_Process::
 002C 0E940000          xcall push_xgsetF00C
 0030 A801              movw R20,R16
 0032 2297              sbiw R28,2
 0034                   .dbline -1
 0034                   .dbline 134
 0034           ; }
 0034           ; 
 0034           ; 
 0034           ; /***********************************************************
 0034           ; *   函数说明:串行通讯数据帧处理函数                       *
 0034           ; *   输入:    要处理的数据帧结构指针                       *
 0034           ; *   输出:    无                                           *
 0034           ; *   调用函数:SFP_Check_Frames()                           *
 0034           ; ***********************************************************/
 0034           ; void Serial_Frame_Process(SERIAL_FRAME_PROCESS *pSFP)
 0034           ; {
 0034                   .dbline 135
 0034           ;     uint8 cTempActionFlag = pSFP->cActionFlag;
 0034 FA01              movw R30,R20
 0036 22A0              ldd R2,z+34
 0038 2882              std y+0,R2
 003A                   .dbline 136
 003A           ;     uint8 cTempData = 0;
 003A 2224              clr R2
 003C 2982              std y+1,R2
 003E                   .dbline 137
 003E           ;     ADT_QUEUE *pQueue = &(pSFP->FrameBuffer);
 003E BF01              movw R22,R30
 0040                   .dbline 140
 0040           ; 
 0040           ;     
 0040           ;     if (!(*(pSFP->InputDataFunc))(&cTempData))              //利用函数指针调用函数
 0040 8E01              movw R16,R28
 0042 0F5F              subi R16,255  ; offset = 1
 0044 1F4F              sbci R17,255
 0046 A48D              ldd R26,z+28
 0048 B58D              ldd R27,z+29
 004A FD01              movw R30,R26
 004C 0E940000          xcall xicallx
 0050 0023              tst R16
 0052 09F4              brne L5
 0054           X0:
 0054                   .dbline 141
 0054           ;     {
 0054                   .dbline 142
 0054           ;         return ;
 0054 C3C0              xjmp L4
 0056           L5:
 0056                   .dbline 145
 0056           ;     }
 0056           ;     
 0056           ;     if (cTempActionFlag == NULL)
 0056 2880              ldd R2,y+0
 0058 2220              tst R2
 005A 39F4              brne L7
 005C           X1:
 005C                   .dbline 146
 005C           ;     {
 005C                   .dbline 147
 005C           ;         pSFP->cXORCheck = 0;
 005C 2224              clr R2
 005E FA01              movw R30,R20
 0060 23A2              std z+35,R2
 0062                   .dbline 148
 0062           ;         pSFP->cFrameSize = 0;
 0062 24A2              std z+36,R2
 0064                   .dbline 149
 0064           ;         SFP_WAIT_FOR_FRAME_HEAD = TRUE;
 0064 8881              ldd R24,y+0
 0066 8160              ori R24,1
 0068 8883              std y+0,R24
 006A                   .dbline 150
 006A           ;     }
 006A           L7:
 006A                   .dbline 152
 006A           ;     
 006A           ;     if (SFP_WAIT_FOR_FRAME_HEAD)
 006A FE01              movw R30,R28
 006C 8081              ldd R24,z+0
 006E 8170              andi R24,1
 0070 09F4              brne X13
 0072 25C0              xjmp L9
 0074           X13:
 0074           X2:
 0074                   .dbline 153
 0074           ;     {
 0074                   .dbline 154
 0074           ;         if (cTempData == pSFP->cHeadByte)
 0074 FA01              movw R30,R20
 0076 208C              ldd R2,z+24
 0078 3980              ldd R3,y+1
 007A 3214              cp R3,R2
 007C 09F0              breq X14
 007E AEC0              xjmp L4
 0080           X14:
 0080           X3:
 0080                   .dbline 155
 0080           ;         {
 0080                   .dbline 156
 0080           ;             ADT_ADD_DATA_TO_QUEUE((*pQueue),cTempData);
 0080 232D              mov R18,R3
 0082 8B01              movw R16,R22
 0084 CB01              movw R24,R22
 0086 0A96              adiw R24,10
 0088 FC01              movw R30,R24
 008A A081              ldd R26,z+0
 008C B181              ldd R27,z+1
 008E FD01              movw R30,R26
 0090 0E940000          xcall xicallx
 0094                   .dbline 159
 0094           ;             
 0094           ;             
 0094           ;             if (!(pSFP->cFixLength))
 0094 FA01              movw R30,R20
 0096 228C              ldd R2,z+26
 0098 2220              tst R2

⌨️ 快捷键说明

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