项目8单片机双机通信设计ppt课件.ppt

上传人:牧羊曲112 文档编号:1826548 上传时间:2022-12-20 格式:PPT 页数:48 大小:543.50KB
返回 下载 相关 举报
项目8单片机双机通信设计ppt课件.ppt_第1页
第1页 / 共48页
项目8单片机双机通信设计ppt课件.ppt_第2页
第2页 / 共48页
项目8单片机双机通信设计ppt课件.ppt_第3页
第3页 / 共48页
项目8单片机双机通信设计ppt课件.ppt_第4页
第4页 / 共48页
项目8单片机双机通信设计ppt课件.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《项目8单片机双机通信设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《项目8单片机双机通信设计ppt课件.ppt(48页珍藏版)》请在三一办公上搜索。

1、项目8 单片机双机通信系统设计, 知识目标:1单片机串行通信基础知识; 2单片机与上位机通信基础知识3VB基础知识。 能力目标: 1. 能根据设计任务要求编制程序流程图; 2. 会绘制单片机双机通信电路原理图; 3. 会用keil C51软件对源程序进行编译调试及与protues软件联调,实现电路仿真。,任务1 单片机双机通信设计,单片机系统设计中,经常要使用串口进行外部通信,单片机与PC机通信是单片机功能模块使用中极为重要的一部分,应用也较广泛。本项目以两个任务来学习单片机通信方面的内容。,任务1 单片机双机通信设计,1.1 提出任务单片机甲向单片机乙发送“READY”字符串,然后等待接收。

2、如果接收到乙机发送的“OK”字符串,则蜂鸣器响,否则就不响。1.2 分析任务1. 硬件电路设计电路组成如图8-1所示。这里选择具有内部ROM的AT89S51单片机,如果PROTEUS软件中没有AT89S51单片机,就选用AT89c51单片机。两块单片机串口相接,即甲机的P3.0接乙机的P3.1, 甲机的P3.1接乙机的P3.0,也就是说甲机的发送端接乙机的接收端,甲机的接收端接乙机的发送端;甲机的P1.0接蜂鸣器。当甲机的P1.0管脚输出高电平时,蜂鸣器就响,输出低电平时,蜂鸣器不响。,任务1 单片机双机通信设计,图8-1 双机通信原理图(右边是甲机,左边是乙机),任务1 单片机双机通信设计,

3、使用查询方式,实现双机串口异步通信。所谓的查询方式,是指通过查看中断标志位RI和TI来接受和发送数据。在这种方式下,当串口发送完数据或接收到数据时,仅仅置位相应的标志位而不会以任何其它的形式通知主程序。主程序只能通过定时查询发现标志位的状态改变,从而作出响应的处理。注意,在查询方式中,标志位的位置由硬件完成,而标志位的清除需要软件进行处理。首先由甲机发送“READY”字符串,然后等待接收。如果接收到乙机发送的“OK”字符串,则蜂鸣器响,否则就不响。总程序流程图(甲机)如图8-2。,图8-2 甲机流程图,任务1 单片机双机通信设计,数据的接收和发送均使用查询方式。程序大致分为3个部分:初始化部分

4、、发送数据部分、接受数据部分。(1)系统初始化部分系统初始化部分应完成 如下方面的工作:关闭所有中断;设置串口工作模式;设置串口为接收允许状态;设置串行口通信波特率;其它数据初始化;,任务1 单片机双机通信设计,串口使用工作方式1,其波特率可以是软件设置的。波特率的设置是通过改变定时器T1的溢出率来控制。设定单片机为如下环境:单片机外接晶振频率为11.0592Hz;定时器T1工作在工作模式2,既自动装入初值8位定时器;波特率选择位SWOD置为1;设置通信波特率为9600bit/s;按照上述条件,定时器T1的初值N应设为: N=256 -(2smod晶振频率)/(波特率3212)=256 (21

5、11.0592106)/(96003212) = 250 =FAH,任务1 单片机双机通信设计,(2)发送数据部分在程序中,发送一个字节的过程如下:将数据传送至SBUF;检测TI位,如果数据传送完毕,则TI位被硬件置1,如果TI为0,则继续等待;TI=1,表示发送完成,此时需要将TI软件清0,然后继续发送下一个字符;程序中,使用 put_string()发送数据,当检测到“0”字符时,表示到达发送字符串结尾,停止数据发送。,任务1 单片机双机通信设计,(3)接收数据部分在程序中,接收一个字节的过程如下:检测RI位,如果接收到数据,则RI位被硬件置1,如果TI为0,则继续等待;RI=1,表示已接

