打印
[AVR单片机]

mega128的串口我都仿照例程写但是还有问题,求大大!

[复制链接]
1028|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuanchen2018|  楼主 | 2014-8-24 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是128A 然后8M晶振 9600 的波特率 用的是uart0那个

void uart0_init()
{
  
  DDRE = 0xfe;
  PORTE = 0xff;
  UCSR0B = 0x00; //disable while setting baud rate
  UCSR0A = 0x00;
  UCSR0C = 0x07;
  UBRR0L = 0x33; //set baud rate lo
  UBRR0H = 0x00; //set baud rate hi
  UCSR0B = 0x18;
  UCSR0A = 0x20;
       
}
这个是我的初始化函数
void uart0_tx(uint8 tp)
{
       
        while(!( UCSR0A & BIT5));
        UDR0 = tp ;
   
}
这个是发送函数  

有时候会停在这个while的上 于是我初始化的时候就加了个UCSR0A = BIT5 来认为写入空标志位,但是接收到的时候还是跟我发送的不一样诶,纠结了一个早上了T  T
求解答!

相关帖子

沙发
qq4988| | 2014-8-24 12:34 | 只看该作者
void uart0_init(void)                                                //串口初始化
{
        UCSR0B = 0x00;                                                  //disable while setting baud rate
        UCSR0A = 0x00;
        UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);                                   //无校验
        UBRR0L=(F_CPU/16/(baud+1))%256;
        UBRR0H=(F_CPU/16/(baud+1))/256;                                  //波特率设置
        UCSR0B =(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
}


void putchar0(unsigned char c)
{
        while (!(UCSR0A&(1<<UDRE0)));
        UDR0=c;
}

使用特权

评论回复
板凳
whm597| | 2014-8-24 13:30 | 只看该作者
//文件名称:UART1串口驱动函数文件
//功    能:串口卡初始化、串口发送字符串
//平    台:AVR ATMega128L
//时    钟:8MHZ

//^^^^**************************************************************************
// 函数名称  : UART1_Iint()
// 描    述  : UART1串口初始化
// 输          入  : 无
//        
// 输          出  : 无
// 使用的模块: UART1
// 通信参数  : 8位数据,1位停止位,无校验
// 波特率    : 9600
//******************************************************************************
void UART1_Init(void)
{
         UCSR1B = 0x00;  //disable while setting baud rate
         UCSR1A = 0x00;
         UCSR1C = 0x06;
         UBRR1L = 51;    //set baud rate lo
         UBRR1H = 0x00;  //set baud rate hi
         UCSR1B = 0x18;
}


//^^^^**************************************************************************
// 函数名称  : UART1_Putch()
// 描    述  : 向串口发送单个字符
// 输          入  : 待发送字节
//        
// 输          出  : 无
// 使用的模块: UART1
//******************************************************************************
void UART1_Putch(uint8 data)
{
        // 检测是否可以发送, UDRE = 1 寄存器为空
    while ( !( UCSR1A & (1 << UDRE1)) )
           ;
    UDR1 = data;
}

使用特权

评论回复
地板
kingtekharlin| | 2014-9-2 23:49 | 只看该作者
可联系代理商,广东地区:QQ 1085487223

使用特权

评论回复
5
ningling_21| | 2014-9-3 10:06 | 只看该作者
/**************发送采用查询方式**************/
void uart0_send(uchar c)
{
  while( !(UCSR0A & (1<<UDRE0)) );
        UDR0=c;
}


可以正常工作的程序

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