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

📄 rd_useserialbuff.lis

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module RD_UseSerialBuff.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
                        .area data(ram, con, rel)
 0000                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 0000           _UARTRxBuffHead:
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 0002           _UARTRxBuffTail:
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 0004           _UARTRxBuffCounter:
 0004                   .blkb 2
                        .area idata
 0004 0000              .word 0
                        .area data(ram, con, rel)
 0006                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 0006           _UARTTxBuffHead:
 0006                   .blkb 2
                        .area idata
 0006 0000              .word 0
                        .area data(ram, con, rel)
 0008                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 0008           _UARTTxBuffTail:
 0008                   .blkb 2
                        .area idata
 0008 0000              .word 0
                        .area data(ram, con, rel)
 000A                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 000A           _UARTTxBuffCounter:
 000A                   .blkb 2
                        .area idata
 000A 0000              .word 0
                        .area data(ram, con, rel)
 000C                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 000C           _g_bIfSerialTransmitCompleted::
 000C                   .blkb 1
                        .area idata
 000C 01                .byte 1
                        .area data(ram, con, rel)
 000D                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
 0000                   .dbfunc e UARTgetDataFromRxBuff _UARTgetDataFromRxBuff fc
 0000           ;        cflags0 -> R10
 0000           ;           Data -> R16,R17
                        .even
 0000           _UARTgetDataFromRxBuff::
 0000 AA92              st -y,R10
 0002                   .dbline -1
 0002                   .dbline 139
 0002           ; /***********************************************************
 0002           ; *   函数库说明:串行通讯缓冲区处理函数库                   *
 0002           ; *   版本:      v1.00                                      *
 0002           ; *   作者:      王卓然                                     *
 0002           ; *   创建日期:  2006年4月24日                              *
 0002           ; * -------------------------------------------------------- *
 0002           ; *  [支 持 库]                                              *
 0002           ; *   支持库名称:RD_MacroAndConst.h                         *
 0002           ; *   需要版本:  v0.01 &abv                                 *
 0002           ; *   函数库说明:系统常用宏定义库                           *
 0002           ; *                                                          *
 0002           ; *   支持库名称:RD_UseSerialBuff.h                         *
 0002           ; *   需要版本:  -----                                      *
 0002           ; *   声明库说明:串行通讯缓冲区处理声明库                   *
 0002           ; * -------------------------------------------------------- *
 0002           ; *  [版本更新]                                              *
 0002           ; *   修改:      王卓然                                     *
 0002           ; *   修改日期:  2006年5月20日                              *
 0002           ; *   版本:      v0.31                                      *
 0002           ; *                                                          *
 0002           ; *   修改:      王卓然                                     *
 0002           ; *   修改日期:  2007年3月1日                               *
 0002           ; *   版本:      v0.40                                      *
 0002           ; *                                                          *
 0002           ; *   修改:      王卓然                                     *
 0002           ; *   修改日期:  2007年3月2日                               *
 0002           ; *   版本:      v1.00                                      *
 0002           ; * -------------------------------------------------------- *
 0002           ; *  [版本历史]                                              *
 0002           ; *       v0.30  该版本提供了最基本的环形队列缓冲区操作函数。*
 0002           ; *       v0.31  增加了调用该函数时候的宏说明,可以选择需要  *
 0002           ; *              提供的缓冲区功能。                          *
 0002           ; *       v0.40  增加了串口发送进程。增加了原子操作。        *
 0002           ; *       v1.00  针对新规范进行了修改,增加自动收发进程。    *
 0002           ; * -------------------------------------------------------- *
 0002           ; *  [使用说明]                                              *
 0002           ; *           1、通过SERIAL_RX_BUFF_SIZE来设定接收缓冲区的大 *
 0002           ; *              小;通过SERIAL_TX_BUFF_SIZE来设定发送缓冲区 *
 0002           ; *              的大小。                                    *
 0002           ; *           2、通过定义_USE_SERIAL_RX_BUFF来选择添加一个接 *
 0002           ; *              收缓冲区;通过定义_USE_SERIAL_TX_BUFF来添加 *
 0002           ; *              一个发送缓冲区。                            *
 0002           ; *           3、在取数的时候,有时候要考虑屏蔽中断,否则会  *
 0002           ; *              出现不可预知的后果。                        *
 0002           ; *           4、可以通过宏_USE_SERIAL_TX_TRANSMITTER_PROC在 *
 0002           ; *              使用发送缓冲时,使用自动发送进程。并需要定  *
 0002           ; *              义宏UDR_PORT来指定发送端口、也需要将宏      *
 0002           ; *              SERIAL_INSERT_USART_TX_ISR_CODE插入到发送完 *
 0002           ; *              成中断处理程序中。                          *
 0002           ; *           5、使用宏SERIAL_ENABLE_WRITE定义额外的发送使能 *
 0002           ; *              代码。例如485总线的发送使能等。             *
 0002           ; *           6、使用宏SERIAL_DISABLE_WRITE定义额外的发送使  *
 0002           ; *              能关闭代码。例如485总线发送使能的关闭。     *
 0002           ; ***********************************************************/
 0002           ; 
 0002           ; /********************
 0002           ; * 头 文 件 配 置 区 *
 0002           ; ********************/
 0002           ; # include "LIB_Config.h"
 0002           ; # include "RD_MacroAndConst.h"
 0002           ; # include "RD_UseSerialBuff.h"
 0002           ; 
 0002           ; /********************
 0002           ; *   系 统 宏 定 义  *
 0002           ; ********************/
 0002           ; 
 0002           ; /*------------------*
 0002           ; *   常 数 宏 定 义  *
 0002           ; *------------------*/
 0002           ; #ifndef SERIAL_RX_BUFF_SIZE
 0002           ;     # define SERIAL_RX_BUFF_SIZE 32
 0002           ; #endif
 0002           ; #ifndef SERIAL_TX_BUFF_SIZE
 0002           ;     # define SERIAL_TX_BUFF_SIZE 32
 0002           ; #endif
 0002           ; #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
 0002           ;     #ifndef UDR_PORT
 0002           ;         # error Need for UDR_PORT!
 0002           ;     #endif
 0002           ; 
 0002           ;     #ifndef SERIAL_ENABLE_WRITE
 0002           ;         # define SERIAL_ENABLE_WRITE
 0002           ;     #endif
 0002           ; 
 0002           ;     #ifndef SERIAL_DISABLE_WRITE
 0002           ;         # define SERIAL_DISABLE_WRITE
 0002           ;     #endif
 0002           ; #endif
 0002           ; /********************
 0002           ; *   函 数 声 明 区  *
 0002           ; ********************/
 0002           ; #ifdef _USE_SERIAL_RX_BUFF
 0002           ; BOOL UARTaddDataToRxBuff(uint8 Data);
 0002           ; BOOL UARTgetDataFromRxBuff(uint8 *Data);
 0002           ; #endif
 0002           ; 
 0002           ; #ifdef _USE_SERIAL_TX_BUFF
 0002           ; BOOL UARTaddDataToTxBuff(uint8 Data);
 0002           ; BOOL UARTgetDataFromTxBuff(uint8 *Data);
 0002           ;     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
 0002           ; BOOL PROC_Serial_Transmitter(void);
 0002           ;     #endif
 0002           ; #endif
 0002           ; 
 0002           ; /********************
 0002           ; *   模块变量定义区  *
 0002           ; ********************/
 0002           ; #ifdef _USE_SERIAL_RX_BUFF
 0002           ; static uint8  UARTRxBuff[SERIAL_RX_BUFF_SIZE];
 0002           ; static unsigned int  UARTRxBuffHead = 0;
 0002           ; static unsigned int  UARTRxBuffTail = 0;
 0002           ; static unsigned int  UARTRxBuffCounter = 0;
 0002           ; #endif
 0002           ; 
 0002           ; #ifdef _USE_SERIAL_TX_BUFF
 0002           ; static uint8  UARTTxBuff[SERIAL_TX_BUFF_SIZE];
 0002           ; static unsigned int  UARTTxBuffHead = 0;
 0002           ; static unsigned int  UARTTxBuffTail = 0;
 0002           ; static unsigned int  UARTTxBuffCounter = 0;
 0002           ; #endif
 0002           ;  
 0002           ; /********************
 0002           ; *   全局变量定义区  *
 0002           ; ********************/
 0002           ; #ifdef _USE_SERIAL_TX_BUFF
 0002           ;     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
 0002           ; BOOL g_bIfSerialTransmitCompleted = TRUE;
 0002           ;     #endif
 0002           ; #endif
 0002           ; 
 0002           ; /***********************************************************
 0002           ; *   函数说明:接收缓冲区取值函数                           *
 0002           ; *   输入:    存储取出数据地址的指针                       *
 0002           ; *   输出:    取值是否成功                                 *
 0002           ; *   调用函数:无                                           *
 0002           ; ***********************************************************/
 0002           ; #ifdef _USE_SERIAL_RX_BUFF
 0002           ; BOOL UARTgetDataFromRxBuff(uint8  *Data)
 0002           ; {
 0002                   .dbline 140
 0002           ;     SAFE_CODE_PERFORMANCE
 0002                   .dbline 140
 0002 AFB6              in R10,0x3f
 0004                   .dbline 140
 0004 F894              cli
 0006                   .dbline 140
 0006 20900200          lds R2,_UARTRxBuffTail
 000A 30900300          lds R3,_UARTRxBuffTail+1
 000E 40900000          lds R4,_UARTRxBuffHead
 0012 50900100          lds R5,_UARTRxBuffHead+1
 0016 4214              cp R4,R2
 0018 5304              cpc R5,R3
 001A 59F4              brne L2
 001C           X0:
 001C 20900400          lds R2,_UARTRxBuffCounter
 0020 30900500          lds R3,_UARTRxBuffCounter+1
 0024 2220              tst R2
 0026 29F4              brne L2
 0028 3320              tst R3
 002A 19F4              brne L2
 002C           X1:
 002C                   .dbline 140
 002C                   .dbline 140
 002C 7894              sei
 002E                   .dbline 140
 002E 0027              clr R16
 0030 2BC0              rjmp L1
 0032           L2:
 0032                   .dbline 140
 0032 20900000          lds R2,_UARTRxBuffHead
 0036 30900100          lds R3,_UARTRxBuffHead+1
 003A C101              movw R24,R2
 003C 0196              adiw R24,1
 003E 90930100          sts _UARTRxBuffHead+1,R25
 0042 80930000          sts _UARTRxBuffHead,R24
 0046 80E0              ldi R24,<_UARTRxBuff
 0048 90E0              ldi R25,>_UARTRxBuff
 004A F101              movw R30,R2
 004C E80F              add R30,R24
 004E F91F              adc R31,R25
 0050 2080              ldd R2,z+0
 0052 F801              movw R30,R16
 0054 2082              std z+0,R2
 0056                   .dbline 140
 0056 80910400          lds R24,_UARTRxBuffCounter
 005A 90910500          lds R25,_UARTRxBuffCounter+1
 005E 0197              sbiw R24,1
 0060 90930500          sts _UARTRxBuffCounter+1,R25
 0064 80930400          sts _UARTRxBuffCounter,R24
 0068                   .dbline 140
 0068 80910000          lds R24,_UARTRxBuffHead
 006C 90910100          lds R25,_UARTRxBuffHead+1
 0070 8032              cpi R24,32
 0072 E0E0              ldi R30,0
 0074 9E07              cpc R25,R30
 0076 31F4              brne L4
 0078           X2:
 0078                   .dbline 140
 0078                   .dbline 140
 0078 2224              clr R2
 007A 3324              clr R3
 007C 30920100          sts _UARTRxBuffHead+1,R3
 0080 20920000          sts _UARTRxBuffHead,R2
 0084                   .dbline 140
 0084           L4:
 0084                   .dbline 140
 0084                   .dbline 140
 0084 AFBE              out 0x3f,R10
 0086                   .dbline 140
 0086                   .dbline 157
 0086           ;     (
 0086           ;         if ((UARTRxBuffHead == UARTRxBuffTail) 
 0086           ;          && (UARTRxBuffCounter == 0))
 0086           ;         {
 0086           ;             SEI();
 0086           ;             return FALSE;
 0086           ;         }
 0086           ;         (*Data) = UARTRxBuff[UARTRxBuffHead++];
 0086           ;     
 0086           ;         UARTRxBuffCounter--;
 0086           ;     
 0086           ;         if (UARTRxBuffHead == SERIAL_RX_BUFF_SIZE)
 0086           ;         {
 0086           ;             UARTRxBuffHead = 0;
 0086           ;         }
 0086           ;     )         
 0086           ;     return TRUE;
 0086 01E0              ldi R16,1
 0088                   .dbline -2
 0088           L1:
 0088                   .dbline 0 ; func end
 0088 A990              ld R10,y+
 008A 0895              ret
 008C                   .dbsym r cflags0 10 c
 008C                   .dbsym r Data 16 pc
 008C                   .dbend
 008C                   .dbfunc e UARTPeekDataFromRxBuff _UARTPeekDataFromRxBuff fc
 008C           ;        cflags0 -> R10
 008C           ;          pData -> R16,R17
                        .even
 008C           _UARTPeekDataFromRxBuff::
 008C AA92              st -y,R10
 008E                   .dbline -1
 008E                   .dbline 167
 008E           ; }
 008E           ; 

⌨️ 快捷键说明

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