串口接受中断程序
#include "../brd.h"#include <avr/io.h>
#include <avr/interrupt.h>
#define USART_RECV_VECT SIG_UART0_RECV
#define uchar volatile unsigned char
uchar flag=0;
int rdata=0;
void uart_sendB(int data)
{
while(!(UCSRA&(1<<UDRE)));
UDR=data;
while(!(UCSRA&(1<<TXC)));
UCSRA|=(1<<TXC);
}
SIGNAL(USART_RECV_VECT)
{
UCSRB&=~(1<<RXCIE);
rdata=UDR;
flag=1;
UCSRB|=(1<<RXCIE);
}
void main(void)
{
unsigned int baud=9600;
UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);//ASYN,8 BIT DATA,NO PARITY,1 STOP BIT ,NO DOUBLE SPEED;
UBRRL=(F_CPU/baud/16-1)%256;
UBRRH=(F_CPU/baud/16-1)/256;
UCSRA=0X00;
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
SREG=0xff; //全局中断开放
DDRD=0X02; //
while(1)
{
if(flag)
{
uart_sendB(rdata);
flag=0;
}
}
}
这个程序原来用查询实现,发送没问题,加上中断接受后
不行了。请问马老师能告诉我那里出错了吗?用GCC环境编写的。希望马老师能给出详细的解答。万分感谢 在我的教程中,使用了2章的篇幅介绍UART的原理与应用(同事刘老师已经说了,那有用2章的篇幅介绍一个功能的),可见我对UART的重视.其实,学习掌握UART不仅在于它是常用的通信接口,更深的意义在于为学习掌握更复杂的通信体系和协议打好基础.因此建议你能仔细看看,参考一下 谢谢,刘老师和马老师
页:
[1]