[AVR单片机] 请教通信中断问题

[复制链接]
3011|10
 楼主| lbk708 发表于 2007-4-24 14:09 | 显示全部楼层 |阅读模式
程序:
void USART_Init( unsigned int baud )
{
    DDRD  |=(1<<(2));                
    PORTD =0xFF;
    UCSRC = (1<<URSEL) | 0x06;
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    UCSRA = 0x00;
    UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
}

SIGNAL(SIG_USART_RECV) //串口接收中断服务程序
{
    uchar kk;
    //while (!(UCSRA & (1<<RXC)))
    //return UDR;
         if(UCSRA&(1<<RXC))
    {
        kk=UDR;
        UCSRA&=~(1<<(RXC));        
    //    return kk;
    }
}
我用串口助手发送一个数据,用查询方式已经调通,但用中断方式调了许久都没有调通,程序进不了中断,请教各位朋友哪里出了问题??谢谢!(小弟第一次调AVR的中断程序)

 楼主| lbk708 发表于 2007-4-24 14:17 | 显示全部楼层

AVR STUDIA编译器

AVR MEGA16
 楼主| lbk708 发表于 2007-4-24 14:21 | 显示全部楼层

请问

还有哪几个寄存器要初始化?
没灵魂 发表于 2007-4-24 14:26 | 显示全部楼层

是用GCC编译吗?

没灵魂 发表于 2007-4-24 14:31 | 显示全部楼层

如果在标题上注明用GCC将得到永生!

神会打救你的!
 楼主| lbk708 发表于 2007-4-24 14:34 | 显示全部楼层

AVR STUDIA编译器

不会吧,那么惨,大哥,我是用AVR STUDIA编译器,你也同样要搭救我啊,听说AVR STUDIA编译器用的是GCC的核,是吗?
没灵魂 发表于 2007-4-24 14:44 | 显示全部楼层

看来悟性不够,跟神是讲缘的,呵呵。。。

 楼主| lbk708 发表于 2007-4-24 14:56 | 显示全部楼层

MEGA16是单串口的

谢谢netjob的热心帮助,MEGA16是单串口的,且我已经对这两个寄存器作了初始化,但为什么就是进不了中断?(查调方式是可以接收到数据的)
//USART 2400 8, n,1 //
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
UCSRA = 0x00;
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL) | 0x06;
 楼主| lbk708 发表于 2007-4-24 18:18 | 显示全部楼层

通了

谢谢天谢谢地,终于调通了,谢谢所有热心的朋友!
BitFu 发表于 2007-4-24 21:20 | 显示全部楼层

???

     if(UCSRA&(1<<RXC))
    {
        kk=UDR;
        UCSRA&=~(1<<(RXC));        
    //    return kk;
    }

这段代码不会被执行,因为 进入中断后RXC自动被硬件清零。
 楼主| lbk708 发表于 2007-4-25 08:33 | 显示全部楼层

明白

嗯,明白,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

43

帖子

0

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