本帖最后由 phctgu 于 2009-11-17 15:29 编辑
本人刚刚接触AVR单片机,自己做了个USART通信,目的是两个单片机之间进行数据传输,但是好像没有反应,希望请教高手,到底我是哪里错了,在此先谢谢朋友们.
晶振我用的是内部RC 4M,波特率设置的是 9600,目的只是希望A(U1)单片机发数据
给B(U2)单片机,如果B单片机收到数据后,点亮LED灯;两个单片机烧写的程序是一样的
其中 触发数据传输开始 我是直接把 PC0接地。
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar rx_num;
void ini_port(void)
{ DDRA|=(1<<DDA0)|(1<<DDA1);
PORTA|=(1<<PA0)|(1<<PA1);
DDRC=0x00;
PORTC|=(1<<PC0)|(1<<PC1);
}
void ini_usart(void)
{
UCSRA=0x00;
UBRRH=0x00;
UBRRL=0x19; // SET BAUD IN 9600
UCSRC|=(1<<UCSZ1)|(1<<UCSZ0); // SET BIT OF DATA
UCSRB|=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE); // ENABLE SEND AND RECEIVE
}
void send_t(uchar urt)
{
UDR=urt;
while(!(UCSRA&(1<<UDRE))); // WAITING FOR SEND
UCSRA|=(1<<UDRE); // SEND OVER
}
#pragma interupt_handler USART_RX:12
void USART_RX(void)
{
CLI();
rx_num=UDR;
while(!(UCSRA&(1<<UDRE)));
UCSRA|=(1<<UDRE);
SEI();
}
/////////////////////////////////
void main()
{
ini_port();
ini_usart();
SEI();
while(1)
{
if(rx_num==0x55)
{
PORTA&=~(1<<PA0);
}
else if((PINC&0x01)==0x00)
{
send_t(0x55);
PORTA^=(1<<PA0);
}
}
} |