[AVR单片机] 别人的串口程序,我复制来用,结果,收到乱码

[复制链接]
 楼主| wangjie5540 发表于 2010-10-4 10:49 | 显示全部楼层 |阅读模式
#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int
#define  mclk   8000000
#pragma interrupt_handler uart_rx:12
uchar rdata,flag=0;
void delay(uint ms)
{
        uint i,j;
for(i=0;i<ms;i++)
    {
    for(j=0;j<1141;j++);
       }
}
void uart_init(uint baud)
{
    UCSRB=0x00;
   UCSRA=0x00;       //控制寄存器清零
   UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);   
                                                        //选择UCSRC,异步模式,禁止                        
                                                     //   校验,1位停止位,8位数据位
   baud=mclk/16/baud-1 ;   //波特率最大为65K
   UBRRL=baud;              
   UBRRH=baud>>8;      //设置波特率
   UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
                                                       //接收、发送使能,接收中断使能
   SREG=BIT(7);                 //全局中断开放
   DDRD|=0X02;                 //配置TX为输出(很重要)
}
void uart_sendB(uchar data)
{
   while(!(UCSRA&(BIT(UDRE)))) ;
   UDR=data;
   while(!(UCSRA&(BIT(TXC))));
   UCSRA|=BIT(TXC);
}
void uart_rx()
{
    UCSRB&=~BIT(RXCIE);
rdata=UDR;
flag=1;
UCSRB|=BIT(RXCIE);
}
void main()
{
    //uchar i=4;
//uchar j='a';
    uart_init(1200);
while(1)
{
    if(flag)
    {
       uart_sendB(rdata);
    flag=0;
    delay(10);
    }
}

}
 楼主| wangjie5540 发表于 2010-10-4 10:53 | 显示全部楼层
这是结果

本帖子中包含更多资源

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

×
 楼主| wangjie5540 发表于 2010-10-4 10:54 | 显示全部楼层
另外的结果

本帖子中包含更多资源

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

×
 楼主| wangjie5540 发表于 2010-10-4 11:04 | 显示全部楼层
可是别人的却成功了,,就是我看的别人的视频上的

本帖子中包含更多资源

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

×
粉丝 发表于 2010-10-4 12:20 | 显示全部楼层
(1)  //UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); //接收、发送使能,接收中断使能
(2) //   DDRD|=0X02;                 //配置TX为输出(很重要) ???
TXEN的优先级高于DDRD方向控制,设置生效后,自动把IO口设置为输出。
//while(!(UCSRA&(BIT(TXC))));
//   UCSRA|=BIT(TXC);
既然已设置了发送中断使能,还查询什么?TXC由硬件自动清0。逻辑混乱。

//void uart_rx()
//{
// UCSRB&=~BIT(RXCIE);
//UCSRB|=BIT(RXCIE);  
//}
无事开启RXCIE,写这程序的人太SB了。

评分

参与人数 1威望 +1 收起 理由
wangjie5540 + 1

查看全部评分

gsk1201 发表于 2011-8-17 00:47 | 显示全部楼层
你的问题是程序没看懂吧!看看下面的这句程序
uart_init(1200);波特率设置成1200但你的串口助手用的是19200.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

23

帖子

1

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