📄 chapter6.htm
字号:
<p align="center"><img src="8255zh10.gif" width="394" height="386"
alt="8255zh10.gif (5650 bytes)"></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">例如,某8255A的控制口地址为0EEH,将其PC<sub>3</sub>置0的操作为:</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,06H ;control word</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT 0EEH,AL</font></p>
</blockquote>
</blockquote>
</blockquote>
<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">四、8255A的工作方式</font></h3>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> 8255A共有3种工作方式,分别称为方式0、方式1和方式2。其中,端口B可以工作在方式0和方式1,端口A可以工作在任何一种方式下。</font></p>
</blockquote>
<blockquote>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">1、方式0---基本的输入/输出方式</font></h4>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> 在方式0下,任何一个端口都可以作为输入口或者输出口,各端口之间没有规定必然的关系。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> </font><font
face="宋体" size="5" color="#00FFFF">方式0适用于无条件传输或者查询式传输方式。</font></p>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">2、方式1---选通的输入/输出方式</font></h4>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> 在方式1下,端口A和端口B可以工作在输入或输出方式,但是要使用端口C的固定的数位作为选通信号和应答信号。端口A和端口B有一个工作于方式1,需要端口C的3个数位。不用作控制信号的端口C的其他数位,可以工作为方式0的输入或输出状态。</font></p>
</blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)方式1输入情况</font></p>
</blockquote>
<p align="center"><img src="8255fsh1ru.gif" width="659" height="371"
alt="8255fsh1ru.gif (8903 bytes)"></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)<span
style="text-decoration: overline">STB</span>---选通信号。(Strobe)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输入,低电平有效。由外设送往8255A,当其有效时,8255A接收外设发送的数据,该数据被接收到8255A的数据输入缓冲器中。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)INF---输入缓冲器满信号。(Input
Buffer Full)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,高电平有效。由8255A送往CPU,供CPU查询,表示当前的输入缓冲器中已经有了一个新的数据。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">3)INTR---中断请求信号。(Interrupt
Request)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,高电平有效。由8255A送往CPU。当<span style="text-decoration: overline">STB</span>的有效低电平结束,并且IBF为有效的高电平后,8255A向CPU发出此信号,作为请求CPU读取数据的中断请求信号。CPU发出<span
style="text-decoration: overline">RD</span>信号有效后,会将INTR复位为低电平。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">4)INTE---中断允许信号。(Interrupt
Enable)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
该信号没有输出端,当INTE=1时,允许中断请求,INTE=0时,禁止中断请求。INTE的状态是由端口C置1/置0控制字来控制的。在A组中,对应于PC<sub>4</sub>,在B组中,对应于PC<sub>2</sub>。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)方式1输出情况</font></p>
</blockquote>
<p align="center"><img src="8255fsh1chu.gif" width="658" height="370"
alt="8255fsh1chu.gif (8475 bytes)"></p>
<p align="left"> </p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)<span
style="text-decoration: overline">OBF</span>---输出缓冲器满信号。(Onput Buffer
Full)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,低电平有效。由8255A送往外设,表示当前的输出缓冲器中已经有了一个由CPU输出的新的数据,通知外设将该数据取走。该信号由<span
style="text-decoration: overline">WR</span>信号的上升沿置为有效的低电平,由<span
style="text-decoration: overline">ACK</span>信号复位为高电平。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)<span
style="text-decoration: overline">ACK</span>---外设响应信号。(Acknowledge)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输入,低电平有效,由外设送给8255A。该信号有效时,表明CPU通过8255A送往外设的数据已经到达了外设。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">3)INTR---中断请求信号。(Interrupt
Request)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,高电平有效。由8255A送往CPU。当输出设备已经从8255A的端口中提取了数据,并发出<span
style="text-decoration: overline">ACK</span>之后,8255A向CPU发出此信号,作为请求CPU再次输出数据的中断请求信号。<span
style="text-decoration: overline">WR</span>的下降沿来到后,INTR复位为低电平。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">4)INTE---中断允许信号。(Interrupt
Enable)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
该信号没有输出端,当INTE=1时,允许中断请求,INTE=0时,禁止中断请求。INTE的状态是由端口C置1/置0控制字来控制的。在A组中,对应于PC<sub>6</sub>,在B组中,对应于PC<sub>2</sub>。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> </font><font
face="宋体" size="5" color="#00FFFF">若8255A的某一个端口工作于方式1下,端口C中自动提供了数位作为控制信号,尤其是提供了中断请求信号,所以,方式1多使用在CPU和外设的中断传送方式中。</font></p>
<h4 align="left"><font face="宋体" size="5" color="#FFFFFF">3、方式2---双向传输方式。</font></h4>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">该当时只适用于端口A,端口C用5个数位为端口A提供控制信号。</font></p>
</blockquote>
<p align="center"><img src="8255fsh2.gif" width="416" height="438"
alt="8255fsh2.gif (6118 bytes)"></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)<span
style="text-decoration: overline">OBF</span><sub>A</sub>---输出缓冲器满信号。(Onput
Buffer Full)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,低电平有效。由8255A送往外设,表示当前的输出缓冲器中已经有了一个由CPU输出的新的数据,通知外设将该数据取走。该信号由<span
style="text-decoration: overline">WR</span>信号的上升沿置为有效的低电平,由<span
style="text-decoration: overline">ACK</span>信号复位为高电平。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)<span
style="text-decoration: overline">ACK</span><sub>A</sub>---外设响应信号。(Acknowledge)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输入,低电平有效,由外设送给8255A。该信号有效时,表明CPU通过8255A送往外设的数据已经到达了外设。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">3)<span
style="text-decoration: overline">STB</span><sub>A</sub>---选通信号。(Strobe)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输入,低电平有效。由外设送往8255A,当其有效时,8255A接收外设发送的数据,该数据被接收到8255A的数据输入缓冲器中。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">4)INF<sub>A</sub>---输入缓冲器满信号。(Input
Buffer Full)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,高电平有效。由8255A送往CPU,供CPU查询,表示当前的输入缓冲器中已经有了一个新的数据。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">5)INTR<sub>A</sub>---中断请求信号。(Interrupt
Request)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
输出,高电平有效。由8255A送往CPU。不管是输入动作还是输出动作,当一个动作完成而要进入下一个动作时,8255A向CPU发出此信号,作为请求CPU进行下一次操作的中断请求信号。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">6)INTE<sub>1</sub>---中断允许信号。(Interrupt
Enable)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
该信号没有输出端,当INTE<sub>1</sub>=1时,允许中断请求,通知CPU可以往8255A的端口A</font><font
face="宋体" size="5" color="#FFFF00">输出</font><font face="宋体" size="5"
color="#FFFFFF">一个数据;INTE<sub>1</sub>=0时,禁止中断请求。INTE<sub>1</sub>的状态只能由端口C置1/置0控制字来控制的。对应于PC<sub>6</sub>。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">7)INTE<sub>2</sub>---中断允许信号。(Interrupt
Enable)</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">
该信号没有输出端,当INTE<sub>2</sub>=1时,允许中断请求,通知CPU可以从8255A的端口A</font><font
face="宋体" size="5" color="#FFFF00">读入</font><font face="宋体" size="5"
color="#FFFFFF">一个数据;INTE<sub>2</sub>=0时,禁止中断请求。INTE<sub>2</sub>的状态只能由端口C置1/置0控制字来控制的。对应于PC<sub>4</sub>。</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF"> </font><font
face="宋体" size="5" color="#00FFFF">如果一个外设既可以作为输入设备,也可以作为输出设备,并且输入输出动作不会同时进行,那么,该外设与8255A的端口A相连时,可以令端口A工作在方式2。</font></p>
</blockquote>
<h3 align="left"><font face="宋体" size="5" color="#FFFFFF">五、8255A应用举例</font></h3>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1、8255A作为机床开关量输入输出接口,简图如下所示,令端口A为输入,端口B和端口C为输出,都工作在方式0。</font></p>
</blockquote>
<p align="left"><a href="8255yybig.gif"><img src="8255yy.gif" width="740" height="398"
alt="8255yy.gif (9774 bytes)"></a></p>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">图中,8255A的端口地址为2E0H~2E3H。其方式选择控制字为90H。</font></p>
</blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">1)设置工作方式:</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,90H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV DX,2E3H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT DX,AL</font></p>
</blockquote>
</blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">2)读入端口A的值,并判断PA<sub>1</sub>对应的开关是否合上。</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV DX,2E0H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">IN AL,DX</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">TEST AL,02H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">JZ HAV_ON</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">...</font></p>
</blockquote>
</blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">3)将PB<sub>5</sub>对应的指示灯点亮。</font></p>
<blockquote>
<blockquote>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV DX,2E1H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">MOV AL,20H</font></p>
<p align="left"><font face="宋体" size="5" color="#FFFFFF">OUT DX,AL</font></p>
</blockquote>
</blockquote>
</blockquote>
<p align="left"> </p>
<p align="center"><a href="../main/index.htm">返回目录</a></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -