搜索
bottom↓
回复: 4

atmega64 模拟串口发送是收到的数据完全不对

[复制链接]

出0入0汤圆

发表于 2012-1-10 09:49:10 | 显示全部楼层 |阅读模式
写了一小段串口的程序如下:


#include <util/delay.h>       
#include <avr/io.h>

#define uint8 unsigned char

void Uart_Init(void)
{
       
//        UCSR0A |= (1<<U2X);
        UCSR0B|= ((1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0));         //接收中断使能,发送使能,接收使能
        UCSR0C|= ((1<<UCSZ00)|(1<<UCSZ00));         //数据位长度为8位
        UBRR0L = 0x2F;
        UBRR0H = 0x00;                        //设置波特率为9600
        DDRE |= 0x02;                          //配置TX为输出
}

/*void Uart_Send( uint8 shu)                        //发送一个字节
{       
        while(!(UCSR0A&(1<<UDRE0)));//判断USART数据寄存器是否为空,假如UDREO为1则表示为空
        UDR0 = shu;                                        //赋值
        while(!(1<<TXC0)&UCSR0A);        //判断是否发送完成,若TXCO为1则表示发送完成
        UCSR0A&=(~(1<<TXC0));                //把发送结束标志位置0
}
*/


int main(void)
{       


        Uart_Init();
        uint8 i=5;
        UDR0 = i;
        _delay_ms(5);
        UDR0 = i;
        _delay_ms(5);
        UDR0 = i;
        _delay_ms(5);
        UDR0 = i;
        _delay_ms(5);
        UDR0 = i;
        _delay_ms(5);


}

用PROTEUX仿真,仿真图如下:

(原文件名:搜狗截图_2012-01-10_09-45-54.png)
示波器观察结果如下:

(原文件名:1.png)


(原文件名:2.png)

串口检测工具检测到的数据如下:

(原文件名:3.png)





用示波器读出的波形是正确的,但是串口检测到的数据不正确,希望大虾能够指点下 。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-1-10 09:50:17 | 显示全部楼层
我让程序多次发送5,可是收到的数据完全对应不上啊。

出0入0汤圆

发表于 2012-1-10 11:26:31 | 显示全部楼层
proteus?计算机串口?不是实际电路?

出0入0汤圆

 楼主| 发表于 2012-1-10 12:58:20 | 显示全部楼层
回复【2楼】walshao  万少
-----------------------------------------------------------------------

用的是仿真,没有搭建实际电路,如果仿真有问题的话,实际电路应该也会出现这种问题。
另外我这个程序写错了两个地方,程序更正如下:
#include<util/delay.h>       
#include<avr/io.h>

#define甀椀渀琀8甀渀猀椀最渀攀搀挀栀愀爀

void唀愀爀琀开Init(void)
{

UCSR0A簀=(1<<U2X0);
UCSR0B|=((1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0));        //接收中断使能,发送使能,接收使能
UCSR0C|=((1<<UCSZ00)|(1<<UCSZ00));        //数据位长度为8位
UBRR0L= 砀5F;
UBRR0H= 砀  ;         //设置波特率为9600
DDRE簀= 砀 2;                 //配置TX为输出
}

/*void唀愀爀琀开匀攀渀搀(甀椀渀琀8猀栀甀)         //发送一个字节
{       
while(!(UCSR0A&(1<<UDRE0)));//判断USART数据寄存器是否为空,假如UDREO为1则表示为空
UDR0=猀栀甀;         //赋值
while(!(1<<TXC0)&UCSR0A);        //判断是否发送完成,若TXCO为1则表示发送完成
UCSR0A&=(~(1<<TXC0));         //把发送结束标志位置0
}
*/


int洀愀椀渀(void)
{       


Uart_Init();
uint8椀=5;
UDR0=椀;
_delay_ms(5);
UDR0=椀;
_delay_ms(5);
UDR0=椀;
_delay_ms(5);
UDR0=椀;
_delay_ms(5);
UDR0=椀;
_delay_ms(5);

}
这种时候我把仿真里面的串口检测波特率改为1280,数据正确。
感觉自己设置的波特率是9600应该没有错误。

出0入0汤圆

 楼主| 发表于 2012-1-12 14:26:54 | 显示全部楼层
问题已解决,仿真的时候没有设置熔丝位。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 13:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表