[AVR单片机] ATMega128串口问题,感觉是晶振不对!帮忙看看呗?

[复制链接]
 楼主| Mars.CN 发表于 2013-6-11 16:36 | 显示全部楼层 |阅读模式
用的是最小系统版,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;
}

感觉没有问题,但是接收发送都是错的,有的干脆就收不到数据
dqyubsh 发表于 2013-6-11 20:44 | 显示全部楼层
1,先看熔丝对不对,要设成外部晶振,速度最大的。缺省是内部8M晶振。
2,单片机发送接收都可以用示波器观察……
3,检查232转换芯片能否正常工作,现在市场上好多垃圾232,不小心就买到假的。

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!

查看全部评分

ningling_21 发表于 2013-6-11 20:56 | 显示全部楼层
看资料,你的UBR寄存器是不是71或143呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| Mars.CN 发表于 2013-6-11 22:40 | 显示全部楼层
dqyubsh 发表于 2013-6-11 20:44
1,先看熔丝对不对,要设成外部晶振,速度最大的。缺省是内部8M晶振。
2,单片机发送接收都可以用示波器观 ...

我觉得也是和熔丝位有关,但是avr单片机刚刚接触,不知道如何设置,请问新的单片机需要设置熔丝位吗?
为何我装上ucos后貌似晶振正常呢?(仅仅是貌似,也有一些细微差距)
 楼主| Mars.CN 发表于 2013-6-11 22:46 | 显示全部楼层
ningling_21 发表于 2013-6-11 20:56
看资料,你的UBR寄存器是不是71或143呢?

UBRR0H    =    (CPU_CLK_FREQ / BAUD / 16 - 1) / 256;        //设置波特率高位
UBRR0L    =    (CPU_CLK_FREQ / BAUD / 16 - 1) % 256;        //设置波特率地位
得到的结果应该是71

串口芯片是板子上自带的,按理说是没什么问题的
串口转usb数据线是ARM上用过的,应该也没问题
dqyubsh 发表于 2013-6-12 00:42 | 显示全部楼层
Mars.CN 发表于 2013-6-11 22:40
我觉得也是和熔丝位有关,但是avr单片机刚刚接触,不知道如何设置,请问新的单片机需要设置熔丝位吗?
为 ...

新的单片机一定要设置熔丝的。包括去掉103兼容,晶振,BOD等等。
qin552011373 发表于 2013-6-12 10:05 | 显示全部楼层
芯片如果有外部晶振  一定要先设置熔丝位
 楼主| Mars.CN 发表于 2013-6-12 10:20 | 显示全部楼层
问题已解决!果然是熔丝位问题
不乏我这样的菜鸟,把方法分享给大家
先读入熔丝位,然后按照下图设置,再写入即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
liang5319 发表于 2013-6-12 15:49 | 显示全部楼层
新单片机时内部1M晶振,使用外部需先配置。
j542325878 发表于 2018-3-11 16:53 | 显示全部楼层
请教下,我win10的出现同串口助手乱码
Lbsonggz 发表于 2018-3-11 21:02 | 显示全部楼层
波特率公式有问题,main 函数中加while (1)死循环,允许接收中断怎么没有接收中断函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

43

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

9

主题

43

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部