娇小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] = '

主站蜘蛛池模板: 长阳| 全南县| 秭归县| 合阳县| 静安区| 岫岩| 娄底市| 孝义市| 乐昌市| 翁牛特旗| 筠连县| 泰来县| 平远县| 论坛| 霞浦县| 苍溪县| 五峰| 桃园县| 巢湖市| 渝中区| 鄂伦春自治旗| 澄江县| 巴林左旗| 凌海市| 偃师市| 犍为县| 新郑市| 大邑县| 盐池县| 顺义区| 长春市| 景宁| 黄平县| 榆中县| 治多县| 顺义区| 雷山县| 偃师市| 岢岚县| 沁源县| 南皮县|