娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月17日(星期二)

2019年09月17日 | STM8S 帶緩沖區 串口中斷 使用心得

發布者:星辰耀眼 來源: eefocus關鍵字:STM8S  緩沖區  串口中斷 手機看文章 掃描二維碼
隨時隨地手機看文章


#include "UART.H"

 

/*-------------------------串口初始化函數------------------------*/

 

/***********************************************************

* 函數名稱:void UART2_Init(void)

*

* 功能描述:UART2初始化函數

*

* 參數列表:無

*

* 返回結果:無

***********************************************************/

void UART2_Init(void)

{

UART2_CR1=0x00;

UART2_CR2=0x00;

UART2_CR3=0x00;

 

UART2_BRR2=0x0B;

UART2_BRR1=0x08;

UART2_CR2=0x2c; //允許接收,發送,開接收中斷

_asm("rim"); //開全局中斷

}

 

/*-------------------------串口接收相關函數------------------------*/

 

unsigned char RNUM;     //定義接收變量

u8 rx_buffer[RX_BUFFER_SIZE]; //接收緩沖區

 

#if RX_BUFFER_SIZE <= 256

u8 rx_wr_index = 0, rx_rd_index = 0, rx_counter; //接收寫指針,接收讀指針,接收字符個數

#else

u16 rx_wr_index = 0, rx_rd_index = 0, rx_counter; //接收寫指針,接收讀指針,接收字符個數

#endif

 

#if RX_BUFFER_SIZE < 256

u8 rx_counter; //接收字符個數

#else

u16 rx_counter; //接收字符個數

#endif

 

_Bool rx_buffer_overflow; //接收緩沖區溢出標志

 

/***********************************************************

* 函數名稱:@far @interrupt void UART2_Rec_HandledInterrupt(void)

*

* 功能描述:接收中斷函數

*

* 參數列表:無

*

* 返回結果:無

***********************************************************/

@far @interrupt void UART2_Rec_HandledInterrupt(void)

    if (UART2_SR & 0X0F)

{

RNUM = UART2_SR;

RNUM = UART2_DR; //讀取數據

}

    else

    {

        RNUM = UART2_DR; //讀取數據

    }

 

rx_buffer[rx_wr_index++] = RNUM; //把數據寫入接收緩沖區 接收寫指針++

    

#if RX_BUFFER_SIZE == 256

if (++rx_counter == 0) rx_buffer_overflow = 1;  //溢出標志置位

#else

if (rx_wr_index == RX_BUFFER_SIZE)  rx_wr_index = 0; //如果寫入指針等于 緩沖區大小 寫入指針指向第一位

if (++rx_counter == RX_BUFFER_SIZE)

{

rx_counter = 0;

rx_buffer_overflow = 1;

}

#endif

}

 

/***********************************************************

* 函數名稱:char getchar(void)

*

* 功能描述:從接收緩沖區獲取一字節數據

*

* 參數列表:無

*

* 返回結果:獲取到的數據

***********************************************************/

char getchar(void)

{

char data;

while (rx_counter == 0);    //如果接收數據個數為0 則等待

data = rx_buffer[rx_rd_index++];

#if RX_BUFFER_SIZE != 256

if (rx_rd_index == RX_BUFFER_SIZE)  rx_rd_index = 0;

#endif

_asm("sim"); //關總中斷

--rx_counter;

_asm("rim"); //開總中斷

return data;

}

 

/***********************************************************

* 函數名稱:int getStr(char *Buf,int count)

*

* 功能描述:從接收緩沖區獲取一幀數據

*

* 參數列表:*Buf  存儲收到的數據 數組

*   count 要獲取的數據長度

*

* 返回結果:返回獲取到的數據長度

***********************************************************/

int getStr(char *Buf,int count)

{

int i = 0;

for (i=0; i

Buf[i] = getchar();

}    

Buf[i] = '

主站蜘蛛池模板: 锦州市| 浦东新区| 苍溪县| 池州市| 土默特左旗| 宁蒗| 托克逊县| 黔东| 西丰县| 邮箱| 潼南县| 苏尼特左旗| 凤阳县| 黄大仙区| 张家界市| 平罗县| 邛崃市| 商都县| 宜昌市| 察隅县| 垦利县| 吐鲁番市| 特克斯县| 马龙县| 河间市| 河西区| 翁牛特旗| 怀宁县| 灯塔市| 邢台县| 浑源县| 屯留县| 西乌| 墨江| 湾仔区| 仲巴县| 乳源| 巴青县| 忻城县| 沙坪坝区| 紫阳县|