打印

求助 Atmega16 最简单的串口程序。接收不到数据

[复制链接]
5622|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fei8960|  楼主 | 2012-5-7 21:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单独调试发送部分是正常的。
接收时,用串口调试助手,发现一直是0x00,在AVR stdio 里,RXC始终是1,UDR是0x00。不知道是什么原因,是程序哪里有错么?


#include<iom16v.h>
#include<macros.h>
void uart_init(void)
{
CLI();
  UCSRB=0X00; // 禁止串口
  
  UCSRA=0X02;  // 倍速
  
  UCSRC=0X06;  //   8位数据
  UBRRH=0X00;
  UBRRL=12;   //    9600
  UCSRB=0X18;  //   允许发送和接收
  SEI();
  }
  //  数据发送
  void uart_transmit(unsigned char i)
  {
    while(!(UCSRA&(1<<UDRE))); // 等待发送缓冲器为空
UDR=i; // 发送数据
}
// 数据接收
unsigned char uart_receive(void)
{
    while(!(UCSRA&(1<<RXC))) // 等待接收数据
  return UDR; // 获取数据
}
//主函数
void main(void)
{
    unsigned char temp;

  uart_init();
  while(1)
  {
     temp=uart_receive();
   
   uart_transmit(temp);
}
}

相关帖子

沙发
NE5532| | 2012-5-7 21:09 | 只看该作者
发送调通了没?先调发,再调收,自己动脑经想下为什么。

使用特权

评论回复
板凳
fei8960|  楼主 | 2012-5-7 21:16 | 只看该作者
2# NE5532
发送调通了,呃,我的确不知道为什么,想了一晚上了。我实在太菜了,刚刚接触。这个是书上的例程,可我还是调不出来

使用特权

评论回复
地板
NE5532| | 2012-5-7 21:22 | 只看该作者
2# NE5532  
发送调通了,呃,我的确不知道为什么,想了一晚上了。我实在太菜了,刚刚接触。这个是书上的例程,可我还是调不出来
fei8960 发表于 2012-5-7 21:16


那你先描述一下发送用什么什么方法来判断是调通了的呢?

使用特权

评论回复
5
NE5532| | 2012-5-7 21:25 | 只看该作者
另外你到底是想用中断还是想用查询?

使用特权

评论回复
6
fei8960|  楼主 | 2012-5-7 21:29 | 只看该作者
5# NE5532
发送就是把temp换成'A',可以在串口调试助手里,可以显示发送的A。这应该可以了吧。
想用查询的方式,中断更不懂了。。

使用特权

评论回复
7
NE5532| | 2012-5-7 21:32 | 只看该作者
1.发送要从00发到FF,涵盖所有情况,才知道波特率是否正确。
2.你不用中断却又开着中断,还没有定义中断服务程序,中断可能早跳飞了。就算你定义了中断服务程序,中断里面清了接收标志,外面还是什么都收不到。

使用特权

评论回复
8
fei8960|  楼主 | 2012-5-7 21:43 | 只看该作者
7# NE5532
是要把SEI()去掉么,去掉还是收不到数据啊,要把中断关掉的话,还要改哪里么。感谢

使用特权

评论回复
9
NE5532| | 2012-5-7 21:44 | 只看该作者
你还是系统化学习数据手册串口章节吧,多看两次再来写。

使用特权

评论回复
10
fei8960|  楼主 | 2012-5-7 21:50 | 只看该作者
9# NE5532
好的,谢谢,我再看看书

使用特权

评论回复
11
joyme| | 2012-5-8 09:33 | 只看该作者

  while(!(UCSRA&(1<<RXC))) // 等待接收数据
  return UDR; // 获取数据


如果不是笔误的话,while语句后面少个";"

使用特权

评论回复
12
fei8960|  楼主 | 2012-5-8 12:34 | 只看该作者
11# joyme
谢谢,最后我也发现了。细节好重要哦,还纠结了我好久

使用特权

评论回复
13
xlx999| | 2012-5-8 21:05 | 只看该作者
我也学习学习

使用特权

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

本版积分规则

0

主题

41

帖子

1

粉丝