qin552011373 发表于 2014-10-7 13:36 
楼主怎么做的程序?
/*************************************************************
初始化程序
************************************************************/
void uart_init()
{
uint a;
DDRB=0XFF;
DDRD|=BIT(PD4)|BIT(PD5)|BIT(PD6)|BIT(PD1);
PORTD&=~BIT(6);
PORTD&=~BIT(WR);
UCSRA = 0x00;
UCSRB = 0x00;
UCSRC|= BIT(URSEL)|BIT(UCSZ0)|BIT(UCSZ1); //选择UCSRC寄存器,异步模式,
UBRR = 0X47; //设置波特率为9600
UCSRB = BIT(TXEN)|BIT(RXEN)|BIT(RXCIE); //接收、发送使能,接收中断使能
SREG |= BIT(7); //全局中断开放
}
这是设置的程序
接收采用中断方式
****************************************************************/
#pragma interrupt_handler USART_Received_Ir:12
void USART_Received_Ir()
{
UCSRB&=~BIT(RXCIE); //关串口中断,防止中断嵌套
while(!(UCSRA&(1<<RXC)));//等待接受数据
rec_data[num]=UDR;
num++;
if(num>=200)
{
num=0;
}
else;
//LCD_SHOW(0,0,rec_data);
//delay_ms(1000);
UCSRA|=1<<RXC; //标志位写1就能清零 接收中断信号 表示将继续接收
//LCD_COM(0X01);
//delay_ms(5);
UCSRB|=BIT(RXCIE); //接收完毕中断使能
这是接收中断,但是接收到的数据是发出去的,是不是UDR没清空啊,但是其他程序也没看见清的
|