📄 rd_useserialbuff.lis
字号:
.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 + -