📄 7_2_3 8255a应用举例.htm
字号:
<P class=STYLE29 align=center>4</P></TD>
<TD width=42>
<P class=STYLE29 align=center>5</P></TD>
<TD width=41>
<P class=STYLE29 align=center>6</P></TD>
<TD width=42>
<P class=STYLE29 align=center>7</P></TD>
<TD width=41>
<P class=STYLE29 align=center>8</P></TD>
<TD width=41>
<P class=STYLE29 align=center>9</P></TD>
<TD width=42>
<P class=STYLE29 align=center>A</P></TD>
<TD width=41>
<P class=STYLE29 align=center>B</P></TD>
<TD width=39>
<P class=STYLE29 align=center>C</P></TD>
<TD width=37>
<P class=STYLE29 align=center>D</P></TD>
<TD width=39>
<P class=STYLE29 align=center>E</P></TD>
<TD width=41>
<P class=STYLE29 align=center>F</P></TD></TR>
<TR>
<TD>
<P class=STYLE29 align=center>共阴极七段 <BR>显示代码 </P></TD>
<TD>
<P class=STYLE29 align=center>3FH</P></TD>
<TD>
<P class=STYLE29 align=center>06H</P></TD>
<TD>
<P class=STYLE29 align=center>5BH</P></TD>
<TD>
<P class=STYLE29 align=center>4FH</P></TD>
<TD>
<P class=STYLE29 align=center>66H</P></TD>
<TD>
<P class=STYLE29 align=center>6DH</P></TD>
<TD>
<P class=STYLE29 align=center>7DH</P></TD>
<TD>
<P class=STYLE29 align=center>07H</P></TD>
<TD>
<P class=STYLE29 align=center>7FH</P></TD>
<TD>
<P class=STYLE29 align=center>6FH</P></TD>
<TD>
<P class=STYLE29 align=center>77H</P></TD>
<TD>
<P class=STYLE29 align=center>7CH</P></TD>
<TD>
<P class=STYLE29 align=center>39H</P></TD>
<TD>
<P class=STYLE29 align=center>5EH</P></TD>
<TD>
<P class=STYLE29 align=center>79H</P></TD>
<TD>
<P class=STYLE29 align=center>71H</P></TD></TR>
<TR>
<TD>
<P class=STYLE29 align=center>共阳极七段 <BR>显示代码 </P></TD>
<TD>
<P class=STYLE29 align=center>C0H</P></TD>
<TD>
<P class=STYLE29 align=center>F9H</P></TD>
<TD>
<P class=STYLE29 align=center>A4H</P></TD>
<TD>
<P class=STYLE29 align=center>B0H</P></TD>
<TD>
<P class=STYLE29 align=center>99H</P></TD>
<TD>
<P class=STYLE29 align=center>92H</P></TD>
<TD>
<P class=STYLE29 align=center>82H</P></TD>
<TD>
<P class=STYLE29 align=center>F8H</P></TD>
<TD>
<P class=STYLE29 align=center>80H</P></TD>
<TD>
<P class=STYLE29 align=center>90H</P></TD>
<TD>
<P class=STYLE29 align=center>88H</P></TD>
<TD>
<P class=STYLE29 align=center>83H</P></TD>
<TD>
<P class=STYLE29 align=center>C6H</P></TD>
<TD>
<P class=STYLE29 align=center>A1H</P></TD>
<TD>
<P class=STYLE29 align=center>86H</P></TD>
<TD>
<P class=STYLE29 align=center>8EH</P></TD></TR></TBODY></TABLE></DIV>
<P class=STYLE29>显示程序如下: <BR>DATA SEGMENT<BR>LIST DB 3FH, 06H,
5BH, 4FH, …, 71H ;
共阴极七段显示代码表<BR>DATA ENDS<BR>CODE SEGMENT<BR>ASSUME CS: CODE, DS:
DATA<BR>START: MOV AX, DATA<BR> MOV DS, AX<BR> MOV AL,
90H ; 控制字A口方式0输入, B口方式0输出<BR> MOV DX, 0FFE3H ;
控制口地址<BR> OUT DX, AL ; 将控制字写入控制端口<BR>L0: MOV DX, 0FFE0H
; A端口地址<BR> IN AL, DX ; 读取A口开关状态<BR> AND AL, 0FH
; 屏蔽A口高4位<BR> MOV BX, OFFSET LIST ;
共阴极七段显示代码表的首地址送给BX<BR> AND AX, 00FFH ; 屏蔽AX的高位字节,
保留A口的开关状态<BR> ADD BX, AX ; 形成显示字符的代码地址<BR> MOV AL,
[BX] ; 取出显示代码送给AL<BR> MOV DX, 0FFE1H ;
B端口地址<BR> OUT DX, AL ; 显示代码送B口显示<BR> CALL DELAY ;
调显示延时子程序<BR> JMP L0 ; 循环显示<BR> DELAY PROC ;
显示延时子程序<BR> PUSH CX<BR> PUSH AX<BR> MOV CX, 0010H<BR> T1:
MOV AX, 0010H<BR> T2: DEC AX<BR> JNZ T2<BR> LOOP
T1<BR> POP AX<BR> POP CX<BR> RET ;
子程序返回<BR> CODE ENDS<BR> END START</P>
<P class=STYLE29> 此程序是循环显示程序,可由Ctrl+C强迫中断。</P>
<P class=STYLE29> 【例7.4】 8255A作为并行打印机的接口。
<BR>要求:将8255A的A口连接一个并行打印机,工作在方式1,数据输出,采用查询方式将内存输出缓冲区BUFFER中的100H个字节数据送打印机输出,设计接口电路,编制打印驱动程序。
<BR>分析:8255A连接打印机的接口电路如图7.15所示。</P>
<P
class=STYLE29> 由于8255A的A口以方式1工作,因此将8255A的PA7~PA0与打印机的数据线D7~D0连接,PC7作为<IMG
height=31 src="7_2_3 8255A应用举例.files/7.2.3_clip_image002_0003.gif"
width=54>输出信号与打印机的数据选通信号<IMG height=35
src="7_2_3 8255A应用举例.files/7.2.3_clip_image004_0002.gif"
width=92>引脚相连,PC6作为<IMG height=30
src="7_2_3 8255A应用举例.files/7.2.3_clip_image006_0000.gif"
width=53>输入信号与打印机的应答信号<IMG height=34
src="7_2_3 8255A应用举例.files/7.2.3_clip_image006_0001.gif"
width=53>相连,PC4用来查询打印机的忙信号BUSY的状态。在这里应该注意,当CPU输出数据时,8255A产生一个低电平有效的<IMG
height=35 src="7_2_3 8255A应用举例.files/7.2.3_clip_image002_0004.gif"
width=54>输出信号,当8255A接收到一个响应信号<IMG height=30
src="7_2_3 8255A应用举例.files/7.2.3_clip_image006_0002.gif"
width=52>时,<IMG height=29
src="7_2_3 8255A应用举例.files/7.2.3_clip_image002_0005.gif"
width=49>才能恢复为高电平。另一方面,打印机需要一个数据选通信号<IMG height=36
src="7_2_3 8255A应用举例.files/7.2.3_clip_image004_0003.gif"
width=94>才能接收数据,而<IMG height=36
src="7_2_3 8255A应用举例.files/7.2.3_clip_image004_0004.gif"
width=96>是一个低脉冲信号,因此直接将<IMG height=33
src="7_2_3 8255A应用举例.files/7.2.3_clip_image002_0006.gif"
width=52>与<IMG height=35
src="7_2_3 8255A应用举例.files/7.2.3_clip_image004_0005.gif"
width=90>相连,将会因为互相等待而产生“死锁”。采用单稳态电路74LS123即可满足8255A和打印机双方的时序要求,因为单稳态电路只要输入一个下降沿信号就可以输出一个低脉冲信号。</P>
<P class=STYLE29> 8255A的端口地址与例7.3相同,为FFE0H~FFE3H。</P>
<P class=STYLE29> 打印机的工作原理是:当数据选通信号<IMG height=32
src="7_2_3 8255A应用举例.files/7.2.3_clip_image004_0006.gif"
width=95>(负脉冲)有效时,数据线D7~D0上的数据被锁存到打印机内部的数据缓冲区中,同时将忙信号BUSY置1,表示打印机正在处理输入的数据,等到输入的数据处理完毕,撤消忙信号,将BUSY清0,同时送出应答信号<IMG
height=30 src="7_2_3 8255A应用举例.files/7.2.3_clip_image006_0003.gif"
width=52>,表示一个字符已经输出完毕。打印机各信号时序如图7.16所示。</P>
<P class=STYLE29> <A
href="http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter7/_notes/15.htm"
target=_blank>图7.15 8255A连接打印机的接口电路</A></P>
<P class=STYLE29> <A
href="http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter7/_notes/16%20.htm"
target=_blank>图7.16 打印机各信号时序图</A></P>
<P class=STYLE29>打印驱动程序编制如下: <BR>DATA SEGMENT<BR>BUFFER DB 100H
DUP(?)<BR>DATA ENDS<BR>CODE SEGMENT<BR>ASSUM CS:CODE,
DS:DATA<BR>START: MOV AX, DATA<BR> MOV DS, AX<BR> MOV AL,
0A8H ; A口方式1输出, PC4输入<BR> MOV DX, 0FFE3H ;
控制口地址<BR> OUT DX, AL ; 控制字写入控制口<BR> MOV CX, 100H ;
传送字节数送CX寄存器<BR> MOV SI, OFFSET BUFFER ; 数据缓冲区首地址送SI寄存器<BR>L1:
MOV DX, 0FFE2H ; C口地址<BR> IN AL, DX ; 读C口内容,
查询BUSY信号<BR> AND AL, 10H ; 保留PC4状态,
判断BUSY=1?<BR> JNZ L1 ; BUSY=1, 打印机处于忙状态, 应该继续查询<BR> MOV AL,
[SI] ; BUSY=0, 打印机处于空闲状态, 可以输出数据<BR> MOV DX, 0FFE0H ;
A口地址<BR> OUT DX, AL ; 输出数据<BR> INC SI ;
修改数据缓冲区地址<BR> LOOP L1 ; 数据未传送完毕, 继续传送<BR> MOV AX,
; 数据传送完毕, 返回DOS<BR> INT 21H<BR> CODE ENDS<BR> ENDS START</P>
<P
class=STYLE29> 【例7.5】 8255A与32位CPU连接,可实现独立并行输入/输出接口电路,如图7.17所示。图中共有四组8255A连接到32位数据总线上,每组都有自己的地址译码器,最多可连接八片8255A,每片8255A可提供3字节宽度的端口,共24条I/O信号线。这些端口可以通过软件分别设置为输入或输出操作方式。所以,一组电路可以实现192条I/O信号线,整个电路可提供768条I/O信号线。</P>
<P class=STYLE29> <A
href="http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter7/_notes/17.htm"
target=_blank>图7.17 32位CPU与8255A相连接的并行接口电路</A> </P>
<P class=STYLE29> 四组8255A的数据线分别与系统数据总线的D31~D24, D23~D16,
D15~D8和D7~D0相连,传送数据信息。四组8255A的地址由CPU的A6~A2和<IMG height=36
src="7_2_3 8255A应用举例.files/7.2.3_clip_image002_0007.gif"
width=115>形成。其中,A3, A2分别与8255A的A1, A0相连,形成8255A的四个端口地址,A6~A4和<IMG
height=36 src="7_2_3 8255A应用举例.files/7.2.3_clip_image002_0008.gif"
width=105>分别与四片地址译码器74LS138的C, B, A和<IMG height=39
src="7_2_3 8255A应用举例.files/7.2.3_clip_image004_0007.gif"
width=50>输入端相连,形成8255A的片选信号<IMG height=31
src="7_2_3 8255A应用举例.files/7.2.3_clip_image006_0004.gif"
width=35>,并决定数据输出的类型(字节、字和双字)。 <BR>CPU的<IMG height=37
src="7_2_3 8255A应用举例.files/7.2.3_clip_image008.gif" width=57>, <IMG
height=35 src="7_2_3 8255A应用举例.files/7.2.3_clip_image010.gif"
width=50>和<IMG height=34
src="7_2_3 8255A应用举例.files/7.2.3_clip_image012.gif"
width=50>信号线通过总线控制逻辑电路产生接口读/写控制信号线<IMG height=35
src="7_2_3 8255A应用举例.files/7.2.3_clip_image014.gif" width=56>和<IMG
height=31 src="7_2_3 8255A应用举例.files/7.2.3_clip_image016.gif"
width=57>,与8255A的读/写信号线<IMG height=31
src="7_2_3 8255A应用举例.files/7.2.3_clip_image018.gif" width=39>和<IMG
height=29 src="7_2_3 8255A应用举例.files/7.2.3_clip_image020.gif"
width=41>相连,实现对8255A的读/写控制。</P>
<P class=STYLE29> 分析:电路中I/O地址译码并未使用全部的地址位,仅是将锁存的地址位A6,
A5和A4译码,未使用的地址位设为0。例如,第2组中14号8255A的片选信号对应74LS138的<IMG height=32
src="7_2_3 8255A应用举例.files/7.2.3_clip_image022.gif"
width=34>=0,即A6A5A4=011B,另外,<IMG height=33
src="7_2_3 8255A应用举例.files/7.2.3_clip_image024.gif"
width=45>=0,则对应CPU的A1A0=10B,8255A的三个端口地址见表7.3。</P>
<P class=STYLE29><A
href="http://www.tyut.edu.cn/kecheng1/2008/site04/courseware/chapter7/_notes/b3.htm"
target=_blank>表7.3 8255A的三个端口地址表</A> </P>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width=770 border=1>
<TBODY>
<TR>
<TD width=122>
<P align=center> </P></TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -