本次例程将要达到的效果:从电脑上通过串口发送一个数据到单片机,单片机再原封不动的发回电脑。
硬件电路:
在Proteus中搭建出这样的电路图:
使用虚拟串口软件添加一对串口。
将COMPIM组件的波特率设置为9600,并设置好端口。
同样的,将虚拟终端的波特率设置为9600,单片机晶振频率为11.0592MHz。
软件代码:
#include
unsigned char a,flag;
void main(void)
{
SCON = 0x50;//设置串行口工作方式1,接收控制打开
TMOD |= 0x20;//定时器1设置工作方式2
TH1 = 0xFD;//设置波特率为9600,数据位8,停止位1,无校验位,晶振频率11.0592M
TL1 = 0xFD;
TR1 = 1;//启动定时器1
EA = 1;//开总中断
ES = 1;//开串行中断
while(1)
{
if(flag==1)
{
ES = 0;//关闭串行中断
flag = 0;
SBUF = a;//再把数据原样发回
while(!TI);//等数据发完
TI = 0;
ES = 1;//开串行中断
}
}
}
void receive() interrupt 4
{
a = SBUF;//把收到的数据给a
flag = 1;
RI = 0;//接收标志清零
}
仿真效果
在Proteus软件里运行仿真。
在串口助手这类软件里发送“hello”,注意设置串口号和波特率。
然后即可在Proteus的虚拟终端中看到单片机转发出来的文本。