单片机之串行通讯_第1页
单片机之串行通讯_第2页
单片机之串行通讯_第3页
单片机之串行通讯_第4页
单片机之串行通讯_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章单片机串行通讯设计9.1功能要求9.2任务分析

9.3

串行通讯技术9.3.1键盘工作特性9.3.2串行通讯基本概念9.4MCS_51单片机串行口9.4.1串行口结构9.4.2串行口控制寄存器9.4.3串行口的工作方式9.5单片机串行通讯设计9.5.1单片机与单片机之间串行通讯9.1功能要求

一.基本要求实现单片机与单片机之间的串行通讯。二.发挥部分实现单片机与PC机之间的串行通讯。回目录

9.2任务分析

要完成此任务,主要需解决如下四方面的问题:串行通讯的工作原理;单片机与单片机串行通讯接口电路和程序设计方法;PC机与单片机串行通讯接口电路的设计方法;PC机与单片机串行通讯的程序设计方法。回目录9.3.1串行通讯基础

在实际工作中,单片机与外部设备之间、单片机与单片机之间经常需要交换信息,所有这些信息的交换均称为通讯。通讯按数据传送的方式分为二种,即并行通讯和串行通讯。并行通讯是指数据的各位同时进行传送(发送和接收)的通讯方式,接口电路如下页左图所示,数据传送如下页右图所示。由于各位同时传送,其突出优点为传送速度快,但其缺点为所需的数据线较多,数据有多少位,就需要多少根数据线,因此它一般适用于通讯距离较近的场合,如单片机和打印机之间的通讯等,但当通讯距离较远,将导致成本成倍增加,并且接收数据的误码率较高。9.3串行通讯技术回目录并行通讯的特点通讯软件控制简单(无需并—串之间的转换),传输的速度快(数据各位同时传送),但传输线较多,长距离传送时成本高,且不利于接收方各位的同时接收,一般应用于短距离数据通讯。回目录并行通讯接口电路简图并行通讯数据传送示意图串行通讯

串行通讯是指数据的各位依次进行传送(发送和接收)的通讯方式,接口电路如图9-4所示,TXD表示发送管脚,RXD表示接收管脚,数据传送如图所示,由于各位依次传送,通讯时占用同一根数据线,其突出优点为通讯所需的数据线少,但由于传送时需要进行并—串之间的数据转换,因此带来了通讯速度慢、通讯控制程序复杂的缺点。但由于在远距离通讯时,能有效的减少通讯电缆成本,所以在远距离通讯系统中得到广泛的运用,串行通讯接口电路简图串行通讯数据传送示意图9.3.2串行通讯基本概念

一、串行通讯的传输方式串行通讯的传输方式一般有三种:1)单工方式只允许数据由一个方向传送。2)半双工方式即在同一条数据线上,在不同的时间段上实现双向通讯,由于只有一条数据线,对于某一具体时刻而言,数据只能单方向传送。3)全双工方式即在二条不同的数据线上,在相同的时间段上也能实现双向通讯,由于有二条数据线,发送和接收互不干扰,可以同时进行。

(a)单工方式(b)半双工方式(c)全双工方式回目录二、异步通讯的通讯协议和格式

起始位:为了实现异步传输字符的同步,采用的办法是使数据线在空闲时保持高电平,在传送每个字符前先发送一位低电平0,称为起始位,以通知接收方准备接收数据。因此,传送的每一个字符都用起始位来进行收发双方的同步。数据位:指传送的5~8位的数据,常见的为一个字节(8位)的数据,数据传送时低位在前,高位在后。奇偶校验位:接收方为了检验数据的正确性,在数据发送完后,可以发送一位奇偶校验位,如在发送方将程序状态字PSW中的P标志作为校验位发送,在接收方接收到数据和校验位后,再用接收到的数据产生的P标志和接收到的校验位比较,如果相同,认为数据正确,如果不相同,表明接收的数据出错。。停止位:为了表示数据结束,并为下一次数据传送的起始位作好准备,一般发送1或2位的高电平1作为停止位。异步通讯的整体格式三、异步通讯的数据传送过程

在数据传送开始前,数据线始终保持高电平不变(空闲位),接收方不断的检测数据线的高低电平状态。当发送方开始发送数据前,先发送起始位,将数据线拉低为低电平0。当接收方检测到低电平后,表示数据传送即将开始,作好数据接收准备,准备统计接收数据位数。发送方发送完起始位后,便发送数据的最低位D0,接收方按照事先约定的速率和节拍,同步地将数据D0移入移位寄存器。并将数据位数计数器加1。依据相同的原理继续发送和接收其它的数据位,当数据位发送到最高位D7时,由于数据位数计数器达到预先约定值,便将接收到的数据组合为一个字节。接下来发送和接收校验位和停止位,为下一次数据传送作好准备。回目录四、波特率波特率指数据的传送速率,表示每秒钟传送二进制数据的位数,它的单位为b/s,波特率表示了数据通讯的快慢。假设数据传送速率为120字符每秒,而每个字符包含10位(1位起始位、8位数据、1位停止位),这时传送的波特率为:

10b/字符×120字符=1200b/s异步串行通讯的波特率一般设置在50~19200b/s之间。9.4MCS_51单片机串行口

MCS_51系列单片机有一个可编程的全双工串行通讯口,它既可作为UART(通用异步收发器)使用,又可用作同步移位寄存器。使用该串行口可以实现单片机之间以及单片机与PC机之间的单机或多机通讯。它通过引脚TXD(P3.1,串行数据发送引脚)发送数据,通过RXD(P3.0,串行数据接收引脚)接收数据,其帧格式可以是8位、10位、11位,并能设置不同的波特率,给串行数据的传送带来很大的灵活性。回目录9.4.1串行口结构

回目录串行口内部结构简图

由上图可知,单片机串行通讯实际上是依据数字电路中移位寄存器的工作原理构成,它利用输出移位寄存器实现并-串转换发送数据,利用输入移位寄存器实现串-并转换接收数据,具体工作过程如下:一.数据发送

要发送的数据首先送到发送缓冲器SBUF中,该步骤可以通过写发送SBUF指令:MOVSBUF,A实现。同时发送SBUF得到要发送的数据后,依据约定的通讯协议自动加入附加的控制信息,如起始位、停止位等,并将组合后的控制信息和数据自动装载到输出移位寄存器中,在移位时钟的作用下,将组合后的控制信息和数据依次逐位发送出去,发送完后,置发送完成标志TI为1。

二.数据接收先置允许接收标志REN(SCON.4)为1,允许接收器接收,同时检测到RXD引脚由高电平1跳变到低电平0时,输入移位寄存器依据约定的通讯协议在移位时钟的控制下依次移入接收到的数据(含控制信息和数据),一帧接收完后,自动装入接收SBUF中,在接收SBUF中自动去除控制信息,得到接收的数据,同时置位接收标志RI,向中断系统提出接收中断申请。单片机利用中断系统或查询得知接收到数据后,执行读接收SBUF指令:MOVA,SBUF,将接收的数据读入累加器A中。三.移位时钟的获取由以上分析可知,串行通讯主要利用数字电路中移位寄存器的工作原理构成,而移位寄存器需要移位时钟来控制数据移位的速度,即波特率。由图9-8可知,串行通讯的移位时钟由单片机内部定时器T1产生,具体产生过程如下:T1溢出率经16分频后直接输出(SMOD=1)或再2分频(SMOD=0)作为移位时钟,因此串行通讯的波特率主要由T1的溢出率和SMOD值决定。9.4.2串行口控制寄存器单片机的串行口是可编程的,结构图中的SMOD等电子开关的选择都需要通过将控制字写入预定的特殊功能寄存器SCON(串行口控制寄存器)和PCON(电源控制寄存器)来实现的。下面分别对这二个寄存器进行介绍,以便为串行口的编程打下基础。回目录一.串行口控制寄存器SCONSCON是串行口的主要设置寄存器,位于特殊功能寄存器SFR区的98H单元,可以按位寻址,其控制字格式如下图所示:SCON各位的含义如下:SM0和SM1(SCON.7、SCON.6):串行口工作方式选择位。对应可选四种工作方式,如下表所示:SM0SM1方式说明波特率000移位寄存器固定fosc/1201110位异步收发(8位数据)可变10211位异步收发(9位数据)固定fosc/64或fosc/3211311位异步收发(9位数据)可变表串行口工作方式设置

