打印
[AVR单片机]

M128的串口0,怎么也发不出去数据.

[复制链接]
1592|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cpu51|  楼主 | 2014-6-4 17:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
//PE口TX脚一直为高电平.没有数据.
void port_init(void)
{
PORTA = 0x0F;
DDRA  = 0xEF;

PORTB = 0xFF;
DDRB  = 0x03;
PORTC = 0xFF; //m103 output only
DDRC  = 0xFF;

PORTD = 0xF3;  //通讯口RX为输入
DDRD  = 0xFB;

PORTE = 0xFC; //FE//通讯口RX0为输入
DDRE  = 0xFE;

PORTF = 0xFF;
DDRF  = 0xFF;

PORTG = 0xFF;
DDRG  = 0xFF;

}

if(counter1>1600)
     {
           send_battery_voltage();
              counter1=0;
                  }
   else ;
   
//*****************************************************************************
//发送字符
//使用通讯口0
//*****************************************************************************
void send_char_tx0(unsigned char c)
{
        // UCSR0A|=(1<<TXC0);                
     while (! ( UCSR0A & (1<<UDRE0) ) )     //等待TXC置位
     ;            
     UDR0=c;                        //发送字符
        ;                 
     while(!(UCSR0A & (1<<TXC0)));           //等待发送完毕
     UCSR0A|=(1<<TXC0);               
}


//UART0 initialize
// desired baud rate: 9600
// actual: baud rate:9600 (0.0%)
// char size: 8 bit
// parity: Disabled
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x47; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x90;

  UCSR0A=0x00;                             //单倍速模式   
  UCSR0B=0x00;                             //清空控制寄存器,禁止所有中断                     
  UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);          //写UCSRC寄存器,异步通信无校验,8位数据1位停止位
  //UBRR0H=(fosc/(16*baud)-1)/256;           //写波特率的值
  //UBRR0L=(fosc/(16*baud)-1)%256;
  UCSR0B=(1<<RXEN0)|(1<<TXEN0);            //接收、发送使能
}

void main(void)
{
CLI();
init_devices();
/*
run_led_l; delay_ms(500); run_led_h;
alm_led_l; delay_ms(500); alm_led_h;
comm_led_l; delay_ms(500); comm_led_h; delay_ms(500);
  */

while(1)
{  
  counter1=counter1+1;


   if(counter1==1)
      {
            ;
           }
          
   if(counter1>1600)
     {
           send_battery_voltage();
              counter1=0;
                  }
   else ;
   WDR ();
   }
}

相关帖子

沙发
ningling_21| | 2014-6-4 19:33 | 只看该作者
本帖最后由 ningling_21 于 2014-6-4 19:36 编辑

明显程序有问题...
外部晶振8MHZ  ....MEGA128
以下程序正常运行...
  /***************串口0初始化********************/
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
//UBRR0L = 0x47; //baud rate=9600
UBRR0L = 0x33;
UBRR0H = 0x00; //
UCSR0B = 0x98;
}        

/**************发送采用查询方式**************/
void uart0_send(uchar c)
{
  while( !(UCSR0A & (1<<UDRE0)) );
        UDR0=c;
}  

使用特权

评论回复
板凳
cpu51|  楼主 | 2014-6-5 11:16 | 只看该作者
主程序问题,现在可以发送了,但计算机收到的数据不正确,我单片机程序里发送的00,01,02,03,04,05,06,07.收到的是 FD,FB,F9,F7,F5,F3,F1,00,什么问题呢?
8位数据1位停止位,无校验,9600BPS

使用特权

评论回复
地板
ningling_21| | 2014-6-5 11:26 | 只看该作者
cpu51 发表于 2014-6-5 11:16
主程序问题,现在可以发送了,但计算机收到的数据不正确,我单片机程序里发送的00,01,02,03,04,05,06,07.收到 ...

关键是波特率,晶振和 定时器初值 一定要对应...

使用特权

评论回复
5
cpu51|  楼主 | 2014-6-5 16:24 | 只看该作者
ningling_21 发表于 2014-6-5 11:26
关键是波特率,晶振和 定时器初值 一定要对应...

晶振是11.0592M, 定时器初值是指UBRR0L = 0x47;UBRR0H = 0x00;,对吧?这个是用ICC生成的,不会错的.

使用特权

评论回复
6
ningling_21| | 2014-6-5 17:08 | 只看该作者
cpu51 发表于 2014-6-5 16:24
晶振是11.0592M, 定时器初值是指UBRR0L = 0x47;UBRR0H = 0x00;,对吧?这个是用ICC生成的,不会错的. ...

这个晶振我也试过,波特率误差太大...

后来换成8MHZ,初值设置为UBRR0L = 0x33; 就正常了9600...

当然熔丝也要设置正确...

使用特权

评论回复
7
cpu51|  楼主 | 2014-6-5 19:47 | 只看该作者
本帖最后由 cpu51 于 2014-6-5 19:56 编辑

没有问题,我接收端换了1200一直到14400都这样.
另外一个现象:我将PORTE的口线TX0置输出低电平,RX0置输入低电平,不发送无接收,测量TX0线为5V, RX0为1.3V,这没有道理吧?

使用特权

评论回复
8
ningling_21| | 2014-6-6 10:42 | 只看该作者
cpu51 发表于 2014-6-5 19:47
没有问题,我接收端换了1200一直到14400都这样.
另外一个现象:我将PORTE的口线TX0置输出低电平,RX0置输入低 ...

用做UART后,端口就不再需要设置输入输出...

使用特权

评论回复
9
cpu51|  楼主 | 2014-6-6 11:15 | 只看该作者
熔丝设置如下

使用特权

评论回复
评论
ningling_21 2014-6-9 11:16 回复TA
熔丝设置有问题 
10
ningling_21| | 2014-6-9 11:16 | 只看该作者


就是熔丝设置有问题

使用特权

评论回复
11
mingsealtyj| | 2014-6-10 13:02 | 只看该作者
不知道楼主解决没有 建议先置位 UCSRC的URSEL位

使用特权

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

本版积分规则

个人签名:承接工业远程控制系统及设计研发,DCS控制系统,无线采集控制系统,单片机设计,工业设备维修,仪器仪表、控制系统维护、检修。

98

主题

458

帖子

0

粉丝