单片机设计技术:第7章 单片机IO口扩展及应用_第1页
单片机设计技术:第7章 单片机IO口扩展及应用_第2页
单片机设计技术:第7章 单片机IO口扩展及应用_第3页
单片机设计技术:第7章 单片机IO口扩展及应用_第4页
单片机设计技术:第7章 单片机IO口扩展及应用_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、第七章 单片机I/O口扩展及应用 7.1 I/O口扩展概述 7.1.2 I/O口扩展的原因 MCS-51系列单片机共有四个并行I/O口,分别是P0、P1、P2和P3。其中P0口一般作地址线的低八位和数据线使用;P2口作地址线的高八位使用;P3是一个双功能口,其第二功能是一些很重要的控制信号,所以P3一般使用其第二功能。这样供用户使用的I/O口就只剩下P1口了。另外,这些I/O口没有状态寄存和命令寄存的功能,因此难以满足复杂的I/O操作要求。 7.1.3 I/O口的编址技术 用户可以通过对I/O口进行读和写操作来完成数据的输入和输出。例如:P0口的地址为80H。用户可以使用MOV指令对P0口进行

2、写操作。 MOV P0, A 7.1.4 单片机I/O控制方式 1. 无条件传送方式 (P173)2. 查询方式3. 中断方式 中断方式大大提高了单片机系统的工作效率,所以在单片机中被广泛应用。 7.2 简单I/O口扩展 7.2.1 简单输入口扩展1. 两个输入口扩展 简单输入口扩展使用的集成芯片,比较典型的如74LS244芯片。 74LS244为2个4位三态缓冲器(三态输出),CS1(CE1)、CS2(CE2)为低电平有效的使能端。 多输入口扩展 使用多片74LS244实现多个(例如5个)输入口扩展的电路连接。7.2.2 简单输出口扩展1. 简单输出口扩展使用的典型芯片 简单输出口扩展通常使

3、用74LS377芯片,该芯片是一个具有“使能”控制端的锁存器。其信号引脚如图7.4所示。其中:1D8D为8位数据输入线,1Q8Q为8位数据输出线,CK为时钟信号上升沿数据锁存,为使能控制信号,低电平有效。VCC为5V电源。74LS377的逻辑电路如图7.5所示。 图7.4 74LS377引脚图 图7.5 74LS377的逻辑电路 由逻辑电路可知,74LS377是由D触发器组成的,D触发器在上升沿输入数据,即在时钟信号(CK)由低电平跳变为高电平时,数据进入锁存器。其功能表如表7-1所示。 输出口扩展连接:扩展单输出口只需要一片74LS377。 CkDQ1XXQ0 0 110 00X0XQ0 表

4、7-1 74LS377功能表 7.3.3 8255的工作方式8255共有三种工作方式,这些工作方式可用软件编程来指定。1. 工作方式0,又称基本输入输出方式2. 工作方式1,又称选通输入输出方式 在这种方式下,A口和B口仍作为数据的输出或输入口而同时要利用C口的某些位作为控制和状态信号,从而实现这种工作方式。 (1)方式1下,A口和B口均为输出 各条控制引线的定义如图7.10所示。 各控制信号的含义如下: : 输出缓冲器满信号,低电平有效。用来告诉外设,在规定的接口上CPU已输出一个有效的数据,外设可以从该口取走此数据。 :外设响应信号,低电平有效。用来通知接口外设已经将数据接收,并使 。 I

5、NTR:中断请求信号,高电平有效。当外设已从接口取走数据,口的缓冲器变空,且接口允许中断时,INTR有效。即, 且允许中断,则INTR=1。 (2)方式1下,A口和B口均为输入 这种情况和两口均为输出类似,各条控制引线的定义如图7.11所示。 图7.10 A口和B口作输出口时,C口提供的控制引线 图7.11 A口和B口作输入口时,C口提供的控制引线 各控制信号的含义如下: :输入选通信号,低电平有效。它由外设提供,利用该信号可以将外设数据锁存于8255的口锁存器中。 IBF:输入缓冲器满信号,高电平有效。当它有效时,表示已有一个有效的外设数据锁存于8255的口锁存器中。可用此信号通知外设数据已

6、锁存于接口中,尚未被CPU读走,暂不能向接口输入数据。 INTR:中断请求信号,高电平有效。当外设将数据锁存于接口之中,且又允许中断请求发生时,就会产生中断请求。2. 工作方式2,又称双向输入输出方式I/O操作 只有A口才能工作在方式2。A口工作方式2时要利用C口的5条线才能实现。此时,B口只能工作在方式0或者方式1下,而C口剩余的3条线可作为输入线、输出线或B口方式1之下的控制线。C口提供的控制线如图7.12所示。 图7.12 工作方式2时,C口提供的控制线 7.3.4 8255的控制字及初始化程序 8255是编程接口芯片,通过控制字(控制寄存器)对其端口的工作方式和C口各位的状态进行设置。

