51单片机之间的通信程序.doc
文本预览下载声明
以下程序通过实践检测完全可以放心使用 不过注意硬件电路的连接
单片机的串口通信
主要理解SCON的状态控制寄存器的用法
波特率的设定
1 两个单片机一个为主机一个为从机,又主机控制从机的LED灯得简单程序入手
注意硬件的连线 将单片机串口的第二引脚与另一单片机串口的第三引脚相连同时另一单片机的第二串口引脚也与前一个单片机的第三引脚相连
主机部分的程序设计
//主机程序 发送控制信号的
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
sbit KEY=P3^0;//按键
sbit ledA=P1^1;//定义了三个灯来指示发送的字符是什么
sbit ledB=P1^3;
sbit ledC=P1^5;
sbit ledstop=P1^6;
uchar KEY_number=0;//按键计数
void delay(unsigned int z)//延时函数
{
unsigned int x,y;
for(x=z;x0;x--)
for(y=240;y0;y--);
}
void init()
{
SCON=0x40;//主机串口工作方式1 REN=0 之允许发送不能接收
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
T1=RI=0;//必须要做来保证可以顺利进入终端
TR1=1;
EA=1;
ES=1;
}
void Put_charToSBUF(uchar c) //把一个字符写入SBUF
{
SBUF=c;
while(TI==0); //巧妙的等待处理 等带发送完毕
TI=0;
}
void main()
{
init();
while(1)
{
if(KEY==0)
{
delay(5);
if(KEY==0)
{ P1=0xff;
while(!KEY) ;
KEY_number++;
if(KEY_number==4) KEY_number=0;
}
}
switch (KEY_number)
{
case 0: ledstop=0; break;
case 1: ledA=~ledA; Put_charToSBUF(A); break;
case 2: ledB=~ledB; Put_charToSBUF(B); break;
case 3: ledC=~ledC; Put_charToSBUF(C); break;
}
delay(100) ;
}
}
从机部分的程序
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
void delay(unsigned int z)//延时函数
{
unsigned int x,y;
for(x=z;x0;x--)
for(y=240;y0;y--);
}
void init()
{
SCON=0x50;//允许串口接收
TMOD=0x20;
PCON=0x00;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
EA=1;
ES=1;
}
void main()
{
init();
while(1)
{
if(RI)
{
RI=0;
switch(SBUF)
{
case A: d1=~d1;break;
case B: d1=1; d2=~d2;break;
case C: d2=1; d3=~d3; break;
}
}
else d1=d2=d3=1;
delay(100) ;
}
}
上面的程序是一主一从 单片机之间也可以建立一个双向的通信过程
//甲机程序 发送控制信号的 同时接收乙机发来的串口信息并
//且显示在数码管上
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
sbit KEY=P3^0;
sbit ledA=P1^1;
sbit ledB=P1^3;
sbit ledC=P1^5;
sbit ledstop
显示全部