基于Proteus仿真的AVR單片機(jī)串口程序
以前在Proteus上做過(guò)51的串口仿真沒(méi)有成功,昨天再次嘗試atmega16的串口仿真居然成功了;當(dāng)然仿真是最簡(jiǎn)單的,實(shí)際做事的時(shí)候需要加上max232芯片,但仿真時(shí)就不需要了,
本文引用地址:http://2s4d.com/article/201610/311532.htm程序功能:由串口助手向單片機(jī)發(fā)送一組數(shù)據(jù)“I LOVE YOU-----SBILY1988”,單片機(jī)收到數(shù)據(jù)后發(fā)送回串口助手,
數(shù)據(jù)傳輸方向:計(jì)算機(jī)——>單片機(jī); 單片機(jī)——>計(jì)算機(jī);
現(xiàn)送上仿真圖和程序:
#include
#include
void init();
void send(unsigned char);
unsigned char receive();
void main()
{unsigned char i=0,a=300;
init();
while(1)
{
i=receive();
send(i);
}
}
void init() //初始化函數(shù)
{
UCSRB=BIT(4)|BIT(3); //使能發(fā)送和接收器
UCSRC=BIT(7)|(3<<1); //設(shè)置數(shù)據(jù)幀格式(8數(shù)據(jù)位)
UBRRH=0; //設(shè)置波特率為8MHZ晶振下 9600bps
UBRRL=51;
}
void send(unsigned char data) //數(shù)據(jù)發(fā)送
{
while(!(UCSRA&BIT(5))); //等待發(fā)送緩沖器準(zhǔn)備完畢
UDR=data;
while(!(UCSRA&BIT(6))); //等待發(fā)送結(jié)束
UCSRA&=BIT(6);
}
unsigned char receive() //數(shù)據(jù)接收
{unsigned char data=0;
while(!(UCSRA&BIT(7))); //等待數(shù)據(jù)接收完畢
data=UDR;
return data;
}
評(píng)論