7、8255共有两个控制字,一个是工作方式控制字,另一个是C口置位/复位控制字。这两个控制字共用一个地址,通过最高位来选择使用那个控制字。1. 工作方式控制字 主要功能:确定8255接口的工作方式及数据的传送方向。各位的控制功能如图7.13所示。 图7.13 8255工作方式控制字 对工作方式控制字作如下说明: l A口可工作在方式0、方式1和方式2,B口可工作在方式0和方式1 l 在方式1或方式2下,对C口的定义(输入或输出)不影响作为控制信号使用的C口各位功能 l 最高位是标志位,作为方式控制字使用时,其值固定为1。 2. 置位/复位控制字 在某些情况下,C口用来定义控制信号和状态信号,因此C

8、口的每一位都可以 进行置位或复位。对C口的置位或复位是由置位/复位控制字进行的。各位的功能如图7.14所示。其中,最高位必须固定为“0”。图7.14 8255置位/复位控制字 3. 8255初始化 8255初始化就是向控制寄存器写入工作方式控制字和C口置位/复位控制字。例如,对8255各口作如下设置:A口方式0输入,B口方式1输出,C口高位部分为输出,低位部分为输入。设8255的扩展电路如图7.8所示,则控制寄存器的地址为7FFFH。按各口的设置要求,工作方式控制字为10010101,即95H。所以初始化程序应为:MOV DPTR, #7FFFHMOV A, #95HMOVX DPTR, A7

9、.3.5 8255的应用举例1. 光二极管显示器的工作原理 LED显示器中的发光二极管共有两种连接方法,一种是共阴极连接,另一种共阳极连接。其连接图如图7.15(b)所示。 图7.15 七段LED显示器 使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。用LED显示器显示16进制数的编码已列在表7-4所示。 为了实现LED显示器的动态扫描除了要给显示器提供段码(字形编码)的输入之外,还要对显示器加位的控制(控制LED显示器亮灭),这就是通常所说的位控和段控。 表7-4 L

10、ED显示器16进制数编码 2. 应用举例具体要求: l 6个LED采用共阴极连接 l 79H7EH分别存放6位显示器的显示数据(09) l 8255的A口接LED显示器位控 l 8255的B口接LED显示器段控 (1) 电路设计 经分析知:8255的A口、B口、C口、控制寄存器的地址分别为7FFCH、7FFDH、7FFEH、7FFFH。(1) 编写程序 MOVDPTR,#7FFFHMOVR0, #79HMOVA,#80HMOVXDPTR, A;写控制字MOVR3, #0FEHMOVA, R3LD:MOVDPTR, #7FFCHMOVXDPTR, A;最左边灯亮INCDPTR;指向B口MOVA,

11、 R0;取显示数据ADDA, #13HMOVCA, A+PC;查数据编码MOVXDPTR, A;写B口ACALLDELAY;延时INCR0MOVA, R3JNBACC.5, EDRLAMOVR3, AAJMPLDLEDTAB:DB3FHDB06HDB5BHDB4FHDB66HDB6DHDB7DHDB07HDB7FHDELAY:MOVR7, #02HMOVR6, #FFHLOOP:DJNZR6, LOOPDJNZR7, DELAY (4) 在程序1和程序3中都使用了一段相同的延时子程序DELAY,这种供其它程序反复使用的程序或程序段称为子程序。关于子程序的详细介绍参见7.4.6节。7.4.1 概

12、 述 单片机程序设计语言还有两类:机器语言和高级语言。 机器语言(Machine Language)是指直接用机器码编写程序、能够为计算机直接执行的机器级语言。机器码是一串由二进制代码“0”和“1”组成的二进制数据,其执行速度快,但是可读性极差。机器语言一般只在简单的开发装置中使用,程序的设计、输入、修改和调试都很麻烦。7.4 汇编语言程序设计 汇编语言(Assembly Language)是指用指令助记符代替机器码的编程语言。汇编语言程序结构简单,执行速度快,程序易优化,编译后占用存储空间小,是单片机应用系统开发中最常用的程序设计语言。汇编语言的缺点是可读性比较差,只有熟悉单片机的指令系统,

13、并具有一定的程序设计经验,才能研制出功能复杂的应用程序,实训4中的3个程序都是用汇编语言设计的。 高级语言(High-Level Language)是在汇编语言的基础上用自然语言的语句来编写程序,例如PL/M-51、Franklin C51、MBASIC 51等,程序可读性强,通用性好,适用于不熟悉单片机指令系统的的用户。 高级语言编写程序的缺点是实时性不高,结构不紧凑,编译后占用存储空间比较大,这一点在存储器有限的单片机应用系统中没有优势。 目前,大多数用户仍然使用汇编语言进行单片机应用系统的软件设计,本章将介绍MCS-51单片机汇编语言的程序设计方法。 单片机汇编语言程序设计的基本步骤如下

