3254|4

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

atmeg16 UART怪异问题 [复制链接]

#include <iom16v.h>
#include <macros.h>
#define  uchar unsigned char
#define  uint  unsigned int

#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()
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = BIT(URSEL) | 0x06;
UBRRL = 0x01; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
UCSRB = 0x00; 

}
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()
{  
    uart_init();
        while(1)
        {
           if(flag)
           {
              uart_sendB(rdata);
                  flag=0;
           }
        }
        
}

我这样写可以通过串口助手发什么收什么,但是我现在想改用如下的:
比如当我收到0xAB的时候,我让串口回复给我0x88
我写成这样
void uart_rx()
{
    UCSRB&=~BIT(RXCIE);
        rdata=UDR;
       if(rdata == 0xAB)
              flag=1;
        UCSRB|=BIT(RXCIE);
}
void main()
{
    uart_init();
        while(1)
        {
           if(flag)
           {
              uart_sendB(0X88);
                  flag=0;
           }
        }        
}

但是当我发送0XAB的时候,串口没有任何回复,请问各位是怎么回事呢?
多谢!!
此帖出自单片机论坛

最新回复

你好我用的中断方式接受数据,然后判定为yes,则发送一个y。可是老是输不出来y不知道怎么回事  详情 回复 发表于 2013-9-11 11:39
点赞 关注
 

回复
举报

624

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
靠,没有看出来有什么区别啊~~~

也是这个思路啊~~
此帖出自单片机论坛
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

你的串口能收到数据吗?

你的接收只有一个子函数,主程序里也没有调用这个子函数,收的到数据,但这只是你单片机的一种状态而已,把那个子程序加进去。
void main()
{
    uart_init();
        while(1)
        {
           uart_rx();
           if(flag)
           {
              uart_sendB(0X88);
                  flag=0;
           }
        }        
}
此帖出自单片机论坛

点评

你好我用的中断方式接受数据,然后判定为yes,则发送一个y。可是老是输不出来y不知道怎么回事  详情 回复 发表于 2013-9-11 11:39
 
 
 

回复

900

帖子

0

TA的资源

五彩晶圆(初级)

4
 
兄弟搞定了吗?我也遇到同样的问题了
此帖出自单片机论坛
 
 
 

回复

900

帖子

0

TA的资源

五彩晶圆(初级)

5
 
原帖由 看见未来 于 2012-5-11 16:51 发表
你的接收只有一个子函数,主程序里也没有调用这个子函数,收的到数据,但这只是你单片机的一种状态而已,把那个子程序加进去。
void main()
{
    uart_init();
        while(1)
        {
           uart_r ...

你好我用的中断方式接受数据,然后判定为yes,则发送一个y。可是老是输不出来y不知道怎么回事
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表