搜索
bottom↓
回复: 7

ATmega64A USART1发送数据乱码的提问

[复制链接]

出0入0汤圆

发表于 2013-7-2 17:40:13 | 显示全部楼层 |阅读模式
最近做一个ATmega64A双串口实验,在使用像类似的初始化代码和测试代码,USART0工作正常,但是USART1端口现在发送数据时出现乱码。麻烦各位老大看看可能是哪里出了问题呢?谢谢大家!
测试代码:
//Initalization USART1
void USART1Init(void)
{
        //Set Baud Rate
        temp = 14745600UL / 16 / 9600 - 1;
        UBRR1H = (uint8_t)(temp >> 8);
        UBRR1L = (uint8_t)temp;
       
        UCSR1C |= ((1 << UCSZ1) | (1 << UCSZ0)); //Data is 8bit
        UCSR1C &= 0xcf; //Parity is NONE
        UCSR1C &= (~(1 << USBS)); //Stop bit is 1bit
        UCSR0B |= ((1 << RXEN) | (1 << TXEN)); //Enable RXD & TXD
}


int mian(void)
{
        uint8_t TestVariable[10];
       
        USART1Init(void);
       
        //Test start
        TestVariable[0] = 0;
        TestVariable[1] = 1;
        TestVariable[2] = 2;
        TestVariable[3] = 3;
        TestVariable[4] = 4;
        TestVariable[5] = 5;
        TestVariable[6] = 6;
        TestVariable[7] = 7;
        while (1)
        {
                temp = 0;
                do
                {
                        while (!(UCSR1A & (1 << UDRE))) ; //Waitting TXD registor empty
                        UDR1 = TestVariable[temp]; //Loading data
                }
                while(8 > ++temp);
        }
       
        return 0;
}
俘获的发送数据片段:

本帖子中包含更多资源

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

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-7-2 17:52:22 | 显示全部楼层
编译环境:WINAVR

出0入0汤圆

发表于 2013-7-2 18:04:03 | 显示全部楼层
2個串口都要做初始化,

你的程序看起來2個串口初始化都沒完成;

要使用USART0,要初始化UBRR0H:UBRR0L,UCSR0B,UCSR0C

要使用USART1,要初始化UBRR1H:UBRR1L,UCSR1B,UCSR1C

出0入0汤圆

 楼主| 发表于 2013-7-2 18:09:38 | 显示全部楼层
jim20090418 发表于 2013-7-2 18:04
2個串口都要做初始化,

你的程序看起來2個串口初始化都沒完成;

感谢jim20090418的热心回答,USART0的初始化部分没有贴上来,USART1和USART0使用像类似的初始化代码,USART0已通过测试,完全没有问题。但是USART1却出现发送数据时出现乱码的问题,现在从代码上看不出哪里还有问题,所以请大家帮忙看看。

出0入0汤圆

发表于 2013-7-2 18:13:18 | 显示全部楼层
        UCSR1C |= ((1 << UCSZ1) | (1 << UCSZ0)); //Data is 8bit
        UCSR1C &= 0xcf; //Parity is NONE
        UCSR1C &= (~(1 << USBS)); //Stop bit is 1bit
        UCSR0B |= ((1 << RXEN) | (1 << TXEN)); //Enable RXD & TXD  <-----這個暫存器是USART0的

出0入0汤圆

 楼主| 发表于 2013-7-2 18:45:53 | 显示全部楼层
jim20090418 发表于 2013-7-2 18:13
UCSR1C |= ((1

是的,是我弄错了。其实是在去除一些无关代码时弄错了。
正确的应为“UCSR1B |= ((1 << RXEN) | (1 << TXEN)); //Enable RXD & TXD”
重新检查后故障依然存在。正在查找原因。
感谢jim20090418

出0入0汤圆

 楼主| 发表于 2013-7-2 19:16:40 | 显示全部楼层
修改了一下测试代码:
从俘获的数据可以看出,出错的都是在头几个字节里。

//Initalization USART1
void USART1Init(void)
{
        //Set Baud Rate
        temp = 14745600UL / 16 / 9600 - 1;
        UBRR1H = (uint8_t)(temp >> 8);
        UBRR1L = (uint8_t)temp;
       
        UCSR1C |= ((1 << UCSZ1) | (1 << UCSZ0)); //Data is 8bit
        UCSR1C &= 0xcf; //Parity is NONE
        UCSR1C &= (~(1 << USBS)); //Stop bit is 1bit
        UCSR1B |= ((1 << RXEN) | (1 << TXEN)); //Enable RXD & TXD
}


int mian(void)
{
        uint8_t TestVariable[20];
       
        USART1Init(void);
       
        //Test start
        TestVariable[0] = 0;
        TestVariable[1] = 1;
        TestVariable[2] = 2;
        TestVariable[3] = 3;
        TestVariable[4] = 4;
        TestVariable[5] = 5;
        TestVariable[6] = 6;
        TestVariable[7] = 7;
        TestVariable[8] = 8;
        TestVariable[9] = 9;
        TestVariable[10] = 10;
        TestVariable[11] = 11;
        TestVariable[12] = 12;
        TestVariable[13] = 13;
        TestVariable[14] = 14;
        TestVariable[15] = 15;
        while (1)
        {
                temp = 0;
                do
                {
                        while (!(UCSR1A & (1 << UDRE))) ; //Waitting TXD registor empty
                        UDR1 = TestVariable[temp]; //Loading data
                }
                while(16 > ++temp);
        }
       
        return 0;
}

俘获的发送数据片段:

本帖子中包含更多资源

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

x

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 01:29

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

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