14、: (1) 题意分析。熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法等。 (2) 画出程序流程图。编写较复杂的程序,画出程序流程图是十分必要的。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。 (3) 分配内存工作区及有关端口地址。分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。 (4) 编制汇编源程序。 (5) 仿真、调试程序。 (6) 固化程序。7.4.2 简单程序设计 简单程序也就是顺序程序,实训4中的程序1就是顺序程序结构,它是

15、最简单、最基本的程序结构,其特点是按指令的排列顺序一条条地执行,直到全部指令执行完毕为止。不管多么复杂的程序,总是由若干顺序程序段所组成的。本节通过实例介绍简单程序的设计方法。 例7.4.1 4字节(双字)加法。将内部RAM 30H开始的4个单元中存放的4字节十六进制数和内部RAM 40H单元开始的4个单元中存放的4字节十六进制数相加,结果存放到40H开始的单元中。图7.4.5 例7.4.1题意分析示意图 (1) 题意分析。 题目的要求如图7.4.5所示。 ORG0000HMOVA,30HADD A,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDCA,41HMOV41H,A

16、;第二字节加法并送结果(2) 汇编语言源程序。按照双字节加法的思路,实现4字节加法的源程序如下: MOVA,32HADDC A,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,进位 位在CY中END 显然,上面程序中,每一步加法的步骤很相似,因此我们可以采用循环的方法来编程,使得源程序更加简洁,结构更加紧凑。用循环方法编制的源程序见习题7.4.3题。 例7.4.2 数据拼拆程序。将内部RAM 30H单元中存放的BCD码十进制数拆开并变成相应的ASCII码,分别存放到31H和32H单元中。 (1) 题意分析。 题目要求如图7.

17、4.6所示。图7.4.6 例7.4.2题意分析示意图 本题中,首先必须将两个数拆开,然后再拼装成两个ASCII码。数字与ASCII码之间的关系是:高4位为0011H,低4位即为该数字的8421码。 (2) 汇编语言源程序。源程序如下: ORG 0000H MOV R0,#30H MOV A,#30H XCHD A,R0;A的低4位与30H单元的低4位 交换 MOV 32H,A ;A中的数值为低位的ASCII码 MOV A,R0 SWAPA;将高位数据换到低位 ORL A,#30H ;与30H拼装成ASCII码 MOV 31H,A END7.4.3 分支程序设计 7.4.3.1 分支程序实例 1

18、两分支程序设计 例7.4.3 两个无符号数比较(两分支)。内部RAM的20H单元和30H单元各存放了一个8位无符号数,请比较这两个数的大小,比较结果显示在实训的实验板上: 若(20H)(30H),则P1.0管脚连接的LED发光; 若(20H)(30H),则P1.1管脚连接的LED发光。 (1) 题意分析。 本例是典型的分支程序,根据两个无符号数的比较结果(判断条件),程序可以选择两个流向之中的某一个,分别点亮相应的LED。 比较两个无符号数常用的方法是将两个数相减,然后判断有否借位CY。若CY=0,无借位,则XY;若CY=1,有借位,则XY。程序的流程图如图7.4.7所示。 图7.4.7 两数

19、比较流程图 (2) 汇编语言源程序。 源程序如下: X DATA 20H ;数据地址赋值伪指令DATA Y DATA 30H ORG0000H MOV A, X ;(X) A CLRC ;CY=0 SUBBA,Y ;带借位减法,A- (Y)-CYA JCL1 ;CY=1,转移到L1CLRP1.0 ;CY=0,(20H)(30H),点亮P1.0连接的LED SJMPFINISH ;直接跳转到结束等待 L1:CLRP1.1 ;(20H)(30H),则P1.1管脚连接的LED发光; 若(20H)(30H),则P1.2管脚连接的LED发光。 (1) 题意分析。 有符号数在计算机中的表示方式与无符号数是

20、不相同的:正数以原码形式表示,负数以补码形式表示,8位二进制数的补码所能表示的数值范围为+127-128。 计算机本身无法区分一串二进制码组成的数字是有符号数或无符号数,也无法区分它是程序指令还是一个数据。编程员必须对程序中出现的每一个数据的含义非常清楚,并按此选择相应的操作。例如,数据FEH看作无符号数其值为254,看作有符号数为-2。 比较两个有符号数X和Y大小要比无符号数麻烦得多。这里提供一种比较思路:先判别两个有符号数X和Y的符号,如果X、Y两数符号相反,则非负数大;如果X、Y两数符号相同,将两数相减,然后根据借位标志CY进行判断。这一比较过程如图7.4.8所示。图7.4.8 比较两个有符号数X、Y的流程图 (2) 汇编语

温馨提示

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

评论

0/150

提交评论