打印
[AVR单片机]

串口进不了接收中断

[复制链接]
4046|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
平台 atmega32  avr  studio +winavr

代码:

//包含所需头文件
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>




/*------宏定义------*/
#define uchar        unsigned char
#define uint        unsigned int
#define BIT(x)        (1<<(x))
#define NOP()        asm("nop")
#define WDR()         asm("wdr")

char flag=0;
char data;

//端口初始化
void port_init(void)
{
        PORTA = 0xFF;
        DDRA  = 0xFF;
        PORTB = 0x00;
        DDRB  = 0x00;
        PORTC = 0x00;
        DDRC  = 0x00;
        PORTD = 0x00;
        DDRD  = 0x00;
}


//串口通信初始化
void usart_init(void)
{
        UCSRB = 0x00;//禁止中断
        UCSRA = 0x00;
        UCSRC = BIT(URSEL) | 0x06;
        UBRRL = 0x33;
        UBRRH = 0x00;
        UCSRB = 0x98;
}


//串行接收结束中断服务程序
//#pragma interrupt_handler usart_rx_isr:14
//void usart_rx_isr(void)
SIGNAL(_VECTOR(13))
{
        data = UDR;
        flag = 1;
}

void uart_put_c(char data_c)
{
        while ( !( UCSRA & (1<<UDRE)) );
        UDR = data_c;
}

void uart_put_s(char *data_s)
{
        while (*data_s)
        {
                uart_put_c(*data_s++);
        }
        uart_put_c(0x0D);//回车
        uart_put_c(0x0A);//换行  
}

void init_devices(void)
{
        cli(); //禁止所有中断
        MCUCR  = 0x00;
        //MCUCSR = 0x80;//禁止JTAG
        GICR   = 0x00;
        port_init();
        usart_init();
        sei();//开全局中断
}
//主函数
int main(void)
{
        init_devices();
        //在这继续添加你的代码]
        uart_put_s("Start uart!");
        uart_put_s("1,2,3,4!");
        PORTA = 0x55;
        while(1)
        {
               
                if(flag)
                {       
                        PORTA = 0xaa;
                        uart_put_c('a');
                        uart_put_c(0x0D);//回车
                        uart_put_c(0x0A);//换行  
                        flag = 0;
                }
                NOP();
        }
        return 0;
}


相关帖子

沙发
yi215415|  楼主 | 2013-8-6 17:02 | 只看该作者
串口发送正常 在PC往单片机发送时进不了中断,但短接PC串口PC可接收到信号!

使用特权

评论回复
板凳
huangxz| | 2013-8-6 17:23 | 只看该作者
yi215415 发表于 2013-8-6 17:02
串口发送正常 在PC往单片机发送时进不了中断,但短接PC串口PC可接收到信号! ...

看下波特率对不对,软件仿真没什么问题

使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
qin552011373 + 4 很给力!
地板
yi215415|  楼主 | 2013-8-7 10:40 | 只看该作者
本帖最后由 yi215415 于 2013-8-7 11:10 编辑
huangxz 发表于 2013-8-6 17:23
看下波特率对不对,软件仿真没什么问题

设置了8M的时钟 9600的波特率发送正常呀!不实用中断时可以正常接收

使用特权

评论回复
5
yi215415|  楼主 | 2013-8-7 11:30 | 只看该作者
huangxz 发表于 2013-8-6 17:23
看下波特率对不对,软件仿真没什么问题

我刚才试着改下if里面的发现突然好了,我只是更改发送内容

使用特权

评论回复
6
huangxz| | 2013-8-7 11:34 | 只看该作者
yi215415 发表于 2013-8-7 10:40
设置了8M的时钟 9600的波特率发送正常呀!不实用中断时可以正常接收

你把flag设置成volatile试试看

使用特权

评论回复
7
杨爱林林| | 2013-8-7 16:08 | 只看该作者
顶下楼上的
每用次flag  清零一次
还有最好定义成volatile类型

使用特权

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

本版积分规则

2

主题

20

帖子

2

粉丝