1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第三章:MCS-51单片机的系统扩展及应用,通过地址总线、数据总线和控制总线实现系统的扩展。,定时器、串行口和A/D、D/A等应用场合下的硬件接口和软件编程。,3.1:,程序存储器,的扩展,3.2:,数据存储器,的扩展,3.3:,输入、输出口,的扩展,3.4:,定时计数器,的应用,3.5:,串行口,的应用,3.6:,MCS-51与D/A转换器的接口,3.7:,MCS-51与A/D转换器的接口,3.8:,动态数码显示及键盘扫描电路,3.1:,程序存储器ROM的扩展,1,在使用8031(无片内ROM)或大于4K
2、程序存储器时,必须通过外接ROM来构成、扩充系统的程序存储区。,2,当使用外部存储器来扩展系统时,必须占用单片机的P0、P2口作为外部电路的数据、地址总线。此时,P0、P2口就不能作为通用的I/O端口。,3,在系统扩展时,外部电路与单片机连接的依据是单片机访问外部存储器的时序,所以正确的理解时序是硬件电路设计的关键。,MCS-51与32K ROM的连接,P2.7,:,:,:,P2.0,P0.7,:,:,:,P0.0,ALE,/EA,Psen,CE,A14,:,:,A8,A7,O7,:,:,:,:,:,:,A0,O0,OE,D7,Q7,D0,Q0,CP,27256,32K ROM,MCS-51,
3、/CE=P2.7(A15),返回前一次,完整的地址信号,外部ROM的状态与地址线,A15,的关系表,ROM引脚,/CE,A14A8,A7A0,地址范围,ROM工作,状态,单片机引脚,A15,P2口,P0口,0,0,00000000,11111111,00000000,11111111,0000H,07FFH,选中,1,1,00000000,11111111,00000000,11111111,8000H,FFFFH,未选中,访问外部程序存储器ROM的时序,:,A15-A8(PC),A7-A0,OP,A7-A0,常数,存储器数据输出控制,/Psen,地址总线(高八位),P2口,地址数据总线(低8
4、位),P0,口,S1,S2,S6,S5,S4,S3,373地址锁存信号,ALE,A15-A8(DPTR+A),MOVC A,A+DPTR,A B,转电路图,返回前一次,(参考讲义70页),片外存储器访问时序说明,P0、P2口作地址和数据总线,。,其中P0口作为地址和数据复用总线,前半部(A段)作地址总线,后半部(B段)作为数据总线。,外部程序存储器ROM的操作步骤如下:,1,单片机必须为其提供完整的(15位)地址信息;,2,ROM芯片的/CE 端=0,选中该芯片;,3,在满足上述条件的基础上,当ROM的/OE=0时(B时间段),存储器输出数据的三态门打开,并将与输入地址相对应的存储单元中的指令
5、(数据)向外输出,单片机通过P0口将指令送至CPU 内部。,74LS373锁存器:,将A时间段P0口输出的低位地址进行保存,使ROM在B时间段仍然可以得到完整的地址信号。,转电路图,转时序图,外部ROM的容量扩展原理(一),如何使用两片32K的ROM芯片扩展为64K的存储阵列。,A15,P2口,MCS-51,P0口,ALE,/EA Psen,/CE2,A14,A8,A7,A0,/OE2,O0O7,/CE1,A14,A8,A7,A0,/OE1,O0O7,74LS373,由两片32K的ROM构成64K存储阵列与A15的关系表,A15,/CE,A14A8,P2口,A7A0,P0口,地址范围,ROM1
6、工作,状态,ROM2工作,状态,0,0,00000000,11111111,00000000,11111111,0000H,07FFH,选中,未选中,1,1,00000000,11111111,00000000,11111111,8000H,FFFFH,未选中,选中,外部ROM的容量扩展原理(二),若需要对2片以上的芯片扩展,可以通过译码电路实现。,P2.7,P2.6,P2.5,P2.4,P2.0,P0口,ALE,Psen,/CE0,A12,A8,A7,8K,8,A0,/OE1,O0O7,74LS373,C,y7,B,A,0 y,/CE1,A12,A8,A7,8K8,A0,/OE1,O0O7,
7、/CE7,A12,A8,A7,8K8,A0,/OE1,O0O7,MCS51,74LS138,采用LS138译码器实现ROM扩展示意表,P2.7P2.5,138 输出,选中 ROM,P2.4P0.0,有效地址范围,0 0 0,Y0=0,第1片,0000H1FFFH,0000H1FFFH,0 0 1,Y1=0,第2片,0000H1FFFH,2000H3FFFH,0 1 0,Y2=0,第3片,0000H1FFFH,4000H5FFFH,0 1 1,Y3=0,第4片,0000H1FFFH,6000H7FFFH,1 0 0,Y4=0,第5片,0000H1FFFH,8000H9FFFH,1 0 1,Y5=
8、0,第6片,0000H1FFFH,A000HBFFFH,1 1 0,Y6=0,第7片,0000H1FFFH,C000HDFFFH,1 1 1,Y7=0,第8片,0000H1FFFH,E000HFFFFH,小结:,1,,单片机的P0、P2口作为地址数据总线;,2,,P0口为数据、地址复用总线,所以必须加入八位锁存器74LS373来锁存P0口的低八位地址。,3,,外接,ROM,是靠,MOVC,指令产生的,Psen,信号来打开数据三态门,使,ROM,中的指令通过P0口送入单片机内部。,4,,存储器的容量M与其地址线条数n的关系:M=2n,5,,当使用两片ROM扩展时,可以使用一个反向器实现容量的扩展
9、,通过ROM芯片的/CE端实现。,6,,当使用2片以上的ROM芯片扩展时,就要使用译码器实现存储容量的扩展,译码器的输入与高位地址相连接,输出端分别与各ROM芯片的/CE连接(,如图所示,)。,7,,当外接ROM的高八位地址线与P2口高八位线没有完全用足时,要注意外存储的地址重叠问题。,返回,3.2:,数据存储器RAM的扩展,与程序存储器扩展原理相同,数据存储器的扩展也是使用P0、P2口作为地址、数据总线。,1,当使用,MOVX Ri,指令时,系统使用P0口输出地址,信号(P2口不用);,2,当使用,MOVX DPTR,指令时,P0口输出DPTR提供,的低八位地址信号,P2口输出DPTR提供的
10、高八位地,址信号。,3,不论哪种情况,P0口都是地址/数据复用总线,因此,仍要使用74LS373来锁存P0口的地位地址信号。,与ROM扩展不同:使用访问外部RAM指令MOVX 时,在时序中将产生/RD或/WR信号,因此将此信号与外RAM的读(/RD)、写(/WR)控制端相连接就实现系统对外RAM的读写控制。,设外部RAM2000H单元中有一个数x,且DPTR中已存有该数地址2000H.则CPU 执行外部ROM中的指令:,movx a,dptr ;将外RAM的x送A,S1,S2,S6,S5,S4,S3,S1,S2,S6,S5,S4,S3,ALE,Psen,A15-A8(PC),A15-A8(DP
11、H),A7-A0,指令,A7-A0,数据,RD,P2口,P0口,选中外部RAM,读外部数据存储器RAM的指令时序,MCS-51与32K RAM的连接,P2.5,P2.4,:,:,P2.0,P0.7,:,:,:,P0.0,ALE,RD,WR,CE,A12,:,:,A8,A7,O7,:,:,:,:,:,:,A0,O0,OE,WE,D7,Q7,D0,Q0,CP,6264,8K RAM,MCS-51,/CE=P2.5(A12),思考题:,使用6264(8KRAM)芯片和2764(8KROM)芯片组成16K RAM和16KROM的外存储阵列(逻辑图)。采用74LS138和74LS373实现译码和锁存功能
12、。,根据设计的结果,写出RAM和ROM的地址范围。,返回,3.3:输入、输出口的扩展,如果系统使用了外部存储器时,P0、P2口被外存储器占用,留给用户的只有P1口。因此I/O端口的扩展是使用MCS-51作为嵌入式控制器进行硬件设计中经常遇到的问题:,3.3.1,使用,8243,扩展I/O端口,3.3.2,使用,8155,扩展I/O 端口,3.3.3,使用,8255,扩展,I/O,端口,3.3.4,使用,串行口,扩展I/O端口,继续,3.3.1:使用8243扩展I/O端口,8243为4X4位的扩展口。,P4.0,P4.1,P2.0,P4.2,P2.1,P4.3,P2.2,P2.3,P5.0,P5
13、.1,P5.2,P5.3,P6.0,P6.1,P6.2,P6.3,PROG,P7.0,/CE,P7.1,P7.2,P7.3,接单片机,P2口,:用于CPU与8243之间传送命令、,数据。,其中:命令码中含口地址(两位)、,操作码(两位)。数据为四位。,PROG,:,控制端。,P4P7,:4X4,位具有锁存功能的双向I/O,端口。,操作码,口地址,P2.3,P2.2,操作,P2.1,P2.0,端口,0,0,读,0,0,P4,0,1,写,0,1,P5,1,0,OR,1,0,P6,1,1,AND,1,1,P7,8243的时序,P4.0,P4.1,P2.0,P4.2,P2.1,P4.3,P2.2,P2
14、.3,P5.0,P5.1,P5.2,P5.3,P6.0,P6.1,P6.2,P6.3,PROG,P7.0,/CE,P7.1,P7.2,P7.3,操作码、口地址,数据(4位),PROG,P2口,1,,由高变低时,,将P2口的命令(口地址、操作码)信息所存到8243。,2,,由低变高时:,a,写操作时:,8243将P2口上的数据写入对应的端口;,b,读操作时:,当操作码一译出,选中的端口的输入缓冲器与P2口接通,等待CPU读走。当PROG变高后,结束读操作。,1,2,8243应用举例1:,使用51的P2口与8243连接,并从8243的P6口读入数据,51的,P2.6 P2.7 留作输入。,P2.0
15、,P2.1,P2.2,P2.3,P2.4,P2.5,P2.6,P2.7,MCS-51,P4.0,P4.1,P2.0 P4.2,P2.1 P4.3,P2.2,P2.3,P5.0,PROG,P5.1,/CE,P5.2,P5.3,P6.0,P6.1,P6.2,P6.3,P7.0,P7.1,P7.2,P7.3,8243,IN8243:MOV A,#11,010010,B ;控制字,MOV P2,A;输出控制字,CLR P2.4 ;8243接收操作码,MOV A,P2 ;读取P6口数据,SETB P2.4 ;PROG=1结束读,SETB P2.5 ;关闭8243,RET,【注意】:,1,控制字11010
16、010的含义;,2,根据8243的时序,在使 PROG 变高前,单片机必须读入P6口中的数据。,8243应用举例2:,将R2寄存器的低4位写到P7口。,P2.6 P2.7 留作输入,P2.0,P2.1,P2.2,P2.3,P2.4,P2.5,P2.6,P2.7,P4.0,P4.1,P2.0 P4.2,P2.1 P4.3,P2.2,P2.3,P5.0,PROG,P5.1,/CE,P5.2,P5.3,P6.0,P6.1,P6.2,P6.3,P7.0,P7.1,P7.2,P7.3,OUT:MOV A,#11,010111,B,;控制字,MOV P2,A,;输出控制字,CLR P2.4,;8243接收
17、操作码,MOV A,R2,;读取R2数据,ORL A,#11110000B,;高4位置1低4位不变,ORL P2,#00001111B,;低4位置1高4位不变,ANL P2,A,;A送P2高4位不变,SETB P2.4,;PROG=1数据写入P7口,SETB P2.5,;关闭8243,RET,【注意】:第1条ORL是保证不影响P2口高4位;第2条ORL指令时保证下面ANL指令能够正确的将低4位数据写入P2口。,返回,3.3.2:使用8155扩展I/O端口,8155的简介,1,,8155的构成:,2,,CPU 对8155的控制,3,,8155的工作方式,4,,8155内部定时器的使用,5,,81
18、55应用与编程举例,继续,8155的简介,同8243一样,8155、8255等芯片都是美国Intel公司为8086系列微机开发出的系列通用可编程I/O接口芯片。,8155不仅可以提供三个并行的I/O端口,在其内部还集成有256个字节的RAM存储空间、一个14位的定时/计数器,因此非常适合与MCS-51单片机连接实现系统功能的扩展。,由于8155的特殊性,这里将主要介绍其结构和使用、编程方法。,返回本节目录,1,8155的构成:,1,,双向数据总线缓冲器:,传送CPU与RAM之间的数据。,2,,地址锁存器:,用于锁存CPU送来得RAM或端口地址。,3,,地址译码(a)和读写控制(b):,a,接收
19、地址锁存器的低三位地址,确定命令/状态存存器、,定时/计数器和A、B、C口中的某个工作。,b,读写控制用于接收/RD或/WR上的信息实现CPU与8155,之间的信息控制,4,,256个字节的RAM数据存储器。,5,,I/O寄存器:,A,B和C双向通用I/O端口。,6,,命令寄存器:,用来存放CPU送来得命令字。,7,,定时/计数器:,二进制的14位减一计数器,可做分频器。,8155的内部结构简图,I/O,寄存器,A口,256,字节,RAM,双向,数据,缓冲器,地址,锁存器,定时,计数器,(14位),读/写,控制器,地址译码,I/O,寄存器,B口,I/O,寄存器,C口,状态,命令,寄存器,AD7
20、-AD0,/CE,IO/M,ALE,/RD,/WR,REST,T/IN,T/OUT,8155引脚说明,AD7-AD0:,数据/地址总线。与MCS-51的P0口连接,分,时传送地址和数据信息,是连接两者的通道。,I/O口线:,PA7-0、PB7-0和PC5-0为8155的A、B和C口。,其中A、B口为8为的通用I/O口;,C口:在,“通用I/O模式”,下作,I/O,口;,在,“选通I/O模式”,下作,命令/状态,口。,REST、/CE,和,IO/M,:复位、片选和I/O端口/RAM选择线。,/RD,、,/WR,:读写控制线。,ALE,:8155的地址锁存信号。ALE=1时,信号进入地址锁,存器,
21、ALE=0时,锁存器处于“封锁”状态,将ALE=1,时的地址锁存到地址锁存器中。,T/IN,、,T/OUT,:计数器的脉冲输入线和输出线,输出波形,与工作方式有关。,返回本节目录,2,CPU 对8155的控制,8155的A、B和C口的数据传送是由CPU发出的命令字控制的。,(1)8155内部的7个寄存器地址,/CE,IO/M,A7-A3,A2A1A0,所选端口,0,1,XXXXX,000,命令/状态寄存器,0,1,XXXXX,001,A口,0,1,XXXXX,010,B口,0,1,XXXXX,011,C口,0,1,XXXXX,100,计数器低8位,0,1,XXXXX,101,计数器高8位,0,
22、0,XXXXX,XXX,RAM单元,(2)8155的命令字,PB、PA:,A、B口工作方式:0 输入;1 输出。,PC2、PC1:,C口工作方式:00,ALT1,(输入),01,ALT2,(输出),10,ALT3,(选通方式),11,ALT4,(选通方式),IEBIEA:,A、B口中断允许位:0 禁止中断;1 允许中断。,TM2 TM1:,计数器工作方式:00 无操作;01 停止计数;,10 计满后停止;11开始计数。,TM2,TM1,IEB,IEA,PC2,PC1,PB,PA,上一次,(3)8155的状态字表征8155的状态,INTRa:A中断请求标志。0 无中断;1 有中断。,ABF:A口
23、缓冲器状态。0 空;1 满。,INTEa:A口中断允许位。0 禁止;1 允许。,INTRb:B中断请求标志。0 无中断;1 有中断。,BBF:B口缓冲器状态。0 空;1 满。,INTEb:B口中断允许位。0 禁止;1 允许。,TIMER:定时器中断。0 读状态字后或硬件复位后。,1 有定时器中断时。,X,TIMER,INTEb,BBF,INTRb,INTEa,ABF,INTRa,状态字存在于8155的状态寄存器中,其地址与命令口地址一样都是000B,可以用,MOVX A,Ri,指令来读取8155的状态。状态字寄存器与命令寄存器是靠输入、输出来自动区分的。,返回本节目录,3,8155的工作方式,
24、(1)存储方式:,若IO/M=0、CE=0时,8155处于存储器,模式,此时单片机通过AD7-AD0与8155,的RAM单元进行读写数据。,(2),I/O,方式:,若IO/M=1,CE=0时,8155处于I/O状态。,a,通用I/O方式:,A,B,C都是通用的数据端口;,b,选通I/O方式:,A,B为通用I/O方式,,C口作,为A,B口的联络控制线。,选通方式是一种较为特殊的数据传输方式,它不同于一般并行口的I/O操作。它主要用于高速CPU与低速外设之间的数据交换。这里只作基本介绍。,C,口在四种工作方式下的各位定义,C口,通用I/O方式,选通I/O方式,ALT1,ALT2,ALT3,ALT4
25、,PC0,输入,输出,A INTR(A口中断),A INTR(A口中断),PC1,输入,输出,ABF(A口缓冲器满),ABF(A口缓冲器满),PC2,输入,输出,ASTB(A口选通),ASTB(A口选通),PC3,输入,输出,输出,B INTR(B口中断),PC4,输入,输出,输出,BBF(B口缓冲器满),PC5,输入,输出,输出,BSTB(B口选通),选通I/O数据输入操作,当外设准备好数据并送PA口时,发出低电平的选通信号ASTB;,8155接收到ASTB后:,1,将PA上的数据装入A口寄存器,2,使A口数据满ABF置位以通知外设数据已收到。,8155在ASTB的上升沿使PC0的A INT
26、R标志置位,以通知单片机数据已收到。,CPU响应中断执行服务程序,当执行到从A口读取输入的数据(MOVX)时,/RD的上升沿将PC0的INTEA清零并使PC1的ABF变低,通知外设输入下一个数据。,P0,INT0,PA,PD0-7,/RD,PC1,PC2,PC0,D7-0,C口为ALT3模式,PC0:A口中断A INTR标志输出,送单片机;,PC1:A口缓冲器满ABF标志输出,送外设。,PC2:A口选通输入ASTB,,ASTB,ABF,MCS-51 8155 外设,A INTR,选通I/O数据输出操作,CPU执行MOVX指令将数据送PA口,8155收到数据后ABF变高通知外设数据已到达PA口。
27、,外设接收到ABF的高电平后:,1,从D7-0上接收数据;,2,使ASTB变低,通知8155外,设已接收到数据。,当8155监测到ASTB回到高电平时,使PC0D的A INTR变为高电平,向单片机申请中断。,单片机在中断服务程序中巴下一个数据送到A口,进行下一个数据的输出。,P0,INT0,PA,PD0-7,PC1,PC2,PC0,D7-0,ASTB,ABF,MCS-51 8155 外设,C口为ALT3模式,控制字:00011001B,PC0:A口中断A INTR标志输出,送单片机;,PC1:A口缓冲器满ABF标志输出,送外设。,PC2:A口选通输入ASTB,,A INTR,4,8155内部定
28、时器的使用,严格的将,8155的定时器应当称为计数器,因为定时器的计数脉冲来自外部的T/IN引脚的输入脉冲,所以8155的定时器非常适合做1/n的分频器(如图)。,定时器共有4中工作方式,由计数器高8位中的最高两位M2、M1来确定。不同的工作方式对应着不同的T/OUT波形。,8155,T/IN,T/OUT,由8155作1/5分频器,MCS-51,控制字,8155内部定时器的4种工作方式,1,M1M2=00时:定时器在计数的后半周期在T/OUT线上输出低电平,如果计数初值为奇数,则高电平持续时间比低电平多一个计数脉冲;,2,M2M1=01时:同上一方式,差别为当计数器“减1”到“全0”时,自动装
29、入计数初值,所以在T/OUT上为连续波形;,3,M2M1=10时:当计数器“减1”到“全0”时,在T/OUT线上输出一个单脉冲;,4,M2M1=11时:当计数器“减1”到“全0”时,在T/OUT线上输出一个单脉冲,且自动重装计数初值,所以在T/OUT线上输出连续的波形。,控制字,8155定时器工作方式与T/OUT波形,M2,M1,T13,T12,T11,T10,T9,T8,T7,T6,T5,T4,T3,T2,T1,T0,计数器高8位(101B),计数器低8位(100B),1个计数周期T,T/IN,M2M1=00时 T/OUT,M2M1=01时 T/OUT,M2M1=10时 T/OUT,M2M1
30、=11时 T/OUT,思考题:哪种工作方式可以使8155完成1/n分频器的功能?,这种分频器与普通数字电路中的“计数器分频”有何不同?(,返回,),5,8155应用与编程举例,充分利用8155的内部资源可以简化单片机系统的设计。,无论是8155或其它外围电路与MCS-51的连接可分为两种方式:最小化连接;,按照外部RAM地址统一编址。,前者适用于较小的系统,后者用于较复杂的系统。这里采用前者,目的是使大家掌握8155最基本的编程方法。,8155在I/O工作方式中我们选择“通用I/O方式”为例。,返回本节目录,8155与MCS-51的最小化连接,P2.7,P2.0,P0.7,P0.6,P0.5,
31、P0.4,P0.3,P0.2,P0.1,P0.0,ALE,/RD,/WR,/CE,IO/M,PA,AD7,AD6,AD5 PB,AD4,AD3,AD2,AD1 PC,AD0,ALE T/OUT,/RD,/WR T/IN,MCS-51 8155,P2.7-P2.0,P0.7-P0.0,地址,选择,01111110,00000000,7E00H,RAM256,存储单元,01111110,11111111,7EFFH,01111111,00000,000,7F00H,命令寄存器,01111111,00000,001,7F01H,PA口,01111111,00000,010,7F02H,PB口,011
32、11111,00000,011,7F03H,PC口,01111111,00000,100,7F04H,计数器低8位,01111111,00000,101,7F05H,计数器高8位,最小系统对8155内部各寄存器的地址分配,设定:PA口输入,PB口输出,输入脉冲进行16分频,。,ORG 1000H,STRAT:MOV DPTR,#7F04H;指向定时器低8位,MOV A,#10H;计数初值16,MOVX DPTR,A;装入初值,INC DPTR;指向定时器高8位,MOV A,#40H;设定为连续方波,MOVX DPTR,A;装入定时器高8位,MOV DPTR,#7F00H;指向命令口,MOV A
33、,#0C2H;控制字:(A输入B输出启动定时器),MOVX DPTR,A;装入控制字并启动定时器,INPUT:MOV DPTR,#7F01H;指向PA口,MOVX A,DPTR;从PA口输入数据,OUT:MOV DPTR,#7F02H;指向PB口,MOVX DPTR,A;从PB口输出数据,END,【思考题】:如何将PA口输入的数据存到8155内部RAM的某一单元?,控制字,MOVX DPTR,A,或,MOVX A,DPTR,的时序,S1,S2,S6,S5,S4,S3,S1,S2,S6,S5,S4,S3,ALE,Psen,A15-A8(PC),A15-A8(DPH),A7-A0,指令,(DPL)
34、,数据,RD,P2口,P0口,选中外部RAM,第一个阶段:取 MOVX 指令,第二阶段:执行,MOVX,(从外部读取数据),3.3.3:使用8255扩展I/O端口,1,,8255,的内部结构和引脚功能,2,,8255,的控制字和状态字,(一)“方式控制字”,(二)“,C,口单一置位复位控制字”,(三)8255A的状态字,1,8255A在模式1时的状态字,2,8255A,在模式2时的状态字,3,,8255,的工作模式,4,,8255A,应用举例,继续,8255的内部结构图,A口,C口,高四位,B口,C口,低四位,A组,控制器,B组,控制器,数缓,冲,据器,读制,写逻,控辑,PA7-0,PB7-0
35、,PC7-4,PC3-0,D7-D0,/RD,/WR,A0,A1,RESE,/CS,返回前一次,1,8255,的内部结构和引脚功能,(一):内部结构:由四部分组成。,1,A口,B口和C口;2,A组控制器,B组控制器;,3,数据缓冲器;4,读写控制器。,A口。8位数据输出缓冲/锁存,输入缓冲/锁存的I/O端口。,B,C口。8位数据输出缓冲/锁存,输入缓冲的I/O端口。,A组控制器,B组控制器。接收CPU发送的控制字并确定8255的工作模式,其中A组控制器控制A口和C口的高4位;,B组控制器控制B口和C口的低4位。,数据缓冲器。双向8位,用于传送CPU与8255之间的数据和控制字。,读写控制逻辑。
36、接收CPU送来的读(/RD),写(/WR)和片选(/CS)等信号,用于对8255的读写控制。,(二)引脚功能:,40脚DIP封装。,1,数据总线,D7D0,与内部数据缓冲器连接,用来传送CPU与,8255之间的数据字、控制字。,2,控制总线:,RESET,:复位线,高电平有效;,/CS,:片选信号,低电平有效;,/RD,/WR,读写命令线:低电平有效;,A0,A1,:地址输入线,用于选中A口,B口,C口和控制寄存器。,3,并行I/O总线(24条):,PA7PA0,:双向I/O总线,可由控制字设定为输入、输出或,输入输出双向方式;,PB7PB0:,双向I/O总线,可由控制字设定为输入或输出方式;
37、,PC7PC0:,双向I/O总线,可以设定为传送I/O数据(模式0),或控制/状态信息(模式1,2);,4,电源线:Vcc和GND.,8255控制信号功能、地址表(设/CS=C0H),/CS,(110000,00,),A1 A0,/RD,/WR,端口地址,端口,功能,0,0 0,0,1,C0H,A口,读A口,0,0 0,1,0,C0H,写A口,0,0 1,0,1,C1H,B口,读B口,0,0 1,1,0,C1H,写B口,0,1 0,0,1,C2H,C口,读C口,0,1 0,1,0,C2H,写C口,0,1 1,1,0,C3H,控制口,写控制字,1,X X,X,X,X,X,未选中,返回本节目录,转
38、8255框图,2,8255,的控制字和状态字,8255有两个控制字:“方式控制字”和“C口置复位控制字”。两者以控制字的,D7=1,或,D7=0,来区别。,(一)“方式控制字”:,用于确定三个端口的输入或输出等;,D7:控制字标志位。,=1表明为“方式控制字”,=0表明为C口置复位控制字;,D6,D5:A组方式选择位。,00:模式0,01:模式1,1X:模式2。,D4:A口输入/输出控制位。,=0时A口用于输出;=1时A口用于输入。,D3:C口高4位输入/输出控制位。,=0时C口高4位用于输出;=0用于输入。,D2:B组方式选择位。,D2=0时,B组设定为模式0;=1时,设定为模式1。,D1:
39、B口输入/输出控制。,D1=0时,B口用于输出;=1时,B口用于输入。,D0:C口低4位输入/输出控制。,=0时用于输出;=1时,用于输入。,D7=1,D6,D5,D4,D3,D2,D1,D0,标志位,A组方式选择,A口,、,C口高4,B组方式 B口、C口低4,返回前次,(二)“,C,口单一置位复位控制字”:,使,C,口各位在,模式1,2时,单独置位或复位,以实现某些控制功能。如:设置或清除A口、B口的中断允许位等。,D7,:,控制字标志位,。=0表明为“C口单一支复位控制字”。,D6-D4:不用。,D3D1:C口选择位。,三位二进制数(000111),确定C口中8个位(D7D0)中的某一位。
40、,D0:置复位控制位,。D0=0时,复位;D0=1时,置位。,D7=0,X,X,X,D3,D2,D1,D0,标志位=0,D6-D4位不用,C口位选择位,置复位控制位,举例,若8255的控制寄存器选口地址为FBH,试写出令PC3先置“1”,后置“0”的程序。,【解】:,MOV R0,#0FBH;设定8255的控制口,MOV A,#07H;令PC3置“1”的控制字送A,MOVX R0,A;令PC3=1,MOV A,#06H;PC3置“0”的控制字送A,MOVX R0,A;令PC3置“0”,:,END,D7=0,X,X,X,D3,D2,D1,D0,标志位=0,D6-D4位不用,C口位选择位,置复位控
41、制位,(三)8255A的状态字,当8255A设定为,模式1、模式2,时,可以通过读C口获得相应的“状态字”,以便了解8255A的工作状态。,1,8255A在模式1时的状态字:(I/O为引脚的电平信号),D7,D6,D5,D4,D3,D2,D1,D0,C口各位,I/O,I/O,IBFa,INTEa,INTRa,输入口用时,/OFBa,INIEa,I/O,I/O,INTRa,输出口用时,INTEb,IBFb,INTRb,输入口用时,INTEb,/OBFb,INTRb,输出口用时,返回前一次,PC7 PC6 PC5 PC4 PC3,PC2 PC1 PC0,PC7 PC6 PC5 PC4 PC3,PC
42、2 PC1 PC0,2,8255A,在模式2时的状态字,/OBFa:,A口“输出缓冲器满”标志。,INTE1:,A口与输出相关的,中断允许,位,软件置位。,IBFa:,A口“输入缓冲器满”标志。,INTE2:,A口与输入相关的,中断允许,位,软件置位。,INTRa:,A口,中断请求,信号,高电平有效。,INTEb:,B口,中断允许,位,软件置位。,IBFb:B口“输入缓冲器满”标志。,INTRb:B口中断请求信号,高电平有效。,/OBFa,INTE1,IBFa,INTE2,INTRa,INTEb,IBFb,INTRb,C口各位:,D7 D6 D5 D4 D3,D2 D1 D0,返回上一次,A组
43、模式2(输入、输出),B组模式1 输出(或输入),3,8255,的工作模式,8255A有三种工作模式:模式0,模式1,和模式2。用户可以通过“,8255A方式控制字,”来设定所需的工作模式。,(1)模式0:基本的输入/输出方式,(2)模式1:选通输入、选通输出方式,A口、B口作为输入或输出,C口做联络线,(3),模式,2:,A口的双向选通(输入/输出)方式,D7=1,D6,D5,D4,D3,D2,D1,D0,标志位,A组方式选择,A口,、,C口高4,B组方式 B口、C口低4,(1)模式0:基本的输入/输出方式,A口、B口和C口均可设定为此种模式。,【,例如,】,:设定A口和C口的高4位为模式0
44、的输出方式,B口和C口的低4位为模式0的输入方式。,MOV R0,#0FBH,;控制寄存器地址送R0,MOV A,#,1,0000,011,B,;方式控制字83H送A,MOV R0,A,;控制字83H送控制寄存器,在模式0时,CPU可以对8255A无条件的进行I/O数据传送,数据可以在8255A对应的锁存器中锁存。同样,外设的I/O数据同样可以送到各端口得到锁存或缓冲。也可以将某些位设定为外设的状态输入位,CPU通过查询状态与外设进行异步I/O数据传送。,转控制字,(2),模式1:选通输入、选通输出方式,A口、B口均可独立的设置为这种工作模式。,在这种模式下,A口、B口通常用于传送与它们相连外
45、设的I/O数据。而此时,C口作为A口、B口与外设之间的联络握手信号,可以实现CPU与外设之间以“中断”的方式进行异步I/O数据传送。,D7=1,0,1,D4,D3,D2,D1,D0,标志位,A组方式选择,A口,、,C口高4,B组方式 B口、C口低4,转8255逻辑图,模式1下,C,口各位定义如下,C口各位,模式1,模式2,输入方式,输出方式,双向I/O方式,PC7,I/O,/OBFa,/OBFa,PC6,I/O,/ACKa,/ACKa,PC5,IBFa,I/O,IBFa,PC4,/STBa,I/O,/STBa,PC3,INTRa,INTRa,INTRa,PC2,STBb,/ACKb,由B口模式
46、决定,PC1,IBFb,/OBFb,由B口模式决定,PC0,INTRb,INTRb,由B口模式决定,INTR:,8255A发出的中断请求信号,经反相后送单片机。,IBF:,8255A发出“输入缓冲器满”信号。,/OBF:输出缓冲器满信号,/STB:,外设发出的“选通信号”,用于8255A的数据锁存用。,/ACK:,外设发出通知8255A的“已接收到数据”的应答信号。,(1)8255的模式1:选通输入方式(口),1,当外设输入数据到PA口时,自动的向/STBa发出一个低电平选通信号;,2,8255A收到/STBa上的负脉冲后作两件事:,一是将数据存入A口输入缓冲/锁存器中;,二是输入“缓冲器满”
47、的IBFa高电平信号,通知外设已收到数据。,3,8255A检测到/STBa变为高电时,若Qibfa高电平,Qintra高电平时,将INTRa变高向CPU申请中断(Qintra可由用户对PC4进行单一置复位控制字控制,参见,模式一时的状态字,)。,4,CPU响应中断后,从A口读取数据,并在读走数据后8255A撤掉INTRa信号,并使/STBa变低通知外设送下一个字节的数据。,P0,8031,/INT0,D7-D0 PA,PC4,PC5,PC3,D7-D0,输入设备,INTEa,/STBa,IBFa,INTRa,1,2,转符号说明,(2)8255的模式1:选通输出方式(口),P0,8031,/IN
48、T0,D7-D0 PB,PC1,PC2,PC0,D7-D0,输入设备,INTEb,/OBFb,/ACKb,INTRb,1,3,1,CPU通过,MOVX Ri,A,指令将数据送到B口输出锁存器,8255A收到数据后便令“输出缓冲器满”/OBFb变为低电平,通知外设准备接收。,2,外设接到/OBFb的低电平后作两件事情:,一,从PB上取走数据;二,使/ACKb线变低,通知8255A:外设已收到数据。,3,8255A接收到/ACKb线变低后,就对/OBFb,/ACKb 和,Qinteb,的状态进行检测,当它们皆为“1”时,INTRb变为高电平向CPU发终端申请。,4,CPU响应中断后,通过中断服务程
49、序将下一个数据送到8255A的B口,同时撤掉INTRb信号。,2,模式一时的状态字,(3),模式2:,A,口的双向(输入/输出)方式,只有A口具有模式2 方式。此时,PA口为双向I/O总线。,1,当PA作输入口时,由,/STBa,和,IBFa,信号控制,过程同模式1的输入操作。,2,当PA作输出口时,由,/OBFa,和,/ACKa,控制,工作过程同模式1的输出操作。,模式2 非常适应像终端一类的外设,如键盘、显示器等设备。,P0,8031,/INT0,D7-D0 PA,D7-D0,输入设备,PC7,INTE1,/OBFa,/ACKa,INTRa,PC6,PC4,PC5,PC3,IBFa,/ST
50、Ba,+,INTE2,返回本节目录,模式2 状态字,4,8255A,应用举例(方式0),/RD,/WR,P0.7,P0.6,P0.5,P0.4,P0.3,P0.2,P0.1,P0.0,ALE,89C51,D7 Q7,D6 Q6,D5 Q5,D4 Q4,D3 Q3,D2 Q2,D1 Q1,D0 Q0,74LS373,G /E,/RD,/WR,RESET,/CS,PC口,8255A,A1,A0,PB口,D7,D6,D5,D4,D3,D2,PA口,D1,D0,设8255A工作在方式0,且A口输入,B、C口输出。,/CS=FF7XH,A口:FF7CH,B口:,FF7DH,C口:,FF7EH,控制口:F