搜索
bottom↓
回复: 2

iar编译环境下 串口通信出现的怪问题

[复制链接]

出0入0汤圆

发表于 2009-6-4 18:13:05 | 显示全部楼层 |阅读模式
今天做串口通信有如下程序:
void init_Usart()
{
     UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);   //使能接收,发送,接收中断,
     UCSRC=0x86;    // 8 bit,1bit结束,异步
     UCSRA=0x20;    //复位值,
     UBRRH=0x00;     //波特率 9600
     UBRRL=47;
}
void send_usart(uchar da)   //串口发送数据
{
     while ( !( UCSRA & (1<<UDRE)) );
     UDR=da;
     while ( !( UCSRA & (1<<UDRE)) );
}
主程序:
void main(void)
{
     uchar i=0;
  //   uchar m=0x32;
     DDRA|=0x9c;
     DDRB|=0xff;
     DDRC|=0xff;
     DDRD|=0xfa;
     PORTD|=0xf0;
     Delay1ms(50);          
     init_Usart();
     PORTD|=0xf0;         
                 PORTD&=(0<<PD4);         //ucom1
                 
                 _NOP();
     for(i=0;i<20;i++)
     {
          send_usart(0x43);
     }
     while(1);
}
可是我通过串口大师接收到的数据却是0xA8,A8……A8,E8,而不是0x43。而如果我把串口发送数据改成
for(i=0;i<20;i++)
     {
          send_usart(i);
     }
从串口接收到的数据就是0x00,01,02,……12,13.我不明白为什么有这么大的区别,硬件是一样的,而且这段程序在ICC的编译下是正常的。希望哪位高手指点一下,谢谢。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2009-6-4 18:47:49 | 显示全部楼层
你用示波器看实际出来的信号就能查出问题了

出0入0汤圆

 楼主| 发表于 2009-6-5 14:29:05 | 显示全部楼层
问题解决了,在端口转换PORTD&=(0<<PD4);         //ucom1后加了一个1ms的延时,就可以了。真不知道这是怎么回事。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-21 14:47

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

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