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

上传人:b****7 文档编号:25003396 上传时间:2023-06-03 格式:DOCX 页数:25 大小:564.32KB
下载 相关 举报
双机通信系统单片机课程设计.docx_第1页
第1页 / 共25页
双机通信系统单片机课程设计.docx_第2页
第2页 / 共25页
双机通信系统单片机课程设计.docx_第3页
第3页 / 共25页
双机通信系统单片机课程设计.docx_第4页
第4页 / 共25页
双机通信系统单片机课程设计.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

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

《双机通信系统单片机课程设计.docx》由会员分享,可在线阅读,更多相关《双机通信系统单片机课程设计.docx(25页珍藏版)》请在冰豆网上搜索。

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

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

设计概况

要构成一个较大规模的控制系统,常常需要采用多机控制实现,而AT89C51单片机有一个异步通信方式的全双工串行接口,可以方便地构成双机、多机系统。

而串行通信也成为单片机与单片机、单片机与上位机之间进行数据传输的主要方式,是一种适用于远距离通信的数据传输方式。

串行通信是单片机的一个重要应用。

本次课程设计就是要利用单片机来完成一个系统,实现双片单片机串行通信。

通信的结果实用数码管进行显示,数码管采用查表方式显示。

两个单片机之间采用RS232进行双机通信。

在通信过程中,使用通信协议进行通信。

关键词:

单片机;串行通信;接口

 

1总体设计

1.1设计要求

设计一个单片机双机通信系统,单片机A接1个8位按键开关,单片机B接8个发光二极管,通过串行通信实现由A机拨码开关控制B机发光二极管的亮灭。

1.2设计方案

本次设计,对于两片AT89C51,采用RS-232进行双机通信。

如图1所示,发送方的数据由串行口TXD段输出,经过电平转换芯片MAX232将TTL电平转换为RS-232电平输出,经过传输线将信号传送到接收端。

接收方也使用MAX232芯片进行电平转换后,信号到达接收方串行口的接收端。

接收方接收后,在LED二极管上显示接收的对应信息。

图1双机通信系统原理框图

软件部分,通过通信协议进行发送接收,发送机先送联络信号给接收机,当接收机接收到联络信号后,向发送机回答一个应答信号,表示同意接收。

发送机收到应答信号后开始发送数据,每发送一个数据块字节都要计算“校验和”,假定数据长度为16个字节,起始地址为40H,一个数据块发送完毕后立即发送“校验和”。

接收机接收数据并存入数据缓冲区起始地址也为40H,每接收到一个数据字节便计算一次“校验和”,当接收到一个数据块后,在接受发送机发来的“校验和”,并将它与接收机计算的校验和进行比较。

若二者相等,说明接受正确,接收机回答00H,发送机结束发送;若二者不等,说明接受不正确,接收机回答0FFH,请求重发,发送机重新发送数据一次。

接收机接收到数据后通过发光二极管LED显示发送机的发送状态。

2双机通信硬件设计

2.1AT89C51简介

AT89C51是一个带有4k字节存储器的单片机,它具有128字节内部RAM;32个I/O口线和;两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。

空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。

掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

如图2所示,DIP40封装的AT89C51的各个引脚及其功能。

图2AT89C51单片机引脚封装

AT89C51单片机各个引脚功能如下:

(1)电源几时钟引脚

•VCC(40号引脚):

电源接入引脚

•VSS(20号引脚):

接地引脚

•XTAL1(19号引脚):

晶振接入的一个引脚

•XTAL2(18号引脚):

晶振接入的另一个引脚

(2)控制线引脚

•RST/VPD(9号引脚):

复位信号输入引脚/备用电源输入引脚

•ALE/

(30号引脚):

地址锁存允许信号输出引脚/编程脉冲输入引

/

(31号引脚):

内外存储器选择引脚/片内EPROM编程电压输入引脚

(29号引脚):

外部程序存储器选通信号输出引脚

(3)I/O引脚

·P0.0—P0.7(39—32号引脚):

一般I/O口引脚/低位地址总线引脚

·P1.0—P1.7(1—8号引脚):

一般I/O口引脚

·P2.0—P2.7(21—28号引脚):

一般I/O口引脚/高位地址总线引脚

·P3.0—P3.7(10—17号引脚):

一般I/O口引脚或第二功能引脚

P3.0(10号引脚):

RXD串行口输入

P3.1(11号引脚):

TXD串行口输出

P3.2(12号引脚):

外部中断0输入

P3.3(13号引脚):

外部中断1输入

P3.4(14号引脚):

