两片单片机仍工作于串口模式1,整个系统实现双机双向通信
//名称:甲机串口程序
//-------//说明:甲机向乙机发送控制命令字符,甲机同时还可接收乙机
//的数字,所接收的数字显示在数码管上。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit an_jian=P1^7;
//操作代码
uchar an_jian_chishu=0;
//数码管段码
uchar shuzi[]={0x3F,0x06,0x5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
//延时
void yan_shi(uint ms)
{
uchar i;
while(ms--)
for(i=0;i<120;i++);
}
//串口发送字符
void chuankao_zifu(uchar c)
{
SBUF=c;
while(TI==0);
TI=0;
}
//主程序
void main()
{
LED1=LED1=1;//关闭LED
P0=0x00;
SCON=0X50;////串口工作SM0=0,SM1=1,REN=1;方式1,REN允许串行接收位
TMOD=0X20;//M1=1,M0=0 8位自动重装载定时器,当溢出时将TH1存入的值自动重装入TL1
PCON=0X00;//电源管理寄存器SMOD=0;串口方式1,2,3波特率正常
TH1=0XFD;
TH1=0XFD;
TI=0;//发送中断标志位
RI=0;//接收中断标志位
TR1=1;//TR1=1 启动定时器/计数器工作
IE=0X90;//EA总中断,ES串行口中断
P0=0x3F;
while(1)
{
yan_shi(100);
if(an_jian==0)
{
while(an_jian==0);
{an_jian_chishu=(an_jian_chishu+1)%4;//1,2,3,4
switch (an_jian_chishu)
{
case 0: chuankao_zifu('x');
LED1=LED2=1;break;
case 1: chuankao_zifu('a');
LED1=0;LED2=1;break;
case 2: chuankao_zifu('b');
LED2=0;LED1=1;break;
case 3: chuankao_zifu('c');
LED2=0;LED1=0;break;
}
}
}
}
}
void chuang_zhongdu() interrupt 4
{
if(RI)
{
RI=0;
if(SBUF>=0&&SBUF<=9)P0=shuzi[SBUF];
else P0=0x3F;
}
}
通过网盘分享的文件:单片机相互传送
链接: https://pan.baidu.com/s/1T3gnMqyhsJCxDaMN8xjJIg 提取码: 7kem
//乙机程序
//乙机程序收到甲机发送的信号后,根据相应信号控制完成不同的LED点亮动作
//
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit an_jian1=P1^7;
uchar shuzi=0;
//延时
void yan_shi(uint ms)
{
uchar i,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++);
}
//主程序
void main()
{
LED1=LED2=1;
SCON=0X50;//串口工作SM0=0,SM1=1,REN=1;方式1,REN允许串行接收位
TMOD=0X20;////M1=1,M0=0 8位自动重装载定时器,当溢出时将TH1存入的值自动重装入TL1
TH1=0XFD;
TL1=0XFD;
PCON=00;//电源管理寄存器SMOD=0;串口方式1,2,3波特率正常
TI=0;//发送中断标志位
RI=0;//接收中断标志位
TR1=1;//TR1=1 启动定时器/计数器工作
IE=0X90;//EA总中断,ES串行口中断
while(1)
{
yan_shi(100);
if(an_jian1==0)
{
while(an_jian1==0);
shuzi=(shuzi+1)%10;//产生0-9范围内的数字,其中10表示关闭显示
SBUF=shuzi;
while(TI==0);//发送中断标志位
TI=0;
}
}
}
//乙机串口接收中断函数
void zhongduan_4() interrupt 4
{
if(RI)
{
RI=0;
switch(SBUF)
{
case 'x':LED1=1;LED2=1;break;
case 'a':LED1=0;LED2=1;break;
case 'b':LED1=1;LED2=0;break;
case 'c':LED1=0;LED2=0;
}
}
}








最新发布