6、收到一个字节,此时,可以将SBUF中的内容读入缓冲区;将RI软件清0,准备接收下一字节;程序中,使用 get_string()发送数据,当检测到“0”字符时,表示已接收到完整的字符串,函数返回。,任务1 单片机双机通信设计,#include#include#define _SEND_STRING_ “READY” /发送的字符串#define _RECV_STRING_ “OK” /接收的字符串#define _MAX_LEN_ 16 /数据最大长度void put_string(unsigned char *str); /串口发送字符串void get_string(unsigned cha

7、r *str); /串口接收字符串void Beep(); /蜂鸣表示成功接收到返回信号,/*-程序初始化部分-*/void main() char buf_MAX_LEN_;/*系统初始化*/TMOD = 0 x20; /定时器T1使用工作方式2TH1 =250; /设置初值TL1 = 250;TR1 = 1; /开始计时PCON = 0 x80; /SMOD = 1SCON = 0 x50; /工作方式1,波特率9600bit/s,允许接收EA = 0; /关闭全部中断strcpy(buf, _SEND_STRING_); /设置发送字符串,程序代码如下(甲机):,任务1 单片机双机通信设

8、计,/*-发送数据-*/put_string(buf);buf0 = 0; /清空缓冲区/*-接收数据-*/while(strcmp(buf, _RECV_STRING_)!=0) get_string(buf);beep();while(1); /反复循环,/*-子函数-*/*发送字符,参数str为待发送子符串*/void put_string(unsigned char *str) do SBUF = *str;while(!TI); /等待数据发送完毕TI=0; /清发送标志位str+; /发送下一数据while(*(str-1)=0); /发送至字符串结尾则停止,任务1 单片机双机通信

9、设计,/*接收字符串,参数str指向保存接收子符串缓冲区*/void get_string(unsigned char *str) unsigned char count = 0; *str = 0; /清缓冲区 do while(!RI); /等待数据接收*str = SBUF; /保存接收到的数据RI=0; /清接收标志位str+; /准备接收下一数据,count+;if(count _MAX_LEN_) /如果接收数据超过缓冲区范围,则只接收部分字符 *(str-1) = 0;break;while(*(str-1)=0); /接收至字符串结尾则停止,任务1 单片机双机通信设计, 思考题

10、 根据上面的甲机的程序,写出乙机的程序? 知识链接 1串行通信与并行通信在微型计算机中,通信(数据交换)有两种方式:并行通信和串行通信。并行通信是指计算机与I/O设备之间通过多条传输线交换数据,数据的各位同时进行传送。如图8-3所示。串行通信是指计算机与I/O设备之间仅通过一条传输线交换数据,数据的各位是按顺序依次一位接一位进行传送。如图8-4所示。,任务1 单片机双机通信设计,应该理解所谓的并行和串行,仅是指I/O接口与I/O设备之间数据交换(通信)是并行或串行。无论怎样CPU与I/O接口之间数据交换总是并行。,图8-3 并行通信 图8-4 串行通信,任务1 单片机双机通信设计,二者比较:串

11、行通信的数据传输速率相对较低,但通信距离长,可以从几米到几公里,因此串行适用于长距离而速度要求不高的场合。电脑上的9针座(人称串口)就是串行通信。并行通信的传输速率高,但传输距离短,一般不超过30米,而且成本高(要采用多条数据线)。电脑输出数据到打印机采用的就是并行通信。,任务1 单片机双机通信设计,2串行通信的分类与制式(1)串行通信的分类串行通信可以分为同步通信(Synchronous Communication)和异步通信(Asynchronous Communication)两类。在单片机中,主要使用异步通信方式。(2)串行通信制式根据信息的传送方向,串行通信可以进一步分为单工、半双工

12、和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。如果在通信过程的任意时刻,信息只能由一方A传到另一方B,则称为单工。如果在任意时刻,信息既可由A传到B,又能由B传A,但只能由一个方向上的传输存在,称为半双工传输。如果在任意时刻,线路上存在A到B和B到A的双向信号传输,则称为全双工。,任务1 单片机双机通信设计,3同步通信与异步通信(1)同步通讯异步通信的概念同步和异步都属于串行数据传送方式,但二者的传送格式有所不同。同步方式的一帧内含有很多数据位,而异步方式一帧内只含有几个数据位。如果要传送一大堆数据,同步方式只给这串数据进行

13、一次外包装(即添加“头帧”、“尾帧”、“校验”帧),而异步方式在传送这串数据时则要对数据的每一个字节分别加以包装(即添加“头”位、“尾”位和校验)。 显然在相同的数据传输波特率下,同步方式比异步方式的传送速度快,但同步方式要求收发双方在整个事件传送过程中始终保持严格同步,这将增加硬件上的难度,而异步通信只要求每帧(字节)的传送中短时间保持同步即可,实现起来要容易得多。,任务1 单片机双机通信设计,(2)同步、异步数据通信格式同步、异步数据通信格式分别如图8-4、图8-5所示。,图8-4 同步传送的数据格式,图8-5 异步通信数据帧格式,任务1 单片机双机通信设计,4串行接口的结构(1)数据缓冲

14、寄存器SBUF两个SBUF,一个用于发送(只写);一个用于接收(只读)。映象地址均为99H,如图8-6所示。(2)数据发送与接收控制发送控制器在波特率作用下,将发送SBUF中的数据由并到串,一位位地传输到发送端口;接收控制器在波特率作用下,将接收接收端口的数据由串到并,存入接收SBUF中。,图8-6 串行接口的结构,任务1 单片机双机通信设计,5MCS-51的串行接口概述(1)有一个可编程全双工串行通信接口(UART) (Universal Asychronous Receiver/Transmitter )(2)管脚:TXD(P3.1)、RXD(P3.0)(3)可同时发送、接收数据(Tran

15、smit/Receive)(4)有四种工作方式,帧格式有8、10、11位。(5)波特率(Baud rate)可设置波特率:每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。,任务1 单片机双机通信设计,6MCS-51串行接口寄存器(1)串行口数据缓冲器 - SBUF共2个:一个发送寄存器SBUF,一个接收SBUF,二者共用一个地址99H。(2)控制寄存器 - SCON,对各位的说明如下:SM0、SM1:串行方式选择位,其定义如表8.1所示。表8.1 串行口工作方式,任务1 单片机双机通信设计,SM2:多机通信控制位,用于方式2和方式3中。在方式2和方式3处于接收方式时,若SM2=

16、1, 且接收到的第9位数据RB8为0时,不激活RI;若SM2=1,且RB8=1时,则置RI=1。在方式2、3处于接收或发送方式时,若SM2=0,不论接收到的第9位RB8为0还是为1,TI、RI都以正常方式被激活。在方式1处于接收时,若SM2=1,则只有收到有效的停止位后,RI置1。在方式0中,SM2应为0。REN:允许串行接收位。它由软件置位或清零。REN=1时,允许接收;REN=0时,禁止接收。TB8:发送数据的第9位。在方式2和方式3中,由软件置位或复位,可做奇偶校验位。在多机通信中,可作为区别地址帧或数据帧的标识位,一般约定地址帧时,TB8为1,数据帧时,TB8为0。RB8:接收数据的第