T0定时器0的外部输入

P3.5(15号引脚):

T1定时器1的外部输入

P3.6(16号引脚):

片外数据存储器“写”选通控制输出

P3.7(17号引脚):

片外数据存储器“读”选通控制输出

2.2AT89C51串行口的工作方式

AT89C51的串行口是一个可编程全双工的通信接口,具有通信异步接受和发送的全部功能,能同时进行数据的接收和发送,也可作为同步移位寄存器使用。

AT89C51的串行口主要由两个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器),串行口控制寄存器、输入移位寄存器及若干控制门电路组成。

(1)串行口数据缓冲寄存器SBUF

AT89C51可以通过特殊功能寄存器SBUF的读写操作,实现对串行接收或串行发送寄存器的访问,串行接收和串行发送寄存器在串行口内部是两个独立的存储单元,共用同一个地址99H。

串行口数据传送使用的是内部数据传送指令“MOVA,SBUF”或“MOVSBUF,A”.当执行写操作时,访问串行发送寄存器;当执行读操作时,访问串行接收寄存器。

(2)串行口控制寄存器SCON

AT89C51串行口工作的设定、接收与发送控制的设置都是通过对串行口控制寄存器SCON的编程确定的。

SCON是一个特殊功能寄存器,其地址为98H,可位寻址,其各位的作用定义如下:

表2控制寄存器SCON

9FH

9EH

9DH

9CH

9BH

9AH

99H

98H

SCON(98H)

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

SM0、SM1:

串行口工作方式选择位,工作方式选择如表2所示。

其中

是晶体振荡器的频率。

SM2:

多机通信控制位。

在方式0下,SM2应为0;在方式1下,如果SM2=0,则只有收到有效的停止位时才会激活RI;在方式2和方式3下,如置SM2=1则只有收到第9位数据为1时,RI被激活(RI=1,申请中断,要求CPU取走数据)。

REN:

允许接收控制位。

由软件置位或清零。

REN=1,允许接收;REN=0,禁止接收。

TB8:

在方式2和方式3下,存放要发送的第9位数据,常用作奇偶校验位。

在多机通信中,可作为区别地址帧或数据帧的标识位,若为地址帧,TB8=1;

若为数据帧,TB8=0。

RB8:

在方式2和方式3下,存放接收到的第9位数据;在方式1下,如SM2=0,则该位为接收到的停止位;方式0不用此位。

TI:

发送中断标志。

在方式0下,发送完第8位数据位时,由硬件置位;在其他方式下,当开始发送停止位时,由硬件将TI置位,即是向CPU申请中断,CPU可以发送下一帧数据。

在任何方式下,TI必须由软件清零。

RI:

接收中断标志。

在方式0下,接收完第8位数据时,由硬件置位;在其他方式下,当接收到停止位时RI置位,即申请中断,要求CPU取走数据。

它必须由软件清零。

表3串行口工作方式选择

SM0

SM1

方式

功能

波特率

SM0

SM1

方式

功能

波特率

0

0

0

同步移位寄存器

/12

1

0

2

11位UART

/16或

/32

0

1

1

10位UART

可变

1

1

3

11位UART

可变

本设计发送机串行口的工作方式为方式1,即控制寄存器SCON中内容如下:

表4发送机控制寄存器SCON

9FH

9EH

9DH

9CH

9BH

9AH

99H

98H

SCON(98H)

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

0

1

0

0

0

0

0

0

接收机的串行口的工作方式为方式1,即控制寄存器SCON中内容如下:

表5接收机控制寄存器SCON

9FH

9EH

9DH

9CH

9BH

9AH

99H

98H

SCON(98H)

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

0

1

0

1

0

0

0

0

串口以方式1发送,由CPU执行一条写发送寄存器指令“MOVSBUF,A”,就可将数据位逐一由TXD端发送。

当发送一帧数据后,将TI置1。

串口以方式1接受,需控制SMOD中的REN为1(SMOD为特殊功能寄存器PCON的最高位),此时对RXD引脚进行采样,当采样到起始位置有效时,开始接收数据。

当一帧数据接收完毕,且RI=0,SM2=0或接收到RB8=1时,接收数据有效,此时可利用读接收寄存器指令“MOVA,SBUF”将数据送入CPU。

同时将RI置1。

若要再次发送或接收数据,必须将TI、RI清零。

(3)波特率的计算

根据表2可知串口工作方式方式1时一帧数据为10位(8位数据位,起始位、停止位各1位)。

其传输波特率是可变的,由定时器T1的溢出率来决定。

波特率=

