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