单片机实现双机通信自己整理的

合集下载

51单片机实现双机通信(自己整理的)

51单片机实现双机通信(自己整理的)

左边1号机,右边2号机,,功能实现1号机程序#include<reg51.h>#define uint unsigned int#define uchar unsigned charsbit p10=P1^0;uchar a,b,kk;//uchar code d_c[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void delay_ms(uchar y){uchar i;while(y--)for(i=0;i<120;i++);}void put(uchar x) //发送函数{SBUF=x; //SBUF:串行口数据缓冲器while(TI==0); //等待发送结束TI=0;}void main(){uchar j;SCON=0x40; //串行口工作方式1,8位通用异步发送器TMOD=0x20; //定时器1工作方式2PCON=0x00; //波特率不倍增TH1=0xf4;TL1=0xf4; //波特率2400TR1=1; //定时器1开始计时P2=0xc0;while(1){if(p10==0&&j==0){delay_ms(15);while(p10==0);kk=1;P2=0xf9;j=1;}if(p10==0&&j==1){delay_ms(15);while(p10==0);kk=2;P2=0xa4;j=2;}if(p10==0&&j==2){delay_ms(15);while(p10==0);kk=3;P2=0xb0;j=0;}if(kk==1)put('A');if(kk==2)put('B');if(kk==3)put('C');delay_ms(10);}}/*********************************************************************** if(p10==0&&j==0){delay_ms(15);while(p10==0);kk=0;P2=~0xf9;j=1;}if(p10==0&&j==1){delay_ms(15);while(p10==0);kk=1;P2=~0xa4;j=2;}if(p10==0&&j==2){delay_ms(15);while(p10==0);kk=2;P2=~0xc0;j=0;}if(kk==0)put('A');if(kk==1)put('B');if(kk==2)put('C');delay_ms(100);*********************************************************** if(p10==0){delay_ms(15);while(p10==0);number=(number+1)%4;}switch(oper){case 0:break;case 1:put('A');P2=~0xf9;break;case 2:put('B');P2=~0xa4;break;case 3:put('C');P2=~0xc0;break;}delay_ms(10);******************************************************************** if(p10==0){delay_ms(15);while(p10==0);j=(j+1)%3;}switch(j){case 0:put('A');P2=~0xf9;break;case 1:put('B');P2=~0xa4;break;case 2:put('C');P2=~0xc0;break;}delay_ms(10);*/2号机程序。

单片机普通IO口双机通信

单片机普通IO口双机通信

12864液晶串口显示发送机P1口与接收机P0口间接一块74H573 发送机:#include<reg52.h>#define uchar unsigned charsbit s1=P3^0;//按键uchar num=0x00;void delay(uchar z){uchar i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}void key(){if(s1==0){delay(5);if(s1==0){num++;if(num==0x0a){num=0x00;}}while(!s1);}}void main(){while(1){key();P1=num;delay(2);}}接收机:#include <reg52.h>#define uchar unsigned char#define uint unsigned intuint i,j,k;sbit SID = P2^5; //串行数据sbit SCLK = P2^6; //串行同步时钟uchar code table[]="0123456789";/*****延时子程序*****/void delay(uint z){for(i=z;i>0;i--);for(j=110;j>0;j--);}void delay50us(uint z){uint i,j;for(i=z;i>0;i--)for(j=19;j>0;j--);}/*****串行发送一个字节*****/void send_byte(uchar byte){uchar i;for(i=0;i<8;i++){SCLK = 0;byte=byte<<1; //左移一位先发送高位的数据SID = CY; //移出的位给SIDSCLK = 1; //上升沿触发发送SCLK = 0;}}/*****写指令*****/void write_com(uchar com ){delay(5);//检测忙的子程序我们就不写了,因为串行的不支持读操作,我们就用个延时吧send_byte(0xf8); //11111,RW(0),RS(0),0send_byte(0xf0&com); //高四位数据分两次发送,而且把数据放在高四位上发送send_byte(0xf0&com<<4); //低四位(先执行<<)}/*****写数据*****/void write_dat(uchar dat){delay(5);send_byte(0xfa); //11111,RW(0),RS(1),0send_byte(0xf0&dat); //高四位send_byte(0xf0&dat<<4); //低四位(先执行<<)}/*****初始化LCD*****/void init(){delay(100);write_com(0x30);delay50us(4);write_com(0x30);delay50us(4);write_com(0x0c); //打开显示delay50us(4);write_com(0x01); //清屏delay(50);write_com(0x06);delay(10);}void display(){uchar num;uint shu;num=P0;shu=num/10;write_com(0x80); write_dat(table[num]); delay(5);}/*****主函数*****/ void main(void){P0=0x00;init();while(1){display();}}。

51单片机的双击通信(分享借鉴)

51单片机的双击通信(分享借鉴)

一设计题目:双机通信系统二实验描述:设计一个双机通信系统,实现按键数据的互发及显示功能。

三实验要求:利用两片8051单片机完成双机通信(A机和B机),A、B机发至对方数据可用数码管显示,通信过程用按键控制,发送内容自定。

四实验元件:ST89C51(两片)、电容(30PF*4、10UF*4)、数码管(共阳)、晶振(11.059 2MHZ)、小按键等。

五具体设计:1:设计介绍1.1 串行通信介绍广义地讲,终端(如计算机等)与其他终端、终端与外部设备(如打印机、显示器等)之间的信息交换称为数据通信(Data Communication)。

数据通信方式有两种:串行通信和并行通信。

并行通信:数据的各位同时进行传送(接收和发送),其优点是传递速度快、效率高,多用在实时、快速的场合。