当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的8位定时器方式(即方式2,且TCON的TR=1,以启动定时器)。

这时溢出率取决于TH1中的计数值。

在单片机的应用中,常用的晶振频率

为:

12MHz和11.0592MHz。

在本设计中晶振频率采用

=11,。

0592MHz。

即波特率为

波特率=

2.3晶振电路设计

AT89C51单片机内部有一震荡电路,只要在单片机的XTL1(19号)和XTAL2(18号)引脚外接石英晶体(简称晶振)就构成了自激振荡器并在单片机内部产生时钟脉冲信号。

如图3所示,图中电容器C1和C2的作用是稳定频率和快速起振,电容值为5~30pF,典型值为30pF,本设计取30pF。

晶振CYS的振荡频率范围为1.2MHz~12MHz,典型值为12MHz和6MHz,本设计取12MHz。

 

图3晶振电路

2.4复位电路设计

AT89C51单片机的RST(9号)引脚引入高电平并保持两个机器周期时,单片机内部就执行复位操作。

在实际中AT89C51通常有两种操作方式复位,一种是上电复位;另一种是按键上电复位。

在双机通信系统的设计中使用按键上电复位,如图4所示。

图4复位电路

单片机复位后进入初始化状态。

初始化后,程序计数器PC=0000H,所以程序从0000H地址单元开始执行。

单片机启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM的内容。

特殊功能寄存器复位后的状态是确定的。

P0~P3为FFH,SP为07H,SBUF不定,IP、IE和PCON的有效位为0,其余的特殊功能寄存器的状态均为00H。

2.5接口电路的设计

(1)直接通信

单片机与单片机进行双击串行通行时,可将两个单片机的串口直接连接,接线图如图5所示,这种接线传输距离短,抗干扰能力差。

图5直接通信接线图

(2)串口通信

单片机与单片机进行双击串行通行时,AT89C51串行接口的信号电平为TTL类型,抗干扰性差、传输距离短。

为了提高串行通信的靠抗性,延长通信距离,一般设计采用标准的串行接口。

RS-232C接口是1969年EIA推出的串行通信标准,目前是PC机与通信工业中应用最广的一种串行接口。

数据传输速率在0~20kbps范围内的通信,最大传输距离可达15m,能实现一发一收通信,目前常用的RS—232C接口连接器有9针串口(DB—9)和25针串口(DB—25)。

最常用的的是DB—9,常采用三线制接法,即发送数据线、接受数据线和接地线三脚相连。

传输线采用屏蔽双绞线,如图6所示。

图6DB—9三线制接法

RS—232C信号的电平与单片机串口信号的电平不一致,二者之间必须进行电平转换。

使用电平转换芯片MAX232就可以实现RS232C/TTL电平的双向转换。

MAX232芯片使用单一的+5V电源供电,配接5个1uF电解电容即可完成RS232C电平的TTL电平之间的转换,其电路接线图如图7所示。

图7MAX232电平转换芯片电路接线图

 

表6DB—9常用信号引脚说明

DB—9引脚

信号名称

符号

功能

1

载波检测

DCD

接收远程载波

2

接收数据

RXD

接受串行数据

3

发送数据

TXD

发送串行数据

4

数据准备就绪

DTR

准备就绪

5

信号的

SGND

信号公共地

6

数据准备就绪

DSR

准备就绪

7

发送请求

RTS

请求将线路切换到发送发式

8

允许发送

CTS

线路已接通,可以发送数据

9

振铃指示

RI

数据通信接通,终端设备被呼叫

2.6输入输出电路设计

P1口是AT89C51单片机的唯一的单功能口,仅能用作数据输入/输出口。

P1口的位结构如图8所示

图8P1口的位结构

由图8可知,P1口由一个输出锁存器,两个三态输入缓冲器和输出驱动电路组成。

内部设有上拉电阻。

P1口是通用的准双向I/O口。

输出高电平时,能向外提供拉电流负载,不必再接上拉电阻。

当口用于输入时,须向口锁存器写入“1”。

输入低电平有效。

因此其输入电路如图9,输出电路图10:

图9发送机输入电路

图10接收机输出电路

3双机通信软件设计

通过通信协议进行发送接收。

发送机先送联络信号给接收机,当接收机接收到联络信号后,向发送机回答一个应答信号,表示同意接收。

发送机收到应答信号后开始发送数据,每发送一个数据块字节都要计算“校验和”,假定数据长度为16个字节,起始地址为40H,一个数据块发送完毕后立即发送“校验和”。

接收机接收数据并存入数据缓冲区起始地址也为40H,每接收到一个数据字节便计算一次“校验和”,当接收到一个数据块后,在接受发送机发来的“校验和”,并将它与接收机计算的校验和进行比较。

若二者相等,说明接受正确,接收机回答00H,发送机结束发送;若二者不等,说明接受不正确,接收机回答0FFH,请求重发,发送机重新发送数据一次。

接收机接收到数据后通过发光二极管显示发送机的发送状态。

3.1串行通信软件实现

(1)串行口工作于方式1;用定时器1产生9600bit/s的波特率。

(2)功能:

将本机ROM中数码表TAB[16]中的16个数发送到从机,并保存在从机内部ROM中,从机收到这16个数据后送到一个数码管循环显示。

(3)通信协议:

发送机首先发送连络信号(E1H),接收机接收到之后返回一个连络信号(E2H)表示从机已准备好接收。

通信过程使用第九位发送奇偶校验位。

接收机接收到一个数据后,立即进行奇偶校验,若数据没有错误,则返回00H,否则返回FFH。

发送机发送一个数据后,等待接收机返回数据;若为00H,则继续发送下一个数据,若为FFH,则重新发送数据。

3.2串行通信程序流程

(1)发送机程序流程

根据通信协议发送机需向接收机发送联络信号“E1”,当接收到应答信号后,发送机发送数据,发送数据完毕后将校验和发送至接收机,接收机进行校验如果正确等待下一次发送;如果错误重新发送数据。

其流程图如下:

 

图10发送流程图

(2)接收机程序流程

根据通信协议,接收机等待发送机发出的联络信号“E1”并向发送机发送应答信号“E2”,当接收1个数据字节后求检验和,发送机在发送完一个数据块后将发送机计算的校验和发送至接收机,接收机将两个校验和进行比较,如果正确等待下一次接收;如果错误则发送出错标志重新发送数据。

其流程图如下:

图11接收机流程图

 

3.3程序清单

基于AT89C51单片机双机通信时,串行输入输出可直接进行连接,实现双机通信。

这样连接方式,传输距离短,抗干扰能力弱,但容易实现,其接线和程序较为简单,其程序如下:

(1)发送机程序

ORG0000H

AJMPMAIN

ORGO1OOH

MAIN:

MOVSP,#6OH

MOVSCON,#40H

MOVTMOD,#20H

MOVTH1,#0FDH

MOVTL1,#0FDH

SETBTR1

MOVP1,#0FFH

MOV30H,#0FFH

K0:

MOVA,P1

CJNEA,30H,KI

SJMPK0

KI:

MOV30H,A

MOVSBUF,A

SJMPK0

WAIT:

JBCT1,K0

SJMPWAIT

END

(2)接收机程序

ORG0000H

AJMPMAIN

ORGO1OOH

MAIN:

MOVSP,#6OH

MOVSCON,#50H

MOVTMOD,#20H

MOVTH1,#0FDH

MOVTL1,#0FDH

SETBTR1

MOVP1,#0FFH

K0:

JBRI,KK

SJMPK0

KK:

MOVA,SBUF

MOVP1,A

CLRRI

SJMPK0

END

发送机与接收机也可以经过串口进行通信,这种通信方式较上一种方式提高通信距离,抗干扰能力强,传输稳定,但其接线复杂,程序比较繁琐。

其程序如下:

(1)发送程序清单

ASTRT:

CLREA

MOVTMOD,#20H;定时器1置为方式2

MOVTH1,#0F4H;装在定时器初值,波特率为2400

MOVTL1,#0F4H

MOVPCON,#00H

SETBTR1

MOVSCON,#50H;设定串行口方式1,且准备接受应答信号

ALOOP1:

MOVSBUF,#0E1H;发送联络信号

JNBTI,$;等待一帧发送完毕

CLBTI;允许在发送

JNBRI,$;等待接收机的应答信号

CLRRI;允许在接收

MOVA,SBUF;接收机应答后,读至A

XRLA,#0E2;判断接收机是否准备完毕

JNZALOOP1;接收机未准备好,继续联络

ALOOP2:

MOVP1,#0FFH

MOV30H,#0FFH;设定拨码开关初值

MOVR7,#10H;设定数据块长度

MOVR6,#00H;清校验和单元

ALOOP3:

MOVA,P1;读入拨码开关

CJNEA,30H,ALOOP4

SJMPALOOP3

ALOOP4:

MOV30H,A;存入拨码开关新值

MOVSBUF,A;发送一个数据字节

MOVA,R6

ADDA,P1;求校验和

