📄 rxdtxd.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 + -