51单片机的之间地通信程序.docx

上传人:b****6 文档编号:4295410 上传时间:2022-11-29 格式:DOCX 页数:9 大小:18.21KB
下载 相关 举报
51单片机的之间地通信程序.docx_第1页
第1页 / 共9页
51单片机的之间地通信程序.docx_第2页
第2页 / 共9页
51单片机的之间地通信程序.docx_第3页
第3页 / 共9页
51单片机的之间地通信程序.docx_第4页
第4页 / 共9页
51单片机的之间地通信程序.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

51单片机的之间地通信程序.docx

《51单片机的之间地通信程序.docx》由会员分享,可在线阅读,更多相关《51单片机的之间地通信程序.docx(9页珍藏版)》请在冰豆网上搜索。

51单片机的之间地通信程序.docx

51单片机的之间地通信程序

以下程序通过实践检测完全可以放心使用不过注意硬件电路的连接

单片机的串口通信

主要理解SCON的状态控制寄存器的用法

波特率的设定

1两个单片机一个为主机一个为从机,又主机控制从机的LED灯得简单程序入手

注意硬件的连线将单片机串口的第二引脚与另一单片机串口的第三引脚相连同时另一单片机的第二串口引脚也与前一个单片机的第三引脚相连

主机部分的程序设计

//主机程序发送控制信号的

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitKEY=P3^0;//按键

sbitledA=P1^1;//定义了三个灯来指示发送的字符是什么

sbitledB=P1^3;

sbitledC=P1^5;

sbitledstop=P1^6;

ucharKEY_number=0;//按键计数

voiddelay(unsignedintz)//延时函数

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=240;y>0;y--);

}

voidinit()

{

SCON=0x40;//主机串口工作方式1REN=0之允许发送不能接收

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

T1=RI=0;//必须要做来保证可以顺利进入终端

TR1=1;

EA=1;

ES=1;

}

voidPut_charToSBUF(ucharc)//把一个字符写入SBUF

{

SBUF=c;

while(TI==0);//巧妙的等待处理等带发送完毕

TI=0;

}

voidmain()

{

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)

{

case0:

ledstop=0;break;

case1:

ledA=~ledA;Put_charToSBUF('A');break;

case2:

ledB=~ledB;Put_charToSBUF('B');break;

case3:

ledC=~ledC;Put_charToSBUF('C');break;

}

delay(100);

}

}

 

从机部分的程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitd1=P1^0;

sbitd2=P1^1;

sbitd3=P1^2;

voiddelay(unsignedintz)//延时函数

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=240;y>0;y--);

}

voidinit()

{

SCON=0x50;//允许串口接收

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

RI=0;

TR1=1;

EA=1;

ES=1;

}

voidmain()

{

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;

}

}

elsed1=d2=d3=1;

delay(100);

}

}

上面的程序是一主一从单片机之间也可以建立一个双向的通信过程

//甲机程序发送控制信号的同时接收乙机发来的串口信息并

//且显示在数码管上

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitKEY=P3^0;

sbitledA=P1^1;

sbitledB=P1^3;

sbitledC=P1^5;

sbitledstop=P1^6;

unsignedcharcodeduan[]={0x3f,0x06,0x5b,

0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharKEY_number=0;

voiddelay(unsignedintz)//延时函数

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=240;y>0;y--);

}

voidinit()

{P2=0;

P0=0;

SCON=0x50;

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

T1=RI=0;

TR1=1;

EA=1;

ES=1;

}

voidPut_charToSBUF(ucharc)

{

SBUF=c;

while(TI==0);

TI=0;

}

voidmain()

{

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)

{

case0:

ledstop=0;break;

case1:

ledA=~ledA;Put_charToSBUF('A');break;

case2:

ledB=~ledB;Put_charToSBUF('B');break;

case3:

ledC=~ledC;Put_charToSBUF('C');break;

}

delay(100);

}

}

voidseral_int()interrupt4

{

if(RI)

{

RI=0;

if(SBUF>=0&&SBUF<=9)P0=duan[SBUF];

elseP0=0x00;

}

}

 

乙机部分车程序主要接收甲的串口信息同时发送字符给甲。

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitd1=P1^0;

sbitd2=P1^1;

sbitd3=P1^2;

sbitkey=P3^0;

ucharnumber;

voiddelay(unsignedintz)//延时函数

{

unsignedintx,y;

for(x=z;x>0;x--)

for(y=240;y>0;y--);

}

voidinit()

{P0=0x00;

SCON=0x50;

TMOD=0x20;

PCON=0x00;

TH1=0xfd;

TL1=0xfd;

RI=TI=0;

TR1=1;

EA=1;

ES=1;

}

voidmain()

{

init();

while

(1)

{if(key==0)

{

delay(5);

if(key==0)

{

while(!

key);

SBUF=number;

while(TI==0);

TI=0;

number++;

if(number==11)number=0;

}

}

delay(100);

d1=d2=d3=1;

}

}

voidserial_int()interrupt4

{

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;

}

}

}

比较上面的程序可以知道接收部分都在串口中断里进行发送部分在MAIN函数里完成

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1