6178|10

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

AVR单片机串口接收不正确,请高手帮忙。 [复制链接]

用串口调试助手发送数据,单片机每次接收时,在中断程序中总是接收到数据0.

我把相关程序代码贴上,请高手们看看。
//UART0 initialize
// desired baud rate: 4800
// actual: baud rate:4808 (0.2%)
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06; //异步模式,无奇偶校验位,1位停止位,8位数据位,
UBRR0L = 0x67; //set baud rate lo,波特率设置为4800bps.
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0xD8; //接收中断使能,发送中断使能,发送使能,接收使能
}

#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
   uint8  status, data;
   status = UCSR0A;
   data = UDR0;
   if(data == 0x00)
   {
       PORTE |= (1<    }
}

最新回复

另外可以用AVR studio仿真一下,看能否进入接收中断  详情 回复 发表于 2008-12-4 22:17
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
另外我的串口接收是正确的。所以硬件的连接应该问题不大。
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 ivension 的回复:
另外我的串口接收是正确的。所以硬件的连接应该问题不大。


这样不能说接收是正确的。
//异步模式,无奇偶校验位,1位停止位,8位数据位,
这个异步模式是指什么?没用过AVR,不清楚你的配置是否正确。
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

4
 
用CODEVISION 生成一个模板,看看你配置的寄存器对不对
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主,AVR有傻瓜开发方法,用IDE直接生成。

还有你去www.ouravr.com看看,大把成功例子免费下载。

——那是国内最好的AVR发烧天堂。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
我传个成功例子给你。

现在不搞单片机了

  1. /******************************************/
  2. /*           广州天河双龙电子公司         */
  3. /*           http://www.sl.com.cn         */
  4. /*              RS232通信演示程序         */
  5. /*             作者:ntzwq@wx88.net        */
  6. /*               2002年5月10日            */
  7. /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
  8. /******************************************/
  9. //  1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
  10. //  2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
  11. //     通信波特率为19200(Tools->Environment Options...)。
  12. //  3、将PC屏幕光标定位于调试窗口中。
  13. #include
  14. #define fosc 8000000 //晶振8MHZ
  15. #define baud 19200         //波特率
  16. //#define osc_address   0x1ff0
  17. //extern unsigned char read_flash(unsigned int add);
  18. /*                  字符输出函数                  */
  19. void putchar(unsigned char c)
  20.         {         
  21.      while (!(UCSRA&(1<
  22.          UDR=c;   
  23.         }
  24. /*                  字符输入函数                  */       
  25. unsigned char getchar(void)
  26.           {
  27.          while(!(UCSRA& (1<
  28.      return UDR;
  29.         }               
  30. /*                        字符串输出函数                    */       
  31. int puts(char *s)
  32.         {
  33.         while (*s)
  34.                 {
  35.                 putchar(*s);
  36.                 s++;
  37.                 }       
  38.     putchar(0x0a);//回车换行
  39.         putchar(0x0d);
  40.         return 1;
  41.         }
  42. /*                    不含回车换行的字符串输出函数          */       
  43. void putstr(char *s)
  44.         {
  45.         while (*s)
  46.                 {
  47.                 putchar(*s);
  48.                 s++;
  49.                 }       
  50.         }       
  51. /*                        UART初始化                                */       
  52. void uart_init(void)
  53. {
  54. //OSCCAL=read_flash(osc_address);

  55. //---------------------------------------------------

  56. UCSRB=(1<
  57. UBRRL=(fosc/16/(baud+1))%256;
  58. UBRRH=(fosc/16/(baud+1))/256;
  59. UCSRC=(1<
  60. }
  61. /*                        RS232通信main函数                */
  62. void main(void)
  63. {
  64. unsigned char i;
  65. uart_init();
  66. puts("广州天河双龙电子公司RS232通信演示程序");
  67. puts("HTTP://WWW.SL.COM.CN");
  68. puts("MAIL TO:sllg@sl.com.cn");
  69. while(1)
  70.     {
  71.          i=getchar();
  72.          if (i!=0)//按PC键盘开始测试
  73.            {
  74.             putstr("当前按键是:");
  75.                 putchar(i);
  76.                 putchar(0x0a);
  77.                 putchar(0x0d);
  78.             puts("广州天河双龙电子公司RS232通信演示程序");
  79.                 puts("HTTP://WWW.SL.COM.CN");
  80.                   puts("MAIL TO:sllg@sl.com.cn");
  81.                 putchar(0x0a);
  82.                 putchar(0x0d);
  83.            }         
  84.         }
  85. }
复制代码


——这个方法是使用ICC AVR的库函数的方法。
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢楼上的程序了,我已经测试了。
我的串口发送没有问题。
主要问题是串口接收不到数据。
我有点怀疑可能是板子的问题。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 ivension 的回复:
谢谢楼上的程序了,我已经测试了。
我的串口发送没有问题。
主要问题是串口接收不到数据。
我有点怀疑可能是板子的问题。


看看是不是有条线断了
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
借楼同问
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
1,你用查询方式看看能否收到数据
2,用示波器直接查看RX脚是否有数据
 
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

11
 
另外可以用AVR studio仿真一下,看能否进入接收中断
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表