单片机之间的双向通信Proteus仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
仿真电路:
仿真程序:
甲机程序:
//----------甲机程序代码------------
#include
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led2=P1^3;
sbit key=P1^7;
//------共阳极数码管段码---------
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,0xff};
uchar num;
//------延时------
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//------串行口发送函数------
void transfer(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
void main()
{
num=0;
P0=0x00;
SCON=0x50; //串行口工作在方式1,既可以发送数据,也可以接收数据
TMOD=0x20; //定时器T1工作在方式2
PCON=0x00;
TH1=(256-253)/32;
TL1=(256-253)%32;
RI=0;
TI=0;
TR1=1;
IE=0x90; //串行口中断打开while(1)
{
if(key==0)
{
while(key==0);
num=(num+1)%4;
}
switch(num)
{
case 0: transfer('D');
led1=1; led2=1;
break;
case 1: transfer('A');
led1=0; led2=1;
break;
case 2: transfer('B');
led1=1; led2=0;
break;
case 3: transfer('C');
led1=0; led2=0;
break;
// delay(100);
}
}
}
void recieve() interrupt 4
{
if(RI==1)
{
RI=0;
P0=~table[SBUF];
}
}
乙机程序:
//----------乙机程序代码------------
#include
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led2=P1^3;
sbit key=P1^7;
uchar num=10;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
SCON=0x50;
TMOD=0x20;
PCON=0x00;
TH1=(256-253)/32;
TL1=(256-253)%32;
RI=0;
TI=0;
TR1=1;
IE=0x90;
led1=led2=1;
while(1)
{
if(key==0)
{
while(key==0);
num=(num+1)%11;
SBUF=num;
while(TI==0);
TI=0;
}
}
}
void recieve() interrupt 4
{
if(RI==1)
{
RI=0;
switch(SBUF)
{
case 'A': led1=0; led2=1;
break;
case 'B': led1=1; led2=0;
break;
case 'C': led1=0; led2=0;
break;
case 'D': led1=1; led2=1; // delay(100);
}
}
else
led1=led2=1;
}