微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > proteus与keil Cx51的单片机仿真(串行口单工通信)

proteus与keil Cx51的单片机仿真(串行口单工通信)

时间:11-24 来源:互联网 点击:
单片机U1、U2串行口均工作于方式1,其中U1做接收机,U2为发送机,波特率9600,U1接收U2发送的数据后,依次送P1、P0、P2口进行流水灯显示,试编写程序,并通过Proteus仿真。

电路图:



U1程序:

#include//包含单片机寄存器的头文件
unsigned char receive(void)//接收一个字节数据
{
unsigned char dat;
while(RI==0);
RI=0;//只要接收中断标志位RI没有被置1,等待,直至接收完(RI1)
dat=SBUF;//将接收缓冲器中的数据存于dat
return dat;
}
void main(void)
{
unsigned char i;
TMOD=0x20;//定时器T1工作于方式2
SCON=0x50;//SCON=0101 0000B,串行口工作方式1,允许接收(REN=1)
PCON=0x00;//PCON=0000 0000B,波特率9600
TH1=0xfd;TL1=0xfd;//根据规定给定时器T1赋初值
TR1=1;//启动定时器T1
REN=1;//允许接收
while(1)
{
for(i=0;i<9;i++)P1=receive();//将数据送P1口显示
for(i=0;i<9;i++)P0=receive();//将数据送P0口显示
for(i=0;i<9;i++)P2=receive();//将数据送P2口显示
}
}

U2程序:

#include//包含单片机寄存器的头文件
unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};//流水灯灯控制码,该数据被定义为全局变量
void send(unsigned char dat)//向PC发一个字节数据
{
SBUF=dat;
while(TI==0);//发送等待
TI=0;
}
void delay(void)//延时约150ms
{
unsigned char m,n;
for(m=0;m<200;m++)for(n=0;n<250;n++);
}
void main(void)
{
unsigned char i;
TMOD=0x20;//TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40;//SCON=0100 0000B,串行口工作方式1
PCON=0x00;//PCON=0000 0000B,波特率9600
TH1=0xfd;TL1=0xfd;//给定时器T1赋初值
TR1=1;//启动定时器T1
while(1)
{
for(i=0;i<27;i++)//模拟检测数据
{
send(Tab[i]);//发送数据i
delay();//50ms发送一次检测数据
}
}
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top