SM2(SCON.5):多机通讯控制位主要用于方式2和方式3(含9位数据)。如果设置接收机的SM2=1,则接收机允许多机通讯。多机通讯协议规定:1.当单片机工作在方式2和方式3,并且SM2=1时,如果第9位数据为1,说明本帧为地址帧,如果第9位数据为0,说明本帧为数据帧。2.如果SM2=0,接收一帧数据后,不管第9位是1还是0,即不管是地址还是数据,都将接收的数据送SBUF中,并置接收标志RI为1,提出接收中断申请。多机通讯过程如下:(1)当一片单片机(称为主机)与多片单片机(称为分机,每个分机预先定义一个地址,即机号)进行多机通讯时,先将所有的从机SM2置为1。(2)当主机要和某分机(如1号机)通信时,先发送一个地址帧,即该从机的机号(如1号机),并使第9位(TB8)为1(表示地址)。3.由于所有从机的SM2=1,所以所有的从机都接收数据,并且每接收一个数据,就判断该数据的第9位(RB8)是否为1,如果为1,表明该数据是地址,再判断该地址是否是本机地址,如果是,表明主机将要和本机通信,将本机的SM2设为0,作好接收数据准备;如果RB8=0,表明是数据,本机对该数据不予理睬。由以上分析可知,只有1号从机经地址比较后匹配,将SM2设置为0,作好接收数据准备,其它分机由于地址不匹配,SM2保持为1。此时主机和1号分机就建立了通讯联系。4.主机继续发送数据,并设置TB8为0(表明是数据),此时由于1号机的SM2=0,不管接收到的数据第9位是1还是0,都将数据接收下来送SBUF,而其它分机由于SM2=1,数据接收后还要判断接收到的数据第9位是1还是0,由于第9位为0,对该数据不予理睬。所以只有主机和1号机之间进行通讯。多机通讯过程REN(SCON.4):允许接收控制位,相当于串行接收的控制开关,REN=1,允许接收,REN=0,禁止接收,所以,如果要使单片机能接收数据,必须在初始化时使REN=1。TB8(SCON.3):发送数据的第9位,在方式2和方式3中,根据数据的需要由软件置1或清0,它可作为奇偶校验位,也可在多机通讯中作为发送地址帧或数据帧的标志位,如果TB8=1,表明该帧是地址,如果TB8=0,表明该帧是数据。在方式0和方式1中,该位未使用。RB8(SCON.2):接收数据的第9位,在方式2和方式3中,接收的第9位数据放RB8。TI(SCON.1):发送中断标志,在一帧数据发送完后被自动置位。在方式0中串行发送到第8位数据结束或其它方式中发送到停止位时由硬件自动置1,它可由软件查询。该标志同时向中断系统提出申请,表明数据已经发送完,单片机响应该中断后,该标志不会自动清0,必须由软件清0,以免再次中断。SCON各位介绍RI(SCON.0):接收中断标志在接收到一帧数据后被自动置位。在方式0中串行接收到第8位数据结束或其它方式中接收到停止位时由硬件自动置1,它可由软件查询。该标志同时向中断系统提出申请,表明一帧数据已经成功接收完毕,要求CPU取走该数据,单片机响应该中断,并取走该数据后,该标志不会自动清0,必须由软件清0,以免再次中断。在中断系统中,发送标志TI和接收标志RI共用同一个中断源,CPU事先并不知产生的串行口中断是由发送标志TI还是接收标志RI引起,所以在全双工通讯中,必须由软件来判别。复位时,SCON所有位清0。回目录二.PCON(电源控制寄存器)

PCON中只有D7位SMOD与串行通讯有关,由结构图可知,在方式1、方式2、方式中决定移位时钟是否需要增倍,当SMOD=1,波特率提高一倍。但必须注意,PCON不能按位单独对SMOD进行设置,只能以字节寻址方式对PCON寄存器进行设置。电源控制寄存器PCON9.4.3串行口的工作方式一、方式0

方式0为移位寄存器工作方式,主要用于扩展并行输入或输出口,解决单片机I/O端口不够的问题。数据由RXD引脚输入或输出,同步移位时钟由TXD引脚输出。发送和接收均为8位数据,低位在先,高位在后。波特率较高,固定为fosc/12。该方式不适用于二个8051之间的直接数据通讯,但可以通过外接移位寄存器来实现单片机的I/0口扩展。1.方式0输出(发送)

对发送数据缓冲器SBUF写入一个数据,就启动了串行口方式0的发送过程:由RXD输出第一位数据D0给串入并出移位寄存器的数据输入端,同时内部定时逻辑以机器周期的速率由TXD输出移位时钟给串入并出移位寄存器的时钟端。这样经过8个机器周期后,发送的数据全部由发送SBUF移出到串入并出移位寄存器的并行数据输出端,并置发送标志TI为1,实现了输出I/O口的扩展。2.方式0输入(接收)

当SCON中的接收允许位REN=1,同时使接收中断标志RI=0,就启动了串行口方式0的接收过程:当需要输入外部数据时,由单片机的P1.0脚输出低电平,控制并入串出移位寄存器74LS165的SH/LD端,装入要输入的数据,然后使单片机的P1.0为高电平,使移位寄存器74LS165的SH/LD为高电平,工作于移位寄存器工作方式,这样在TXD管脚以机器周期为速率的移位时钟驱动下,将数据由RXD管脚输入到单片机的接收缓冲器SBUF中,同时置中断标志RI为1。如要再次接收数据,必须由软件将RI清0。二、方式1

串行口工作为方式1时,为十位数据的异步通讯方式,TXD为数据发送引脚,RXD为接收数据引脚,传送一帧数据的格式如下图所示,其中1位起始位,8位数据位,一位停止位。1方式1输出当执行一条写SBUF指令时,就启动了串行口发送过程。在发送移位时钟(由波特率确定,可变)的同步下,从TXD引脚先送出起始位,然后送出8位数据,最后是停止位。一帧十位数据发送完后,中断标志TI置1。方式1的发送时序如下图所示,方式1的波特率由T1的溢出率决定。2.方式1输入方式1的接收时序如下图所示。当用软件置REN=1时,接收器以所选择波特率16倍的速率采样RXD引脚电平,当检测到RXD引脚输入电平发生负跳变时,则说明已经检测到起始位,将其移入接收移位寄存器,并开始依次接收这一帧的其它数据位。在接收过程中,数据从移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0时,将接收到的8位数据装入接收SBUF中,并置RI=1,向CPU请求中断。三、方式2和方式3

串行口工作为方式2和方式3时为十一位数据异步通讯方式,TXD为数据发送引脚,RXD为接收数据引脚,传送一帧数据的格式如下图所示。其中1位起始位,8位数据位和1位附加位(发送时为SCON中的TB8,接收时为RB8),1位停止位。方式2的波特率固定为fosc/64或fosc/32,而方式3的波特率由定时器T1的溢出率决定。1.方式2和方式3输出当CPU执行一条写SBUF指令时,就启动了串行口发送过程。在发送移位时钟的同步下,从TXD引脚先送先送出起始位,然后送出9位数据(含1位附加位TB8),最后是停止位。一帧十一位数据发送完后,中断标志TI置1。方式2和方式3的发送时序如下图所示,方式2的波特率固定,方式3的波特率由T1的溢出率决定。2.方式2和方式3输入方式1的接收时序如下图所示。当用软件置REN=1时,接收器以所选择波特率的16倍速率采样RXD引脚电平,当检测到RXD引脚输入电平发生负跳变时,则说明已经检测到起始位,将其移入接收移位寄存器,并开始依次接收这一帧的其它数据位。在接收过程中,数据从移位寄存器右边移入,起始位移至输入移位寄存器最左边时,控制电路进行最后一次移位。当RI=0,且SM2=0(或接收到第9位数据为1)时,将接收到的9位数据的前8位数据装入接收SBUF中,第9位进入RB8,并置RI=1,向CPU请求中断。四、波特率的计算在串行通讯中,收发双方对发送和接收数据的速率必须事先约定。通过软件编程可对单片机串行口的工作方式和波特率等进行设置。其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由T1的溢出率决定。由于移位时钟的来源不同,各种方式的波特率计算公式也不相同。方式0的波特率=fosc/12,速度最快,一般用于I/O端口扩展。方式1的波特率=(/32)·T1溢出率方式2的波特率=(

/64)·fosc。方式3的波特率=(/32)·T1溢出率当T1作为波特率发生器时,最典型的用法是使T1工作在自动重装初值的方式2,这时的溢出率取决于TH1中的计数值。

T1溢出率=fosc/(12×(256-TH1))

表9-2常用的串行口波特率以及各种参数选取表

串行口foscMHz定时器T1串行口工作方式波特率(b/s)SMODC/T工作方式初值工作方式1和方式362.5K11202FFH19.2K111.059202FDH9600011.059202FDH4800011.059202FAH2400011.059202F4H1200011.059202E8H19.2K1602FEH96001602FDH48000602FDH24000602FAH12000602F3H6000602E6H110060272H五、串行口的初始化在使用串行口之前,必须根据事先约定的通讯协议对其进行初始化,主要包括设置产生波特率的定时器T1,串行口控制和中断控制。具体步骤如下:

1.由晶振频率fosc,串行口的工作方式和波特率,查表9-2,得到定时器的工作方式和初值,以及串行口SMOD的值。

2.对T1进行初始化。包括设置T1的工作方式(编程TMOD寄存器),装载TL1和TH1,并启动T1。

3.对串行口进行初始化。包括串行口的工作方式(编程SCON寄存器和PCON寄存器中SMOD位)。

4.串行口工作在中断方式时,要进行中断初始化设置(编程IE、IP寄存器)9.5单片机串行通讯设计

9.5.1单片机与单片机之间串行通讯这个任务要求在二块单片机试验板(二个同学一组)之间通过图9-4的接口电路连接实现单片机通讯,利用矩阵式键盘来实现数据输入和发送,具体要求如下:按键K1~K5为发送数据输入键,对应的键值0~4作为发送数据,K6为发送功能键,先由K1~K5确定要发送的数据,按下K6实现发送功能,将要发送的数据发送到另一块单片机试验板将其显示出来。本程序在第八章按键程序的基础上增加了串行通讯程序段组成,程序中的阴影部分指令即为实现串行通讯功能有关的指令。波特率设定为1200b/s,使用串口方式1进行通讯。串行口初始化步骤如下:1.由fosc=6MHz,波特率为1200b/s,串行口工作于方式1,查表9-2,得到T1的工作于方式2,初值为F3H,串行口SMOD位为0。2.T1初始化。包括设置T1的工作方式为2(编程TMOD寄存器),装载TL1和TH1初值F3H,并启动T1。指令如下:

MOVTMOD,#20H;T1工作于定时工作方式2

MOVTH1,#0f3H;装载TH1初值F3H

MOVTL1,#0f3H;装载TL1初值F3H

SETBTR1;启动T13.对串行口进行初始化。包括串行口的工作方式1(编程SCON寄存器和PCON寄存器中SMOD位)。

MOVPCON,#00H;设置SMOD位为0,由于PCON不能位寻址,所以采取字节方式进行设置。

MOVSCON,#50H;设置串行口的工作方式为1。4.串行口工作在中断方式,要进行中断初始化设置(编程IE、IP寄存器)。

SETBES;开串行口中断

SETBEA;开总中断串行口程序流程图

主程序流程图

串行中断子程序

串行口程序流程图

按键子程序

串行口程序清单

编写完整的程序清单如下,程序中30H单元为显示缓冲区,保存需显示的数据,40H为键值暂存单元,41H为列值暂存单元,42H为行值暂存单元,50H单元为接收数据暂存单元。ORG0000HAJMPMAINORG0023H;串行口中断入口地址AJMPCHKZD;跳到串行口中断程序ORG0050HMAIN:MOVTMOD,#20H;T1工作于定时工作方式2

MOVTH1,#0f3H;装载TH1初值F3H

MOVTL1,#0f3H;装载TL1初值F3H

SETBTR1;启动T1

MOVPCON,#00H;设置SMOD位为0

MOVSCON,#50H;设置串行口的工作方式为1

SETBES;开串行口中断

SETBEA;开总中断

MOV30H,#00H;显示缓冲区清0

MOV40H,#00H;键值暂存单元清0

MOV41H,#00H;列值暂存单元清0

