以前以为串行通信只能是单片机和PC机之间进行通信,昨天无意之中看到一个程序,是单片机和单片机之间进行通信。。这小东西真是神奇啊!昨天弄了很长时间没弄出来,今天在大神的帮助下终于拨开云雾见天日了。

案例介绍:

利用单片机a将一段流水灯控制程序发送到单片机b,来控制单片机b的P1口,点亮8位LED灯。

案例分析:

a完成发送,b完成接收。编写程序设置a,令SM0=0,SM1=1(串行口工作方式1)。设置b,令SM0=0,SM1=1,REN=1,使接收允许。

源程序

1)数据发送程序

#include<reg51.h>
unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //流水灯控制码
void send(unsigned char dat) //数据发送程序
{
SBUF=dat; //将要发送的数据存入发送缓冲器中
while(TI==0); //若发送中断标志位没有置1(正在发送数据),就等待
TI=0; //若发送完成,TI自动置1,这里把它清零
}
void delay(void) //延时函数
{
unsigned char m,n;
for(m=0;m<200;m++) //延时约50ms
for(n=0;n<250;n++);
}
void main(void)
{
unsigned char i;
TMOD=0x20; //定时器T1工作于方式2(可自动重装的8位定时器)
SCON=0x40; //串口工作方式1,不允许接收
PCON=0x00; //波特率不倍增
TH1=0xf4; //波特率为2400b/s
TL1=0xf4;
TR1=1; //启动定时器T1(T1作波特率的发生器)
while(1)
{
for(i=0;i<8;i++) //一共8位的流水灯控制码
{
send(tab[i]); //发送数据
delay(); //每50ms发送一次数据
}
}
}

2)数据接收程序

#include<reg51.h>
unsigned char receive(void) //数据接收函数
{
unsigned char dat; while(RI==0); //数据没有接收完毕时等待接收
RI=0; //接收完毕时清零
dat=SBUF; //将接收缓冲器中的数据存入dat
return dat; //将接收到的数据返回
}
void main(void)
{
TMOD=0x20; //设置定时器T1工作于方式2
SCON=0x50; //串口工作方式1,允许接收数据
PCON=0x00; //波特率不倍增
TH1=0xf4; //波特率为2400b/s
TL1=0xf4;
TR1=1; //启动定时器T1
REN=1; //允许接收数据
while(1)
{
P1=receive(); //将接收到的数据送到P1口显示
}
}

把这两个程序分别烧写到两块板子上,然后用连接线分别连接两个板子的发送引脚和接收引脚,然后效果就出来了。这只是一个发送一个接受的情况。

两个80c51单片机之间怎样进行串行通信的更多相关文章

  1. 80C51单片机介绍

    80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点. 增加了如乘(MUL).除(DIV).减(SUBB).比较(CMP).16位数据指针.布 ...

  2. 两台Linux主机之间文件的复制

    使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file r ...

  3. Android消息机制之实现两个不同线程之间相互传递数据相互调用

    目的:实现两个不同线程之间相互传递数据相互调用方法. 线程一中定义mainHandler 并定义一个方法mainDecode 线程二中定义twoHandler 并定义一个方法twoEncode 实现当 ...

  4. 使用<input>标签做了两个按钮, 按钮之间间距如何去掉

    遇到的问题: 使用<input>标签做了两个按钮, 按钮之间有个间距不知道怎么去掉. 如下图: 问题解决: <input>是内联块状元素(inline-block); 内联元素 ...

  5. 两台Linux机之间传送文件

    最近实验室里接管了一台服务器,经常需要用到服务器与自己主机之间进行文件传输,因此,在此介绍一下两台Linux主机之间的一些操作,方便后来者. 1. Linux.Windows主机远程访问Linux服务 ...

  6. 一些80C51单片机支持双DPTR,C编译器是如何使用它的?

    在C51中,C编译器并不利用双DPTR来优化用户所写的程序,只有一些库例程使用了双数据指针.当在两个存储器块之间进行数据复制或比较时,以下库例程会使用双数据指针: memmovememcpymemcm ...

  7. 让上下两个DIV块之间有一定距离或没有距离

    1.若想上下DIV块之间距离,只需设定:在CSS里设置DIV标签各属性参数为0div{margin:0;border:0;padding:0;}这里就设置了DIV标签CSS属性相当于初始化了DIV标签 ...

  8. 两个java工程之间的相互调用方法

    如果你有两个java项目的话,如何向他们之间进行信息的通信前提:必须知道要通信的java项目(接收请求方)的服务器的IP地址和访问路径.其实两个java项目之间的通信还是使用HTTP的请求.主要有两种 ...

  9. C#基础第八天-作业答案-设计类-面向对象方式实现两个帐户之间转账

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. 几个常用的CSS3样式代码以及不兼容的解决办法

    原文:几个常用的CSS3样式代码以及不兼容的解决办法 border-radius实现圆角效果 CSS3代码: -webkit-border-radius:10px; -moz-border-radiu ...

  2. Cocos2d-x Lua 阅读Csv文件,使用数据更方便

    在我的书或出售之前,我的源代码,有Csvshadow文件. 也许这是偏见.我与工作将是最长的轮廓Csv,所以,我会帮助不大喜欢它的游戏. Csv文件,非常格式easy,也就是说,一个数据线,字段之间用 ...

  3. Python_生成測试数据

    本文出自:http://blog.csdn.net/svitter 生成1~10的随机数1000个: import random fp = open("test", 'w'); f ...

  4. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

  5. JavaScript中的作用域和声明提前

    [翻译]JavaScript中的作用域和声明提前 原文:http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html ===翻译 ...

  6. 19.最经济app发短信的方法

    在创业团队.一个重要的原则是能省就省,该花的花,明智地使用金钱. 今的app,为了获取用户的社交关系.须要用户的手机号注冊. 用手机号注冊就涉及到一个发送短信验证码的问题,那怎么才干在短信服务上投入最 ...

  7. 如果你使用上述这段12行的JavaScript代码,就可以能让firefox、chrome、safari浏览器崩溃,而且还能让iphone重启,安卓手机闪退!

    <html> <body> <script> var total=""; for (var i=0;i<1000000;i ) { tot ...

  8. 个推A/B测试评测

    A/B测试在各类网站设计中已经是比较常见的,本文着重讲讲A/B测试在应用推送领域的作用. 目前国外开通A/B测试的推送服务商只有swrve,而国内的个推也在前不久发布的smart push 2.0中集 ...

  9. NET实现仓库看板的一些感想

    NET实现仓库看板的一些感想 从一名技术开发人员到实施人员的蜕变,从不同的角度看待同一个问题,或许会有不一样的结果.这里记录一下最近一个项目实施的案例,非常有感触! 一. 项目情况简介 本次项目是给一 ...

  10. Caliburn Micro框架

    Caliburn Micro框架快速上手(WP)   一.使用nuget添加起始工程 二.修改App.xaml文件和App.xaml.cs文件 AppBootstrapper介绍: AppBootst ...