17、9位。功能同TB8。,TI:发送中断标志位。在方式0中,发送完8位数据后,由硬件置位;在其它方式中,在发送停止位之初由硬件置位。因此,TI是发送完一帧数据的标志,可以用指令JBC TI,rel来查询是否发送结束。TI=1时,也可向CPU申请中断,响应中断后,必须由软件清除TI。 RI:接收中断标志位。在方式0中,接收完8位数据后,由硬件置位;在其它方式中,在接收停止位的中间由硬件置位。同TI一样,也可以通过JBC RI,rel来查询是否接收完一帧数据。RI=1时,也可申请中断,响应中断后,必须由软件清除RI。,任务1 单片机双机通信设计,任务1 单片机双机通信设计,(3)电源及波特率选择寄存器

18、PCONPCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,不可以位寻址,字节地址为87H。其格式如表8.2所示。SMOD为波特率选择位 SMOD: 串行通信只用该位,为1时,波特率2;为0时不变。,电源及波特率选择寄存器PCON,电源及波特率选择寄存器PCON,表8.2,任务1 单片机双机通信设计,789s51串行口的波特率在串行通信中,收发双方对传送的数据速率,即波特率要有一定的约定。我们已经知道,89C51单片机的串行口通过编程可以有4种工作方式。其中,方式0和方式2的波特率是固定的,方式1和方式3的波特率可变,由定时器T1的溢出率决定,下面加以分析。(1)方式0和方式2 在

19、方式0中,波特率为时钟频率的1/12,即fosc/12,固定不变。在方式2中,波特率取决于PCON中的SMOD值,当SMOD=0时,波特率为fosc/64;当SMOD=1时,波特率为fosc/32. 即 :,任务1 单片机双机通信设计,(2)方式1方式1的波特率是可变的,由定时器T1的计数溢出率决定。相应的公式为:,定时器T1的计数溢出率计算公式为:,任务1 单片机双机通信设计,式中,K为定时器T1的位数,与定时器T1的工作方式有关,则波特率计算公式为,实际上,当定时器T1做波特率发生器使用时,通常是工作在模式2,即自动重装载的8位定时器,此时TL1作计数用,自动重装载的值在TH1内。设计数的

20、预置值(初始值)为X,那么每过256-X个机器周期,定时器溢出一次。为了避免因溢出而产生不必要的中断,此时应禁止T1中断。溢出周期为:,任务1 单片机双机通信设计,溢出率为溢出周期的倒数,所以,(3)方式3 方式3的波特率由定时器T1的计数溢出率决定,确定方法与工作方式1中的完全一样。,任务1 单片机双机通信设计,(4)常用波特率及误差常用波特率及误差如表8.3所示。表8-3 常用波特率及误差,任务2 单片机与PC通信,2.1 提出任务功能为利用键盘在PC机中输入一个6字节(12位的09,AF)的二进制数,然后用鼠标点击通信命令按钮,PC机就将此二进制数发给单片机,单片机收到此数后再原样发回,

21、PC机收到后显示在窗体上。试验者可通过肉眼比较发送和接收的两个数据,检验通信是否成功。2.2 分析任务1. 硬件电路设计PC机的某个串行口通过电缆线与RS232收发器MAX232的232电平端口三线交叉连接,如图8-8所示。MAX232的逻辑电平端口与单片机的串行口相连。PC机RS232的9针连接器的4脚和6脚、7脚和8脚不用连接。图8-8 PC机与单片机的通信接口电路框图,图8-8 PC机与单片机的通信接口电路框图,任务1 单片机双机通信设计,2软件设计思路PC机VB程序(1) 在工程项目中添加一个窗体,取名为frmcomm,设置其Caption属性为通信。(2) 在窗体中添加两个大小一样的

