[AVR单片机] AVR单片机串口接收问题--求指点

[复制链接]
 楼主| xcydwwq 发表于 2017-9-22 10:01 | 显示全部楼层 |阅读模式
开了接受结束中断,能正常的进入中断,但是接受的数据又发送出来为什么是00?
ISR (USART_RXC_vect)
{  
    usart_data=UDR;
   
   USART_SendBit8 (usart_data);        //发送8数据  
}


接收程序
USART_ReceiveBit8 ()                  //接受8位数据
{
    while(!(UCSRA&(1<<RXC)));            //等待接受
    return UDR;
}


本帖子中包含更多资源

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

×
 楼主| xcydwwq 发表于 2017-9-22 10:04 | 显示全部楼层
 楼主| xcydwwq 发表于 2017-9-22 10:05 | 显示全部楼层
发送程序是没有问题的
feelhyq 发表于 2017-9-22 10:07 | 显示全部楼层
用示波器看看发送出去的波形,看看发出去的波特率是不是9600
ningling_21 发表于 2017-9-22 10:37 | 显示全部楼层
xcydwwq 发表于 2017-9-22 10:05
发送程序是没有问题的

串口接收到数据是多少?
 楼主| xcydwwq 发表于 2017-9-22 14:43 | 显示全部楼层
ningling_21 发表于 2017-9-22 10:37
串口接收到数据是多少?

我发送0XFF,单片机收到OXFF后再把0XFF发送出来,但是我只收到0X00,不知道为什么
山东电子小菜鸟 发表于 2017-9-22 14:50 | 显示全部楼层
波特率设置是否与时钟匹配
山东电子小菜鸟 发表于 2017-9-22 14:53 | 显示全部楼层
本帖最后由 山东电子小菜鸟 于 2017-9-22 14:54 编辑

本帖子中包含更多资源

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

×
山东电子小菜鸟 发表于 2017-9-22 14:53 | 显示全部楼层
山东电子小菜鸟 发表于 2017-9-22 14:50
波特率设置是否与时钟匹配


本帖子中包含更多资源

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

×
ningling_21 发表于 2017-9-22 15:11 | 显示全部楼层
xcydwwq 发表于 2017-9-22 14:43
我发送0XFF,单片机收到OXFF后再把0XFF发送出来,但是我只收到0X00,不知道为什么 ...

初始化的波特率是多少?
串口助手设置有问题
 楼主| xcydwwq 发表于 2017-9-22 21:17 | 显示全部楼层
ningling_21 发表于 2017-9-22 15:11
初始化的波特率是多少?
串口助手设置有问题

初始化的波特率是9600,单片机可以正常发送,但是接收有问题
 楼主| xcydwwq 发表于 2017-9-22 21:19 | 显示全部楼层

这个没有问题,在初始化的时候我确实是设置成了两个停止位
UCSRC|=(1<<URSEL)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);     //初始化工作模式,先选择UCSRC寄存器,两个停止位,8位数据。
山东电子小菜鸟 发表于 2017-9-22 21:56 | 显示全部楼层
xcydwwq 发表于 2017-9-22 21:19
这个没有问题,在初始化的时候我确实是设置成了两个停止位
UCSRC|=(1

以前的代码 仅供参考
void init_uart(void)
{
        unsigned int baud;
        baud = 9600;
        UCSR0A = 0x00;       
        UCSR0B = 0x00;
        UCSR0C =(1<<UCSZ01)|(1<<UCSZ00);//异步通信 无校验 1位停止位 8位数据位
        UBRR0H = 0;
              UBRR0L = 103;  //9600
        UCSR0B =(1<<RXEN0)|(1<<RXCIE0)|(1<<TXEN0);       
}
进击的生菜 发表于 2017-9-23 09:05 | 显示全部楼层
我之前好像也遇到过这个问题   当时没在意  楼主你解决了吗
ddllxxrr 发表于 2017-9-23 09:15 | 显示全部楼层
这个同你的硬件或接收软件设置有关系
 楼主| xcydwwq 发表于 2017-9-24 23:20 | 显示全部楼层
山东电子小菜鸟 发表于 2017-9-22 21:56
以前的代码 仅供参考
void init_uart(void)
{

能否把接受中断函数发一下,谢谢了啊
 楼主| xcydwwq 发表于 2017-9-24 23:34 | 显示全部楼层
ddllxxrr 发表于 2017-9-23 09:15
这个同你的硬件或接收软件设置有关系

电脑端可以正常接受到单片机发过来的数据,但是发送到单片机的数据单片机收不到啊
这是中断函数中的代码,可以正常进入中断的

  ucrst_data8=UDR;           //读出数据
      
    if(ucrst_data8=='a')
    {
        USART_SendBit8 ('A');        //接受到a返回A
        USART_SendBit8 (ucrst_data8);        //发送8数据
    }
    else
    {
        USART_SendBit8 ('b');        //没有接受到a返回b
        USART_SendBit8 (ucrst_data8);        //发送8数据
    }

返回值为b和空,切换到16进制,显示为0X62和0x00,也就是说从UDR读取到的数据为0
nicole.088 发表于 2017-9-25 09:37 | 显示全部楼层
1、先检查硬件,把你接电脑端的串口线的TX,RX短路,串口助手自动发送,看能不能自发自收。
2、找一个开发板成功的例程直接测试你的硬件,这样至少保证软件或硬件至少有一个是确定正常的。
3、用示波器看AVR单片机TX引脚是否有数据出来,再看经过串口芯片是否有数据出来
我有一只小可爱 发表于 2019-7-12 11:46 | 显示全部楼层
请问最后问题是怎么解决的,我也遇见一样的问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

80

帖子

1

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