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

📄 rd_adt_queue.lis

📁 LCD1602键盘显示模块实例
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module RD_ADT_QUEUE.c
                        .area text(rom, con, rel)
 0000                   .dbfile O:\2007全国电子设计大赛\键盘显示模块\RD_ADT_QUEUE.c
 0000                   .dbfunc e ADT_Queue_Add_To_Buffer _ADT_Queue_Add_To_Buffer fc
 0000                   .dbstruct 0 18 AbstructDataTypeQueue
 0000                   .dbfield 0 pBuffer pc
 0000                   .dbfield 2 nSize i
 0000                   .dbfield 4 nHead i
 0000                   .dbfield 6 nTail i
 0000                   .dbfield 8 nCount i
 0000                   .dbfield 10 fnAddToBuffer pfc
 0000                   .dbfield 12 fnGetFromBuffer pfc
 0000                   .dbfield 14 fnCheckEmpty pfc
 0000                   .dbfield 16 fnPeekFromBuffer pfc
 0000                   .dbend
 0000           ;        pBuffer -> R12,R13
 0000           ;        nCount0 -> R20,R21
 0000           ;         nHead0 -> R14,R15
 0000           ;         nTail0 -> R22,R23
 0000           ;         nSize0 -> R10,R11
 0000           ;          cData -> R18
 0000           ;         pQueue -> R16,R17
                        .even
 0000           _ADT_Queue_Add_To_Buffer::
 0000 0E940000          xcall push_xgsetF0FC
 0004                   .dbline -1
 0004                   .dbline 78
 0004           ; /***********************************************************
 0004           ; *   函数库说明:抽象数据类型(ADT)队列函数库                *
 0004           ; *   版本:      v1.01                                      *
 0004           ; *   作者:      王卓然                                     *
 0004           ; *   创建日期:  2007年3月23日                              *
 0004           ; * -------------------------------------------------------- *
 0004           ; *  [支 持 库]                                              *
 0004           ; *   支持库名称:RD_MacroAndConst.h                         *
 0004           ; *   需要版本:  v0.01 &abv                                 *
 0004           ; *   支持库说明:系统常用宏定义库                           *
 0004           ; *                                                          *
 0004           ; *   支持库名称:RD_ADT_QUEUE.h                             *
 0004           ; *   需要版本:  -----                                      *
 0004           ; *   支持库说明:抽象数据类型(ADT)队列声明库                *
 0004           ; * -------------------------------------------------------- *
 0004           ; *  [版本更新]                                              *
 0004           ; *   修改:      王卓然                                     *
 0004           ; *   修改日期:  2007年4月17日                              *
 0004           ; *   版本:      v1.01                                      *
 0004           ; * -------------------------------------------------------- *
 0004           ; *  [版本历史]                                              *
 0004           ; *       v1.00   该版本提供了基本的抽象数据类型队列的结构定 *
 0004           ; *               义,以及默认的环形队列处理函数。           *
 0004           ; *       v1.01   增加了队列空判断函数,和队列首数据预览函数 *
 0004           ; * -------------------------------------------------------- *
 0004           ; *  [使用说明]                                              *
 0004           ; ***********************************************************/
 0004           ; 
 0004           ; /********************
 0004           ; * 头 文 件 配 置 区 *
 0004           ; ********************/
 0004           ; # include "RD_MacroAndConst.h"
 0004           ; # include "RD_ADT_QUEUE.h"
 0004           ; 
 0004           ; /********************
 0004           ; *   系 统 宏 定 义  *
 0004           ; ********************/
 0004           ; 
 0004           ; /*------------------*
 0004           ; *   常 数 宏 定 义  *
 0004           ; *------------------*/
 0004           ; 
 0004           ; /*------------------*
 0004           ; *   动 作 宏 定 义  *
 0004           ; *------------------*/
 0004           ; 
 0004           ; /********************
 0004           ; *    结构体定义区   *
 0004           ; ********************/
 0004           ; 
 0004           ; /********************
 0004           ; *   模块函数声明区  *
 0004           ; ********************/
 0004           ; 
 0004           ; /********************
 0004           ; *   全局函数声明区  *
 0004           ; ********************/
 0004           ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData);
 0004           ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
 0004           ; BOOL ADT_Queue_Check_Empty(ADT_QUEUE *pQueue); 
 0004           ; BOOL ADT_Queue_Peek_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData);
 0004           ; 
 0004           ; /********************
 0004           ; *   模块变量声明区  *
 0004           ; ********************/
 0004           ; 
 0004           ; /********************
 0004           ; *   全局变量声明区  *
 0004           ; ********************/
 0004           ; 
 0004           ; /***********************************************************
 0004           ; *   函数说明:抽象数据类型队列,系统默认队列缓冲添加函数   *
 0004           ; *   输入:    要添加到缓冲区的数据                         *
 0004           ; *   输出:    添加是否成功                                 *
 0004           ; *   调用函数:无                                           *
 0004           ; ***********************************************************/
 0004           ; BOOL ADT_Queue_Add_To_Buffer(ADT_QUEUE *pQueue,uint8 cData)
 0004           ; {
 0004                   .dbline 85
 0004           ;     uint8 *pBuffer;
 0004           ;     uint   nSize;
 0004           ;     uint   nTail;
 0004           ;     uint   nHead;
 0004           ;     uint   nCount;
 0004           ;     
 0004           ;     SAFE_CODE_PERFORMANCE                                   //原子操作
 0004 F894              cli
 0006                   .dbline 85
 0006 F801              movw R30,R16
 0008 C080              ldd R12,z+0
 000A D180              ldd R13,z+1
 000C                   .dbline 85
 000C A280              ldd R10,z+2
 000E B380              ldd R11,z+3
 0010                   .dbline 85
 0010 CC20              tst R12
 0012 11F4              brne X0
 0014 DD20              tst R13
 0016 21F0              breq L4
 0018           X0:
 0018 AA20              tst R10
 001A 29F4              brne L2
 001C BB20              tst R11
 001E 19F4              brne L2
 0020           X1:
 0020           L4:
 0020                   .dbline 85
 0020                   .dbline 85
 0020 7894              sei
 0022                   .dbline 85
 0022 0027              clr R16
 0024 24C0              xjmp L1
 0026           L2:
 0026                   .dbline 85
 0026 F801              movw R30,R16
 0028 6681              ldd R22,z+6
 002A 7781              ldd R23,z+7
 002C                   .dbline 85
 002C E480              ldd R14,z+4
 002E F580              ldd R15,z+5
 0030                   .dbline 85
 0030 4085              ldd R20,z+8
 0032 5185              ldd R21,z+9
 0034                   .dbline 85
 0034 6E15              cp R22,R14
 0036 7F05              cpc R23,R15
 0038 31F4              brne L5
 003A           X2:
 003A 4A15              cp R20,R10
 003C 5B05              cpc R21,R11
 003E 19F4              brne L5
 0040           X3:
 0040                   .dbline 85
 0040                   .dbline 85
 0040 7894              sei
 0042                   .dbline 85
 0042 0027              clr R16
 0044 14C0              xjmp L1
 0046           L5:
 0046                   .dbline 85
 0046 FB01              movw R30,R22
 0048 EC0D              add R30,R12
 004A FD1D              adc R31,R13
 004C 2083              std z+0,R18
 004E                   .dbline 85
 004E 6F5F              subi R22,255  ; offset = 1
 0050 7F4F              sbci R23,255
 0052                   .dbline 85
 0052 4F5F              subi R20,255  ; offset = 1
 0054 5F4F              sbci R21,255
 0056                   .dbline 85
 0056 6A15              cp R22,R10
 0058 7B05              cpc R23,R11
 005A 11F4              brne L7
 005C           X4:
 005C                   .dbline 85
 005C                   .dbline 85
 005C 6627              clr R22
 005E 7727              clr R23
 0060                   .dbline 85
 0060           L7:
 0060                   .dbline 85
 0060 F801              movw R30,R16
 0062 7783              std z+7,R23
 0064 6683              std z+6,R22
 0066                   .dbline 85
 0066 5187              std z+9,R21
 0068 4087              std z+8,R20
 006A                   .dbline 85
 006A                   .dbline 85
 006A 7894              sei
 006C                   .dbline 118
 006C           ;     (
 006C           ;         pBuffer = pQueue->pBuffer;
 006C           ;         nSize = pQueue->nSize;
 006C           ;         
 006C           ;         if ((pBuffer == NULL) || (!nSize))
 006C           ;         {
 006C           ;             SEI();
 006C           ;             return FALSE;                                   //缓冲区未分配空间
 006C           ;         }
 006C           ;         nTail = pQueue->nTail;
 006C           ;         nHead = pQueue->nHead;
 006C           ;         nCount = pQueue->nCount;
 006C           ;     
 006C           ;     
 006C           ;         if ((nTail == nHead) && (nCount == nSize))          //缓冲区已满
 006C           ;         {
 006C           ;             SEI();
 006C           ;             return FALSE;
 006C           ;         }
 006C           ;     
 006C           ;         pBuffer[nTail] = cData;
 006C           ;         nTail++;
 006C           ;         nCount++;
 006C           ;         if (nTail == nSize)
 006C           ;         {
 006C           ;             nTail = 0;
 006C           ;         }
 006C           ;         
 006C           ;         pQueue->nTail = nTail;
 006C           ;         pQueue->nCount = nCount;
 006C           ;     )
 006C           ;     
 006C           ;     return TRUE;
 006C 01E0              ldi R16,1
 006E                   .dbline -2
 006E           L1:
 006E                   .dbline 0 ; func end
 006E 0C940000          xjmp pop_xgsetF0FC
 0072                   .dbsym r pBuffer 12 pc
 0072                   .dbsym r nCount0 20 i
 0072                   .dbsym r nHead0 14 i
 0072                   .dbsym r nTail0 22 i
 0072                   .dbsym r nSize0 10 i
 0072                   .dbsym r cData 18 c
 0072                   .dbsym r pQueue 16 pS[AbstructDataTypeQueue]
 0072                   .dbend
 0072                   .dbfunc e ADT_Queue_Get_From_Buffer _ADT_Queue_Get_From_Buffer fc
 0072           ;        pBuffer -> R12,R13
 0072           ;         nHead1 -> R22,R23
 0072           ;        nCount0 -> R20,R21
 0072           ;         nHead0 -> R14,R15
 0072           ;         nTail0 -> R22,R23
 0072           ;         nSize0 -> R10,R11
 0072           ;          pData -> R18,R19
 0072           ;         pQueue -> R16,R17
                        .even
 0072           _ADT_Queue_Get_From_Buffer::
 0072 0E940000          xcall push_xgsetF0FC
 0076                   .dbline -1
 0076                   .dbline 128
 0076           ; }
 0076           ; 
 0076           ; /***********************************************************
 0076           ; *   函数说明:抽象数据类型队列,系统默认队列缓冲区读取函数 *
 0076           ; *   输入:    存放读取变量的空间指针                       *
 0076           ; *   输出:    队列是否为空                                 *
 0076           ; *   调用函数:无                                           *
 0076           ; ***********************************************************/
 0076           ; BOOL ADT_Queue_Get_From_Buffer(ADT_QUEUE *pQueue,uint8 *pData)
 0076           ; {
 0076                   .dbline 135
 0076           ;     uint8 *pBuffer;
 0076           ;     uint   nSize;
 0076           ;     uint   nTail;
 0076           ;     uint   nHead;
 0076           ;     uint   nCount;
 0076           ;     
 0076           ;     SAFE_CODE_PERFORMANCE                                   //原子操作
 0076 F894              cli
 0078                   .dbline 135
 0078 F801              movw R30,R16
 007A C080              ldd R12,z+0
 007C D180              ldd R13,z+1
 007E                   .dbline 135
 007E A280              ldd R10,z+2
 0080 B380              ldd R11,z+3
 0082                   .dbline 135
 0082 CC20              tst R12
 0084 11F4              brne X5
 0086 DD20              tst R13
 0088 21F0              breq L12
 008A           X5:
 008A AA20              tst R10
 008C 29F4              brne L10
 008E BB20              tst R11
 0090 19F4              brne L10
 0092           X6:
 0092           L12:
 0092                   .dbline 135
 0092                   .dbline 135
 0092 7894              sei
 0094                   .dbline 135
 0094 0027              clr R16
 0096 27C0              xjmp L9
 0098           L10:
 0098                   .dbline 135
 0098 F801              movw R30,R16
 009A 6681              ldd R22,z+6
 009C 7781              ldd R23,z+7
 009E                   .dbline 135
 009E E480              ldd R14,z+4
 00A0 F580              ldd R15,z+5
 00A2                   .dbline 135
 00A2 4085              ldd R20,z+8
 00A4 5185              ldd R21,z+9
 00A6                   .dbline 135
 00A6 6E15              cp R22,R14
 00A8 7F05              cpc R23,R15
 00AA 31F4              brne L13
 00AC           X7:
 00AC 4030              cpi R20,0
 00AE 4507              cpc R20,R21
 00B0 19F4              brne L13
 00B2           X8:
 00B2                   .dbline 135
 00B2                   .dbline 135
 00B2 7894              sei
 00B4                   .dbline 135

⌨️ 快捷键说明

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