采用的是查询的方式进行双串口的收发,但是USART0收发正常,但是USART1不工作,不能发也不能收,请各位大师指导一下,非常感谢!!
下面是程序::
//***********************************
//函数名:usart1_init
//函数入参:baud 需要设置的波特率
//函数返回:无
//函数功能:串口1初始化
//***********************************
void usart1_init(unsigned int baud)
{
UCSR1A=0x00; //单倍速模式
UCSR1B=0x00; //清空控制寄存器,禁止所有中断
UCSR1C=(1<<UCSZ11)|(1<<UCSZ10); //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
UBRR1H=(fosc/(16*baud)-1)/256; //写波特率的值
UBRR1L=(fosc/(16*baud)-1)%256;
UCSR1B=(1<<RXEN1)|(1<<TXEN1); //接收、发送使能
}
//***********************************
//函数名:tx1_char
//函数入参:byte 要发送的字节或字符
//函数返回:无
//函数功能:串口发送一个字节或字符
//***********************************
void tx1_char(unsigned char byte)
{
while ( !( UCSR1A & (1<<UDRE1)) ); //等待发送缓冲器为空
UDR1 = byte; //将数据放入缓冲器,发送数据
while(!(UCSR1A & (1<<TXC1))); //等待发送完毕
UCSR1A|=(1<<TXC1);
}
//***********************************
//函数名:tx1_data
//函数入参:s 要发送的数组的首地址,length 发送的长度
//函数返回:无
//函数功能:发送指定长度的数组或者字符串
//***********************************
void tx1_data(unsigned char *s,unsigned char length)
{
unsigned char n = length;
while(n--)
{
tx1_char(*s);
s++;
}
}
//***********************************
//函数名:tx1_str
//函数入参:s 要发送的字符串
//函数返回:无
//函数功能:发送一个字符串
//***********************************
void tx1_str(unsigned char *s)
{
while(*s)
{
tx1_char(*s);
s++;
}
tx1_char('\r');
tx1_char('\n');
}
//***********************************
//函数名:rev1_char
//函数入参:无
//函数返回:UDR1
//函数功能:接收一个字节
//***********************************
unsigned char rev1_char()
{
while(!(UCSR1A&(1<<RXC1)));
return UDR1;
}
//***********************************
//函数名:rev1_data
//函数入参:s 要接收的数组的首地址 n 接收长度
//函数返回:无
//函数功能:接收一个字符串或数组的n个字节
//***********************************
void rev1_data(unsigned char *s,unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
s[i]=rev1_char();
}
}
//***********************************
//函数名:rev1_str
//函数入参:s 要接收的字符串
//函数返回:无
//函数功能:接收一个字符串
void rev1_str(unsigned char *s)
{
unsigned char i=0;
while(*s)
{
s[i]=rev1_char();
i++;
}
} |