MOVR6,A;保存校验和

INCR0

JNBT1,$

CLBT1

DJNZR7,ALOOP3;整个数据块是否发送完毕

MOVSBUF,R6;发送校验和

JNBTI,$

CLRTI

JNBRI,$;等待接收机应答信号

CLRRI

MOVA,SBUF;接收机应答,读至A

JNZALOOP2;接收机应答错误,转至重新发送

SJMPALOOP3;进入下一循环传送

END

(2)接收程序清单

BSTART:

CLREA

MOVTMOA,#20H

MOVTH1,#0F4H

MOVTL1,#0F4H

MOVPCON,#00H

SETBTR1

MOVSCON,#5OH;设定串行口工作方式1,且准备接收

BLOOP1:

JNBRI,$;等待1号机的联络信号

CLRRI

MOVA,SBUF;收到1号机的信号

XRLA,#0E2H;判断是否为1号机联络信号

JNZBLOOP1;不是1号机联络信号,再等待

MOVSBUF,#0E2H;是1号机联络信号,发应答信号

JNBT1,$

CLRTI

BLOOP2:

MOVR0,#40H;设定数据块地址指针初值

MOVR7,#10H;设定数据块长度初值

MOVR6,#00H;清校验和单元

BLOOP3:

JNBRI,$

CLRRI

MOVA,SBUF

MOV@R0,A;接收数据转储

INCRO

ADDA,R6;求校验和

MOVR6,A

DJNZR7,BLOOP3;判断数据块是否接收完毕

JNBRI,$;完毕,接收1号机发来的校验和

CLRRI

MOVA,SBUF

XRLA,R6;比较校验和

JZEND1

MOVSBUF,#0FFH;校验和相等,跳至发正确标志

JNBTI,#;校验和不相等,发错误标志

CLRTI;转重新接收

SJMPBLOOP2

END1:

MOVSBUF,#00H

RET

4软件仿真

Proteus7Professional是一种低投资的电子设计自动化软件,它可以仿真单片机和周边设备,可以仿真51系列、AVR、PIC等常用的MCU。

与KEIL和MPLAB不同的是,它还可以仿真周边的设备。

例如,示波器、RAM、ROM、LED等。

本次设计,通过两片两片AT89C52单片机由8位按键开关分别控制8个指示灯。

具体接线如下;发送电路18、19号引脚连接晶振电路,9号引脚连接复位电路。

1-8号引脚连接8位按键开关。

10、11号引脚连接接收电路单片机的11、10号引脚。

接收电路,18、19号引脚连接晶振电路,9号引脚连接复位电路。

1-8号引脚连接8个指示灯。

图12双机通信仿真图

 

5硬件连接

左面电路板为发送电路,电路板右侧如图,为电源端,连接5V直流电源,左侧为接地端,8个独立按键分别连接AT89C52的1-8号引脚,9号引脚连接复位电路,复位电路中需要的8.2k电阻由两个10k电阻并联,再串联3.2k电阻组成,电解电容用于复位上电。

18、19号引脚连接晶振电路,两个磁片电容用于快速起振。

晶振需要11.0592MHZ,本设计选择相近的12MHZ。

右面电路板为接收电路,电路板右侧如图,为电源端,连接5V直流电源,左侧为接地端,8个指示灯分别连接接受收AT89C52的1-8号引脚,9号引脚连接复位电路,复位电路中需要的8.2k电阻由两个10k电阻并联,再串联3.2k电阻组成,电解电容用于复位上电。

18、19号引脚连接晶振电路,两个磁片电容用于快速起振。

晶振需要11.0592MHZ,本设计选择相近的12MHZ。

表7硬件元件清单

编号

名称

型号

数量

1

单片机

AT89C52

2

2

按键开关

10

3

电阻

10k

8

4

电阻

3.2k

4

5

磁片电容

30uf

4

6

电解电容

10uf

2

7

电路板

2

8

晶振

12MHZ

2

9

RS232

2

10

串口

2

11

指示灯

8

12

排阻

1

13

导线

若干

图13双机通信实物图

 

6设计总结

经过繁忙而又紧张的课程设计,终于顺利的完成了设计任务。

虽然在这段时间里每天都那么繁忙,但是在这忙碌的过程中却得到了许多的收获。

经过课程设计,在查阅资料的过程中,学习了基于单片机的汇编语言程序设计,了解了单片机串行通信的基本知识,对于以后的学习和工作都有很大的益处。

在学习的过程中,也遇到了一些困难,比如开始的时候,由于发送端和接收端的通信协议没有做好

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1