单片的双机通信

通常单片机的双机通信有以下4中方式通信:

TTL电平通信(双机串行口直接互连)、RS-232C通信、RS-422A通信、RS-485通信等。

TTL电平通信时,单片机A的TXD端接单片机B的RXD端,单片机B的RXD端接B的TXD端。但是两个单片机的地线必须要共地,即把他们的系统电源地线要接在一起。

主机按键

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

void delayms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void send(uchar key_num)

{

SBUF=key_num;

while(!TI);

TI=0;

}

void matrixkeyscan()

{

uchar temp,key;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xee:

key=0;

break;

case 0xde:

key=1;

break;

case 0xbe:

key=2;

break;

case 0x7e:

key=3;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

send(key);

}

}

P3=0xfd;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xed:

key=4;

break;

case 0xdd:

key=5;

break;

case 0xbd:

key=6;

break;

case 0x7d:

key=7;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

send(key);

}

}

P3=0xfb;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xeb:

key=8;

break;

case 0xdb:

key=9;

break;

case 0xbb:

key=10;

break;

case 0x7b:

key=11;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

send(key);

}

}

P3=0xf7;

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

delayms(10);

temp=P3;

temp=temp&0xf0;

if(temp!=0xf0)

{

temp=P3;

switch(temp)

{

case 0xe7:

key=12;

break;

case 0xd7:

key=13;

break;

case 0xb7:

key=14;

break;

case 0x77:

key=15;

break;

}

while(temp!=0xf0)

{

temp=P3;

temp=temp&0xf0;

}

send(key);

}

}

}

void main()

{

TMOD=0x02;

TH1=0xfd;

TL1=0xfd;

TR1=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

while(1)

{

matrixkeyscan();
//不停调用键盘扫描程序

}

}

从机 显示

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit dula=P2^6;

sbit wela=P2^7;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71

};

void display(uchar num)

{

P0=table[num];

dula=1;

dula=0;

}

void main()

{

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

REN=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

P0=0xc0;

wela=1;

wela=0;

while(1);

}

void ser() interrupt 4

{

uchar a;

RI=0;

a=SBUF;

display(a);

}

时间: 2024-10-28 08:37:56

单片的双机通信的相关文章

【单页应用之通信机制】view之间应该如何通信

前言 在单页应用中,view与view之间的通信机制一直是一个重点,因为单页应用的所有操作以及状态管理全部发生在一个页面上 没有很好的组织的话很容易就乱了,就算表面上看起来没有问题,事实上会有各种隐忧,各种坑等着你去跳 最初就没有一定理论上的支撑,极有可能是这么一种情况: ① 需求下来了,搞一个demo做交待 ② 发现基本满足很满意,于是直接在demo中做调整 上面的做法本身没有什么问题,问题发生在后期 ③ 在demo调整后应用到了实际业务中,发现很多地方有问题,于是见一个坑解决一个坑 ④ 到最

arduino双机通信 (解决引脚不够用)

作用 实现将一个 arduino 中的多个 String 类型变量准确地传到另一个 arduino 中对应的多个 String 类型变量 中. 接线图 注意 TX 接另一个arduino的 RX !可以忽略图中的 LED ) 代码 1 号机器 float data1=18.98;//要发送的数据 float data2=56.73;//要发送的数据 float data3=104.27;//要发送的数据 float data4=0;//要接收的数据 float data5=0;//要接收的数据 

Linux can双机通信(2440+MCP2515 &amp;&amp; 51+SJA1000)

2012-01-12 22:43:24 上图: 自收发成功完成后,那么双机通信就比较容易了.关键就是CAN波特率.ID标识.滤波设置正确即可双机通信了. 原文地址:https://www.cnblogs.com/AppleCai/p/10778176.html

udp 双机通信(服务器循环检测)2

此文摘自:http://blog.csdn.net/qinpeng100423/article/details/8980423,谢谢了 自己上一篇写的udp通信,只能运行一次,参考了这位博主的,只是把receive的方法处改为循环,这样即可实现服务器循环检测,然后接受数据和回复 受到项目要求,将文件分离,读者引用该类,实例化调用方法即可. 一. UDP协议定义 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层——传输层,处于IP协议的上一层.UDP

STM32 IIC双机通信—— HAL库硬件IIC版

参考传送门 关于IIC的原理这里我就不多说了,网上有很多很好的解析,如果要看我个人对IIC的理解的话,可以点击查看,这里主要讲一下怎样利用STM32CubeMx实现IIC的通讯,经过个人实践,感觉HAL库的硬件IIC要比标准库的稳定.好了,下面就从STM32CubeMx 配置开始一步步实现IIC通讯. STM32CubeMx的配置,这里关于新建工程的步骤我就不细说了,如果还不会操作STM32CubeMx 的可以点击链接查看, 这里主要对IIC的配置进行说明. 了解IIC的都知道,IIC通信有主从

Socket编程:之双机通信

服务端: 1 #include<sys/socket.h> 2 #include<sys/types.h> 3 #include<stdio.h> 4 #include<unistd.h> 5 #include<stdlib.h> 6 #include<string.h> 7 #include<netdb.h> 8 #include<netinet/in.h> 9 #include<arpa/inet.h

LabVIEW串口通信

Instrument I/O 利用LabVIEW内置的驱动程序库和具有工业标准的设备驱动软件,可对 GPIB(通用接口总线).Ethernet(以太网)接口.RS-232(标准串行接口总线)/RS-485 等 I/O 仪器设备进行控制.在LabVIEW的仪器I/O子模板上提供了多种图标可对各种I/O仪器设备进行驱动. 在LabVIEW功能模板的Instrument I/O→Serial中包含进行串行通信操作的多个功能模块,如下图所示,分别可实现串口缓存检测.串口写.串口读.中断.串口设置.关闭串

Docker容器跨主机多网段通信解决方案

实现Docker的跨主机网络通信的方案有很多,比如在之前博文中写到的通过部署consul服务实现Docker容器跨主机通信 ,但是consul服务并不能实现多个网段跨主机进行通信,在这种情况之下,MacVlan的概念就应用而生了. Macvlan工作原理: Macvlan是Linux内核支持的网络接口.要求的Linux内部版本是v3.9–3.19和4.0+: 通过为物理网卡创建Macvlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址.虚拟出来的子接口将直接暴露在相邻物理网络中.从

2015电赛点滴

2015-7-2第1阶段 初步选题为通信类,和仪器仪表类.做红外光通信和频率特性分析仪两道题. 一.进度: 模拟部分:发送端去掉前面的电位器直接接在电容一侧进行耦合,接收端电路跳过前置放大的三极管. 传输距离较短,70cm左右: 数字部分 :单片机在4800波特率下传输键值,和简单字符进行双机通信没问题: 二.各自分工进展: 马永昊:搭建数字电路,模拟电路并调试 张初瞳:单片机的双机通信,温度显示 陈泽昱:滤波.运放电路.555芯片的使用 三.下一步: 提高模拟部分的传输距离,从前置放大,和lm