MOV42H,#00H;行值暂存单元清0MOV50H,#00H;接收数据暂存单元清0MAINHUI:ACALLKEY;调用按键处理子程序

ACALLXIANSHI;调用显示子程序

AJMPMAINHUI;反复执行KEY:;键处理子程序

MOVP2,#11111000B;将列线全设为0,行线全设为1,数码管熄灭

MOVA,P2;P2口键盘状态送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,,行线状态

CJNEA,#00011000B,DYS;如果行线不全为1,表示有键按下

AJMPKEYHUI;无键按下,键处理子程序返回DYS:ACALLXIANSHI;延时去抖动

MOVA,P2;

ANLA,#00011000B;取出P2.3,P2.4位,行线状态

CJNEA,#00011000B,PANLIE

;如果行线不全为1,表示确实有键按下,跳去判断哪一列

AJMPKEYHUI;无键按下,表示只是干扰或抖动PANLIE:MOVP2,#11111110B;将第0列设为0,判断是否第0列

MOVA,P2;P2口键盘状态送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,行线状态

CJNEA,#00011000B,LIE0

;如果行线不全为1,表示该列有键按下,跳到LIE0处

MOVP2,#11111101B;判断是否第1列

MOVA,P2

ANLA,#00011000B

CJNEA,#00011000B,LIE1

MOVP2,#11111011B;判断是否第2列

MOVA,P2

ANLA,#00011000B

CJNEA,#00011000B,LIE2

AJMPKEYHUI

;所有列线无键按下,跳到键处理子程序返回LIE0:MOV41H,#00H;保存列值0

MOV42H,A;保存行值,此时A中为行线的状态,暂存到42H单元

AJMPDENDAI;跳到等待按键弹起LIE1:MOV41H,#01H;保存列值1

MOV42H,AAJMPDENDAILIE2:MOV41H,#02H;保存列值2

MOV42H,ADENDAI:ACALLXIANSHI;等待按键弹起,在等待时调用显示程序作延时,防止按键按下时数码管熄灭

MOVP2,#11111000B;将列线全设为0,行线全设为1,数码管熄灭

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,DENDAI

;行线不全为1,表示按键未弹起,继续等待

MOVA,42H;取出保存的行值,判具体是哪一行

JNBACC.3,HANG0JNBACC.4,HANG1AJMPKEYHUIHANG0:MOV42H,#00H;第0行,42H单元送0

AJMPQJZ;跳到求键值QJZ处HANG1:MOV42H,#01H;第1行,42H单元送1QJZ:MOVA,42H;求出按键数值,键值=行值×列数+列值

MOVB,#03H;B中为列数

MULAB;行值×列数

ADDA,41H;加列值

CJNEA,#05H,ZANCUN;判断是否功能键K6,不是跳到键值保存ZANCUN处

MOVA,40H;是K6键,将上一次按键的键值发送出去

MOVSBUF,AAJMPKEYHUIZANCUN:MOV40H,A;将键值送40H单元暂存

MOV30H,40H;将键值送显示单元显示

KEYHUI:RET;键处理子程序返回串行中断程序:CHKZD:JBRI,JS;判断是否接收中断

CLRTI;是发送中断,清除发送中断

AJMPCHZDH;跳到串行中断返回JS:MOVA,SBUF;取出接收到的数据

MOV50H,A;接收的数据放50H单元暂存起来以便处理

MOV30H,50H;接收的数据放30H单元显示

CLRRI;清除接收中断,准备下一次接收CHZDH:RETIXIANSHI:;显示子程序

SETBP2.7;第二个数码管亮

CLRP2.6;第一个数码管熄灭

MOVA,30H;取出显示数据

ANLA,#0FH;取出显示值的个位(即低四位)

ACALLCHABIAO;调用查表显示程序

ACALLDELAY;调用延时程序

SETBP2.6;第二个数码管灭

CLRP2.7;第一个数码管熄亮

MOVA,30H;取出显示数据

ANLA,#0F0H;取出显示值的十位(即高四位)

SWAPA;高、低四位对调,以便于查表取段码

ACALLCHABIAO;调用查表显示程序

ACALLDELAY;调用延时程序

RET;显示子程序返回CHABIAO:;查表子程序

MOVDPTR,#TABLE1;DPTR用于保存表地址

