280 likes | 434 Views
第四章 单片机的 I/O 扩展. 4.1 简单并行 I/P 口的扩展 4.2 可编程并行 I/P 口的扩展. 4.1 简单并行 I/P 口的扩展. 4.1.1 扩展概述 1. 单片机 I/O 口扩展方法 ( 1 )总线扩展方法 采用总线扩展的方法是将扩展的并行 I/O 口芯片连接到 MCS-51 单片机的总线上,即数据总线使用 P0 口,地址总线使用 P2 和 P0 口,控制总线使用部分 P3 口。 这种扩展方法不影响总线上其他扩展芯片的连接,在 MCS-51 单片机应用系统的 I/O 扩展中被广泛采用。
E N D
第四章 单片机的I/O扩展 4.1 简单并行I/P口的扩展 4.2 可编程并行I/P口的扩展
4.1 简单并行I/P口的扩展 • 4.1.1 扩展概述 • 1.单片机I/O口扩展方法 • (1)总线扩展方法 • 采用总线扩展的方法是将扩展的并行I/O口芯片连接到 MCS-51单片机的总线上,即数据总线使用P0口,地址总线使用P2和P0口,控制总线使用部分P3口。 • 这种扩展方法不影响总线上其他扩展芯片的连接,在MCS-51单片机应用系统的I/O扩展中被广泛采用。 • (2)串行口扩展方法 • MCS-51单片机串行口工作在方式0时,提供一种I/O扩展方法。
串行口方式 0是移位寄存器工作方式,可借助外接串入并出的移位寄存器扩展并行输出口,也可通过外接并入串出的移位寄存器扩展并行输入口。 • 这种扩展方法不占用并行总线且可以扩展多个并行I/O。由于采用串行输入输出的方法,故数据传输速度较慢。 • 2.I/O扩展常用芯片 • (1)TTL/CMOS锁存器/缓冲器芯片: 如74LS377、74LS374、74LS373、74LS273、74LS244、74LS245等; • (2)通用可编程I/O接口芯片: 如8255、8155、8729等; • (3)可编程阵列: 如GAL16V8、GAL20V8等。 • 3.I/O扩展中应注意的几个问题 • (1)访问扩展I/O的方法与访问外部数据存储器完全相同,使用相同的指令。
(2)扩展多片I/O芯片或多个I/O设备时,注意总线的驱动能力问题; • (3)扩展I/O口的目的是为了单片机与外部设备进行信息交换而设置的一个输入输出通道,I/O口最终与外设相连。 • (4)在软件设计时,I/O口对应初始状态设置、工作方式选择要与外接设备相匹配。 • 4.1.2 扩展简单并行接口 • 1.扩展并行输出口 • (1)用74LS377扩展并行输出口 • 74LS377 是带有输出允许端的8D锁存器,有8个输入端口、8个输出端口、1个时钟输入端 CLK(上升沿有效)和1个允许控制端OE,其功能见表9-1。(见教材P190页) • 如图9-1所示,OE与P2.7相连,74LS377的地址为7FFFH; • 若与P2.0相连,则地址相应为0EFFH。
【例4.1】若以图9-1为接口电路,将片内RAM地址为50H单元的数据通过该电路输出。程序清单如下:【例4.1】若以图9-1为接口电路,将片内RAM地址为50H单元的数据通过该电路输出。程序清单如下: • MOV DPTR,#7FFFH ;数据指针指向74LS377 • MOV A,50H ;输出的50H单元数据送累加器A • MOVX @DPTR,A ;P0口将数据通过74LS377输出 • (2)用74LS374扩展并行输出口 图9-1 MCS-51扩展输出口74LS377
74LS374是具有三态输出的8D边沿触发器,其功能与74LS377相似,见表9-2。(见教材P190页) • 74LS374与单片机接口电路如图9-2所示,74LS374的地址为7FFFH。 • 74LS374具有较强的驱动能力,输出低电平电流IOL最大可达24mA,是74LS377的3倍。 • 在有较强驱动能力要求场合,可选用74LS374作为并行口扩展器件。 图9-2 74LS374与单片机接口电路
2.扩展并行输入口 • 并行输入扩展口比较简单,只需采用8位缓冲器即可。 • 常用的缓冲器有74LS244,其功能见表9-3。(见教材P191页) • 74LS244为单向总线缓冲器,只能一个方向传输数据。 • 并行输入接口与单片机连接如图9-3所示。 图9-3 扩展74LS244并行输入口
【例4.2】如图9-3所示,扩展并行输入口,将输入口中的8位数据送片内51H单元。程序清单如下:【例4.2】如图9-3所示,扩展并行输入口,将输入口中的8位数据送片内51H单元。程序清单如下: • MOV DPTR,#7FFFH ;数据指针指向74LS244 • MOVX A,@DPTR ;外部数据经过74LS244送入累加器A • MOV 51H,A ;数据送51H单元保存 • 将上述输入输出电路合并即如图9-4所示。 • 在图9-4的输入输出接口电路中,输入采用三态门74HC244,输出采用8D触发器(锁存器)74HC374。P0口为双向数据线,既能从74HC244输入数据,又能将数据通过74HC374输出。输出控制信号由P2.0和WR合成,当两者同时为低电平时,或门输出0,将P0口数据锁存到74HC374,其输出控制着发光二极管LED。当某线输出为0时,该线上的LED发光。 • 输入控制信号由P2.0和RD合成,当二者同时为低电平时,或门输出为0,选通74HC244,将外部信息输入到总线。
与74HC244相连的按键开关没有按下时,输入全为1;若按下某键则所在的线输入为0。 • 可见,输入输出都是在P2.0为0时有效,因此它们的口地址为0FEFFH,即占用相同的地址空间。但是由于分别用RD和WR信号控制,因此不会发生冲突。 图9-4 合并输入输出口
正如前面所提到的,扩展I/O口和扩展外部RAM一样,因此访问外部I/O口就像访问外部 RAM一样,用的是 MOVX类指令。 • 对于图9-4,如果需要实现的功能是按下任意一个按键,对应的LED发光,则程序如下: • LOOP: MOV DPTR,#0FEFFH ;数据指针指向扩展I/O地址 • MOVX A,@DPTR ;从74HC244读入数据,检测按键 • MOVX @DPTR,A ;向74HC374输出数据,驱动LED • SJMP LOOP ;循环 4.2 可编程并行I/O口的扩展 • 4.2.1 RAM/IO扩展芯片8155 • (1)8155的结构及引脚功能
图9-5中涉及的引脚符号的含义和功能如下: • AD0~AD7: 地址数据线; • IO/M: IO/RAM选择信号端,输入高电平选择I/O操作,低电平选择访问片内RAM; • CE: 片选信号输入端,低电平有效; • RD: 读选通输入端,低电平有效; • WR: 写选通输入端,低电平有效; • TI: 计数器计数脉冲输入端; • TO:计数器的输出信号端,输出波形由内部定时工作方式决定; • PA0~PA7: 8位并行I/O口; • PB0~PB7: 8位并行I/O口; • PC0~PC5: 6位并行I/O口; • ALE: 地址锁存信号输入端,其下降沿时,锁存AD0~AD7上的地址。
RESET: 复位输入引脚,高电平复位。 • Vcc: 电源+5V; • Vss: 接地。 • (2)8155的RAM和I/O地址编码 • 8155的I/O端口及RAM地址在单片机应用系统中与外部数据存储器是统一编址的,其控制操作见表 9-4,对应I/O口寄存器的地址编码见表 9-5。(见教材P193页) • (3)命令/状态寄存器 • 8155的命令/状态寄存器物理上只有一个端口地址(见表9-5)。 • (见教材P193页) • 对该口写操作,命令字被写入命令寄存器; • 对该口读操作,则从状态寄存器读出状态字。
8155所提供的每个I/O口和定时器都是可编程的。 • I/O的工作方式选择,定时器/计数器的工作控制都是通过对8155内部命令寄存器设定命令控制字的方式来实现的,通过对状态字的读取来判别它们的工作状态。 • 命令/状态寄存器共用一个口地址,通过读/写信号加以区分。命令字寄存器只能写不能读,状态寄存器只能读不能写。 • 8155命令字格式见表9-6; 8155状态字格式见表9-7。(见教材P194页) • 信号说明: • INTRA、INTRB: 中断请求输出线,高电平有效。 • STBA、STBB: 设备选通信号输入线,低电平有效。 • BFA、BFB: 口缓冲器满信号,高电平有效。 • (4)定时器/计数器的扩展
8155片内有一个14位的减法计数器,可对输入脉冲进行减法计数,它可以在0002H~3FFFH之间选择计数器初值。 • 外部有两个定时器/计数器引脚端TI、TO,TI为定时器时钟输入,由外部输入时钟脉冲,时钟脉冲频率最高可达4MHz。 • TO为定时器输出,输出各种信号脉冲波形。 • 定时器的高6位、低8位计数单元和定时输出方式由8155内部两个寄存器确定。这两个寄存器格式如下: M2 M1 T13 T12 T11 T10 T9 T8 T7 T6 T5 T4 T3 T2 T1 T0 定时器方式 计数长度高6位 计数长度低8位 • 高字节寄存器的最高两位M2、M1所对应的定时器/计数器的工作方式见表9-8。(见教材P195页)
对定时器进行编程时,首先将计数初值及定时方式送入定时器的高、低字节寄存器,计数初值不要超过范围。计数器的启停由命令字的最高两位控制,任何时刻都可以置定时器的初值和工作方式。然后必须将启动命令写入命令寄存器,即使计数器已经计数,在写入启动命令后仍可改变定时器的工作方式,8155复位后不预置定时器方式和计数初值。 • (5)接口与编程 • ①硬件连接。 • 8155可以直接与MCS-51单片机连接,不需要任何外加逻辑。扩展一片8155系统将增加256B片外RAM,22位I/O口线及1个14位减法计数器。 • MCS-51与8155的连接方法如图9-6所示。 • P0口不需要加锁存器,可以直接与8155的 AD0~AD7相连,它既是低8位地址线也是8位数据线。8155的锁存信号ALE直接引自单片机ALE输出,用以在内部锁存地址。
CE及IO/M与MCS-51的连接方式决定了8155的地址范围: • RAM字节地址范围: 7E00H~7EFFH • 命令/状态寄存器: 7F00H PA口: 7F01H 图9-6 MCS-51与8155的一种接口逻辑
PB口: 7F02H • PC口: 7F03H • 定时器低8位寄存器: 7F04H • 定时器高8位寄存器: 7F05H • ②程序设计。 • 图9-6接口电路中,将单片机片内RAM50H~5FH单元的内容送8155片内的50H~5FH单元,设定8155的工作方式为: A口基本输入方式,B口基本输出方式,C口输入方式,定时器作方波发生器,对输入脉冲50分频。 • 程序清单如下: • D8155: MOV R0,50H ;将源数据单元首地址送寄存器R0中 • MOV DPTR,#7E50H ;数据指针指向8155内部RAM单元 • LP: MOV A,@R0 ;数据送累加器A
MOVX @DPTR,A ;数据从累加器A送8155内部RAM单元 • INC DPTR ;指向下一个8155内部RAM单元 • INC R0 ;指向下一个CPU内部RAM单元 • CJNE R0,#60H,LP ;数据未传送完继续 • MOV DPTR,#7F04H ;指向定时器低8位 • MOV A,#32H ;分频系数32H(即50) • MOVX @DPTR,A ;低8位初值装入 • INC DPTR ;指向定时器高8位 • MOV A,#40H ;设定时器方式为连续方波(40H=01000000B) • MOVX @DPTR,A ;定时器/计数器方式及高6位初值装入 • MOV DPTR,#7F00H ;数据指针指向控制字寄存器 • MOV A,#0C2H ;设定A,B口方式,并启动定时器 • (0C2H=11000010B)
MOVX @DPTR,A • RET ;程序返回 • 程序中,定时器2个字节的内容二进制形是: 0100000000110010B, • 最高2位01的作用是设定定时器输出方式: 连续方波; • 其余14位是计数初值0032H=50(十进制)。 • 向控制寄存器写入的命令字的内容是11000010B,对应的十六进制形式是0C2H,其意义是: 最高2位11的作用是启动计数器,最低位D0=0设PA为输入,D1=1设PB为输出。D3D2=00设PA、PB为基本I/O,PC为输入。 • 4.2.2 可编程I/O口8255的扩展 • 1.可编程并行口8255A • (1)8255A的结构及引脚功能 • 8255A是Intel公司生产的通用可编程并行接口电路,广泛应用于单片机扩展并行I/O 口。它具有3个8位并行口PA、PB和PC。
8255A的引脚及逻辑框图如图9-7所示。 图9-7 8255A引脚及逻辑框图
8255A的引脚功能如下: • D7~D0: 双向三态数据总线,通常与CPU数据总线相连; • PA: 8位I/O口; • PB: 8位I/O口; • PC: 8位I/O口; • CS: 片选信号输入端,低电平有效; • RD: 读选通输入端,低电平有效; • WR: 写选通输入端,低电平有效; • RESET: 复位输入引脚,高电平有效,复位后PA、PB、PC口均为输入; • Vcc: 电源+5V; • GND: 接地; • A1、A0: 端口地址输入线,通过地址组合选择8255A内部寄存器:
0 0 PA口寄存器 • 0 1 PB口寄存器 • 1 0 PC口寄存器 • 1 1 控制寄存器 • 从图9-7中可以看出,8255A的三个并行口被分成2组: • A和B组,PC口的8位被分为上C口(PC7~PC4)和下C口(PC3~PC0),分别属于A组和B组。 • (2)8255A的操作方式 • ①读/写控制逻辑操作选择 • 主要通过单片机输出的地址线A1、A0选择端口,CS选中芯片,WR与RD选择数据流向。8255口的操作状态见表9-9。(见教材P198页) • ②工作方式选择
8255A有三种工作方式: • ● 方式0(基本输入/输出方式)。 • ● 方式1(选通输入/输出方式)。 • ● 方式2(双向I/O口方式)。 • 8255A在不同的工作方式下,各口线的功能见表9-10。(教材P199页) • 各种工作方式下PC口引脚符号含义如下: • ● STB: 设备选通信号输入线,低电平有效。 • ● IBF: 端口锁存器满标志输出线,与设备相连。 • ● INTR: 中断请求信号线,高电平有效,送CPU申请中断,对MCS-51来说,应使该信号反相后接CPU的外部中断源输入端。 • ● OBF: 输出缓存器满状态标志输出线,OBF为低电平表示CPU已将数据写入端口。
● ACK:设备响应信号输入线,设备通过此引脚通知端口数据已取走. • ③8255A的控制字 • 8255A的初始化编程是通过对控制口写入控制字的方式实现的,控制字有两个: 一是方式控制字,另一个是PC口置位/复位控制字。 • 方式控制字。控制8255A三个端口的工作方式,特征是最高位为1。 • 例如,将0B1H写入8255A控制寄存器后,8255A被编程设定为A口为方式1输入,B口为方式0输出,PC7~PC4为输出,PC3~PC0为输入。 • 8255A方式控制字格式见表9-11: (见教材P200页) • 8255A PC口置位/复位字格式见表9-12: (见教材P200页) • C口置位/复位控制字。C口具有位操作能力,把一个置位/复位控制字写入8255A的控制寄存器,就能把C口的某一位置1或清0,而不影响其他位的状态,它的特征是最高位为0。 • 若将控制字0DH写入8255A控制寄存器,则将PC6置1。
(3)接口与编程方法 • ①硬件连接 • 由于8255A内部已有数据总线驱动器,可以直接与 MCS-51单片机总线相连接。图9-8是8255A与MCS-51单片机的一种连接方法。 图9-8 8255A与MCS-51单片机的一种连接方法
通常8255A应与MCS-51系统同步复位,所以复位线接在一起了。 • ②程序设计 • 如图9-8所示,假设8255A的PA接一组8只状态指示灯,PB 接一组8个开关,现需将开关闭合的状态通过指示灯显示出来,编写相应程序。 • 通过分析可知: 8255A的PA、PB 均为基本输入输出方式,即A口方式0输出,B口方式0输入,C口未用(方式字可以取0,输出)。 • 则8255A的方式字为82H,初始化及输入输出如下。 • 程序清单如下: • DSP8255: MOV DPTR,#0003H ;数据指针指向8255A控制口 • MOV A,#82H ;控制字送累加器A • MOVX @DPTR,A ;控制字送8255A控制口 • MOV DPTR,#0001H ;数据指针指向8255A的B口
MOVX A,@DPTR ;将B口开关状态读入累加器A • MOV DPTR,#0000H ;数据指针指向8255A的A口 • MOVX @DPTR,A ;开关状态送A口指示灯显示 • SJMP DSP8255 ;返回