ATMega128串口问题,感觉是晶振不对!帮忙看看呗?

2019-03-24 20:39发布

用的是最小系统版,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;
}

感觉没有问题,但是接收发送都是错的,有的干脆就收不到数据
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
px2noa
1楼-- · 2019-03-25 06:20
我想是你得加while(1) 。

[ 本帖最后由 px2noa 于 2013-6-14 23:38 编辑 ]

一周热门 更多>