用的是最小系统版,ATMega128的芯片,今天做串口试验的时候发现接收发送数据都有问题
板子晶振是11.0592MHz的
程序奉上
usart.c
#include <avr/io.h>
#define CPU_CLK_FREQ 11059200
#define BAUD 9600
void Usart_Init()
{
UCSR0B = 0X00; //关闭串口0所有使用,包括中断
UCSR0B = 0X00; //不适用倍率发送
UCSR0C = 0X06; //奇偶模式无,八位数据位,一位停止位
UBRR0H = (CPU_CLK_FREQ / BAUD / 16 - 1) / 256; //设置波特率高位
UBRR0L = (CPU_CLK_FREQ / BAUD / 16 - 1) % 256; //设置波特率地位
UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0); //是能串口接收中断及串口接收发送
}
void Usart_Putchar(unsigned char c)
{
while(!(UCSR0A&(1<< UDRE0))); //等待串口空闲并发送
UDR0 = c; //发送字符
}
unsigned char Usart_Getchar()
{
while(!(UCSR0A& (1<<RXC0))); //等待串口接收完成
return UDR0;
}
test.c
#include <avr/io.h>
#include <avr/interrupt.h>
#include "usart.h"
int main(void)
{
unsigned char g = 0xF0;
DDRB = 0XF0;
PORTB = 0XF0;
Usart_Init();
PORTB = 0X70;
Usart_Putchar('a');
PORTB = 0XB0;
g = Usart_Getchar();
PORTB = g;
}
感觉没有问题,但是接收发送都是错的,有的干脆就收不到数据 |