第九章MCS-51 接口扩展技术§9.1 微型机I/O接口技术概述所谓I/O即计算机数据的输入输出。
计算机系统的数据输入输出有两类数据传送操作:1.CPU和存储器之间的传送操作,如前章所述。
2.CPU与外围设备接口的数据输入输出操作:由于外部设备情况复杂,例如速度的快慢差异很大,外围设备的数据信号格式各不相同,有电流信号、电压信号、数字信号、脉冲信号等。
这些复杂的情况使CPU无法以固定的时序与外围设备同步协调工作,这就需要用一定的接口电路连接CPU与外围设备,使CPU 与外围设备之间的数据输入输出能有效地进行。
一.I/O接口电路的作用:1.速度协调:CPU的速度很快,外围设备的速度较慢。
输入:当外围设备数据准备好后,CPU再执行输入操作,由I/O 接口电路提供准备好信号再输入。
输出:需当外围设备准备好才能执行输出操作,由I/O接口电路将外围设备的准备状态传送给CPU。
I/O接口电路充当了协调CPU与外围设备速度差异的角色。
2.输出接口电路应具有锁存功能:CPU向外输出数据是通过P0口数据通道输出的,P0口是分时传送低8位地址和数据信息的复用口,数据在数据总线上停留的时间很短,因此输出接口应将该输出数据锁存起来,等待这一数据被外围设备接收。
3.输入接口电路应具备三态缓冲功能:外围设备向CPU输入数据仍需通过P0口数据通道,在该数据通道上挂着多个数据源,除了多种输入接口外,所有存储器的数据线也与P0口数据通道相连,CPU的一次输入操作只允许一个数据源的数据线与数据通道相连,其余数据源的数据线必须以高阻与数据通道隔离。
所谓三态即指高电平、低电平、高阻三种状态。
4.数据转换:CPU传送的信号必须是数字信号,并且是并行信号,外围设备的信号与此不符则需通过接口电路转换。
例如模拟信号与数字信号、串行与并行之间的转换等。
§9.2 I/O接口的扩展一.单片机I/O口的直接应用,用P1口直接输入输出单片机的P1口可直接作为8条输入输出线使用。
+5V由上图,P1口的高4位是输入线,低4位作为输出线用其高电平可点亮接在该线的发光二极管,P1.7~P1.4的开关依次对应P1.3~P1.0的灯,哪个开关合上,则其对应的灯点亮。
程序如下:ORG 0000HMAIN:MOV P1 , #0F0H ;置P1口高4位为输入,灭4个灯MOV A , P1 ;输入开关状态,合上者输入为0CPL AANL A , #0F0H ;求反后切取高4位SWAP A ;移入低4位MOV P1 , A ;点亮对应的发光二极管LJMP MAINEND二.用TTL芯片扩展简单的I/O口采用TTL电路或CMOS电路的锁存器、三态门等通过P0口常可构成各类简单的输入输出接口,它电路简单、成本低、配置灵活方便。
1.扩展简单的8位输出口扩展输出口选择芯片要点是必须具有锁存功能。
这是因为输出的数据在数据线上保持的时间是很短暂的,必须锁存起来用以控制外围设备。
例如用两片74LS377扩展两个8位输出口:8位输出8位输出如图,74LS377是带有允许输出端的8D锁存器,它的控制逻辑为:当G = 0时,CLK的上升沿(电平由低变高)使数据锁存,即8Q 输出与8D输入呈高阻隔开,8Q输出保持由8D输入的信息。
CPU的输出操作:①首先建立有效地址,使G = 0:对于1#74LS377,G接在1Q,即A0上,输出地址只要A0 = 0即可使其G = 0 ,因此其地址为FFFEH 同理,2#74LS377的地址为FFFDH②用MOVX写指令产生WR = 0的低电平有效信号,欲输出的数据从P0口数据线送出,从D端通向Q端,建立8位输出数据。
③当写指令周期结束时,WR变高产生上沿,CLK脚的上跳沿使Q与D隔开,数据锁存输出。
输出软件如下:MOV DPTR , #0FFFEH ;建立有效地址,A0 = 0,即1#377G = 0MOV A , #DATA1 :待输出数据送AMOVX @DPTR , A ;产生WR = 0有效信号,数据DATA从P0口通过D送往Q输出。
当写周期结束时,WR变高,使CLK产先上跳沿,数据锁存输出。
MOV DPTR , #0FFFDH ;建立有效地址,A1 = 0,即2#377G = 0MOV A , #DATA2MOVX @DPTR , A2.扩展简单的8位输入口:输入接口芯片选择的要点是必须具有三态缓冲功能。
即被选通的输入接口可与系统的数据总线接通输入数据,未被选通的输入接口应以高阻与数据线隔离。
常用芯片是74LS244,三态门。
如下例扩展8位输入口:74LS244的控制逻辑为:当1C、2C为低电平时,D与Q接通,数据从P0口输入CPU。
当1C、2C为高电平时,D与Q隔开,Q呈高阻状态,接在D 端的外部信号被隔离。
由上图,只有当有效地址P2.1 = 0,且同时执行一条MOVX 读指令产生RD = 0时,或门的输出才会为0,亦即1C、2C才会为0,D与Q才可以接通,从1#244输入数据。
由上图可知1#244的地址为FDFFH。
2#244的地址位FBFFH。
输入软件如下:MOV DPTR , #0FDFFH ;P2.1 = 0建立1#有效地址MOVX A , @DPTR ;读指令产生RD = 0低电平有效信号或门输出为0,1C、2C为0D通向Q输入数据读周期结束后RD变高则使1C、2C为高电平,使D与Q隔开,呈高阻与数据线隔离。
MOV DPTR , #0FBFFH ;P2.2 = 0建立2#有效地址MOVX A , @DPTR 从2#244输入数据三.扩展可编程并行接口82558255可扩展三个8位并行输入输出口,可编程设定各口为输入或输出。
1.8255的内部结构如118页图7-1 说明其结构及引脚作用。
120页端口地址信号及操作2.8255的工作方式:方式0:基本输入输出方式,每个口的可被编程设定为输入或输出,输出时具有锁存功能,输入时为三态。
方式1:选通输入输出方式,A、B口用于数据传送,C口作为与外设联络信号。
方式2:双向传送方式,只有A口可以使用这种方式。
只要求掌握方式0。
3.8255控制字①方式控制字P123页列出了方式控制字各位的意义,注意D7位一定是1,它是方式控制字的特征位。
例:方式控制字为9AH:1 0 0 1 1 0 1 0方式控制字C口低4位输出特征位B口输入B口方式选择0方式口方式:C口高4位输入00:方式0 A口输入01:方式110:方式2②C口置/复位控制字将一个置/复位控制字送入8255控制寄存器,即可将C口某一位置为1或0,而且不影响其它位的状态。
例如向控制口送入07H:0 0 0 0 0 1 1 1C口置/复位 1表示置1,0表示清0控制字特征位确定对C口中哪一位进行置/复位操作 000:PC0001:PC1 依次类推该控制字确定PC3置1。
4.8255与CPU的连接举例:各端口地址:P0.7P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0A口:0 1 1 1 1 1 0 0FF7CHB口:0 1 1 1 1 1 0 1 FF7DHC口:0 1 1 1 1 1 1 0 FF7EH控制口:0 1 1 1 1 1 1 1FF7FH上图中当无关地址送0时,A口、B口、C口、控制口的地址也可为0000H、0001H、0002H、0003H。
注:8255内部不带有地址锁存器,上图中用373锁存地址。
编程要点:MOV DPTR , #0FF7FH ;选控制口MOV A , #8AH ;方式控制字1 0 0 0 1 0 1 0MOVX A , @DPTR ;方式控制字特征位C口低4位出A口方式0 B口输入A口输出B口方式0C口高4位输入MOV DPTR , #0FF7DHMOVX A , @DPTR ;从B口输入数据,并存入50H单元MOV 50H , AMOV DPTR , #0FF7CHMOV A , #0FFHMOVX @DPTR , A ;从A口输出FFHMOV DPTR , #0FF7FH ;选控制口MOV A , #03HMOVX @DPTR , A ;送C口置/复位控制字00 0 0 0 0 1 1C口置/复位控制字特征位置1PC.1该控制字规定PC.1输出为1四.扩展可编程并行接口81551.8155内部结构:P133页图7-188155内部有两个8位并行I/O口,即A口、B口,一个6位并行I/O口,即C口。
256字节数据存储器RAM一个14位定时器计数器2.8155的引脚信号说明:P133页3.8155的端口地址:P134页表7-34.8155的控制命令字:P135页5.8155的状态字P136页注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
6.8155的基本用法:①可扩展256字节片外RAMIO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为00H~FFH,共256字节,对其读写时用MOVX指令。
②作扩展I/O口使用IO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,共有20条输入输出线,③扩充一个14位定时器计数器8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。
使用步骤:写入控制命令字的D7、D6位控制启停。
写入计数长度:端口地址04H的8位为计数器的低8位端口地址05H的低6位为计数器的高6位,共14位。
05H的高2位确定当计数器时减到0时的输出方式。
P137页7.8155与8031CPU的连接方法:8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。
由上图得到8155各端口的地址为:P2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A00 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口7F01H0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口7F02H0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口7F03H0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位7F05HP2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:7E00H~7EFFH 共256字节。