?? 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 + -