MOVCA,@A+DPTR;查表指令

MOVP1,A;将取得的段码送到P1口显示

RET;查表子程序返回DELAY:;二层循环延时子程序

MOVR7,#0FHLOOP2:MOVR6,#0FFHLOOP1:DJNZR6,LOOP1DJNZR7,LOOP2RETTABLE1:DB0COH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

9.5.2单片机与PC机串行通讯一、任务分析这个任务要求实现PC机和单片机之间的串行通讯,在PC机上用VB语言编写程序实现数据发送。在PC机界面上单击命令按钮将数据通过串口和RS-232转换芯片发送给单片机。单片机接收到数据后,将其在数码管上显示出来,设通讯格式为波特率1200b/s,八位数据位,不要校验位,一位停止位。二、RS-232C标准接口总线以及单片机与PC机串行通讯硬件设计

RS-232是EIA(美国电子工业协会)于1962年制定的标准。RS表示EIA的“推荐标准”,232为标准编号,1969年修订为RS-232C。RS-232C定义了串行设备之间进行通讯的物理接口标准,包含机械特性、功能特性、电气特性几方面的内容。1.机械特性完整的RS-232C接口规定使用25针连接器,连接器的尺寸及每个插针的排列位置都有明确的定义。但一般应用中并不一定用到RS-232C标准的全部信号线,所以在实际应用中常常使用9针连接器代替25针连接器。9针连接器引脚排列如右图所示。图中所示为阳头定义,通常连于计算机COM口。2.功能特性RS-232C9针接口的主要信号线的功能定义如表9-3所示插针序号信号名称功能信号方向(以PC机和单片机通讯为例)2TXD发送数据(串行输出)PC机将数据发送给单片机3RXD接收数据(串行接收)PC机接收单片机发送来的数据5SGND信号接地表9-3RS-232C9针接口主要信号线功能

3.电气特性

RS-232C采用负逻辑电平,规定DC(-3V~-15V)为逻辑1,DC(+3V~+15V)为逻辑0。而-3V~+3V为过渡区,不作定义,如下图所示。RS-232C的逻辑电平与常用的TTL和CMOS电平不兼容,因此要实现它们之间的通讯,必须外加电平转移电路,实现彼此之间的电平转换。一般RS-232C的通讯距离为几十米,传输速率小于20Kb/s。

4.RS-232C与TTL电平转换电路如上所述,PC机的RS-232接口与单片机的串行口不能直接对接,必须进行电平转换,常用的转换芯片有MAX232等,下面介绍MAX232芯片功能和接口电路。MAX232芯片是MAXIM公司生产的、包含二路接收器和驱动器的电平转换芯片。它通过内部的电源电压变换器,可以把单片机端的TTL电平信号变换为RS-232C接口的逻辑电平信号。所以采用该芯片的串行通讯电路只需单一的+5V电源供电,而无需象某些其它芯片一样,还需提供额外的±12V电源,其实用性更强,加之价格适中,硬件接口电路简单,所以被广泛使用。该芯片的引脚图如右图所示。

MAX232芯片的典型应用电路图如右图所示,内部包含+5V到+10V的倍压器,将+5V电压升压为+10V,还包含有+10V至-10V的电压反相器,将+10V的直流电压转换为-10V,从而有效的解决了由单电源+5V转换为±10V电源的要求,电路中电容C1、C2、C3、C4称为升压电容。电路中T1、T2二路将TTL/CMOS电平转换为RS-232电平,电路中R1、R2二路将RS-232电平转换为TTL/CMOS电平采用MAX232接口芯片组成的单片机与PC机串行通讯接口电路

三.单片机程序编写

波特率设为1200b/s,使用串口方式1进行通讯,程序中30H单元为显示缓冲区,保存需显示的数据,40H为键值暂存单元,41H为列值暂存单元,42H为行值暂存单元,50H单元为接收数据暂存单元。ORG0000HAJMPMAINORG0023H;串行口中断入口地址AJMPCHKZD;跳到串行口中断程序ORG0050HMAIN:MOVPCON,#00H;设置SMOD位为0

MOVTMOD,#20H;T1工作于定时工作方式2

MOVTH1,#0F3H;装载TH1初值F3H