串行通信:数据逐位传送,优点是数据只需要一根数据线就能完成传送,联结介质简单,成本低。

1.2 8051简介51内部结构:8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,·中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

·数据存储器(RAM):8051内部有128个8位用户数据存储单元8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

·程序存储器(ROM):8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。

·定时/计数器(ROM):8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。

单片机用proteus仿真双机串口通信总结体会

单片机用proteus仿真双机串口通信总结体会

单片机用 Proteus 仿真双机串口通信总结体会本文介绍了使用 Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。

下面是本店铺为大家精心编写的5篇《单片机用 Proteus 仿真双机串口通信总结体会》,供大家借鉴与参考,希望对大家有所帮助。

《单片机用 Proteus 仿真双机串口通信总结体会》篇1引言在单片机应用中,串口通信是一种重要的通信方式,它具有传输速率快、传输距离远、抗干扰能力强等优点。

Proteus 仿真软件是一种功能强大的电子电路仿真工具,可以用来模拟单片机串口通信的整个过程,为学习和实践提供方便。

本文将详细介绍使用Proteus 仿真软件进行单片机双机串口通信的实验过程及总结体会。

实验过程1. 硬件电路设计首先,我们需要设计一个简单的单片机硬件电路,包括电源电路、串口通信电路和 LED 显示电路。

电源电路可以使用电池或者稳压器来提供稳定的电压,串口通信电路可以使用 Proteus 提供的串口助手软件进行设计和调试,LED 显示电路可以使用 Proteus 提供的 LED 助手软件进行设计和调试。

2. 软件程序设计在软件程序设计中,我们需要编写两个程序:主程序和串口通信程序。

主程序主要负责初始化串口通信电路和 LED 显示电路,并将控制权转移到串口通信程序。

串口通信程序主要负责接收和发送数据,通过串口助手软件可以方便地进行调试和测试。

3. 仿真测试在仿真测试中,我们可以使用 Proteus 提供的仿真工具进行测试。

首先,我们需要将硬件电路和软件程序导入 Proteus 仿真软件中,并进行电路连接和程序编译。

然后,我们可以通过串口助手软件进行数据发送和接收,并通过 LED 显示电路进行数据展示。

总结体会通过使用 Proteus 仿真软件进行单片机双机串口通信实验,我们可以得出以下总结体会:1. Proteus 仿真软件是一种非常强大的电子电路仿真工具,可以用来模拟各种电路和通信方式。

单片机实验三双机通信实验程序

单片机实验三双机通信实验程序

单片机实验三双机通信实验程序第一篇:单片机实验三双机通信实验程序实验三双机通信实验一、实验目的UART 串行通信接口技术应用二、实验实现的功能用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。

三、系统硬件设计实验所需硬件:电脑一台;开发板一块;串口通信线一根; USB线一根;四、系统软件设计实验所需软件:编译软件:keil uvision3;程序下载软件:STC_ISP_V480;试验程序:#include sbit W1=P0^0;sbit W2=P0^1;sbit W3=P0^2;sbit W4=P0^3;sbit D9=P3^2;sbit D10=P3^3;sbit D11=P3^4;sbit D12=P3^5;sbit DP=P1^7;code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sfr P1M1=0x91;sfr P1M0=0x92;sbit H1=P3^6;sbit H2=P3^7;sbit L1=P0^5;sbit L2=P0^6;sbit L3=P0^7;unsigned char dat;unsigned char keynum;unsigned char keyscan();void display();void delay(void);L1=1;L2=1;L3=1;H1=0;if(L1==0)return 1;else if(L2==0)return 2;else if(L3==0)return 3;H1=1;H2=0;if(L1==0)return 4;else if(L2==0)return 5;else if(L3==0)return 6;H2=1;return 0;} unsigned char keyscan(){ static unsigned int ct=0;static unsigned char lastkey=0;unsigned char key;key=getkey();if(key==lastkey){ct++;if(ct==900){ct=0;lastkey=0;return key;} } else {第二篇:单片机串行通信实验实验四单片机串行通信实验一、实验目的1、掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。

单片机双机通信(C51程序)

单片机双机通信(C51程序)

单片机双机通信(C51程序)/*发送程序连线:两个单片机用3 根线连起来,要共地,rxd,txd 要交叉连接程序效果:通过主机发送,从机接收在主机中通过记下按键按下的次数,主机中显示最后按下的六个数值,并发送给从机,从机也显示这六个数值*/#includereg52.h //头文件#includeintrins.h //循环移位文件#define uchar unsigned char//宏定义#define uint unsigned intsbit key1=P3 ; //位声明uchar code table[] ={0X00,0x3f,0x06,0x5b,//数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar table_tr[6];//暂存最后按下的六个数值uchar count,cnt;//延时子函数,用于数码管显示void delay(uchar i){ uchar x,y; for(x=i;x0;x--) for(y=110;y0;y--);}//初始化子函数void init(){ TMOD=0x20;//T1 工作在方式2 TH1=0XF4;//波特率为4.8kbit/s TL1=0XF4; TR1=1;//启动定时器1 SCON=0X50;//串口工作在方式1,允许接收}//显示子函数void display(){ uchar i,j;//定义局部变量j=0x7f; //赋初值for(i=0;i6;i++) { P2=j; //点亮最右边的数码管P0=table[table_tr[i]]; //显示该数值delay(10); //延时,便于眼睛看清j=_cror_(j,1);//循环右移一位}}//按键扫描子函数void key_scan(){ if(key1==0) //判断是否有按键按下{ while(!key1) //等待按键松手{ display();//防止掉显} cnt++; //加1,用于显示SBUF=cnt;//送给缓冲区,发送while(!TI); //等待发送完TI=0; //发送完了,标志位清零for(count=0;count5;count++) //用于保存最后按下的六个按键数值{ table_tr[count] =table_tr[count+1]; } table_tr[5]=cnt; //把最后按下的按键数值赋给table_tr【5】if(cnt==10) //按键按下的次数有没有等于10 cnt=0;//等于,则清零}}void main() { init(); //调用初始化子函数P0=0x00; while(1) { key_scan(); //调用键盘扫描子函数display();//调用显示子函数} }tips:感谢大家的阅读,本文由我司收集整编。

双机通信实验报告

双机通信实验报告

一、实验目的1. 掌握双机通信的基本原理和实现方法。

2. 熟悉串行通信的硬件接口和软件编程。

3. 通过实验,加深对单片机串行通信的理解和应用。

二、实验原理双机通信是指两台计算机或单片机之间的数据交换。

串行通信是双机通信中常用的一种通信方式,它将数据一位一位地按顺序传送,适合于远距离通信。

本实验采用单片机串行通信,通过串行口实现数据传输。

三、实验设备1. 两套单片机实验装置(如AT89S51单片机最小系统)2. 串行通信线(如RS-232线)3. 串口调试工具(如串口助手)4. 连接线和电源四、实验内容1. 硬件连接将两套单片机实验装置通过串行通信线连接起来,确保连接线正确无误。

2. 软件编程(1)单片机编程编写单片机程序,实现数据的发送和接收。

程序主要包括以下部分:- 初始化串行口:设置波特率、数据位、停止位和校验位等。

- 发送数据:将数据写入发送缓冲区,启动发送。

- 接收数据:检测接收缓冲区是否有数据,读取数据。

(2)PC端编程编写PC端程序,实现数据的发送和接收。

程序主要包括以下部分:- 串口配置:设置串口号、波特率、数据位、停止位和校验位等。

- 发送数据:将数据写入串口缓冲区,启动发送。

- 接收数据:从串口缓冲区读取数据,显示或处理。

3. 调试与测试(1)单片机端调试- 使用串口调试工具,发送数据到单片机。

- 检查单片机接收到的数据是否正确。

(2)PC端调试- 使用串口调试工具,发送数据到PC。

- 检查PC接收到的数据是否正确。

五、实验结果与分析1. 硬件连接硬件连接正确,两套单片机实验装置通过串行通信线连接。

2. 软件编程(1)单片机程序```c// 单片机程序示例(AT89S51)#include <reg51.h>#define BAUDRATE 9600sbit TXD = P3^1; // 发送引脚sbit RXD = P3^0; // 接收引脚void Serial_Init() {TMOD = 0x20; // 定时器1工作在模式2TH1 = 0xFD; // 设置波特率TL1 = 0xFD;TR1 = 1; // 启动定时器1SCON = 0x50; // 设置串行口工作在模式1 }void main() {Serial_Init();while (1) {// 发送数据TXD = 1; // 发送起始位while (!TXD); // 等待发送完成// 发送数据字节for (char i = 0; i < 8; i++) {TXD = 1; // 发送数据位while (!TXD);TXD = 0; // 发送停止位while (!TXD);}// 接收数据RXD = 1; // 接收起始位while (!RXD); // 等待接收完成// 接收数据字节for (char i = 0; i < 8; i++) {RXD = 1; // 接收数据位while (!RXD);RXD = 0; // 接收停止位while (!RXD);}}}```(2)PC端程序```c// PC端程序示例(C#)using System;using System.IO.Ports;class Program {static void Main() {SerialPort serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);serialPort.Open();while (true) {// 发送数据serialPort.WriteLine("Hello, world!");// 接收数据string receivedData = serialPort.ReadLine();Console.WriteLine("Received: " + receivedData);}serialPort.Close();}}```3. 调试与测试通过串口调试工具,发送数据到单片机和PC,检查接收到的数据是否正确。

单片机双机之间的串行通信设计

单片机双机之间的串行通信设计

单片机双机之间的串行通信设计Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998专业方向课程设计报告题目:单片机双机之间的串行通信设计单片机双机之间的串行通信设计一.设计要求:两片单片机利用串行口进行串行通信:串行通信的波特率可从键盘进行设定,可选的波特率为1200、2400、4800和9600bit/s。

二、方案论证:方案一:以两片51单片机作为通信部件,以4*4矩阵键盘作为数据输入接口,通过16个不同键值输入不同的信息,按照51单片机的方式3进行串口通信,从机采用中断方式接收信息并按照通信协议改变波特率或者用I/O口输出、CD4511译码、数码管显示相关数据,整个系统的软件部分采用C语言编写。

方案二:整个系统的硬件设计与方案一样,但是通信方式采用方式一进行通信,主从机之间的访问采用查询方式,数据输出直接由单片机的译码程序输出译码数据,同时软件编写采用汇编语言。

两种方式从设计上来说各有特色,而且两种方式都应该是可行的。

方案一中按照方式三通信可以输出九位数据而方式一只能输出八位数据,但就本题的要求来说方式一就可以了。

主从机之间的交流采用中断方式是一种高效且保护单片机的选择,但是相比之下本人对查询方式的理解更好一些。

数码管的显示若采用CD4511译码则直接输出数据就可以了,但是这样会增加硬件陈本,而且单片机的资源大部分都还闲置着,所以直接编写一段译码程序是比较好的做法。

