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

📄 rxdtxd.h

📁 单片机的串口通信协议
💻 H
字号:

volatile unsigned char bm[10];          //定义接收的数据帧的存放地址
volatile unsigned char recestate=0;     // 0--接收空闲;1--正在接收;3--总超时; 4--头超时;5--间隔超时;6--接收完成(字节超时)
volatile unsigned char recest_time=0;   //接收时间,1次为0.5个字节,对于9600波特率的。
volatile unsigned char recestlen=0;     //帧的长度




//********************定时器。0.3个字节定时
SIGNAL (SIG_OVERFLOW0)    //64分频,4计数
{
  recest_time++;
  //if(recest_time<127)
  //PORTD|=(1<<PD3);
  //if(recest_time>124)
  //PORTD&=~(1<<PD3);
  if(recest_time>250)
  recest_time=0;
}

//~~~~~~~~~~~~~~~~~设置串口的参数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void USART_Init( unsigned int baud )
{
/* 设置波特率9600*/
UBRRH = 0;
UBRRL = 47;
/* 接收器与发送器使能*/
UCSRB = (1<<TXCIE)|(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
/* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


void USART_Transmit( unsigned char data )
{PORTD|=(1<<PD2);   //485输出使能
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE)) )
;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
}



unsigned char USART_Receive( void )
{
/* 等待接收数据*/
while ( !(UCSRA & (1<<RXC)) )
;
/* 从缓冲器中获取并返回数据*/
return UDR;
}



SIGNAL (SIG_UART_RECV)  //接收中断
 { 
   if(recestlen<6)     //设定接收数据的长度
   {
     bm[recestlen]=UDR;  //接收数据
     recestlen++;        
    if(recestlen>=6)
      {
	  recestlen=0;
	  UCSRB &= ~( (1<<RXCIE) | (1<<RXEN) );   //关闭接收使能
	  }
   }
 }   
//****************************************************************************
SIGNAL (SIG_UART_TRANS) //发送结束中断
 {PORTD&=~(1<<PD2); }    //485输入使能
//**************************************************************************** 
   //*p要发送的数据

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -