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

📄 rd_adt_msgmap.lis

📁 液晶模块LCD1602配合键盘显示的一个实例
💻 LIS
字号:
                        .module RD_ADT_MSGMap.c
                        .area text(rom, con, rel)
 0000                   .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_ADT_MSGMap.c
 0000                   .dbfunc e MsgMapProcess _MsgMapProcess fc
 0000                   .dbstruct 0 3 MsgMapItem
 0000                   .dbfield 0 cCMD c
 0000                   .dbfield 1 pMsgFunc pfc
 0000                   .dbend
 0000                   .dbstruct 0 3 MsgMap
 0000                   .dbfield 0 cItemCount c
 0000                   .dbfield 1 pMsgItems pS[MsgMapItem]
 0000                   .dbend
 0000                   .dbstruct 0 4 MsgItem
 0000                   .dbfield 0 cCMD c
 0000                   .dbfield 1 cDataLength c
 0000                   .dbfield 2 pData pc
 0000                   .dbend
 0000           ;    pMsgMapItem -> R20,R21
 0000           ;           Reg2 -> R22,R23
 0000           ;           Reg3 -> R22,R23
 0000           ;             n1 -> R10
 0000           ; cMsgItemCount0 -> R14
 0000           ;       pMsgItem -> R12,R13
 0000           ;        pMsgMap -> R22,R23
                        .even
 0000           _MsgMapProcess::
 0000 0E940000          xcall push_xgsetF0FC
 0004 6901              movw R12,R18
 0006 B801              movw R22,R16
 0008                   .dbline -1
 0008                   .dbline 78
 0008           ; /***********************************************************
 0008           ; *   函数库说明:抽象数据类型(ADT)消息地图函数库            *
 0008           ; *   版本:    v1.00                                        *
 0008           ; *   作者:    王卓然                                       *
 0008           ; *   创建日期:2007年4月6日                                 *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [支 持 库]                                              *
 0008           ; *   支持库名称:RD_MacroAndConst.h                         *
 0008           ; *   需要版本:  v0.01 &abv                                 *
 0008           ; *   支持库说明:系统常用宏定义库                           *
 0008           ; *                                                          *
 0008           ; *   支持库名称:RD_ADT_MSGMAP.c                            *
 0008           ; *   需要版本:  -----                                      *
 0008           ; *   支持库名称:抽象数据类型(ADT)消息地图声明库            *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [版本更新]                                              *
 0008           ; *   修改:                                                 *
 0008           ; *   修改日期:                                             *
 0008           ; *   版本:                                                 *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [版本历史]                                              *
 0008           ; * -------------------------------------------------------- *
 0008           ; *  [使用说明]                                              *
 0008           ; ***********************************************************/
 0008           ; 
 0008           ; /********************
 0008           ; * 头 文 件 配 置 区 *
 0008           ; ********************/
 0008           ; # include "RD_MacroAndConst.h"
 0008           ; # include "RD_ADT_MSGMap.h"
 0008           ; 
 0008           ; /********************
 0008           ; *   系 统 宏 定 义  *
 0008           ; ********************/
 0008           ; 
 0008           ; /*------------------*
 0008           ; *   常 数 宏 定 义  *
 0008           ; *------------------*/
 0008           ; 
 0008           ; /*------------------*
 0008           ; *   动 作 宏 定 义  *
 0008           ; *------------------*/
 0008           ; 
 0008           ; /********************
 0008           ; *  用户变量类型定义 *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *    结构体定义区   *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *   模块函数声明区  *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *   全局函数声明区  *
 0008           ; ********************/
 0008           ; BOOL MsgMapProcess(MSG_MAP *pMsgMap,MSG_ITEM *pMsgItem);
 0008           ; 
 0008           ; /********************
 0008           ; *   模块变量声明区  *
 0008           ; ********************/
 0008           ; 
 0008           ; /********************
 0008           ; *   全局变量声明区  *
 0008           ; ********************/
 0008           ; 
 0008           ; # include "PF_Config.h"
 0008           ; 
 0008           ; /***********************************************************
 0008           ; *   函数说明:消息地图处理函数                             *
 0008           ; *   输入:    消息地图,要处理的消息                       *
 0008           ; *   输出:    消息是否得到处理                             *
 0008           ; *   调用函数:无                                           *
 0008           ; ***********************************************************/
 0008           ; BOOL MsgMapProcess(MSG_MAP *pMsgMap,MSG_ITEM *pMsgItem)
 0008           ; {
 0008                   .dbline 79
 0008           ;     uint8 n = 0;
 0008                   .dbline 80
 0008           ;     uint8 cMsgItemCount = pMsgMap->cItemCount;
 0008 FB01              movw R30,R22
 000A E080              ldd R14,z+0
 000C                   .dbline 81
 000C           ;     MSG_MAP_ITEM *pMsgMapItem = pMsgMap->pMsgItems;
 000C 4181              ldd R20,z+1
 000E 5281              ldd R21,z+2
 0010                   .dbline 83
 0010           ; 
 0010           ;     if ((pMsgMap == NULL) || (pMsgItem == NULL))            //强壮性检测
 0010 E030              cpi R30,0
 0012 EF07              cpc R30,R31
 0014 21F0              breq L4
 0016           X0:
 0016 CC20              tst R12
 0018 21F4              brne L2
 001A DD20              tst R13
 001C 11F4              brne L2
 001E           X1:
 001E           L4:
 001E                   .dbline 84
 001E           ;     {
 001E                   .dbline 85
 001E           ;         return FALSE;
 001E 0027              clr R16
 0020 18C0              xjmp L1
 0022           L2:
 0022                   .dbline 88
 0022           ;     }
 0022           ;         
 0022           ;     for (n = 0;n < cMsgItemCount;n++)
 0022 AA24              clr R10
 0024 13C0              xjmp L8
 0026           L5:
 0026                   .dbline 89
 0026           ;     {
 0026                   .dbline 90
 0026           ;         if (pMsgMapItem[n].cCMD == pMsgItem->cCMD)
 0026 83E0              ldi R24,3
 0028 8A9D              mul R24,R10
 002A B001              movw R22,R0
 002C 640F              add R22,R20
 002E 751F              adc R23,R21
 0030 F601              movw R30,R12
 0032 2080              ldd R2,z+0
 0034 FB01              movw R30,R22
 0036 3080              ldd R3,z+0
 0038 3214              cp R3,R2
 003A 39F4              brne L9
 003C           X2:
 003C                   .dbline 91
 003C           ;         {
 003C                   .dbline 92
 003C           ;             return ((*pMsgMapItem[n].pMsgFunc)(pMsgItem));
 003C 8601              movw R16,R12
 003E A181              ldd R26,z+1
 0040 B281              ldd R27,z+2
 0042 FD01              movw R30,R26
 0044 0E940000          xcall xicallx
 0048 04C0              xjmp L1
 004A           L9:
 004A                   .dbline 94
 004A           ;         }
 004A           ;     }
 004A           L6:
 004A                   .dbline 88
 004A A394              inc R10
 004C           L8:
 004C                   .dbline 88
 004C AE14              cp R10,R14
 004E 58F3              brlo L5
 0050           X3:
 0050                   .dbline 96
 0050           ;     
 0050           ;     return FALSE;
 0050 0027              clr R16
 0052                   .dbline -2
 0052           L1:
 0052                   .dbline 0 ; func end
 0052 0C940000          xjmp pop_xgsetF0FC
 0056                   .dbsym r pMsgMapItem 20 pS[MsgMapItem]
 0056                   .dbsym r Reg2 22 S
 0056                   .dbsym r Reg3 22 pV
 0056                   .dbsym r n1 10 c
 0056                   .dbsym r cMsgItemCount0 14 c
 0056                   .dbsym r pMsgItem 12 pS[MsgItem]
 0056                   .dbsym r pMsgMap 22 pS[MsgMap]
 0056                   .dbend
 0056                   .dbfunc e MSG_NULL_PROC _MSG_NULL_PROC fc
 0056           ;              p -> R10,R11
 0056           ;       pMsgItem -> R16,R17
                        .even
 0056           _MSG_NULL_PROC::
 0056 AA92              st -y,R10
 0058 BA92              st -y,R11
 005A                   .dbline -1
 005A                   .dbline 106
 005A           ; }
 005A           ; 
 005A           ; /***********************************************************
 005A           ; *   函数说明:消息处理空函数                               *
 005A           ; *   输入:    要处理的消息                                 *
 005A           ; *   输出:    恒为FALSE                                    *
 005A           ; *   调用函数:无                                           *
 005A           ; ***********************************************************/
 005A           ; BOOL MSG_NULL_PROC(MSG_ITEM *pMsgItem)
 005A           ; {
 005A                   .dbline 107
 005A           ;     MSG_ITEM *p = pMsgItem;
 005A 5801              movw R10,R16
 005C                   .dbline 109
 005C           ;     
 005C           ;     return FALSE;
 005C 0027              clr R16
 005E                   .dbline -2
 005E           L11:
 005E                   .dbline 0 ; func end
 005E B990              ld R11,y+
 0060 A990              ld R10,y+
 0062 0895              ret
 0064                   .dbsym r p 10 pS[MsgItem]
 0064                   .dbsym r pMsgItem 16 pS[MsgItem]
 0064                   .dbend
 0064           ; }

⌨️ 快捷键说明

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