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

📄 rd_useserialbuff.s

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module RD_UseSerialBuff.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTRxBuffHead:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTRxBuffTail:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTRxBuffCounter:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTTxBuffHead:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTTxBuffTail:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_UARTTxBuffCounter:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
_g_bIfSerialTransmitCompleted::
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
	.area text(rom, con, rel)
	.dbfile E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块测试版\Relative_Locate_Module\RD_UseSerialBuff.c
	.dbfunc e UARTgetDataFromRxBuff _UARTgetDataFromRxBuff fc
;        cflags0 -> R10
;           Data -> R16,R17
	.even
_UARTgetDataFromRxBuff::
	st -y,R10
	.dbline -1
	.dbline 139
; /***********************************************************
; *   函数库说明:串行通讯缓冲区处理函数库                   *
; *   版本:      v1.00                                      *
; *   作者:      王卓然                                     *
; *   创建日期:  2006年4月24日                              *
; * -------------------------------------------------------- *
; *  [支 持 库]                                              *
; *   支持库名称:RD_MacroAndConst.h                         *
; *   需要版本:  v0.01 &abv                                 *
; *   函数库说明:系统常用宏定义库                           *
; *                                                          *
; *   支持库名称:RD_UseSerialBuff.h                         *
; *   需要版本:  -----                                      *
; *   声明库说明:串行通讯缓冲区处理声明库                   *
; * -------------------------------------------------------- *
; *  [版本更新]                                              *
; *   修改:      王卓然                                     *
; *   修改日期:  2006年5月20日                              *
; *   版本:      v0.31                                      *
; *                                                          *
; *   修改:      王卓然                                     *
; *   修改日期:  2007年3月1日                               *
; *   版本:      v0.40                                      *
; *                                                          *
; *   修改:      王卓然                                     *
; *   修改日期:  2007年3月2日                               *
; *   版本:      v1.00                                      *
; * -------------------------------------------------------- *
; *  [版本历史]                                              *
; *       v0.30  该版本提供了最基本的环形队列缓冲区操作函数。*
; *       v0.31  增加了调用该函数时候的宏说明,可以选择需要  *
; *              提供的缓冲区功能。                          *
; *       v0.40  增加了串口发送进程。增加了原子操作。        *
; *       v1.00  针对新规范进行了修改,增加自动收发进程。    *
; * -------------------------------------------------------- *
; *  [使用说明]                                              *
; *           1、通过SERIAL_RX_BUFF_SIZE来设定接收缓冲区的大 *
; *              小;通过SERIAL_TX_BUFF_SIZE来设定发送缓冲区 *
; *              的大小。                                    *
; *           2、通过定义_USE_SERIAL_RX_BUFF来选择添加一个接 *
; *              收缓冲区;通过定义_USE_SERIAL_TX_BUFF来添加 *
; *              一个发送缓冲区。                            *
; *           3、在取数的时候,有时候要考虑屏蔽中断,否则会  *
; *              出现不可预知的后果。                        *
; *           4、可以通过宏_USE_SERIAL_TX_TRANSMITTER_PROC在 *
; *              使用发送缓冲时,使用自动发送进程。并需要定  *
; *              义宏UDR_PORT来指定发送端口、也需要将宏      *
; *              SERIAL_INSERT_USART_TX_ISR_CODE插入到发送完 *
; *              成中断处理程序中。                          *
; *           5、使用宏SERIAL_ENABLE_WRITE定义额外的发送使能 *
; *              代码。例如485总线的发送使能等。             *
; *           6、使用宏SERIAL_DISABLE_WRITE定义额外的发送使  *
; *              能关闭代码。例如485总线发送使能的关闭。     *
; ***********************************************************/
; 
; /********************
; * 头 文 件 配 置 区 *
; ********************/
; # include "LIB_Config.h"
; # include "RD_MacroAndConst.h"
; # include "RD_UseSerialBuff.h"
; 
; /********************
; *   系 统 宏 定 义  *
; ********************/
; 
; /*------------------*
; *   常 数 宏 定 义  *
; *------------------*/
; #ifndef SERIAL_RX_BUFF_SIZE
;     # define SERIAL_RX_BUFF_SIZE 32
; #endif
; #ifndef SERIAL_TX_BUFF_SIZE
;     # define SERIAL_TX_BUFF_SIZE 32
; #endif
; #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
;     #ifndef UDR_PORT
;         # error Need for UDR_PORT!
;     #endif
; 
;     #ifndef SERIAL_ENABLE_WRITE
;         # define SERIAL_ENABLE_WRITE
;     #endif
; 
;     #ifndef SERIAL_DISABLE_WRITE
;         # define SERIAL_DISABLE_WRITE
;     #endif
; #endif
; /********************
; *   函 数 声 明 区  *
; ********************/
; #ifdef _USE_SERIAL_RX_BUFF
; BOOL UARTaddDataToRxBuff(uint8 Data);
; BOOL UARTgetDataFromRxBuff(uint8 *Data);
; #endif
; 
; #ifdef _USE_SERIAL_TX_BUFF
; BOOL UARTaddDataToTxBuff(uint8 Data);
; BOOL UARTgetDataFromTxBuff(uint8 *Data);
;     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
; BOOL PROC_Serial_Transmitter(void);
;     #endif
; #endif
; 
; /********************
; *   模块变量定义区  *
; ********************/
; #ifdef _USE_SERIAL_RX_BUFF
; static uint8  UARTRxBuff[SERIAL_RX_BUFF_SIZE];
; static unsigned int  UARTRxBuffHead = 0;
; static unsigned int  UARTRxBuffTail = 0;
; static unsigned int  UARTRxBuffCounter = 0;
; #endif
; 
; #ifdef _USE_SERIAL_TX_BUFF
; static uint8  UARTTxBuff[SERIAL_TX_BUFF_SIZE];
; static unsigned int  UARTTxBuffHead = 0;
; static unsigned int  UARTTxBuffTail = 0;
; static unsigned int  UARTTxBuffCounter = 0;
; #endif
;  
; /********************
; *   全局变量定义区  *
; ********************/
; #ifdef _USE_SERIAL_TX_BUFF
;     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
; BOOL g_bIfSerialTransmitCompleted = TRUE;
;     #endif
; #endif
; 
; /***********************************************************
; *   函数说明:接收缓冲区取值函数                           *
; *   输入:    存储取出数据地址的指针                       *
; *   输出:    取值是否成功                                 *
; *   调用函数:无                                           *
; ***********************************************************/
; #ifdef _USE_SERIAL_RX_BUFF
; BOOL UARTgetDataFromRxBuff(uint8  *Data)
; {
	.dbline 140
;     SAFE_CODE_PERFORMANCE
	.dbline 140
	in R10,0x3f
	.dbline 140
	cli
	.dbline 140
	lds R2,_UARTRxBuffTail
	lds R3,_UARTRxBuffTail+1
	lds R4,_UARTRxBuffHead
	lds R5,_UARTRxBuffHead+1
	cp R4,R2
	cpc R5,R3
	brne L2
X0:
	lds R2,_UARTRxBuffCounter
	lds R3,_UARTRxBuffCounter+1
	tst R2
	brne L2
	tst R3
	brne L2
X1:
	.dbline 140
	.dbline 140
	sei
	.dbline 140
	clr R16
	rjmp L1
L2:
	.dbline 140
	lds R2,_UARTRxBuffHead
	lds R3,_UARTRxBuffHead+1
	movw R24,R2
	adiw R24,1
	sts _UARTRxBuffHead+1,R25
	sts _UARTRxBuffHead,R24
	ldi R24,<_UARTRxBuff
	ldi R25,>_UARTRxBuff
	movw R30,R2
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R30,R16
	std z+0,R2
	.dbline 140
	lds R24,_UARTRxBuffCounter
	lds R25,_UARTRxBuffCounter+1
	sbiw R24,1
	sts _UARTRxBuffCounter+1,R25
	sts _UARTRxBuffCounter,R24
	.dbline 140
	lds R24,_UARTRxBuffHead
	lds R25,_UARTRxBuffHead+1
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brne L4
X2:
	.dbline 140
	.dbline 140
	clr R2
	clr R3
	sts _UARTRxBuffHead+1,R3
	sts _UARTRxBuffHead,R2
	.dbline 140
L4:
	.dbline 140
	.dbline 140
	out 0x3f,R10
	.dbline 140
	.dbline 157
;     (
;         if ((UARTRxBuffHead == UARTRxBuffTail) 
;          && (UARTRxBuffCounter == 0))
;         {
;             SEI();
;             return FALSE;
;         }
;         (*Data) = UARTRxBuff[UARTRxBuffHead++];
;     
;         UARTRxBuffCounter--;
;     
;         if (UARTRxBuffHead == SERIAL_RX_BUFF_SIZE)
;         {
;             UARTRxBuffHead = 0;
;         }
;     )		
;     return TRUE;
	ldi R16,1
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r cflags0 10 c
	.dbsym r Data 16 pc
	.dbend
	.dbfunc e UARTPeekDataFromRxBuff _UARTPeekDataFromRxBuff fc
;        cflags0 -> R10
;          pData -> R16,R17
	.even
_UARTPeekDataFromRxBuff::
	st -y,R10
	.dbline -1
	.dbline 167
; }
; 
; /***********************************************************
; *   函数说明:接收缓冲区首数据察看函数                     *
; *   输入:    存储取出数据地址的指针                       *
; *   输出:    取值是否成功                                 *
; *   调用函数:无                                           *
; ***********************************************************/
; BOOL UARTPeekDataFromRxBuff(uint8 *pData)
; {
	.dbline 168
;     SAFE_CODE_PERFORMANCE
	.dbline 168
	in R10,0x3f
	.dbline 168
	cli
	.dbline 168
	lds R2,_UARTRxBuffTail
	lds R3,_UARTRxBuffTail+1
	lds R4,_UARTRxBuffHead
	lds R5,_UARTRxBuffHead+1
	cp R4,R2
	cpc R5,R3
	brne L7
X3:
	lds R2,_UARTRxBuffCounter
	lds R3,_UARTRxBuffCounter+1
	tst R2
	brne L7
	tst R3
	brne L7
X4:
	.dbline 168
	.dbline 168
	sei
	.dbline 168
	clr R16
	rjmp L6
L7:
	.dbline 168
	ldi R24,<_UARTRxBuff
	ldi R25,>_UARTRxBuff
	lds R30,_UARTRxBuffHead
	lds R31,_UARTRxBuffHead+1
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R30,R16
	std z+0,R2
	.dbline 168
	.dbline 168
	out 0x3f,R10
	.dbline 168
	.dbline 178
;     (
;         if ((UARTRxBuffHead == UARTRxBuffTail) 
;          && (UARTRxBuffCounter == 0))
;         {
;             SEI();
;             return FALSE;
;         }
;         (*pData) = UARTRxBuff[UARTRxBuffHead];
;     )		
;     return TRUE;
	ldi R16,1
	.dbline -2
L6:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r cflags0 10 c
	.dbsym r pData 16 pc
	.dbend
	.dbfunc e UARTaddDataToRxBuff _UARTaddDataToRxBuff fc
;        cflags0 -> R10
;           Data -> R16
	.even
_UARTaddDataToRxBuff::
	st -y,R10
	.dbline -1
	.dbline 188
; }
; 
; /***********************************************************
; *  函数说明:向通讯输入缓冲区添加数据函数                  *
; *  输入:    收到的数据                                    *
; *  输出:    无                                            *
; *  调用函数:无                                            *
; ***********************************************************/
; BOOL UARTaddDataToRxBuff(uint8  Data)
; {
	.dbline 189
;     SAFE_CODE_PERFORMANCE
	.dbline 189
	in R10,0x3f
	.dbline 189
	cli
	.dbline 189
	lds R2,_UARTRxBuffTail
	lds R3,_UARTRxBuffTail+1
	lds R4,_UARTRxBuffHead
	lds R5,_UARTRxBuffHead+1
	cp R4,R2
	cpc R5,R3
	brne L10
X5:
	lds R24,_UARTRxBuffCounter
	lds R25,_UARTRxBuffCounter+1
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brne L10
X6:
	.dbline 189
	.dbline 189
	sei
	.dbline 189
	clr R16
	rjmp L9
L10:
	.dbline 189
	lds R2,_UARTRxBuffTail
	lds R3,_UARTRxBuffTail+1
	movw R24,R2
	adiw R24,1
	sts _UARTRxBuffTail+1,R25
	sts _UARTRxBuffTail,R24
	ldi R24,<_UARTRxBuff
	ldi R25,>_UARTRxBuff
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 189
	lds R24,_UARTRxBuffCounter
	lds R25,_UARTRxBuffCounter+1
	adiw R24,1
	sts _UARTRxBuffCounter+1,R25
	sts _UARTRxBuffCounter,R24
	.dbline 189
	lds R24,_UARTRxBuffTail
	lds R25,_UARTRxBuffTail+1
	cpi R24,32
	ldi R30,0
	cpc R25,R30
	brne L12
X7:
	.dbline 189
	.dbline 189
	clr R2
	clr R3
	sts _UARTRxBuffTail+1,R3
	sts _UARTRxBuffTail,R2

⌨️ 快捷键说明

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