|
使用的是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;
}
|
|