单片机双机点对点通信设计

合集下载

单片机课程设计 双机通信 西安邮电大学

单片机课程设计 双机通信 西安邮电大学

西安邮电大学单片机课程设计报告书题目:双机通信院系名称:自动化学院学生姓名:专业名称:测控技术与仪器班级:时间:2012年 5 月 21 日至 6 月 1 日一、设计目的利用所学单片机知识解决实际问题。

二、设计要求1.用两片单片机,实现双机通信;2.利用与A(主机)连接的按键控制与B(从机)连接的数码管,每按一次键,主机LED亮同时数码管显示数据,随后从机LED亮,伴随着数码管显示与主机相同的数据;3.同理,用与B机连接的按键控制与A机连接的数码管。

1. STC89C52单片机介绍(1)STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programmable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。

(2)外部时钟电路(3)复位电路(4)系统硬件结构图(5)硬件仿真图(6)系统软件流程图及程序代码程序流程图程序代码如下:#include <reg52.h>#define uchar unsigned charsbit COM1 = P2^1;sbit COM2 = P2^0;sbit LED = P1^0;uchar ch, x = 0;uchar ge, shi;uchar const NUM[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; void delay_ms(uchar ms);void initModule(void);void sendOneChar(uchar ch);**************函数功能:发送数据*********** void sendOneChar(uchar ch){ES = 0;SBUF = ch;while(!TI);TI = 0;ES = 1;}void initModule(){TMOD = 0x20;TH1 = 0xfd;TL1 = 0xfd;SCON = 0x50;COM1 = 0;COM2 = 0;LED = 1;}**************函数功能:延迟************ void delay_ms(uchar ms){uchar i, j;for (i=0; i<ms; i++)for(j=0;j<110;j++);}*************主函数************void main(){initModule();EX0 = 1;IT0 = 1;ES = 1;EA = 1;TR1 = 1;P0 = NUM[0];while(1){}}void button() interrupt 0{uchar num = 0;delay_ms(20);if (INT0 == 0){LED = 0;delay_ms(500);LED = 1;x++;if(x==25){x=0;}}shi = x / 10;ge = x % 10;while (num < 20){COM1 = 1;P0 = NUM[shi];delay_ms(15);COM1 = 0;COM2 = 1;P0 = NUM[ge];delay_ms(15);COM2 = 0;num++;}sendOneChar(x);}void read() interrupt 4 {uchar num = 0;RI = 0;LED = 0;delay_ms(300);LED = 1;shi = SBUF / 10;ge = SBUF % 10;while (num < 20){COM1 = 1;P0 = NUM[shi];delay_ms(15);COM1 = 0;COM2 = 1;P0 = NUM[ge];delay_ms(15);COM2 = 0;num++;}}五、问题分析与解决方法问题一:仿真问题仿真图画好之后,开始运行,发光二极管没有反应。

单片机双机通信系统设计【文献综述】

单片机双机通信系统设计【文献综述】

文献综述电子信息工程单片机双机通信系统设计1. 前言随着计算机技术的快速发展和广泛应用,从智能的家用电器到工业上的集散控制系统都采用上位机与下位机基于串行通信的主从工作方式,这样就充分利用了微型计算机分析处理能力强、速度快的特点及下位机面向控制、使用灵活方便的优势。

[1]51系列的单片机内部包含有数据存储器、程序存储器、两个16位的定时器/计数器、通用异步串行收发器这些资源。

在广泛的应用中,单独一片单片机所能完成的任务是有限的,因此而常常需要扩充I/O接口、定时器/计数器、串行通信接口、存储器等器件。

一个系统中使用两个或两个以上的单片机时,单片机之间就需要通过互连进行数据的通信。

51系列的单片机带有串口,利用串口进行互连通信极为方便,并且能够减少端口的数量。

但如果系统要求扩充的资源是对外连接的串口,串口上可以外接串行输入并行输出的移位寄存器74LS164,或外接并行输入串行输出的移位寄存器74LS165。

[2-6]为了增加通信距离,减少通道中电源的干扰,可以在通信上路采取光电隔离的方法进行双机串行通信。

2. 主题双机通信系统设计中,单片机内部的串行接口是全双工的,它在接收数据的过程中同时能够发送数据。

两个串行接口数据缓冲器可以通过特殊功能寄存器SBUF访问,写入SBUF的数据用于发送,接收的数据从SBUF中读出。

常用的数据传输方式有单工、半双工、全双工,本设计采用单工的传输方式。

串行通信有两种形式,(1)异步通信:这种通信方式的特点是接收器和发送器都有各自独立的时钟,然而它们之间的工作不是同步的,异步通信方式用一帧表示一个几位的字符,其内容排布:首先一个起始位,接着几个数据位,最后紧跟的是一个停止位。

(2)同步通信:这种通信方式的特点是发送端和接收端由共同的一个时钟源控制,为了解决在异步通信方式中每传输单位字符要加上起始位和停止位从而占用大量传输时间的情况,同步传输通信方式会去掉起始位和停止位,与传输数据块时会首先送出同步字符标志来控制数据的发送。

(单片机原理与应用实验)实验9点对点串行通信

(单片机原理与应用实验)实验9点对点串行通信

波特率
串行通信接口
单片机上的串行通信接口通常包括发 送数据端(TXD)、接收数据端 (RXD)和地线(GND)。
表示每秒钟传输的位数,是衡量串行 通信速度的参数。
串行通信的分类
同步串行通信与异步串行通信
同步串行通信是指发送方和接收方以相同的时钟频率进行数据传输,而异步串 行通信则没有共同的时钟频率。
02
例如,空调的温度设置、电视的频道切换等操作,都是通过性、易扩展等优点,因此
03
在智能家居领域得到广泛应用。
在工业控制中的应用
在工业控制系统中,各种传感器、执行器等设备需要实时地进行数据传输和控制。 点对点串行通信能够满足工业控制领域对实时性、可靠性和安全性的高要求。
波特率设置
波特率计算
根据通信协议的要求,计算出合 适的波特率。常用的波特率有 9600、19200、4800等。
寄存器配置
根据计算出的波特率,配置单片 机串行通信接口的相关寄存器, 以实现所需的波特率。
测试与调整
在实际通信过程中,可能需要根 据实际情况调整波特率,以确保 数据传输的稳定性和正确性。
(单片机原理与应用实 验)实验9点对点串行 通信
contents
目录
• 单片机串行通信原理 • 点对点串行通信的实现 • 单片机点对点串行通信实验步骤 • 点对点串行通信的应用 • 点对点串行通信的优缺点 • 点对点串行通信的未来发展
01
单片机串行通信原理
串行通信的基本概念
串行通信
指数据在单条线路上一位一位地传输, 具有节省传输线、成本低、远距离传 输可靠等优点。
单工、半双工和全双工串行通信
单工是指数据只能向一个方向传输,半双工是指数据可以在两个方向上传输, 但不能同时进行,全双工则是指数据可以在两个方向上同时传输。

项目8 单片机双机通信设计

项目8  单片机双机通信设计
北京交通大学出版社 2009年 2009年6月
何乃味主编 《单片机C语言应用技术与实践》张永格 何乃味主编 单片机C语言应用技术与实践》
任务1 单片机双机通信设计 任务
• (3)接收数据部分 • 在程序中,接收一个字节的过程如下: • 检测RI位,如果接收到数据,则RI位被硬件置1, 如果TI为0,则继续等待; • RI=1,表示已接收到一个字节,此时,可以将 SBUF中的内容读入缓冲区; • 将RI软件清0,准备接收下一字节; • 程序中,使用 get_string()发送数据,当检测到 “\0”字符时,表示已接收到完整的字符串,函数 返回。
CRYST AL
18
CRYST AL
XT AL2
18
XT AL2
+5V
C3
20u +5V
9
+5V
RST
C6
20u +5V
9
RST
R9
1k 29 30 31 PSEN ALE EA
R1
1k 29 30 31 PSEN ALE EA
BUZ1
BUZZER
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
图8-1 双机通信原理图(右边是甲机,左边是乙机)
何乃味主编 《单片机C语言应用技术与实践》张永格 何乃味主编 单片机C语言应用技术与实践》
北京交通大学出版社
2009年 2009年6月
何乃味主编 《单片机C语言应用技术与实践》张永格 何乃味主编 单片机C语言应用技术与实践》 北京交通大学出版社 2009年 2009年6月

单片机点对点通讯程序(c51)

单片机点对点通讯程序(c51)

单片机点对点通讯程序(c51)#include#define uchar unsigned char#define TR 1uchar idata buf[10];uchar pf;void init(void){TMOD=0X20; /*定时方式2*/TH1=0XE8; /*波特率*/TL1=0XE8;PCON=0X00;TR1=1;SCON=0X50;}void send(uchar idata *d){uchar i;do{SBUF=0XAA; /*发送联络信号*/while(TI==0);TI=0; /*等待发送出去*/while(RI==0);RI=0; /*等待B机回答*/}while((SBUF^0xbb)!=0); /*B机未准备好,继续联络*/ do{pf=0; /*清校验和*/for(i=0;i<16;i++){SBUF=d[i];pf+=d[i]; /*求校验和*/while(TI==0);TI=0;}SBUF=pf; /*发送校验和,并等待B机回答*/while(TI==0);TI=0;while(RI==0);RI=0;}while(SBUF!=0); /*回答出错,重发*/}void receive(uchar idata *d){ uchar i;do{while(RI==0);RI=0;}while((SBUF^0xaa)!=0); /*判断A机有无请求*/ SBUF=0xbb; /*发应答信号*/while(TI==0);TI=0;while(1){pf=0; /*清校验和*/for(i=0;i<16;i++){while(RI==0);RI=0;d[i]=SBUF;pf+=d[i]; /*求检验和*/}while(RI==0);RI=0; /*接收A机校验和*/if((SBUF^pf)==0) /*比较校验和*/{SBUF=0x00;break;} /*相同发“00”*/else{SBUF=0xff; /*出错发“FF”,重新接收*/ while(TI==0);TI=0;}}}void main(void){init();if(TR==0){send(buf);}else{receive(buf);}}。

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位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。

51单片机双机串行通信设计

51单片机双机串行通信设计

51单片机双机串行通信设计51单片机是一款广泛应用于嵌入式系统中的微控制器,具有高性能和低功耗的特点。

在一些场景中,需要使用51单片机之间进行双机串行通信,以实现数据传输和协同工作。

本文将介绍51单片机双机串行通信的设计,包括硬件连接和软件编程。

一、硬件连接1.串行通信口选择:51单片机具有多个串行通信口,如UART、SPI 和I2C等。

在双机串行通信中,可以选择其中一个串行通信口作为数据传输的接口。

一般来说,UART是最常用的串行通信口之一,因为它的硬件接口简单且易于使用。

2.引脚连接:选定UART口作为串行通信口后,需要将两个单片机之间的TX(发送)和RX(接收)引脚相连。

具体的引脚连接方式取决于所使用的单片机和外设,但一般原则上是将两个单片机的TX和RX引脚交叉连接。

二、软件编程1.串行通信初始化:首先需要通过软件编程来初始化串行通信口。

在51单片机中,可以通过设置相应的寄存器来配置波特率和其他参数。

具体的初始化代码可以使用C语言编写,并根据所使用的开发工具进行相应的配置。

2.发送数据:发送数据时,可以通过写入相应的寄存器来传输数据。

在51单片机中,通过将数据写入UART的发送寄存器,即可将数据发送出去。

发送数据的代码通常包括以下几个步骤:(1)设置发送寄存器;(2)等待数据发送完成;(3)清除数据发送完成标志位。

3.接收数据:接收数据时,需要通过读取相应的寄存器来获取接收到的数据。

在51单片机中,可以通过读取UART的接收寄存器,即可获取到接收到的数据。

接收数据的代码通常包括以下几个步骤:(1)等待数据接收完成;(2)读取接收寄存器中的数据;(3)清除数据接收完成标志位。

4.数据处理:接收到数据后,可以进行相应的数据处理。

根据具体的应用场景,可以对接收到的数据进行解析、计算或其他操作。

数据处理的代码可以根据具体的需求进行编写。

5.中断服务程序:在双机串行通信中,使用中断可以提高通信的效率。

课程设计--单片机双机通信系统

课程设计--单片机双机通信系统

课程设计任务书说明:1、学院、专业、年级均填全称。

2、本表除签名外均可采用计算机打印。

本表不够,可另附页,但应在页脚添加页码。

电子综合实习报告书----单片机双机通信系统的设计一、引言由于MCS51系列单片机具有性能稳定、工作可靠、价格低廉等特点,因此其应用相当广泛。

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

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

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

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

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

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

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

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

此次设计就是针对上述情况展开的。

系统结构框图如图(1)所示。

二、键盘设计1、硬件接线部分考虑到此次设计要求用到的按键数比较多(0~9,A~F共16个按键),为了节约I/O资源,采用行列式键盘,如图(2)所示图(2)按键编排如图(3)所示图(3)2、4×4矩阵键盘识别处理按键设置在行列式交点上,行列线分别连接到按键开关的两端。

当行线通过上拉电阻接+5伏时,被钳位在高电平状态,事先认为设定好行线和列线的序号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
init_serial();//初始化串口
EA=0;//关闭所有中断
/*进入设备应答阶段*/
while(1)
{
/*如果接收到的数据不是握手信号__RDY_,则继续等待*/
while(tmp!=__RDY_)
{
RI=0;
while(!RI);
tmp=SBUF;
RI=0;
}
/*程序通过检测P0口数据判断当前设备状态,若P0=0xab,表示当前设备忙*/
单片机双机点对点通信设计
/*双机点对点通信的从机部分*/
#ifndef__P2P_S_C__
#define__P2P_S_C__
#include
#include
#define__MAX_LEN_64//数据最大长度
#define_MHz_11//设置单片机使用的晶振频率(11.0592MHz)
/*以下为程序协议中使用的握手信号*/
unsignedcharrecv_data(unsignedchar*buf);//接收数据
voidBeep_ok();//蜂鸣表示数据接收ok,该函数代码未给出
voidmain()
{
charbuf[__MAX_LEN_];
unsignedchari=0;
unsignedchartmp=0xff;
/*串口初始化*/
TI=0;
/*数据接收*/
tmp=0xff;
while(tmp==0xff)
{
tmp=recv_data(buf);//校验失败返回0xff,接收成功则返回0
}
Beep_ok();//蜂鸣表示数据接收成功
}
}
/*初始化串口*/
voidinit_serial()
{
TMOD=0x20;//定时器T1使用工作方式2
*/
unsignedcharrecv_data(unsignedchar*buf)
{
unsignedcharlen;//该字节用于保存数据长度
unsignedcharecc;//该字节用于保存校验字节
unsignedchari,tmp;
/*接收数据长度*/
RI=0;
while(!RI);
len=SBUF;
TH1=250;//设置初值
TL1=250;
TR1=1;//开始计时
PCON=0x80;//SMOD=1
SCON=0x50;//工作方式1,波特率9600bps,允许接收
}
/*接收数据,注意该函数使用buf指向的缓冲区保存数据,在数据末尾校验失败
RI=0;
/*使用len的值为校验字节ecc赋初值*/
ecc校验失败信号
SBUF=__ERR_;
while(!TI);
TI=0;
return0xff;//返回0xff表示校验错误
}
TI=0;//校验成功
SBUF=__SUCC_;
while(!TI);
TI=0;
return0;//校验成功,返回0
}
#endif
P0=0xff;
tmp=P0;
if(tmp==0xab)//如果P0口数据为0x,则当前设备忙,发送__BUSY_信号
{
TI=0;
SBUF=__BUSY_;
while(!TI);
TI=0;
conTInue;
}
TI=0;//否则发送__OK_信号表示可以接收数据
SBUF=__OK_;
while(!TI);
#define__RDY_0x06//主机开始通信时发送的呼叫信号
#define__BUSY_0x15//从机忙应答
#define__OK_0x00//从机准备好
#define__SUCC_0x0f//数据传送成功
#define__ERR_0xf0//数据传送错误
voidinit_serial();//串口初始化
相关文档
最新文档