完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
#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 = getchar(); } Buf = ' |