另外在软件编写上,采用C语言在后续设计中对硬件的考虑稍少一些,换言之采用汇编可以使自己对整个通信过程及单片机的部分结构有更清晰地认识所以综合考虑采用方案二。

三、理论设计:采用AltiumDesigner绘制的原理图(整图)本系统主要包括五个基本模块:单片机最小系统(包括晶振电路、电源、复位电路及相关设置电路)、4*4矩阵键盘、功能控制电路、数据显示电路、波特率更改指示电路。

本设计的基本思路是通过控制口选择将要实现的功能,然后矩阵键盘输入数据,单片机对数据进行处理(加校验码、设置功能标志位),然后与从机握手,一切就绪之后后就开始发送数据,然后从机对接收数据校验,回发校验结果,主机根据校验结果进行下一步动作,或者重发,或者进入下一数据的发送过程,然后按照此过程不段循环,直到结束。

单片机双机串行通信多数据传输汇编语言编程实现

单片机双机串行通信多数据传输汇编语言编程实现

• 178•串口是单片机与其他单片机或计算机系统进行异步串行通信的标准I/O 接口,在系统设计中应用非常广泛。

以教学中使用的CPU 字长是8位的51单片机为例,实现双机间多数据串行传输,在多数据发送时为每个数据增加特征值,接收的时候通过特征值判断接收的数据,此方法最多可以实现双机间16个数据的传送,适用于5-8个通道的数据采集系统。

将此设计思想应用在0-999s 的秒表系统设计中,系统运行稳定,实现预期效果。

单片机串口是异步串行通信,发送方发送数据并不考虑接收方什么时候接收,如果是传送1个数据比较好处理,串口无论工作在查询方式下还是中断方式下,接收方的CPU 只要检测RI =1,就可以接收数据。

如果发送方发送的是多个数据,接收方接收的是发送方发送的多个数据的哪一个?发送方发送的多个数据是动态变化的,尽管发送方发送多个数据的顺序在编程中是固定不变的,但是串口通信是异步的,接收方接收时,无法知道此次接收的数据是发送方发送的哪一个数据,所以接收方必须有能力判断接收到的是哪一个数据才能真正实现异步串行通信多数据的正确传送。

1 发送数据的加密原理及编程实现要想让接收方有能力判断接收的数据是哪一个数据,可以对要发送的数据做加密处理,数据加密技术是网络中最基本的安全技术,主要是通过对网络中传输的信息进行数据加密来保障其安全性。

本设计借用数据加密的思想,对要发送的数据采用增加特征值的加密处理方法,乙机接收数据后,通过解密获取特征值,就可以知道接收的是哪一个数据了。

特征值的选取要视发送数据的范围,本文以发送压缩BCD 码说明数据加密的原理及编程实现。

1.1 发送数据的加密原理压缩BCD 码是用4位二进制表示1位十进制,由于设计中使用的单片机CPU 的字长是8位的,所以一次可以处理1个字节数据,用字节表示1位BCD 码的时候,高4位一定是“0”,低4位是”0-9”中的1个数字,这样用高4位的“0”就可以实现对数据加密处理。

单片机实验四 双向通信

单片机实验四 双向通信

实验四:双向通信一、实验要求实验目的:了解MCS-51单片机串行口(UART)的结构、工作方式、了解串行通信的原理和数据交换过程,掌握单片机之间进行串行通信的编程方法。

实验内容:将甲乙两台MCS-51单片机串行口连接,即甲机的TXD与乙机的RXD相连,甲机的RXD与乙机的TXD相连,并实现双机共地。

整个系统实现双向通信。

具体是:1、甲机的K1键可通过串行口分别控制乙机的LED1点亮、LED2点亮、LED1和LED2全亮或全灭。

2、乙机的K2按键可通过串行口向甲机发送数字,甲机将接收到的数字显示在P0段的LED数码管上。

二、实验原理串行口工作方式2MCS-51串行口工作方式2是9位异步通信接口。

每帧数据均为11位,1位起始位0,8位数据位(先低位),1位可程控的第9位数据和1位停止位串行口工作为方式2时,被定义为9位异步通信接口。

其时序如图所示。

串行口工作方式2的波特率当采用方式2时,波特率仅仅与晶振频率有关。

在方式0中,波特率为时钟频率的1/12,即f osc/12,固定不变。

在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为f osc/64;当SMOD=1时,波特率为f osc/32。

双机通信硬件电路三、程序设计1、甲机程序ORG 0000HAJMP MAINTORG 0003HAJMP EX_INT0MAINT: MOV SCON, #90H ;串口工作方式2,允许接收MOV PCON, #80H ;波特率加倍MOV R0, #00HMOV SP, #40HMOV DPTR, #TABSETB IT0SETB EASETB EX0SETB ESHERE: SJMP HEREORG 0200HEX_INT0:MOV A, R0MOV SBUF, ACHECK: JBC TI, GOONSJMP CHECKGOON: CLR TIINC R0WAIT: JBC RI, NEXT ;接收部分SJMP W AITNEXT: MOV A,SBUFMOV R1, AMOVC A, @A+DPTRMOV P1,ACLR RIRETITAB: DB 0C0H, 0F9H, 0A4H, 0B0HEND2、乙机程序ORG 0000HAJMP RECSRECS: MOV SCON, #90HMOV PCON, #80HWAIT: JBC RI, NEXTSJMP W AITNEXT: MOV A, SBUFMOV B, #04HMOV P1, ADIV ABCLR RITRANS: MOV SBUF, BCHECK: JBC TI, WANLESJMP CHECKWANLE: LJMP RECSEND设计思路:用R0的最后两位共有00,01,10,11四种状态控制LED1、LED2的亮灭,将R0从甲机传到乙机的P0口,最后两位控制LED灯。

