打印
[AVR单片机]

别人的串口程序,我复制来用,结果,收到乱码

[复制链接]
2042|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#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 | 只看该作者
这是结果

11111.jpg (51.5 KB )

11111.jpg

使用特权

评论回复
板凳
wangjie5540|  楼主 | 2010-10-4 10:54 | 只看该作者
另外的结果

11111.jpg (49.94 KB )

11111.jpg

使用特权

评论回复
地板
wangjie5540|  楼主 | 2010-10-4 11:04 | 只看该作者
可是别人的却成功了,,就是我看的别人的视频上的

grab04344.jpg (86.38 KB )

grab04344.jpg

使用特权

评论回复
5
粉丝| | 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
6
gsk1201| | 2011-8-17 00:47 | 只看该作者
你的问题是程序没看懂吧!看看下面的这句程序
uart_init(1200);波特率设置成1200但你的串口助手用的是19200.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

23

帖子

1

粉丝