?? 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 + -