单片机实现双机通信自己的

单片机实现双机通信自己的

左边1号机,右边2号机"功能实现1号机程序 ttincludeOftdefine uint unsigned int ftdefine uchar unsigned charsbit P io=pro ;uchar a, b, kk; //ucharcoded_c[]二{OxcO, 0xf9, 0xa4, OxbO, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, Oxff};void delay_ms(uchar y) {uchar i;J1 1A 1 ALI13 XTALZ9RETT29FSCT ALE 仔r ■ i1 pmY丿2 P1.1 P123 4 r u 5 P1.4 6 P1 4? P W 2Pl.?<T2BC 5T b/sPCJiyM 口PO.VA01 ?U2iM2 PD.4/Al>* P0STA35 P 口 PO.7W7P2H*A3 P2.1WS P32TA1O P2^A11 P2.4/A12 P2W13 P2&AU P2.7W15 PSHRXD P3.VTXD P3NTIE rjjnWTT P3.4H13 P3STT1 P3AWW P3.7/HFG ■ vTEe11 12 F ~IT J2POIVAOO pm/ADi P0^AD2 PD^AD3 PD.4/AD* POLADS PD^AD6 PD7M07 2W2 2.VA9 2^A10 2^A11 2.4/A12 2<VA13 2^AU 2?ZA15 3WRXD 3.irrxo 3^nrro □^rriTT 3.4/TO 3ST13?/IFtTE9C5 <Tt?19 ■ 1:<TAL1XTAL2while (y一一)delay_ms (15);while(plO==O);kk=l;P2=0xf9;J=l;}辻(plO==O&&j==l){delay_ms(15); while(plO==O); kk=2;P2=0xa4;J=2;} if(pl0==0&&j==2){delay_ms(15); while(plO==O); kk=3;P2=0xb0;j 二0;if(kk==l)put (' A,);if(kk==2)put d );if(kk==3)put (' C,);delay_ms(10);}}/*•丄■wx ■丄"■丄"■丄"■丄"■卜%fx ■士■丄"•丄"%fx ■丄"wx ■丄Q ■[" ■”■丄■"%£x •" K L Z•丄"%L^if(pl0=0&&j==0){delay_ms(15);while(pl0==0);kk=0;P2二〜Oxf9;J=l;if(pio二二0&&j二二1){delay_ms(15); while(plO==O); kk=l;P2二'0xa4;J=2;}辻(pl0==0&&j==2){delay_ms(15); while(plO==O); kk=2;P2二〜OxcO;j 二0;}if(kk==O)put (' A,);if(kk==l)put (' B');if(kk==2)put C c‘);delay_ms(100);•丄"■丄"■丄"■尢•丄■ ■丄"■丄"%tx ■丄"■" V^Z ■丄"%tz •丄"•丄"■士KW WX •丄"■丄"■丄"■丄■ ■丄"■丄"■丄"■丄"if(pio 二二0){delay_ms (15);while(pl0==0);number二(number+l)%4;}switch(oper){case 0:break;case 1: put (' A' ) ; P2「0xf9; break;case 2:put(' B‘);P2「0xa4;break;case 3:put(' C ) ;P2=~0xc0;break;}delay_ms(10);%fx ■尢•丄"KW W^ %fx %fx ■丄"^L# %tz %tz >^Z ■丄"%fx %Lz %fx ■尢■丄■■丄"%fx %tz %Lx >X^ %fx ■尢"7^if(plO=O)•丄"*delay_ms (15);while(plO==O);j=(j+l)%3;}swit ch(j)case 0: put ) ; P2=^0xf9: break;case 1: put (' B‘); P2二'0xa4; break;case 2:put ('C ) ;P2「0xc0;break;delay_ms(10);*/2号机程序。

80C51单片机双机通信与多机通信的使用方法

80C51单片机双机通信与多机通信的使用方法

80C51单片机双机通信与多机通信的使用方法80C51单片机之间的串行通信主要可分为双机通信和多机通信,本节举例说明双机通信与多机通信的使用方法。

1.双机通信硬件电路如果两个80C51单片机系统距离较近,那么就可以将它们的串行口直接相连,实现双机通信,如图1所示。

图1 双机异步通信接口电路为了增加通信距离,减少通道和电源干扰,可以在通信线路上采用光电隔离的方法,利用RS-422A标准开展双机通信,实用的接口电路如图2所示。

图2 RS-422A双机异步通信接口电路2.双机通信软件编程对于双机通信采用两种方法:查询方式和中断方式。

(1)查询方式例在双机通信中,设置串行口工作于方式3,波特率为9600,定时器T1工作于方式2,允许接收,单片机主频fosc=6MHZ,编写初始化编程序。

分析:①设置SCON存放器串行口工作于方式3,SM0SM1=11。

双机通信不需要发送地址,SM2=0。

允许接收REN=1。

所以SCON=11010000B=0D0H。

②计算定时器T1计数初值,波特率不加倍,smod=0。

由可写出:COUNT=254=0FEH③初始化程序例当1号机开始发送时,先送出一个“A1”信号,2号机收到后答复一个“B2”信号,表示同意接收。

当1号机收到“B2”信号后,开始发送数据,每发送一次求一个“校验和,以提高通信的可靠性。

设数据块为10个字节,数据缓冲区的起始地址是40H,数据块发完后马上发送“校验和”。

2号机接收数据并将其转存到40H开始的缓冲区,每接收到一个数据也求一次“校验和”,数据块收完后,再接收1号机发来的“校验和”,并与2号机求出的结果相比较。

如二者相等,说明接收正确,2号机答复“00H”;若两者不等,说明接收错误,2号机答复“0FFH”,请求重发。

1号机收到“00H”的答复后,结束发送。

若收到的答复非零,则将数据重发一次。

假定双方约定的传输波特率为1200bps,振荡频率为11.0592Hz,T1工作在方式2。

单片机双机串口通信程序设计

单片机双机串口通信程序设计

单片机双机串口通信程序设计发布: 2009-4-03 23:56 | 作者: cepark | 查看: 92次利用方式1实现单片机双机通信,主频为6M,波特率为2400bps,电路见图5 -10。

当两个单片机距离较近时,甲、乙两机的发送端与接收端分别直接相联,两机共地。

执行程序,甲机将亮灯信号发送给乙机,若通信正常,乙机接收到信号后点亮20个发光二极管。

乙机采用查询与中断两种工作方式。

当然20个LE D乙机可单独控制,也可接受甲机的控制,并执行甲机指令,还需要进一步完善程序.甲机发送程序:org 0000hsta: mov tmod,#20h ;设置波特率mov tl1,#0FAhmov th1,#0FAhsetb tr1mov scon,#40h ;置工作方式1clr timov a,#00hmov sbuf,a ;发送亮灯信号wait: jbc ti,cont ;发送成功清标志ajmp wait ;等待发送完毕cont: sjmp sta ;重复发送end乙机查询工作方式接收:org 0000hmov tmod,#20h ;设置通信波特率mov tl1,#0FAhmov th1,#0FAhsetb tr1mov scon,#40hclr risetb ren ;允许接收wait: jbc ri,read ;接收成功清标志ajmp wait ;接收未完等待read: mov a ,sbufmov p1,a ;接收亮灯信号送P1口sjmp $end乙机中断工作方式接收org 0000hajmp mainorg 0023hajmp zd ;转串口中断程序START: MOV TMOD,#20hmov tl1,#0FAhmov th1,#0FAhsetb tr1mov scon,#50hclr rimov ie,#90h ;开中断MAIN:sjmp $ 主程序zd: clr ri ;清接收标志;==============中断程序还要再完善============== mov a ,sbuf ;读接收信号mov p1,aMOV R1,A ;将收到的信号送缓存reti ;中断返回end<单片机双机串口通讯原理图>采用方式2 通信,数据帧格式是11位的,TB8为奇偶校验位,接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。

MCS51系列单片机双机并行互连的实现方法

MCS51系列单片机双机并行互连的实现方法

MCS51系列单片机双机并行互连的实现方法介绍了在同一系统内,MCS51系列两单片机之间采用单向并行通信接口、主从双向并行通信接口、无主从双向并行通信操作实现双机互连的方法,分析了在每一种通信接口工作方式下数据传送的特点。

在三种并行通信接口为单片机应用系统扩充硬件资源的设计提供了新的途径。

由于MCS51系列单片机具有性能稳定、工作可*、价格低廉等特点,因此其应用相当广泛。

一个MCS51系列的单片机(如Atmel89cxx)内部包含有RAM、FLASH ROM、两个或者三个16位的定时器/计数器、一个通用异步串行通信控制器(UART)等多种资源。

但即便如此,在一些相对复杂的单片机应用系统中,仅仅一个单片机资源还是不够的,因此而常常需要扩充I/O接口、定时器/计数器、串行通信接口、RAM、ROM等。

采用通用的标准器件进行扩充是通常的做法,但将单片机本身作为一个通用的扩充器件来使用,也不失为一个好的方法。

在这种情况下,一个系统中就使用了两个或两个以上的单片机,而单片机之间就要通过互连来进行数据通信。

MCS51系列的单片机(以下简称单片机)都带有串口,利用串口进行互连通信极为方便,其各种连接方式在许多书籍和资料上都有介绍,在此不再重述。

但如果系统要求扩充的资源是对外连接的串口,或对相互之间的数据传送有一定的速度要求,则单片机的串口就不能用作系统内两单片机的通信接口了。

所幸的是,单片机的并行端口也能相互连接来进行数据通信。

根据单片机端口内部结构的特点,这些端口的端口线可以直接相连,从而使两单片机之间并行通信接口的实现不用另外的硬件电路设备。

基于这种情况,设计时,可根据不同的使用要求,来采用不同的并行连接方法。

下面介绍在两个单片机之间进行三种并行通信接口的实现方法。

1 单向并行通信接口的实现在应用中,如果只需一个单片机向另一个单片机传送数据,则可以采用单向并行通信接口方式,这种方式较为简单。

图1所示为单向并行通信接口的组成方法。

基于单片机的双机串行通信设计

基于单片机的双机串行通信设计

基于单片机的双机串行通信设计一、总体设计1.实现功能:用单片机的串口模拟短信的收发,当A主机要向B主机发送一行字符串时,首先A主机把这行字符串打印到1602LCD液晶屏幕上,当A主机按发送按键的时候,A主机向B主机发送一行字符串,这时字符串会通过串口发送到B主机上,当B主机收到字符串时,会在1602LCD液晶屏幕上把字符串打印出来,这时按下B主机上的接受按键,B主机会把要发送的字符串,打印到B主机的1602LCD液晶屏幕上,按下B主机的发送按键,这时B主机会通过串口向A主机发送字符串。

最后用两个矩阵键盘模拟发送短信用的字母键盘,A主机可以通过矩阵键盘输入想要发送的数据,然后按发送按键发送,同样B主机也可以通过矩阵键盘输入信息,然后通过发送按键发送。

2.设计方案:首先把两个ATS89C51各自连接成单片机最小系统,在把他们的TXD、RXD口分别与MAX232相连,然后一个MAX232的T1OUT和R1IN,分别与另一个MAX232的R1IN和T1OUT相连,P0口接矩阵键盘,P1口接液晶显示的数据端。

总的电路图如图:图1、总电路图二、设计基础1.单片机串行口通信方式图2.AT89C51计算机与外界的信息交换称为通信,常用的通信方式有两种:并行通信和串行通信。

51单片机用4个接口与外界进行数据输入与数据输出就是并行通信,并行通信的特点是传输信号的速度快,但所用的信号线较多,成本高,传输的距离较近。

串行通信的特点是只用两条信号线(一条信号线,再加一条地线作为信号回路)即可完成通信,成本低,传输的距离较远。

51单片机的串行接口是一个全双工的接口,它可以作为UART(通用异步接受和发送器)用,也可以作为同步移位寄存器用。

51单片机串行接口的结构如下:(1)数据缓冲器(SBUF)接受或发送的数据都要先送到SBUF缓存。

有两个,一个缓存,另一个接受,用同一个接地址99H,发送时用指令将数据送到SBUF即可启动发送;接收时用指令将SBUF中接收到的数据取出。

实训9 51单片机双机通信

实训9 51单片机双机通信

实训9 双机通讯(PC与89C52)一、实训目的与要求1、掌握ICES仿真器硬件连接与软件设置的方法;2、掌握以下内容:1)熟练进行ICES仿真器硬件连接与软件设置2)掌握MCS-51单片机串行口的工作原理3)熟悉利用串行口实现单片机与PC机间通讯的方法4)掌握显示程序设计方法5)调试并观察运行结果。

二、实训设备爱思单片机仿真器一台;5V电源一台;配套实训板(图9-1)一块;PC机一台。

图9-1 实训板5三、实训原理图采用MAX232芯片与PC机进行串行通讯,电原理图见图9-2图9-2实训板电原理图四、实训内容及步骤㈠由单片机串行口向PC机发送数据⒈要求:单片机选用振荡频率为11.0592MHZ,串行口波特率为4800b/s,选用工作方式1。

⒉串口调试软件为了能够在PC机看到单片机发出的数据借助串口调试软件。

软件界面如图9-3。

图9-3 串口调试界面①首先设置串口通讯的参数:波特率调整为4800b/s,勾选十六进制显示;串口选择为COM1。

②硬件接线:将51单片机实验板的串口和电脑的COM1连接,将以下源程序输入编译后,接通51单片机实验板的电源,这时只要按下S3一次(就是P3.6引脚变成低电平),在串口调试助手软件的接收区界面中就会增加一个“AF”字符,表示单片机向电脑发送“AF”字符成功。

[注意] 双方通讯时,总是先将接收方的应用程序先运行,然后运行发送方的程序。

如本例,应先打开串行调试助手并设置完毕,方能在仿真器上运行单片机发送程序。

⒊源程序如下:ORG 0000H ;初始化设置MOV SCON, #50H ;设置成串口1方式MOV TMOD, #20H ;波特率发生器T1工作在模式2上MOV PCON, #80H ;波特率翻倍为2400x2=4800bpsMOV TH1, #0F4H ;预置初值(按照波特率2400bps预置初值)MOV TL1, #0F4H ;预置初值(按照波特率2400bps预置初值)SETB TR1 ;启动定时器T1WRIT: JB P3.6, $ ;判断K1是否按下,如果没有按下就等待ACALL DELAY ;延时10毫秒消触点抖动JB P3.6, WRIT ;去除干扰信号JNB P3.6, $ ;等待按键松开MOV A, #0AFH ;将16进制的字符AF发送到串口去MOV SBUF, A ;将AF通过串口发送出去JNB TI,$CLR TIAJMP WRITDELAY: MOV R4, #20DEL: MOV R5, #248 ;10毫秒延时子程序DJNZ R5, $DJNZ R4, DELRETEND⒋操作要求⑴爱思(ICES)仿真器硬件连接(同实训4)⑵工程的建立与爱思(ICES)仿真器软件设置(同实训4)⑶对工程进行编译并应用⑷调试①按要求连接线路,运行测试程序,保证单片机与PC机的通信成功;②思考:电原理图中为何加入MAX232,其作用是什么?③思考:在串行通讯中,发送寄存器和接收寄存器共用一个地址SBUF,CPU是如何区分到底对哪个寄存器进行操作的?㈡由PC机向单片机发送数据编程要求:从PC机发送10个数据,单片机采用中断方式接收。

实验四两个单片机之间双向通信实验

实验四两个单片机之间双向通信实验

实验四两个单片机之间双向通信实验一、实验目的1.了解MCS-51单片机串行口(UART)的结构、工作方式。

2.了解串行口通信的原理和数据交换过程。

3.掌握单片机之间进行串行口通信的编程方法。

二、实验内容将甲乙两台单片机串行口连接,即甲机的TXD与乙机的RXD相连;甲机的RXD与乙机的TXD相连;并实现双机共地。

整个系统实现双向通信。

具体是:1.甲机的K1按键可通过串行口分别控制乙机的LED1点亮;LED2点亮;LED1和LED2全亮或者全灭。

2.乙机的K2按键可通过串行口向甲机发送数字,甲机将接收到的数字显示在其P0端口的LED数码管显示器上。

三、实验程序甲机程序:ORG 0000HAJMP MAINORG 0003HAJMP SENDORG 0023HAJMP READYMAIN: MOV SCON,#90HMOV PCON,#80HSETB EASETB ESSETB IT0SETB EX0MOV SP,#40HMOV R0,#0MOV DPTR,#TAB HERE: SJMP HERESEND: CJNE R0,#04H,LP1 SHOW: MOV A,R0MOV C A,A+DPTRMOV C,PMOV TB8,CMOV SBUF,ACLR TIINC R0RETIREADY: JBC TI,RETURN RECEIVE:CLR RIMOV A,SBUFMOV P0,ARETURN: RETILP1:JC SHOWCLR CMOV A,R0SUBB A,#04HMOV R0,AAJMP SHOWTAB: DB 00H,01H,02H,03H END乙机程序:ORG 0000HAJMP MAINORG 0003HAJMP SENDORG 0023HAJMP READYMAIN: MOV SCON,#90H MOV PCON,#80HSETB EASETB ESSETB IT0SETB EX0MOV SP,#40HMOV R0,#0MOV DPTR,#TABHERE: SJMP HERESEND: CJNE R0,#09H,LP1 SHOW: MOV A,R0MOV C A,A+DPTRMOV C,PMOV TB8,CMOV SBUF,ACLR TIINC R0RETIREADY: JBC TI,RETURN RECEIVE:CLR RIMOV A,SBUFMOV P1,ARETURN: RETILP1: JC SHOWCLR CMOV A,R0SUBB A,#0AHMOV R0,AAJMP SHOWTAB: DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH END四、实验原理图五、实验仿真及结果六、实验总结通过本次实验,掌握了单片机之间进行串行口通信的编程方法,对MCS-51单片机串行口(UART)的结构、工作方式都有了进一步的了解。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
j=0;
}
if(kk==1)
put('A');
if(kk==2)
put('B');
if(kk==3)
put('C');
delay_ms(10);
}
}
/*
**********************************************************************
if(p10==0&&j==0)
{
SCON=0x50;//串行口工作方式1,8位通用异步发送器
TMOD=0x20;//定时器1工作方式2
PCON=0x00;//波特率不倍增
TH1=0xf4;
TL1=0xf4;
TR1=1;
P1=0xc0;
L1=L2=0;
while(1)
{
if(RI)
{
RI=0;
switch(SBUF)
{
case'A':L1=~L1;L2=0;P1=0xf9;break;
SCON=0x40; //串行口工作方式1,8位通用异步发送器
TMOD=0x20;//定时器1工作方式2
PCON=0x00;//波特率不倍增
TH1=0xf4;
TL1=0xf4;//波特率2400
TR1=1;//定时器1开始计时
P2=0xc0;
while(1)
{
if(p10==0&&j==0)
{
delay_ms(15);
左边1号机,右边2号机,,功能实现
1号机程序
#include<>
#define uint unsigned int
#define uchar unsigned char
sbit p10=P1^0;
uchar a,b,kk;
//uchar code d_c[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
void delay_ms(uchar y)
{
uchar i;
while(y--)
for(i=0;i<120;i++)
;
}
void put(uchar x) //发送函数
{
SBUF=x;//SBUF:串行口数据缓冲器
while(TI==0);//等待发送结束
TI=0;
}
void main()
{
uchar j;
{
delay_ms(15);
while(p10==0);
number=(number+1)%4;
}
switch(oper)
{
case 0:break;
case 1:put('A');P2=~0xf9;break;
case 2:put('B');P2=~0xa4;break;
case 3:put('C');P2=~0xc0;break;
case 1:put('B');P2=~0xa4;break;
case 2:put('C');P2=~0xc0;break;
}
delay_mห้องสมุดไป่ตู้(10);
*/
2号机程序。
#include<>
#define uint unsigned int
#define uchar unsigned char
sbit L1=P2^0;
}
delay_ms(10);
********************************************************************
if(p10==0)
{
delay_ms(15);
while(p10==0);
j=(j+1)%3;
}
switch(j)
{
case 0:put('A');P2=~0xf9;break;
case'B':L1=~L1;L2=~L2;P1=0xa4;break;
case'C':L1=0;L2=0;P1=0xb0;break;
}
}
delay_ms(100);
}
}
/*********************************************************
if(RI)
sbit L2=P2^1;
//uchar code d_c[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
void delay_ms(int x)
{
uchar i;
while(x--)
for(i=0;i<120;i++)
;
}
void main()
while(p10==0);
kk=1;
P2=0xf9;
j=1;
}
if(p10==0&&j==1)
{
delay_ms(15);
while(p10==0);
kk=2;
P2=0xa4;
j=2;
}
if(p10==0&&j==2)
{
delay_ms(15);
while(p10==0);
kk=3;
P2=0xb0;
kk=2;
P2=~0xc0;
j=0;
}
if(kk==0)
put('A');
if(kk==1)
put('B');
if(kk==2)
put('C');
delay_ms(100);
***********************************************************
if(p10==0)
{
delay_ms(15);
while(p10==0);
kk=0;
P2=~0xf9;
j=1;
}
if(p10==0&&j==1)
{
delay_ms(15);
while(p10==0);
kk=1;
P2=~0xa4;
j=2;
}
if(p10==0&&j==2)
{
delay_ms(15);
while(p10==0);
{
RI=0;
if(SBUF=='A')
{L1=~L1;P1=0xf9;}
if(SBUF=='B')
{L1=~L1;L2=~L2;P1=0xa4;}
if(SBUF=='C')
{L1=0;L2=0;P1=0xc0;}
}
**********************************************************/
相关文档
最新文档