第七章单片机I/O扩展及应用7-1I/O的扩展例:用4个发光二极管对应显示4个开关的开合状态。如P1.0合则P1.4亮。MCS-51P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.01.无条件传送方式:指示灯立即反映开关状态。ORG0000HAJMPMAINORG0100HMAIN:ORLA,#0FHMOVP1,AMOVA,P1SWAPAMOVP1,ASJMPMAIN一、IO直接使用2.中断传送方式:先设好开关状态,然后发出中断请求信号,改变指示灯亮灭状态。ORG0000HAJMPMAINORG0003HAJMPIOINTORG0100HMAIN:SETBIT0SETBEX0SETBEAHERE:SJMPHEREORG0500HIOINT:MOVA,#0FFHMOVP1,AMOVA,P1SWAPAMOVP1,ARETIP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0INT0MCS-51K+5V二、为什么要扩展IO接口:三、IO扩展的相关技术:1、接口与端口;2、总线隔离技术;3、IO编址技术:独立和统一;四、IO的控制方式:1、无条件传送;2、查询方式;3、中断方式;§7-2简单I/O口扩展用74系列器件扩展并行I/O口,常用并行I/O扩展芯片,如74LS244、74LS245、273、74LS377等1、74LS377(输出)2、74LS244(输入)3、扩展实例高位地址组合法,如图所示:输入:74LS244扩展K0~K7并由P2.0+RD端,全0时,74LS244选通读入K0~K7状态。实现:MOVDPTR,#FEFFHMOVXA,@DPTR;读入输出:74LS273扩展LED0~LED7并由P2.0+WR端,全0时,74LS273将P0口数据送出,控制LED0~LED7实现:MOVX@DPTR,A;输出&7-3可编程并行接口8255A1、8255A的基本性能可编程外设接口电路(ProgrammablePeripheralInterface)简称PPI,型号为8255(改进型为8255A及8255A-5),具有24条输入/输出引脚、可编程的通用并行输入/输出接口电路。8255A具有三个相互独立的输入/输出通道:通道A、通道B、通道C。A,B,C三通道可以联合使用,构成单线、双线或三线联络信号的并行接口。此时C口完全服务于A、B口。A口有三种工作方式:方式0、方式1、方式2。B口有两种工作方式:方式0、方式1。2、8255A内部结构8255A内部结构由以下四部分组成:数据端口A、B、C;A组控制和B组控制;读/写控制逻辑电路;数据总线缓冲器。结构如图所示端口A:包括一个8位的数据输出锁存/缓冲器和一个8位的数据输入锁存器,可作为数据输入或输出端口,并工作于三种方式中的任何一种。端口B:包括一个8位的数据输出锁存/缓冲器和一个8位的数据输入缓冲器,可作为数据输入或输出端口,但不能工作于方式2。端口C:包括一个8位的数据输出锁存/缓冲器和一个8位的数据输入缓冲器,可在方式字控制下分为两个4位的端口(C端口上和下),每个4位端口都有4位的锁存器,用来配合端口A与端口B锁存输出控制信号和输入状态信号,不能工作于方式1或2。A组和B组控制的作用如下:A组控制逻辑控制端口A及端口C的上半部;B组控制逻辑控制端口B及端口C的下半部。方式选择控制字:C端口置1置0控制字:端口C的数位常常作为控制位来使用,所以,在设计8255A芯片时,应使端口C中的各位可以用置1置0控制字来单独设置。其具体格式如下图所示。注意:C端口置1置0控制字尽管是对端口C进行操作,但此控制字必须写入控制口,而不是写入C端口。工作方式:1)方式0是一种基本输入或输出方式,它适用于无需握手信号的简单输入输出应用场合,端口A、B、C都可作为输入或输出数据使用,输出有锁存而输入无锁存。2)方式1也称选通的输入/输出方式。在这种方式下,无论是输入还是输出都通过应答关系实现,这时端口A或B用作数据口,端口C的一部分引脚用作握手信号线与中断请求线。若端口A工作于方式1,则B可工作于方式0;·若端口B工作于方式1,则A可工作于方式0或余下的13位可工作于方式0;·若端口A和B同时工作于方式1,端口C余下的两位还可用于传送数据或控制信号。3)方式2也称选通的双向I/O方式,仅适用于端口A,这时A口的PA7-PA0作为双向的数据总线,端口C有5条引脚用作A的握手信号线和中断请求线,而B口和C口余下的3位仍可工作于方式0或1。它可以认为是方式1输出和输入的组合但有以下不同:(1)当CPU将数据写入A口时,尽管OBF变为有效,但数据并不出现在PA7-PA0上,只有外设发出ACKA信号时,数据才进入PA7-PA0。(2)输出和输入引起的中断请求信号都通过同一引脚输出,CPU必须通过查询OBF和IBF状态才能确定是输入引起的中断请求还是输出引起的中断请求。(3)ACKA和STBA信号信号不能同时有效,否则将出现数据传送“冲突”。3、MCS-51和8255A的接口方法如图所示为MCS-51和8255A的一种接口逻辑。PA口、PB口、PC口、控制口的地址分别为:7FFCH、7FFDH、7FFEH、7FFFH。假设图中8255A的PA口接一组开关,PB接一组指示灯,如果,要将MCS-51的寄存器R2的内容送指示灯显示,将开关状态读入MCS-51的累加器A,则8255初始化和输入/输出程序如下:ORG1000HR8255:MOVDPTR,#7FFFH;MOVA,#98HMOVX@DPTR,AMOVDPTR,#7FFDHMOVA,R2MOV@DPTR,AMOVDPTR,#7FFCHMOVXA,@DPTRRET*&7-4可编程并行接口芯片8155与8255A相比,8155具有更强的功能,可以扩展单片机的I/O口、定时器、外部数据存储器RAM。1、8155芯片的构成1)逻辑结构2)引脚图3)接口信号8155芯片的内部结构256B静态RAMA定时器BC口APA0~PA7口BPB0~PB7PC0~PC5口CIO/MAD0~AD7CEALERDWRRESET定时器输入定时器输出接单片机接外设接外设接外设8155引脚功能PC3PC4PC5IO/MCERDWRALEAD0AD1AD2AD3AD4AD5AD6AD7VssVccPC2PC1PC0PB7PB6PB5PB4PB3PB2PB1PB0PA7PA6PA5PA4PA3PA2PA1PA08155TIMERINRESETTIMEROUTAD0-AD7三态地址/数据线IO/M端口/存储器选择RD读ALE地址锁存允许写WR选片CE定时器输入TIMERIN定时器输出TIMEROUTPA0-PA7A口端口线PB0-PB7B口端口线PC0-PC5C口端口线PA0-PA7端口A的I/O线(8位,接外设)PB0-PB7端口B的I/O线(8位,接外设)PC0-PC5端口C的I/O线(6位,接外设)AD0-AD7三态地址/数据复用线(8位,一般接单片机P0口,CPU与8155之间的地址、数据、命令、状态等信号都通过它来传送)端口/存储器选择控制“0”选择片内RAM“1”选择片内I/O口TIMERIN8155片内定时器/计数器的计数脉冲输入引脚TIMEROUT8155片内定时器/计数器的计满回零输出引脚分别是对8155片内的RAM或I/O口的的读、写控制信号ALE地址锁存引脚选片RESET复位引脚IO/MRD、WRCE2、8155的RAM和I/O口地址RAM地址----当IO/M加低电平:此时AD0-AD7上得到的地址值是指8155的某一RAM单元的地址,地址范围是:00000000--11111111分别指向8155RAM的256个存储单元。I/O口地址----当IO/M加高电平:此时AD0-AD7(仅用到低三位AD2、AD1、AD0)上得到的地址值是指8155的某一I/O口的地址,具体端口地址分配是:8155的RAM和I/O口编址AD7AD6AD5AD4AD3AD2AD1AD0I/O端口╳╳╳╳╳000命令/状态寄存器╳╳╳╳╳001PA口╳╳╳╳╳010PB口╳╳╳╳╳011PC口╳╳╳╳╳100计数器低8位╳╳╳╳╳101计数器高6位3、8155的使用1)8155内RAM的使用:与一般外部数据存储器的使用基本一样,唯一区别是事先要使IO/M为低电平。2)8155各端口的使用:A、B、C各端口可工作于不同的工作方式,使用前要进行初始化(写命令字到命令口)。4、扩展电路的连接实例1)以高位地址直接作为IO/M信号扩展,接口电路非常简单,基本上是相同信号对接,如图:80318155RESETRDWRALEP2.4P0.0P0.1P0.2P.03P0.4P0.5P0.6P0.7RESETRDWRALEIO/MCEAD0AD1AD2AD3AD4AD5AD6AD7口APA0~PA7口BPB0~PB7PC0~PC5口C2)多芯片扩展8031373G27166116(2)6116(1)8155P0P2.2--P2.0PSENALEWRRDABCG2AG2BG1P1.0A0~A7A8~A10D7~D0D7~D0D7~D0CECECEOEA0~A7A8~A10WEWEOEOEWERDALEAD0~AD7CEY2Y1Y0+5VIO/MPAPBPCP2.3P2.4P2.5P2.6P2.7上图中的各扩展地址分别为:8155:0000H、0001H、……、0005H8031的P2.7-P2.3=00000时,选中8155,在此前提下,当8031的P0口输出地址是XXXXX000-XXXXX101,且IO/M=1时,选中8155的各端口,即:当IO/M=0时,选中8155的RAM单元,所以:其内部RAM地址范围是:0000H--00FFH。P2.7…………………P2.0P0.7…………………P0.0端口0000000000000000(0000H)命令口0000000000000001(0001H)PA口0000000000000010(0002H)PB口0000000000000011(0003H)PC口0000000000000100(0004H)计数器低0000000000000101(0005H)计数器高6116(1):0800H-0FFFH6116(2):1000H-17FFH分析:根据74LS138,8031的P2.7-P2.3=00001时,选中6116(1),在此前提下,加上P2.2-P2.0,P0.7-P0.0低位地址,既有:6116(1)的地址范围是:0000100000000000-0000111111111111即:8000H-FFFFH。6116(2)同理可得:1000H-17FFH:3)常用I/O口综合扩展线选法80316116CE8255CS8155IO/MCECE8253CS0832P2.3P2.4P2.0P2.5P2.6P2.7线选法译码地址外围器件地址选择线(A15~A0)片内地址单元数地址编码611611110AAAAAAAAAAA2KF000~F7FFH825511101111111111AA4EFFC~EFFFH8155RAM11011110AAAAAAAA256DE00~DEFFH8155I/O1101111111111AAA6DFF8~DFFDH083210111111111111111BFFFH825301111111111111AA47FFC~7FFFH80316264CE8255CS8155IO/MCECE8253CS0832P2.5P2.6P2.7P2.0ABCG2AG2BG1Y0Y1Y2Y3Y4+5V138译码法译码法译码地址外围器件地址选择线(A15~A0)片内地址单元数地址编码6264000AAAAAAAAAAAAA8K0000~1FFFH825500111111111111AA43FFC~3FFFH8155RAM01011110AAAAAAAA2565E00~5EFFH8155I/O01011111111