打印
[AVR单片机]

ATmega128双串口 USART1 各位大神 急!!!

[复制链接]
3366|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
akeer2143|  楼主 | 2013-3-27 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
采用的是查询的方式进行双串口的收发,但是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++;
    }
}

相关帖子

沙发
akeer2143|  楼主 | 2013-3-27 10:07 | 只看该作者
调试良久,一直看不出问题所在。  在线等 急!!!!

使用特权

评论回复
板凳
huangxz| | 2013-3-27 14:59 | 只看该作者
没问题啊,因为没有硬件,所以用hapsim试了一下,可以发出数据的。
u1_test.rar (3.72 KB)

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4 很给力!
地板
qin552011373| | 2013-3-27 22:56 | 只看该作者
检查一下硬件,确保硬件没问题

使用特权

评论回复
5
akeer2143|  楼主 | 2013-3-28 11:26 | 只看该作者
huangxz 发表于 2013-3-27 14:59
没问题啊,因为没有硬件,所以用hapsim试了一下,可以发出数据的。

非常感谢!已解决!在主函数中初始化时出问题了

使用特权

评论回复
6
yhhsky| | 2013-3-30 18:46 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

12

帖子

0

粉丝