打印
[Atmel]

AVR64 串口1是不是有问题?

[复制链接]
1178|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 自由自在2013 于 2014-6-18 11:10 编辑

ATMEGA64A串口程序测试,PC机串口调试助手接收,单片机发送,接收数据始终不对,有时还会一直接收00,用示波器看波形循环发送时发出的数据也不对,一直在变化,内部外部晶振都试过了,还是不行,错误在哪?程序问题?
#include "iom64v.h"
#include "USART.H"
void  main(void)
{
   unsigned char text,temp=0x00;
   unsigned int i;
   
   IO_Init();
   USART_Init();
   //text=USART_Receive();
   while(1)
   {  
     for(i=0;i<10;i++)
     {
          USART_Transmit(temp);
          temp++;   
     }
     Delay_1ms(1000);
  }
}
//延时函数
void Delay_1ms (volatile unsigned int cuont)         
{  
volatile unsigned int j;
volatile unsigned int i;
for(i=cuont;i>0;i--)
{
   for(j=1000;j>0;j--)
   {;}
}
}
//IO初始化
void IO_Init( void )
{
     DDRA = 0x00;
     DDRD = 0x00;
  
     DDRA = 0xFF;
     DDRD = 0x08;
}
//串口初始化
void USART_Init( void )
{   
    UBRR1H = 0x00;  /* 设置波特率&8MHZ*/
    UBRR1L = 0x33;

    UCSR1A = 0x20;  /*异步通讯,U2X1=0*/  
    UCSR1B = 0x18;  /*接收器与发送器使能*/  
    UCSR1C = 0x06;  /*设置帧格式: 8个数据位, 1个停止位 */
}
//串口发送函数
void USART_Transmit( unsigned char data )
{
     while ( !( UCSR1A & (1<<UDRE1)) );
     UDR1 = data;
}
//串口接收函数
unsigned char USART_Receive( void )
{
     while ( !(UCSR1A & (1<<RXC1)) );
     return UDR1;
}

串口接收窗口

相关帖子

沙发
dengruoxian| | 2014-6-18 12:26 | 只看该作者
新手不太懂,不过temp能自加吗,

使用特权

评论回复
板凳
mintspring| | 2014-6-19 11:23 | 只看该作者
楼主的程序有问题。这个东西没问题,另外检查一下你的电路。程序没仔细看,粗略看了一下,配置可能不是正确。你先发送一个固定字符串。如果正常就是串口配置没问题,就是其他地方传递搞错了。

使用特权

评论回复
地板
自由自在2013|  楼主 | 2014-7-12 13:59 | 只看该作者
问题解决了,硬件电路存在干扰。

使用特权

评论回复
5
自由自在2013|  楼主 | 2014-7-12 14:00 | 只看该作者
dengruoxian 发表于 2014-6-18 12:26
新手不太懂,不过temp能自加吗,

可以的

使用特权

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

本版积分规则

26

主题

83

帖子

3

粉丝