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