AVR单片机
回帖(1)
2021-11-2 11:26:05
#include
#include
#define uchar unsigned char
#pragma interrupt_handler SerialService:12
uchar rtemp,sflag;
void SerialInit(void)
{
UCSRB=(1<
UCSRC=(1<
UBRRH=0;
UBRRL=51; //晶振8M,波特率9600,则UBRR初始值为51
SREG|=BIT(7); //开全局中断
}
void SerialService(void)
{
rtemp=UDR; //读接收缓冲区
//UCSRA&=~BIT(RXC); //此行没有必要,读出缓冲区后,接收结束标志位清零由硬件自动完成,而且我不确定RXC是写1清零还是赋0清零。
sflag=1;
}
void main(void )
{
SerialInit();
while(1)
{
if(sflag==1)
{
UCSRB&=~BIT(RXCIE); //关闭接收结束中断使能
sflag=0;
UDR=rtemp; //数据送给发送缓冲区
while(!(UCSRA&(BIT(TXC)))); //等待发送结束
UCSRA|=BIT(TXC); //清零发送结束标志位(写1清零)
UCSRB|=BIT(RXCIE); //打开接收结束中断使能
}
}
}

#include
#include
#define uchar unsigned char
#pragma interrupt_handler SerialService:12
uchar rtemp,sflag;
void SerialInit(void)
{
UCSRB=(1<
UCSRC=(1<
UBRRH=0;
UBRRL=51; //晶振8M,波特率9600,则UBRR初始值为51
SREG|=BIT(7); //开全局中断
}
void SerialService(void)
{
rtemp=UDR; //读接收缓冲区
//UCSRA&=~BIT(RXC); //此行没有必要,读出缓冲区后,接收结束标志位清零由硬件自动完成,而且我不确定RXC是写1清零还是赋0清零。
sflag=1;
}
void main(void )
{
SerialInit();
while(1)
{
if(sflag==1)
{
UCSRB&=~BIT(RXCIE); //关闭接收结束中断使能
sflag=0;
UDR=rtemp; //数据送给发送缓冲区
while(!(UCSRA&(BIT(TXC)))); //等待发送结束
UCSRA|=BIT(TXC); //清零发送结束标志位(写1清零)
UCSRB|=BIT(RXCIE); //打开接收结束中断使能
}
}
}

举报
更多回帖