22、文本框,分别取名为txtSend和txtRcv。 (3) 在窗体中添加一个命令按钮,取名为cmdcomm,设置其Caption属性为通信。(4) 在窗体中添加MSComm控件,取名为MSComm1。 (5) 打开代码窗口,在cmdcomm控件的Click事件中加入以下程序代码:,任务1 单片机双机通信设计,Private Sub cmdcommClick() Dim Senddat(5) As Byte,Rcvdat() As Byte,dattemp As Variant,i As Integercmdcomm.Enabled=False使cmdcomm按钮失效For i=0 To 5从发送

23、文本框txtSend获取发送数据 Senddat(i)=&H & Mid(txtSend.Text,i * 2+1,2) Next i MSComm1.CommPort=1设置端口号为1 MSComm1.Settings=19200,N,8,1设置波特率等通信协议MSComm1.InputLen=6设置一次从串口读取6个字节,任务1 单片机双机通信设计,Private Sub cmdcommClick() Dim Senddat(5) As Byte,Rcvdat() As Byte,dattemp As Variant,i As Integercmdcomm.Enabled=False使cm

24、dcomm按钮失效For i=0 To 5从发送文本框txtSend获取发送数据 Senddat(i)=&H & Mid(txtSend.Text,i * 2+1,2) Next i MSComm1.CommPort=1设置端口号为1 MSComm1.Settings=19200,N,8,1设置波特率等通信协议MSComm1.InputLen=6设置一次从串口读取6个字节,任务1 单片机双机通信设计,MSComm1.PortOpen=True打开串行口 MSComm1.InputMode=comInputModeBinary从串口读取二进制数据 MSComm1.Output=Senddat发送

