标题: 最基本的AVR串口通讯调试有问题,请大神赐教 [打印本页]

作者: PythonS    时间: 2018-11-2 17:08
标题: 最基本的AVR串口通讯调试有问题,请大神赐教
使用的是ATMega644PA,晶振12Mhz,熔丝位设置为如下图
在串口通讯里显示的数据有问题,不知道为什么,请大家帮我看看

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

//常量声明
#define BAUD 9600
#define FOSC  12000000
//全局变量声明
unsigned char Transmit

//函数声明
void Port_Init(void);   //端口初始化配置
void Usart_Init(void);  //USART寄存器设置
void Usart_PutChar(unsigned char cTXData);  //字节发送函数


int main(void)
{
    Port_Init();
    Usart_Init();

    Transmit = 0x12;

    Usart_PutChar(Transmit);

    sei();          //使能全局中断

    while(1)
    {


    }
}

//端口状态初始化设置函数
void Port_Init()
{
    PORTD = 0X00;          //USART的发送接收端口分别为PD0和PD1
    DDRD |= (1 << PD1);   //PD0为接收端口,置为输入口;PD1为发送端口,置为输出口
}

//USART寄存器配置函数
void Usart_Init()
{

    UCSR0B = 0x00;//先关闭串口,因为要设置波特率
      UCSR0A = 0X00;
      unsigned int UBRR;
    UBRR = FOSC/16/BAUD-1;
    UBRR0H = (uint8_t)(UBRR>>8);
    UBRR0L = (uint8_t)(UBRR);  //设置波特率

    UCSR0B |= (1 << TXEN0);    //发送使能
    UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00);  //异步,数据格式8,N,1


}


//字节发送函数
void Usart_PutChar(unsigned char cTXData)
{
    while( !(UCSR0A & (1 << UDRE0)) );  //只有数据寄存器为空时才能发送数据
    UDR0 = cTXData;
}



QQ截图20181102170726.png (29.6 KB, 下载次数: 54)

QQ截图20181102170726.png

QQ截图20181102170735.png (55.41 KB, 下载次数: 61)

QQ截图20181102170735.png

作者: PythonS    时间: 2018-11-5 08:34
不知道是波特率部分还是晶振部分的问题?
还有我的USART部分的寄存器按照了datasheet编写,应该没有问题

作者: PythonS    时间: 2018-11-5 09:47
以上程序在串口助手1200的波特率设置下可以运行,不知道为什么,是我的熔丝位设置有问题吗
作者: xbook_ben    时间: 2018-11-5 10:10
没用过ATMega644PA,不过推荐楼主到Atmel的START上去看看,START实际是Atmel的一个在线生成驱动库,基本包含了Atmel的所有芯片,只需要选择相应的芯片,简单配置一下,就可以生成相应的驱动代码,网址:http://start.atmel.com/
作者: PythonS    时间: 2018-11-7 11:24
xbook_ben 发表于 2018-11-5 10:10
没用过ATMega644PA,不过推荐楼主到Atmel的START上去看看,START实际是Atmel的一个在线生成驱动库,基本包 ...

多谢回复,解决了问题,是熔丝位设置的问题,现在可以正常收发了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1