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