⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usart_re.c

📁 这是AVR系列单片机mega16串口的初始化程序和串口接收程序
💻 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 + -