请教各位兄弟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]