AVR单片机通信没有回显,怎么回事

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:23:38
//ICC-AVR application builder : 2009-11-6 22:28:34
// Target : M16
// Crystal: 8.0000Mhz
#include"iom16v.h"
#include"macros.h"
#define UDRE 5
#define RXC 7
void port_init()
{
DDRB=0xff;
PORTB=0xff;
DDRD=0x02;
PORTD=0xff;
}
void usart_init()
{
UCSRB=0x00; //禁止USART发送和接收
UCSRA=0x02; //倍速
UCSRC=0x06; //8位数据
UBRRL=0x67; //8M晶振下9600b/s
UBRRH=0x00;
UCSRB=0x18; //接收、发送允许
}
void usart_send(unsigned char i)
{
while(!(UCSRA&(1<<UDRE)));
UDR=i;
}
unsigned char usart_receive()
{
while(!(UCSRA&(1<<RXC)));
return UDR;
}
void main()
{
unsigned char temp;
port_init();
usart_init();
while(1)
{
temp=usart_receive();
PORTB=~temp;
usart_send(temp);
}
}

程序貌似没问题吧,程序是发送一个字节然后在返回过

看看,你的PORTB的LED有没有反应。如果有反应,说明是发送的问题,如果没反应,就是接收的问题。
你的串口初始化如果是ICCAVR自动生成的,那应该没问题。如果不是,请核对一下寄存器的设置。
如果是发送的问题,那只可能是循环条件。可以写一段程序,用LED检查下你的寄存器到底对不对。
如果是接收的问题,还得先看看上位机的是不算忘了设置什么东西。