📄 usart_re.c
字号:
#include <iom16v.h>
#include <macros.h>
#define Ulong unsigned long
#define Uint unsigned int
#define Uchar unsigned char
#define fosc 16000000
#define baud 9600
Uchar RX_data[4]={0}; //串口接收的信息数据
Uchar RX_counter=0;//串口接收到的字节数计数器
Uchar receivedata[4]={0x00,0x00,0x00,0x00};//串口接收的数据
Uchar ReceiveEn;
Uchar ReceiveFinish;
#define DLE 0xAA;
#define STX 0xBB;
/*----------------------------串口初始化---------------------*/
void USART_Init(void)
{
UBRRL=(fosc/16/(baud+1))%256;//设置波特率
UBRRH=(fosc/16/(baud+1))/256;
UCSRB|=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//接受器与发送器使能
UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(3<<UCSZ0);//设置针格式:8个数据位,2个停止位
}
////////////////////////////////////////////////////////////////
Uchar USART_Receive(void)
{
while(!(UCSRA&(1<<RXC)));//等待接收数据
return UDR;//从缓冲器中获取并返回数据
}
void RX_Process(void)
{
//while(!(UCSRA&(1<<RXC)));
if(RXC)
{
if(ReceiveEn)
{
if(RX_data[RX_counter]=='s')//判断接收停止标志
{
RX_data[RX_counter]=UDR;
RX_counter++;
ReceiveEn = 0;
ReceiveFinish = 1;
}
else
{//数据保存
RX_data[RX_counter]=UDR;
RX_counter++;
receivedata[0]=receivedata[1];
receivedata[1]=receivedata[2];
receivedata[2]=receivedata[3];
receivedata[3]=receivedata[4];
receivedata[4]=UDR;
}
}
else
{//判断数据接收开始标志
receivedata[0]=receivedata[1];
receivedata[1]=UDR;
if((receivedata[0]==DLE)&&(receivedata[1]==STX))
{
ReceiveEn =1;
RX_counter=0;
/*for(loop=0;loop<255;loop++)
{
RX_data[loop]=0;
}*/
}
}
RXC=0;
}
}
void main(void)
{}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -