实验七,双机串行通信
- 格式:doc
- 大小:73.50 KB
- 文档页数:8
单片机双机串口通信在现代电子技术领域,单片机的应用无处不在。
而单片机之间的通信则是实现复杂系统功能的关键之一。
其中,双机串口通信是一种常见且重要的通信方式。
什么是单片机双机串口通信呢?简单来说,就是让两个单片机能够通过串口相互交换数据和信息。
想象一下,两个单片机就像是两个小伙伴,它们需要交流分享彼此的“想法”和“知识”,串口通信就是它们交流的“语言”。
串口通信,顾名思义,是通过串行的方式来传输数据。
这和我们日常生活中并行传输数据有所不同。
在并行传输中,多个数据位同时传输;而在串行传输中,数据一位一位地按顺序传送。
虽然串行传输速度相对较慢,但它所需的硬件连线简单,成本较低,对于单片机这种资源有限的设备来说,是一种非常实用的通信方式。
在进行单片机双机串口通信时,我们首先要了解串口通信的一些基本参数。
比如波特率,它决定了数据传输的速度。
就像两个人说话的快慢,如果波特率设置得不一致,那么双方就无法正常理解对方的意思,数据传输就会出错。
常见的波特率有 9600、115200 等。
还有数据位、停止位和校验位。
数据位决定了每次传输的数据长度,常见的有 8 位;停止位表示一个数据帧的结束,通常是 1 位或 2 位;校验位则用于检验数据传输的正确性,有奇校验、偶校验和无校验等方式。
为了实现双机串口通信,我们需要在两个单片机上分别进行编程。
编程的主要任务包括初始化串口、设置通信参数、发送数据和接收数据。
初始化串口时,我们要配置好相关的寄存器,使其工作在我们期望的模式下。
比如设置波特率发生器的数值,以确定合适的波特率。
发送数据相对来说比较简单。
我们将要发送的数据放入特定的寄存器中,然后启动发送操作,单片机就会自动将数据一位一位地通过串口发送出去。
接收数据则需要我们不断地检查接收标志位,以确定是否有新的数据到来。
当有新数据时,从接收寄存器中读取数据,并进行相应的处理。
在实际应用中,单片机双机串口通信有着广泛的用途。
比如在一个温度监测系统中,一个单片机负责采集温度数据,另一个单片机则负责将数据显示在屏幕上或者上传到网络。
双机之间的串行通信设计随着计算机技术的快速发展,双机之间的串行通信变得越来越重要。
无论是在数据传输、系统控制还是协同处理方面,双机之间的串行通信都扮演着关键角色。
本文将探讨双机之间的串行通信设计,包括串行通信的原理、串行通信的应用、串行通信的优势以及设计双机之间串行通信的步骤。
一、串行通信的原理串行通信是一种逐位传输数据的通信方式。
在双机之间的串行通信中,一台机器将数据一位一位地发送给另一台机器,接收方接收到数据后将其重新组装为完整的信息。
串行通信常用的协议有RS-232、RS-485、SPI等。
二、串行通信的应用1.数据传输:双机之间通过串行通信传输大量数据,例如在两台计算机之间传输文件、传输实时音视频数据等。
2.系统控制:双机之间通过串行通信进行系统控制,例如一个机器向另一个机器发送指令,控制其执行特定的任务。
3.协同处理:双机之间通过串行通信进行协同处理,例如在分布式系统中,各个节点之间通过串行通信共同完成复杂的任务。
三、串行通信的优势相比于并行通信,双机之间的串行通信具有以下几个优势:1.传输距离更远:串行通信可以在较长的距离上进行数据传输,而并行通信受到信号干扰和传输线损耗的限制。
2.更少的传输线:串行通信只需要一条传输线,而并行通信需要多条传输线。
3.更快的速度:串行通信在同等条件下具有更快的传输速度,因为每一位数据传输所需的时间更短。
4.更可靠的传输:串行通信可以通过校验位等方式来保证数据传输的可靠性。
四、设计双机之间串行通信的步骤设计双机之间的串行通信需要经过以下几个步骤:1.确定通信协议:首先需要确定双机之间的通信协议,例如RS-232、RS-485等。
不同的通信协议有着不同的特点和适用范围,需要根据具体的应用需求进行选择。
2.确定物理连接方式:根据通信协议的选择,确定双机之间的物理连接方式,例如使用串口线连接、使用网络连接等。
3.确定数据传输格式:确定数据传输的格式,包括数据的编码方式、数据的起始位和停止位等。
学号姓名专业电气工程及其自动化班级
实验7双机通信
一、实验目的
掌握串行口通信工作原理。
二、实验内容
(1)掌握串行通信原理和中断法通信软件编程
(2)完成实验7的C51语言编程
三、实验设备
计算机(已安装Keil和Proteus软件),89C51,CRYSTAL,CAP,CAP-ELEC,RES,7SEG-BCD-GRN 四、实验硬件电路
实验源程序:
#include<reg51.h>
#define uchar unsigned char
uchar receiv;
void main(void)
{P2=0x3f;
TMOD=0x20;
TH1=0xf4;
TL1=0xf4;
PCON=0x00;
TR1=1;
SCON=0x50;
ES=1;
EA=1;
while(1)
{}}
void output () interrupt 4
{if(RI==1)
{RI=0;
receiv=SBUF;
SBUF=receiv;}
if(TI==1)
{TI=0;
P2=receiv;}}
五、实验要求
(1)、根据实验内容设计相应的调试程序,并通过仿真,运行正确。
(2)、掌握A/D转换器0809的工作原理。
(3)、掌握A/D转换器0809的编程方法。
(4)、认真整理实验报告并按时提交。
单片机单片机课程设计-双机串行通信单片机课程设计双机串行通信在当今的电子信息领域,单片机的应用无处不在。
而双机串行通信作为单片机系统中的一个重要环节,为实现设备之间的数据交换和协同工作提供了关键的技术支持。
一、双机串行通信的基本原理双机串行通信是指两个单片机之间通过串行接口进行数据传输的过程。
串行通信相较于并行通信,具有线路简单、成本低、抗干扰能力强等优点。
在串行通信中,数据是一位一位地按顺序传输的。
常见的串行通信协议有 UART(通用异步收发器)、SPI(串行外设接口)和 I2C(内部集成电路)等。
在本次课程设计中,我们主要采用 UART 协议来实现双机串行通信。
UART 协议包括起始位、数据位、奇偶校验位和停止位。
起始位用于标识数据传输的开始,通常为逻辑 0;数据位可以是 5 位、6 位、7 位或 8 位,具体取决于通信双方的约定;奇偶校验位用于检验数据传输的正确性,可选择奇校验、偶校验或无校验;停止位用于标识数据传输的结束,通常为逻辑 1。
二、硬件设计为了实现双机串行通信,我们需要搭建相应的硬件电路。
首先,每个单片机都需要有一个串行通信接口,通常可以使用单片机自带的UART 模块。
在硬件连接方面,我们将两个单片机的发送端(TXD)和接收端(RXD)交叉连接。
即单片机 A 的 TXD 连接到单片机 B 的 RXD,单片机 B 的 TXD 连接到单片机 A 的 RXD。
同时,还需要共地以保证信号的参考电平一致。
此外,为了提高通信的稳定性和可靠性,我们可以在通信线路上添加一些滤波电容和上拉电阻。
三、软件设计软件设计是实现双机串行通信的核心部分。
在本次课程设计中,我们使用 C 语言来编写单片机的程序。
对于发送方单片机,首先需要对 UART 模块进行初始化,设置波特率、数据位、奇偶校验位和停止位等参数。
然后,将要发送的数据放入发送缓冲区,并通过 UART 发送函数将数据一位一位地发送出去。
对于接收方单片机,同样需要对 UART 模块进行初始化。
单片机单片机课程设计-双机串行通信摘要由单片机构成的双机通信系统采用总线型主从式结构。
程设计就是要利用单片机来完成一个系统,实现双片单片机串行通信。
通信的结果实用数码管进行显示,数码管采用查表方式显示。
所谓主从式结构,即在两个单片机中,一个主机负责通信管理,另一个为从机,从机要负责主机的调度与支配。
该设计用A T89C51芯片,并用C语言程序来控制A T89C51,使之能实现两个单片机之间的通信。
通信方式为单工通信,一个为主单片机,作为发送方,另一个为从单片机,作为接收方。
关键字:单片机.AT89C51.C语言目录摘要 (1)前言 (3)二绪论 (4)2.1单片机 (4)2.2C语言: (4)2.3双机通信 (5)三.系统分析 (6)3.1 基本原理 (6)3.2波特率选择 (7)3.3通信协议的使用 (7)四、硬件设计 (7)4.1单片机串行通信功能 (10)4.2 MAX232芯片 (12)4.3整体电路设计 (13)五、软件设计 (14)5.1串行通信软件实现 (14)5.2程序流程图 (14)六.联合调试 (17)总结 (18)参考文献 (23)前言近年来,在自动化控制和只能仪器仪表中,单片机的应用越来越广泛,由于单片机的运算功能较差,往往需要借助计算机系统,因此单片机和PC机进行远程通信更具有实际意义,通信的关键在于互传数据信息。
51单片机内部的串行口具有通信的功能,该串口可作为通信接口,利用该串口与PC机的串口通信进行串行通信,将单片机采集的数据进行整理及统计等复杂处理就能满足实际的应用需要。
51单片机的开发除了硬件支持外,同样离不开软件。
用汇编语言或C 语言等高级语言编写的源程序必须转化为机器码才能被执行。
目前流行的Keil 8051c编译器。
它提供了集成开发环境,包括C编译器、宏编码、连接器、库管理和仿真调制器。
利用keil 8051ccuvision编写的程序可直接调用编译器编译,连接后可直接运行。
实验七、双机通信实验 一、实验目的掌握单片机串行口的工作原理及编程。
二、实验内容用两台单片机进行双机通讯,主控制器识别到按键按下,控制从机显示0-9字符。
三、实验接线图四、实验程序1、程序流程图如图7-1所示。
主机识别到键按下,向从机发送数据块长度、0-9数据及校验和。
从机接收到数据后,显示数据并向主机发应答码00H ,主机根据应答信号,显示通信状态代码。
2、波特率计算选fosc=11.0592MHz, 波特率=2400bps ,通信为方式1,(SMOD)为1,(TMOD)=0x20;( PCON) =0x80; 由波特率计算公式算得 (TH1)≈e8H 。
图7-1 实验接线图[](TH1)-25612T1T1322osc SMOD⨯=⨯=f 溢出率溢出率,波特率3、源程序 1)主机源程序// 识别到按键按下,发送0-9数据给从机,并显示通信状态码 #include<reg51.h> #include<intrins.h>#define uint unsigned int #define uchar unsigned charsbit K=P3^2; //定义按键K ,用于控制U2void SEND(uchar s_data)//发送一个字节数据 {SBUF=s_data; while(TI==0); TI=0;}uchar RCV(void)//接收一个字节数据 {while(RI==0); RI=0; return(SBUF);}void D_1S(void) {uint N=500,i;while(N--) for(i=0;i<100;i++) _nop_();}void DIS(uchar dis)//显示dis 中字形码对应的字符 { P0=dis; D_1S(); P0=~0x00;}void MAIN(void){ uchar data SUM,LEN;// SUM,校验和;LEN ,数据块长度; uchar i,ans; //ans 接收的应答数据图7-2 主机程序流程图 图7-3 从机程序流程图SP=0x5f; P0=~0x00; //数码块消隐TMOD=0x20; //T1:8位自动重装定时器TL1=0xe8;TH1=0xe8;PCON=0x80;TR1=1;//F=11.0592MHz,BPS=2400SCON=0x40; //10位,禁止接收//-------扫描按键-------key0:K=1; if(K!=0) goto key0;//-------发送数据块和校验和-------S_0:SUM=0x00; LEN=10; SEND(LEN);for(i=0;i<LEN;i++){SEND(i); SUM+=i; }SEND(SUM);//-------接收从机发来的响应数据-------REN=1; ans=RCV(); REN=0;if(ans==0x00) //发送正常,显示“0”{ DIS(~0x3f); goto key0;}else //发送异常,显示“1”,并重新发送数据{ DIS(~0x06); goto S_0;}}2)从机源程序// 接收数据0-9,并用数码块显示,之后接收正常向主机发00H,否则发送01H#include<reg51.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar data LS0[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};void SEND(uchar s_data)//发送一个字节数据{SBUF=s_data; while(TI==0); TI=0;}uchar RCV(void)//接收一个字节数据{while(RI==0); RI=0; return(SBUF);}void D_1S(void){uint i,N=500;while(N--) for(i=0;i<100;i++) _nop_();}void DIS(uchar LEN,uchar r_data[11])//显示0-9{uchar data i;for(i=0;i<LEN;i++) {P0=LS0[r_data[i]]; D_1S(); P0=~0x00;}}void MAIN(void){ uchar data SUM,LEN; //SUM,校验和;LEN,数据块长度;ID,从站地址uchar data i,r_data[10],RSUM;//r_data接收的数据,RSUM接收的校验和SP=0x5f; P0=~0x00; TMOD=0x20;TL1=0xe8;TH1=0xe8;PCON=0x80;TR1=1; SCON=0x40;R_D:REN=1;SUM=0x00;LEN=RCV();for(i=0;i<LEN;i++){r_data[i]=RCV(); SUM+=r_data[i];}RSUM=RCV();if(RSUM==SUM){DIS(10,r_data);SEND(0x00);goto R_D;}else {SEND(0x01);goto R_D;}}五、实验步骤1、按图7-1接线;2、用keil软件编辑、编译源程序,生成两个hex文件。
实验七双机通信实验一、实验目的:1.掌握单片机串口通信程序的设计。
2.了接RS232接口通信的特点。
3.双机通信:分别把接收到的对方通过逻辑开关输入的信息在本地数码管上显示,如下图甲机的逻辑开关数据为81H,乙机通过串口接收该数据并数码关管显示,而甲机显示乙机发送的数据88H。
二、PROTEUS电路设计:三、实验仪器和设备PC机、PROTEUS软件或W-A-51综合开发学习板四、源程序设计:1.程序(甲、乙机用相同的程序)ORG 0000HAJMP MAINORG 0030HMAIN:MOV TMOD,#20H ;定时器工作方式2MOV TH1,#0FDH ;设置波特率MOV TL1,#0FDHMOV PCON,#00H ;波特率不乘2SETB TR1MOV SCON,#50H ;串行口工作方式1并启动接收JX:MOV A,P1MOV SBUF,AW1:JNB TI,W1CLR TIW2:JNB RI,W2CLR RIMOV A,SBUFMOV P0,ALJMP JXEND六、总结、心得这是的实验中我遇到了很多的难题,也发现了自己很多的不足。
刚开始的时候在循环比较的时候老是出错,对变量的寻址方式不熟悉,不会使用指针变量使程序简化。
后来经过老师的提醒跟自己的摸索,终于把程序写正确了。
所以是这么简单的一个程序,但是我还是要花很长的一断时间才可以把它完成,这说明了我对知识的掌握运用还是很不熟练,虽然读程序的时候可以读懂,但是到自己写的时候就感觉无从下手。
单片机的双机串口通信原理单片机的双机串口通信原理是通过串口连接两个单片机,使它们能够进行数据的传输和通信。
串口是一种常见的通信方式,它使用两条信号线进行数据的传输:一条是串行数据线(TXD),用于发送数据;另一条是串行接收线(RXD),用于接收数据。
通过串口通信,两个单片机可以进行双向的数据传输,实现信息的互相交流和共享。
在双机串口通信中,一台单片机充当主机(Master),另一台单片机充当从机(Slave)。
主机负责发起通信请求并发送数据,从机负责接收并响应主机发送的数据。
通信过程中,主机和从机需要遵守相同的协议和通信规则,以确保数据的正确和可靠传输。
双机串口通信的主要步骤如下:1. 端口初始化:在双机串口通信开始之前,两台单片机的串口端口需要初始化。
主机和从机需要设置相同的波特率(Baud Rate),数据位数(Data Bits)、停止位数(Stop Bits)和校验方式(Parity Bit),确保两台单片机之间的通信能够正常进行。
2. 数据发送:主机将要发送的数据写入到串口发送寄存器中,然后通过串口发送线路将数据位一位一位地发送给从机。
主机发送完所有数据位后,等待从机的响应。
3. 数据接收:从机通过串口接收线路接收主机发送的数据位,然后将接收到的数据位存放在串口接收寄存器中,等待从机的处理。
4. 数据处理:从机接收到主机发送的数据后,根据通信协议和通信规则进行数据处理。
从机可能需要对数据进行校验、解析和执行相应的操作,然后将处理结果写入到串口发送寄存器中,以供主机进行相应的处理。
5. 响应发送:从机将处理结果写入到串口发送寄存器中,然后通过串口发送线路将数据位一位一位地发送给主机。
从机发送完所有数据位后,等待主机的进一步操作。
6. 数据接收:主机通过串口接收线路接收从机发送的数据位,然后将接收到的数据位存放在串口接收寄存器中,等待主机的处理。
7. 数据处理:主机接收到从机发送的数据后,根据通信协议和通信规则进行数据处理。
实验七、双机串行通信一、实验目的1、熟悉微机接口实验装置的结构及使用方法2、掌握通信接口芯片8251和8250的功能和使用方法3、学会串行通信程序的编制方法二、实验仪器1、PC实验箱及连接线2、两台计算机3、9针接头串行电缆三、芯片介绍(见实验七)四、实验内容实验原理图和接线同图4.12和4.13,不同的是要将串行电缆从实验箱上的RS-232接口连接到另外一台计算机上的串口,两台机子通过8250和8251进行字串信息的相互传输。
两台机子分别设置为发送和接收状态,发送端从键盘输入一段字符信息送8250或8251,接收端则从8251或8250接收一段字符。
发送和接收结束后回到主选菜单,可进行再次通信。
在发送和接收过程中,有一个出错处理过程,采用接收方回传和发送方确认来保证发送和接收正确。
五、预习要求1、熟悉8250和8251的工作原理2、熟悉实验原理3、编制实验要求的汇编语言源程序五、程序流程图和程序清单1、主程序1、发送子程序:3、接收子程序:程序清单:;SY51-2.ASMTIMCTL EQU 293HTIMER0 EQU 290HCLK EQU 3000BPS EQU 9600FACTOR EQU 16DATA51 EQU 280HCTRL51 EQU 281HDATA50 EQU 2F8HDRL50 EQU 2F8HDRH50 EQU 2F9HIER50 EQU 2F0HIIR50 EQU 2FAHLCR50 EQU 2FBHMCR50 EQU 2FCHLSR50 EQU 2FDHMSR50 EQU 2FEHDIVL EQU 0CHDIVH EQU 00HDATA SEGMENTMESS1 DB 'PRESS 1 TO SEND MESSAGE!',0AH,0DHDB 'PRESS 2 TO RECEIVE MESSAGE!',0AH,0DHDB 'PRESS 3 TO QUIT!',0AH,0DH,0AH,0DH,'$' ERROR DB '*****PLEASE SELECT AGAIN!*****',0AH,0DH,'$'MES1 DB 'Sending message......',0AH,0DH,0AH,0DH,'$'MES2 DB 'Receiving message......',0AH,0DH,0AH,0DH,'$'MESS2 DB 50DB ?MES DB 50 DUP(?)MESS3 DB 50 DUP(?)BUF1 DB ?BUF2 DB ?DATA ENDSSTACK SEGMENT PARA STACKDB 128 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXCALL SETTIMCALL INIT51CALL INIT50AG: LEA DX,MESS1MOV AH,09HINT 21HAG1: MOV DL,0FFH ;显示提示信息,MOV AH,06H ;进行菜单选择INT 21HJZ AG1CMP AL,'1'JZ SDCMP AL,'2'JZ RCCMP AL,'3'JZ EXITLEA DX,ERRORMOV AH,09HINT 21HJMP AGSD: CALL SENDJMP AGRC: CALL RECEJMP AGEXIT: MOV AX,4C00HINT 21HSEND PROC ;发送子程序MOV AH,09HLEA DX,MES1INT 21H ;显示提示信息MOV AH,0AHLEA DX,MESS2INT 21H ;从键盘输入字串信息MOV CL,MESS2[1]LOP1: MOV AL,CLMOV BUF1,ALCALL SED ;发送一个字符(字串长度) CALL REC ;接收回传字符CMP AL,CLJZ SKIP1MOV AL,15H ;回传字符不同于发送字符MOV BUF1,AL ;有错,发出错标志,重发字符CALL SEDJMP LOP1SKIP1: LEA SI,MES ;发送字串内容(含出错处理)LOP2: MOV AL,[SI]MOV BUF1,ALCALL SEDCALL RECMOV AL,BUF2CMP AL,[SI]JZ SKIP2MOV AL,15HMOV BUF1,ALCALL SEDJMP LOP2SKIP2: DEC CLJZ EXIT1INC SIJMP LOP2EXIT1: MOV CX,3LOOP1: MOV AH,06HMOV DL,0AHINT 21HMOV DL,0DHINT 21HLOOP LOOP1RETSEND ENDPRECE PROC ;接收子程序MOV AH,09HLEA DX,MES2INT 21H ;显示提示信息LOP3: CALL REC1 ;接收一个字符;并保存在CL中 MOV CL,BUF2MOV BUF1,CLCALL SED1 ;回送字符CALL REC1 ;接收字符MOV AL,BUF2CMP AL,15HJZ LOP3 ;是出错标志,表明上一个接收;字符已经出错,需要重现接收LEA DI,MESS3LOP4: MOV [DI],AL ;将刚才接收字符送缓冲区MOV BUF1,ALCALL SED1 ;回送字符DEC CL ;判断是否接收完毕,没有则继JZ EXIT2 ;续进行接收、回传、判断操作CALL REC1MOV AL,BUF2CMP AL,15HINC DIJMP LOP4SKIP3: CALL REC1MOV AL,BUF2JMP LOP4EXIT2: INC DI ;已经接收所有要发送字符,MOV AL,'$' ;在屏幕上显示出来MOV [DI],ALLEA DX,MESS3MOV AH,09HINT 21HMOV CX,3LOOP2: MOV AH,06HMOV DL,0AHINT 21HMOV DL,0DHINT 21HLOOP LOOP2RETRECE ENDPSED PROC ;8251发送单个字符子程序 MOV DX,CTRL51WAIT1: IN AL,DXTEST AL,01HJZ WAIT1MOV DX,DATA51MOV AL,BUF1OUT DX,ALRETSED ENDPSED1 PROC ;8250发送单个字符子程序 MOV DX,LSR50WAIT3: IN AL,DXTEST AL,20HJZ WAIT3MOV DX,DATA50MOV AL,BUF1OUT DX,ALRETSED1 ENDPREC PROC ;8251接收单个字符子程序 MOV DX,CTRL51WAIT2: IN AL,DXTEST AL,02HJZ WAIT2MOV DX,DATA51IN AL,DXMOV BUF2,ALRETREC ENDPREC1 PROC ;8250接收单个字符子程序 MOV DX,LSR50WAIT4: IN AL,DXJZ WAIT4MOV DX,DATA50IN AL,DXMOV BUF2,ALRETREC1 ENDPSETTIM PROC ;8251时钟设定(9600波特率) MOV DX,00HMOV AX,CLKMOV BX,1000MUL BXMOV BX,BPSDIV BXMOV DX,00HMOV BX,FACTORDIV BXMOV BX,AXMOV DX,TIMCTLMOV AL,00110110BOUT DX,ALMOV DX,TIMER0MOV AX,BXOUT DX,ALMOV AL,AHOUT DX,ALRETSETTIM ENDPINIT51 PROC ;8251初始化MOV DX,CTRL51MOV AL,00HMOV CX,3S1: CALL RELOOP S1MOV AL,40HCALL REMOV AL,4EHCALL REMOV AL,37HCALL RECALL DELAYRETINIT51 ENDPINIT50 PROC ;8250初始化MOV DX,LCR50MOV AL,80HCALL REMOV DX,DRL50MOV AL,DIVLCALL REMOV DX,DRH50MOV AL,DIVHCALL REMOV DX,LCR50MOV AL,03HCALL REMOV AL,00HCALL RECALL DELAYRETINIT50 ENDPRE PROCOUT DX,ALPUSH CXMOV CX,3REP1: LOOP REP1POP CXRETRE ENDPDELAY PROCMOV CX,0FFFFH DL1: LOOP DL1MOV CX,0FFFFH DL2: LOOP DL2RETDELAY ENDPCODE ENDSEND START。