newywx 发表于 2013-6-5 08:34:37

请教各位兄弟attiny2313a串口无法收发的问题

我用attiny2313a搭了个最小系统,使用winavr20100110,想做个串口收发的试验,但试了好多次没有成功,板子硬件应该没有问题的(我写了个lcd1602的程序下载进去运行正常),用示波器看了串口接收脚也有数据的,以前用过M8和M16的串口都没问题的,哪个兄弟有空帮忙看看是不是代码哪里有问题,谢谢!



#include<avr/interrupt.h>

//熔丝位:低位7F,高位D9


volatile unsigned char r_temp;                                //串口接收到的临时数据
volatile unsigned char r_flag=0;                        //串口接收数据标志位



void usart_init(void);                                //串口初始化
void usart_send(unsigned char);                                //发送数据




int main(void)
{
        cli();
        usart_init();
        sei();
       
        while(r_flag==1)
        {
                usart_send(r_temp);        //收到后再发出,测试用
        }
}       
       

void usart_init(void)        //串口初始化
{
        UBRRL = 95;            //波特率设置,14.7456MHz
        UBRRH = 0;                //0
        UCSRB = (1 << RXCIE) | (1 << RXEN) | (1 << TXEN);    //接收中断使能,接收使能,发送使能
        UCSRC |= (1 << UCSZ1) | (1 << UCSZ0) | (1 << RXCIE);        //异步通信,8位数据,1位停止位,无校验
}


void usart_send(unsigned char send_temp)        //发送数据
{
        while(!(UCSRA & (1<<UDRE)));//等待发送缓冲器为空
       
        UDR = send_temp;        //将数据放入缓冲区,发送数据

}

ISR(USART_RX_vect)       
{
        r_temp=UDR;       
        usart_send(r_temp);        //收到后再发出,测试用
        r_flag=1;                        //有数据,建立标志
}
页: [1]
查看完整版本: 请教各位兄弟attiny2313a串口无法收发的问题