25、数据 Do Until MSComm1.InBufferCount = 6 查询方式,等待接收到6个字节 DoEvents Loop dattemp=MSComm1.Input从串口读取数据至变体变量 Rcvdat=dattemp数据送至接收二进制数组 txtRcv.Text=,任务1 单片机双机通信设计,For i=0 To 5接收数据送至接收文本框txtRcv显示 txtRcv.Text=txtRcv.Text & Right(0 & Hex(Rcvdat(i),2) Next i MSComm1.PortOpen=False关闭串行口 cmdcomm.Enabled=True使能cmdc

26、omm接钮 End Sub(6) 选择开始-运行。用PC机键盘在输入文本框中输入要发送的6字节二进制数据,然后用鼠标点击通信按钮即可。,任务1 单片机双机通信设计,#include#define uchar unsigned char main() uchar temp,datmsg6;TMOD=0 x20; /设置波特率为19.2kb/sPCON=0 x80; TH1=0 xfd; TL1=0 xfd; TR1=1; /启动定时器1 SCON=0 x50; /设置串行口为10位异步收发,且允许 /接收 while(1) for(temp=0;temp6;temp+) /连续接收6个 /字节

27、,while(RI=0); RI=0; datmsgtemp=SBUF; for(temp=0;temp6;temp+)/连续发送6个 /字节 SBUF=datmsgtemp; while(TI=0);TI=0; ,单片机C51程序, 知识链接,一、VB基础知识1. VB的MSComm控件属性说明:(1)commport属性void SetCommPort(short nNewValue); short GetCommPort();这一属性设置并返回连接的串行端口号,windows将会利用该串口和外界通信。在设计时,nNewValue可以设置成从116的任何数(默认值为1)。但是如果用port

28、open属性打开一个并不存在的端口时,mscomm控件会产生错误68(设备无效)。注意:必须在打开端口之前设置commport属性。, 知识链接,(2)settings属性voidSettings(LPCTSTRlpszNewValue);StringGetSettings();该属性用于设置并返回数据传输速率、奇偶校验、数据比特、停止比特参数。当端口打开时,如果value非法,则mscomm控件产生错误380(非法属性值)。其中lpszNewValue用字符串表示,由四个设置值组成,有如下的组成格式:“bbbb,p,d,s”bbbb为数据传输速率,p为奇偶校验,d为数据比特,s为停止比特。v

29、alue的默认值是:“9600,n,8,1”,数据传输速率合法值可以是110、300、600、1200、2400、4800、9600、14400、19200、28800、38400、56000、57600、115200、12800、25600, 知识链接,奇偶校验值可以是设置为下表中的任一值。,数据比特数可以是4、5、6、7、8。停止比特数可以是1、1.5、2。注意:只有当通信的双方的settings属性值都一样时,通信连接才能生效。, 知识链接,(3)handshaking属性这一属性用于设置或者返回硬件握手协议,也就是PC和通信设备之间为了控制流速而设定的内部协议。属性值可以设置为下表中的

30、任一个。, 知识链接,(4)rthreshold属性设置返回的要接收的字符数。当接收字符后,若rthreshold属性设置为0(默认值)则不会产生oncomm事件。否则,该属性为一阈值,当接收缓冲区内字节个数达到或超过该值后就会产生oncomm事件,例如,设置rthreshold为1,接收缓冲区收到每一个字符都会使mscomm控件产生oncomm事件。(5)ctsholding属性该属性确定是否可通过查询cts线的状态发送数据。该属性在设计时无效,在运行时为只读。(6)sthreshold属性设置并返回传输缓冲区中允许的最小字符数。若设置sthreshold属性为0(默认值),数据传输事件不会

31、产生oncomm事件。若设置sthreshold属性为1,当传输缓冲区完全空时,mscomm控件产生oncomm事件。, 知识链接,(7)inputmode属性访属性用于设置或者返回传输数据的类型。其取值和基本含义如下表所示。, 知识链接,(8)inputlen属性该属性用于设置并返回input属性从接收缓冲区读取的字符数。inputlen属性的默认值是0。当设置inputlen为0时,使用input将使mscomm控件读取接收缓冲区中全部的内容。若接收缓冲区中inputlen字符无效,input属性返回一个零长度字符串(“”)。在使用input前,用户可以选择检查inbuffercount属

32、性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。(9)dsrholding属性确定dsr线的状态。dsr信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。dsrholding属性返回为true时,表示dsr线高,返回false时,表示dsr线低。当dsr线为高电平时(dsrholding=true)超时时,mscomm控件设置commevent属性为comeventdsrto(数据准备超时)并产生oncomm事件。, 知识链接,(10)cdholding属性通过查询cd线的状态确定当前是否有传输。cd是从调制解

33、调器发送到相连计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。注意:在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。(11)EOFEnable属性EOFEnable属性确定在输入过程中MSComm控件是否寻找文件结尾(EOF)字符。如果找到EOF字符,将停止输入并激活OnComm事件,此时CommEvent属性设置为comEvEOF,注意:当EOFEnable属性设置为FALSE时,OnComm控件将不在输入流中寻找EOF字符。, 知识链接,二、MAX232基础知识1. MAX232简介该产品是由德州仪器公司(T

34、I)推出的一款兼容RS232标准的芯片。由于电脑串口rs232电平是-10v +10v,而一般的单片机应用系统的信号电压是ttl电平0+5v,max232就是用来进行电平转换的,该器件包含两个驱动器、两个接收器和一个电压发生器电路提供TIA/EIA-232-F电平。该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。2. 主要特点(1) 单+5V电源工作 (2) 两个驱动器及两个接收器(3) 30V输入电平(4) 低电源电流:典型值是8mA, 知识链接,3. 电气连接图,如图8-9所示。,图8-9 电气连接图,项目小结, 项目小结 单片机串口模块,作为单片机学习的重点与难点,有时会使人望而却步。可实际上并不是很难,只是学习上要讲究方式方法而已。就拿上面的两个简单的任务来说,硬件电路的构成并不复杂,重在软件的调试。例如任务1,应用串口调试软件,先调与甲机的通信,程序正确后,再调与乙机的通信,两机程序确定正确后,连接两机,进一步的调试,即可。 思考与练习 1. 任务1中用VB做一个4*4模拟键盘,单片机接数码管,按模拟键盘,数码管显示相应的数字?2. 任务2(单片机与PC通信)中,为保证通信中数据传送的正确性,需要纠错功能,你如何编程?,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号