MOVTL1,#0F3H;装载TL1初值F3HSETBTR1;启动T1

MOVSCON,#50H;设置串行口的工作方式为1

SETBES;开串行口中断

SETBEA;开总中断

MOV40H,#00H;接收数据缓冲单元BBB:ACALLKEY;调用按键处理子程序

MOV30H,40H;接收数据送显示缓冲单元

ACALLXIANSHI;调用显示子程序

AJMPBBB;反复工作KEY:;键处理子程序

MOVP2,#11111000B;将列线全设为0,行线全设为1,数码管熄灭

MOVA,P2;P2口键盘状态送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,行线状态

CJNEA,#00011000B,DYS;如果行线不全为1,表示有键按下

AJMPKEYHUI;无键按下,键处理子程序返回DYS:ACALLXIANSHI;延时去抖动

MOVA,P2

ANLA,#00011000B;取出P2.3,P2.4位,行线状态

CJNEA,#00011000B,PANLIE

;如果行线不全为1,表示确实有键按下,跳去判断哪一列

AJMPKEYHUI;无键按下,键处理子程序返回PANLIE:MOVP2,#11111110B;将第0列设为0,判断是否第0列

MOVA,P2;P2口键盘状态送入累加器A

ANLA,#00011000B;取出P2.3,P2.4位,行线状态

CJNEA,#00011000B,LIE0MOVP2,#11111101B;判断是否第1列

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,LIE1MOVP2,#11111011B;判断是否第2列

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,LIE2AJMPKEYHUI;所有列线无键按下,跳到键处理子程序返回LIE0:MOV41H,#00H;保存列值0

MOV42H,A;保存行值,

AJMPDENDAI;跳到等待按键弹起LIE1:MOV41H,#01H;保存列值1

MOV42H,AAJMPDENDAILIE2:MOV41H,#02H;保存列值2

MOV42H,ADENDAI:ACALLXIANSHI;等待按键弹起,在等待时调用显示程序作延时,防止按键按下时数码管熄灭

MOVP2,#11111000B;将列线全设为0,行线全设为1,数码管熄灭

MOVA,P2ANLA,#00011000BCJNEA,#00011000B,DENDAI;行线不全为1,表示按键未弹起

MOVA,42H;取出保存的行值,判具体是哪一行

JNBACC.3,HANG0JNBACC.4,HANG1AJMPKEYHUIHANG0:MOV42H,#00H;第0行,42H单元送0

AJMPQJZ;跳到求键值QJZ处HANG1:MOV42H,#01H;第1行,42H单元送1QJZ:MOVA,42H;求出按键数值,键值=行值×列数+列值

MOVB,#03H;B中为列数

MULAB;行值×列数

ADDA,41H;加列值

CJNEA,#05H,ZANCUN;判断是否功能键K6,不是跳到键值保存ZANCUN处

MOVA,40H;是K6键,将上一次按键的键值发送出去

MOVSBUF,AAJMPKEYHUIZANCUN:MOV40H,A;将键值送40H单元暂存

MOV30H,40H;将键值送显示单元显示

KEYHUI:RET;键处理子程序返回串行中断程序CHKZD:JBRI,JS;判断是否接收中断

CLRTI;是发送中断,清除发送中断

AJMPCHZDH;跳到串行中断返回JS:MOVA,SBUF;取出接收到的数据

CLRC;清除借位标志

SUBBA,#30H;将接收的ASCII码恢复为数字,因为数字的ASCII码和数字之间相差30H,即数字=数字的ASCII码-30H

MOV50H,A;接收的数字送40H单元

CHZDH:CLRRI;清除接收标志

RETI;键处理子程序返回XIANSHI:;显示子程序

SETBP2.7;第二个数码管亮

CLRP2.6;第一个数码管熄灭

MOVA,30H;取出显示数据

ANLA,#0FH;取出显示值的个位(即低四位)

ACALLCHABIAO;调用查表显示程序

ACALLDELAY;调用延时程序

SETBP2.6;第二个数码管灭

CLRP2.7;第一个数码管熄亮

MOVA,30H;取出显示数据

ANLA,#0F0H;取出显示值的十位(即高四位)

SWAPA;高、低四位对调,以便于查表取段码

ACALL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论