版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章串并行通信和接口技术云南大学《微机原理与接口技术》6.1接口的功能及其在系统中的连接6.2串行通信与串行接口
*6.3可编程串行接口8251A
6.4并行通信与并行接口
6.5可编程并行接口5255A
*6.68255A的应用6.1接口的功能以及在系统中的连接6.1.1接口的功能1.寻址功能 5.中断管理功能2.输入输出功能 6.复位功能3.数据转换功能 7.可编程功能4.联络功能 8.错误检测功能6.2串行通信与串行接口串行接口串行通信概念6.2.1串行接口控制寄存器用来容纳CPU送给此接口的各种控制信息,而控制信息决定接口的工作方式。状态寄存器每一个状态位可以用来指示传输过程中的某一种错误或者当前传输状态。数据输入寄存器总是和串行输入/并行输入移位寄存器配对使用的。数据输出寄存器和并行输入/串行输出移位寄存器配对使用。可编程串行接口的典型结构每一个状态位可以用来指示传输过程中的某一种错误或者当前传输状态6.2.2串行通信的概念串行通信:将数据分解成二进制位用一条信号线,一位一位顺序传送的方式串行通信的优势:用于通信的线路少,因而在远距离通信时可以极大地降低成本串行通信适合于远距离数据传送,也常用于速度要求不高的近距离数据传送PC系列机上有两个串行异步通信接口、键盘、鼠标器与主机间采用串行数据传送(1)单工方式:
允许一个方向传输数据。(2)半双工方式:允许两个方向传输数据,但不能同时传输。输入和输出过程使用同一根传输线。(3)全双工方式:系统可以同时进行发送和接收。在数据通信系统中,分别由两根不同的传输线传送。一.串行通信的工作方式全双工站A站B站A站B站A站B半双工单工一.串行通信的工作方式(续)二.串信通信数据收发方式
串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。采用同步通信时,字符可以一个一个地传输,中间没有空隙。而采用异步通信时,两个字符之间的传输间隔是任意的,每个字符的前后都要用一些数位来作为分割位。1.异步通信串行通信时的数据、控制和状态信息都使用同一根信号线传送收发双方必须遵守共同的通信协议(通信规程),才能解决传送速率、信息格式、位同步、字符同步、数据校验等问题串行异步通信以字符为单位进行传输,其通信协议是起止式异步通信协议起止式异步通信协议起始位——每个字符开始传送的标志,起始位采用逻辑0电平起始位校验位停止位空闲位数据位低位高位字符0/10/10/10/110111…数据位——数据位紧跟着起始位传送。由5~8个二进制位组成,低位先传送校验位——用于校验是否传送正确;可选择奇检验、偶校验或不传送校验位停止位——表示该字符传送结束。停止位采用逻辑1电平,可选择1、1.5或2位空闲位——传送字符之间的逻辑1电平,表示没有进行传送2.同步通信以一个数据块(帧)为传输单位,每个数据块附加1个或2个同步字符,最后以校验字符结束同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂串行同步通信主要应用在网络当中最常使用高级数据链路控制协议HDLC~~~~同步字符数据数据数据校验字符单同步:传送数据前先送一个同步字符。
双同步:先送两个同步字符。
外同步:用专用控制线传送同步字符。SYNC数据字节1SYNC数据字节2…...数据字节NCRC1CRC2SYNC数据字节1数据字节2…...数据字节NCRC1CRC2数据字节1数据字节2…...数据字节NCRC1CRC2幀同步通信(面向字符型的数据格式)
以幀为单位传输,每幀由六个部分组成。开始标志为7EH
一个字节的地址场一个字节的控制场数据,是位的集合两个字节的循环控制码结束标志01111110地址场D0D1D2…DNCRC1CRC2幀控制场01111110同步通信(面向比特型的数据格式)同步/异步通信的效率(协议开销)例:考虑下列异步传输过程:设每个字符对应1个起始位、7个信息位、1个奇偶校验位和1个停止位。如果波特率为1200bps,则每秒钟能传输的最大字符数为1200/10=120个:再考虑同步传输例子。设1200bps的波特率工作,用4个同步字符作为信息帧头部,但不用奇偶校验,则传输100个字符所用的时间为(100+4)/1200=0.6067s,即每秒可传输的字符数为100/0.6067=165个结论:哪种方式效率高?三.串行通信的物理标准1.传输率--波特率(
BaudRate)波特率因子:数据传输率(波特率)与时钟频率之间的比例系数.给定时钟频率,选择不同的波特率因子可得到不同的波特率。例如:f=19.2kHz,若选波特率因子为16,则波特率为1200bps。三.串行通信的物理标准1.传输率--波特率(
BaudRate)所谓传输率就是指每秒传输多少位,串行传输率也叫波特率。波特率是指每秒传输的离散信号的数目。时钟频率=波特率
波特率系数
国际上规定一个标准波特率系列,标准波特率系列为110、300、600、1200、4800、9600和19200。1)近距离通信:RS-232-C标准。不用MODEM时,传送距离15米以内。
2)远距离通信
RS-232-C与调制解调器、电话线一起。
RS-422标准:采用平衡发送,差分接收,以抑制共模干扰。不用MODEM时,传输速率可达10000位/秒。传送距离可达1200米。3)RS-485标准:与422兼容,允许有多个发送器,不用MODEM时,传输速率为100KB/秒~9600B/秒。传送距离可达1200米~15000米。2.传输距离RS-232-C标准对下述两个方面作了规定:25根引线信号电平标准;控制信号的定义。
RS-232-C采用负逻辑规定逻辑电平,信号电平与通常的TTL电平也不兼容。
RS-232-C将:-5V~-15V规定为“1”,+5V~+15V规定为“0”。3、RS-232-C标准
下图是TTL标准和RS232标准之间的电平转换电路。TTL
RS232RS232
TTL返回本章6.3可编程串行通信接口8251A
6.3.18251A的基本性能(1)通过编程,8251A可以工作在同步方式,也可以工作在异步方式。(2)同步方式下,波特率为0~64Kbps。异步方式下,波特率为0~19.2Kbps。
6.3.28251A的内部结构1、发送器:2、接收器3、数据总线缓冲器4、读/写控制逻辑电路5、外设(调解/解调)控制电路
8251A的编程结构
8251A可用来作为CPU与外设或调制解调器之间的接口,如后图所示。它的接口信号可以分为两组:一组为与CPU接口的信号;另一组为与外设(或调制器)接口的信号。6.3.38251A的接口信号8251A是一个可编程的多功能通信接口。所以在具体使用时必须对它进行初始化编程,确定它的具体工作方式。例如:规定工作于同步还是异步方式;传送的波特率;字符格式等等。6.3.48251A的编程1.8251A的初始化
①复位,第一次用奇地址端口写入的值作为模式字,进入方式寄存器;
②若方式字是同步方式,CPU接着往奇地址端口写入一个或两个同步字符,并进入同步字符寄存器;
③然后,由CPU往奇地址端口写入的值作为控制字,往偶地址端口写入的值作为数据送入数据寄存器。2.模式寄存器、控制寄存器和状态寄存器的格式6.3.58251A的编程举例例1:设置异步模式字使8251A处于异步方式,波特率因子为64,用8个数据位,偶校验,1个停止位。
01111111=7FH例2:设置同步模式字,使8251A处于同步模式,用2个同步字符,7个数据位,奇/偶校验为偶校验。
00111000=38H异步同步当采用查询方式,异步传送,双方实现半双工通信时,初始化程序由两部分组成,一部分是将一方定义为发送器,另一部分是将对方定义为接收器、发送器CPU每查询到TXRDY有效。则向8251A并行输出一个字节数据;接收端CPU每查询到RXRDY有效,则从8251A并行输入一个字节数据;一直进行到全部数据传送完毕为止。例3:双机通信NEXT:MOVDX,8251A控制端
INAL,DXTESTAL,01H;查询TXRDY=1?JZNEXTMOVDX,8251A数据端口
MOVAL,[DI]OUTDX,ALINCDILOOPNEXTHLT向8251A输出一个字节接收端程序:SRR:MOVDX,8251A控制端口
MOVAL,7FHOUTDX,ALMOVAL,04HOUTDX,ALMOVDI,接收数据块首地址
MOVCX,接收数据字节数COMT:MOVDX,8251控制口
INAL,DXTESTAL,02H;查询RXRDY=1?JZCOMTTESTAL,08H;查询有奇偶校验错?JNZERR初始化8251AMOVDX,8251数据口
INAL,DX;输入一个数据
MOV[DI],ALINCDILOOPCOMTHLTERR:;出错处理
返回本章6.4并行通信和并行接口并行通信就是把一个字符的各数位用几条线同时进行传输。以计算机的字长,通常是8位、16位或32位为传输单位,一次传送一个字长的数据与串行通信相比,在同样的传输率下,并行通信的信息实际传输速度快、信息率高。适合于外部设备与微机之间进行近距离、大量和快速的信息交换例如:微机与并行接口打印机、磁盘驱动器实现并行通信的接口就是并行接口。返回本章6.5可编程并行接口电路8255A具有多种功能的可编程并行接口电路芯片最基本的接口电路:三态缓冲器和锁存器与CPU间、与外设间的接口电路:状态寄存器和控制寄存器还有端口的译码和控制电路、中断控制电路分3个端口,共24个引脚共三种输入输出工作方式返回本章6.5.18255A的内部结构和引脚数据总线缓冲器内部控制线内部数据线D0~D7A组控制A组端口AA组端口C上部B组控制B组端口BB组端口C下部读写控制逻辑PC0~PC3PB0~PB7PC4~PC7PA0~PA7RDWRA0A1CSRESET1.外设数据端口端口A:PA0~PA7A组,支持工作方式0、1、2端口B:PB0~PB7B组,支持工作方式0、1端口C:PC0~PC7仅支持工作方式0A组控制高4位PC4~PC7B组控制低4位PC0~PC3端口A:PA0~PA7常作数据端口,功能最强大端口B:PB0~PB7常作数据端口端口C:PC0~PC7可作数据、状态和控制端口分两个4位,每位可独立操作控制最灵活,最难掌握2.与处理器接口CS*A1A0I/O地址读操作RD*写操作WR*00000101001160H61H62H63H读端口A读端口B读端口C非法写端口A写端口B写端口C写控制字D0~D7数据线 A0~A1地址线RD*读信号 WR*写信号CS*片选信号 RESET复位信号6.5.28255A的编程初始化编程:一个方式控制字采用控制I/O地址:A1A0=11工作过程中:通过数据端口对外设数据进行读写数据读写利用端口A、B和C的I/O地址,A1A0依次等于00、01、10IBMPC/XT机上,端口A、B、C和控制端口的I/O地址为60H、61H、62H和63H1.写入方式控制字:控制字格式1.写入方式控制字:示例要求:A端口:方式1输入C端口上半部:输出,C口下半部:输入B端口:方式0输出方式控制字:10110001B或B1H初始化的程序段:
movdx,0fffeh ;假设控制端口为FFFEH
moval,0b1h ;方式控制字
outdx,al ;送到控制端口2.读写数据端口初始化编程后:当数据端口作为输入接口时,执行输入IN指令将从输入设备得到外设数据当数据端口作为输出接口时,执行输出OUT指令将把CPU的数据送给输出设备8255A具有锁存输出数据的能力对输出方式的端口同样可以输入不是读取外设数据读取的是上次CPU给外设的数据2.读写数据端口:示例利用8255A的输出锁存能力,可实现按位输出控制
对输出端口B的PB7位置位的程序段:
movdx,0fffah ;B端口假设为FFFAH
inal,dx ;读出B端口原输出内容
oral,80h ;使PB7=1
outdx,al ;输出新的内容3.读写端口C:归纳1C端口被分成两个4位端口,两个端口只能以方式0工作,可分别选择输入或输出在控制上,C端口上半部和A端口编为A组,C端口下半部和B端口编为B组3.读写端口C:归纳2当A和B端口工作在方式1或方式2时,C端口的部分或全部引脚将被征用其余引脚仍可设定工作在方式03.读写端口C:归纳3对端口C的数据输出有两种办法通过端口C的I/O地址:向C端口直接写入字节数据。这一数据被写进C端口的输出锁存器,并从输出引脚输出,但对设置为输入的引脚无效通过控制端口:向C端口写入位控字,使C端口的某个引脚输出1或0,或置位复位内部的中断允许触发器端口C的置1/置0控制字0D7D6D5D4D3D2D1D01=置10=置0端口C置1/0控制字000PC0001PC1010PC2011PC3100PC4101PC5110PC6111PC7例:设8255A的控制口地址为00EEH,要求对端口C的PC7置1,则控制字00001111B=0FH,要求对端口C的PC3置0,控制字为00000110B=06H。下面的程序可以实现上述要求:
MOVAL,0FH;对PC7置1的控制字
MOVDX,00EEH;控制口地址送DXOUTDX,AL;对PC7置1操作
MOVAL,06H;对PC3置0的控制字
OUTDX,AL;对PC3进行置0的操作3.读写端口C:归纳4读取的C端口数据有两种情况未被A和B端口征用的引脚:将从定义为输入的端口读到引脚输入信息;将从定义为输出的端口读到输出锁存器中的信息被A和B端口征用作为联络线的引脚:将读到反映8255A状态的状态字D7D6D5D4D3D2D1D0方式1输入I/OI/OIBFAINTEAINTRAINTEBIBFBINTRB方式1输出OBFAINTEAI/OI/OINTRAINTEBOBFBINTRB方式2双向OBFAINTE1IBFAINTE2INTRA×××端口C的状态字A组B组6.5.38255A的工作方式1.方式0:基本输入输出方式任何一个端口(A、B、C上、C下)都可作为输入口或输出口,各端口之间没有必然的联系。各个端口输入或输出,可以有16种不同的组合,所以可以适用于多种使用场合。适用于无条件传送和查询方式的接口电路。方式0输入时序datadata输入端口D0~D7RDCS,A1,A0请体会这里8255A的数据缓冲作用方式0输出时序WRdatadata输出端口D0~D7CS,A1,A08255A对CPU通过它输出给外设的数据进行锁存6.5.38255A的工作方式2.方式1:选通输入输出方式端口A和端口B可分别作为两个数据口工作于方式1,并且任意一个端口可作为输入口或输出口。但同时规定端口C的某些位作为控制或状态信息。每一个端口包含有:
8位的数据端口;
三条控制线(是固定指定的,不能用程序改变);
提供中断逻辑。任一个端口都可作为输入或输出。若只有一个端口工作于方式1,余下的13位,可以工作在方式0(由控制字决定)。若两个端口都工作于方式1,端口C还留下两位,这两位可以由程序指定作为输入或输出,也具有置位/复位功能。适用于查询和中断方式的接口电路方式1输入引脚:A端口数据选通信号表示外设已经准备好数据输入缓冲器满信号表示A口已经接收数据中断请求信号请求CPU接收数据PC4PC5PC3PA7~PA0INTEAIBFAINTRASTBA中断允许触发器方式1输入引脚:B端口PC2PC1PC0PB7~PB0INTEBIBFBINTRBSTBB数据选通信号表示外设已经准备好数据输入缓冲器满信号表示A口已经接收数据中断请求信号请求CPU接收数据中断允许触发器方式1输入联络信号STB*——选通信号,低电平有效由外设提供的输入信号,当其有效时,将输入设备送来的数据锁存至8255A的输入锁存器IBF——输入缓冲器满信号,高电平有效8255A输出的联络信号。当其有效时,表示数据已锁存在输入锁存器INTR——中断请求信号,高电平有效8255A输出的信号,可用于向CPU提出中断请求,要求CPU读取外设数据方式1输入时序dataINTRIBF
data输入端口D0~D7STBRD方式1中断控制8255A的中断由中断允许触发器INTE控制置位允许中断,复位禁止中断对INTE的操作通过写入端口C的对应位实现,INTE触发器对应端口C的位是作应答联络信号的输入信号的哪一位,只要对那一位置位/复位就可以控制INTE触发器选通输入方式下端口A的INTEA对应PC4端口B的INTEB对应PC2方式1输出引脚:A端口外设响应信号表示外设已经接收到数据输出缓冲器满信号表示CPU已经输出了数据中断请求信号请求CPU再次输出数据PC6PC7PC3PA7~PA0INTEAOBFAINTRAACKA中断允许触发器方式1输出引脚:B端口PC2PC1PC0PB7~PB0INTEBOBFBINTRBACKB外设响应信号表示外设已经接收到数据输出缓冲器满信号表示CPU已经输出了数据中断请求信号请求CPU再次输出数据中断允许触发器方式1输出联络信号OBF*——输出缓冲器满信号,低有效8255A输出给外设的一个控制信号,当其有效时,表示CPU已把数据输出给指定的端口,外设可以取走ACK*——响应信号,低有效外设的响应信号,指示8255A的端口数据已由外设接受INTR——中断请求信号,高有效当输出设备已接受数据后,8255A输出此信号向CPU提出中断请求,要求CPU继续提供数据方式1输出时序
INTR
datadata输出端口D0~D7WROBFACK
6.5.38255A的工作方式3.方式2:双向选通传送方式适用于与双向传送数据的外设适用于查询和中断方式的接口电路方式2双向方式方式2将方式1的选通输入输出功能组合成一个双向数据端口,可以发送数据和接收数据只有端口A可以工作于方式2,需要利用端口C的5个信号线,其作用与方式1相同方式2的数据输入过程与方式1的输入方式一样方式2的数据输出过程与方式1的输出方式有一点不同:数据输出时8255A不是在OBF*有效时向外设输出数据,而是在外设提供响应信号ACK*时才送出数据方式2双向引脚PC6PC7PC3PA7~PA0INTE1OBFAINTRAACKAPC4PC5IBFASTBAINTE2用PC6设置INTE1(输出)用PC4设置INTE2(输入)输入和输出中断通过或门输出INTRA信号方式2双向时序data-out
INTR
data-outdata-indata-inPA0~PA7D0~D7IBF
WROBFACKSTBRD6.5.48255使用举例例1、用8255A控制三个发光二极管依秩序循环显示。假设开关闭合时,点亮发光二极管,开关断开时熄灭二极管。8255A的端口地址为:
A端口:0040HB端口:0042HC端口:0044H
控制口:0046H
试设计接口电路,编写8255初始化程序段和控制三个发光二极管显示程序段。1、硬件设计:
PA0PA1PA28255AA0A1
PB0CS+5V200+5V2K译码器D7~D0地址线8086CPU开始8255A初始化延时2号亮延时3号亮1号亮延时启动?Y返回DOSN1)设A口为输出口,方式0。B口输入,方式0,则方式选择控制字为10000010B=82H。2)A口输出代码:
00000110
06H,1号发光二极管亮
0000010105H,2号发光二极管亮
0000001103H,3号发光二极管亮3)软件延时(1).1ms的软件延时参考程序:设系统的CPU的频率为8MHZ,则时钟节拍为:0.125微秒。执行PUSHF、POPF、LOOP指令需29个节拍。延迟1毫秒要循环的次数:2、软件设计DELAYPROCNEARPUSHCXSTAR20T:MOVCX,275;送循环次数
LP1:PUSHF;PUSHF、POPF、LOOP需29个节拍。
POPFLOOPLP1POPCXRETDELAYENDPDATASEGMENTport3EQU046H;8255A控制口地址port1EQU040H;8255A的A口地址port2EQU042H;8255A的B口地址LEDDB06H,05H,03H;LED显示值DATAENDSSTACKSEGMENTSTA1DW50DUP(?)TOP1EQULENGTHSTA1STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK…...MOVDX,port3MOVAL,82H;方式0
OUTDX,AL;A口为输出,B口为输入DON:MOVDX,port2;B口地址
INAL,DX;读B口输入值
ANDAL,01H;测 PB0=0?启动?
JNZDON;非0再查询;否则,使灯亮
MOVDX,port1;A口地址
MOVBX,OFFSETLED;1号灯代码地址
MOVAL,[BX]
OUTDX,AL;1号灯亮
CALLDELAY;调延时程序
INCBXMOVAL,[BX]
OUTDX,AL;2号灯亮,1号灯灭
CALLDELAYINCBXMOVAL,[BX]OUTDX,AL;3号灯亮,2号灯灭
CALLDELAYJMPDONEXIT:MOVAH,4CHINT21H
….
DEALYPROCNEAR;软件延时
….RETDEALYENDPCODEENDS
END例2:8255A工作于方式1,作为用中断方式工作的Centronics360字符打印机的接口。A端口为数据口,方式1,输出方式,PC7作为输出缓冲器满OBF*信号,PC6作为外设响应信号ACK*,PC3作为INTR信号。端口地址:A端口:00C0H,B端口:00C2HC端口:00C4H
控制口:00C6H;
控制字:10100000B=0A0HOBF注意:当ACK为低时,OBF为高.1).初始化8255A程序段:
MOVAL,0A0H;主程序段
OUT0C6H,AL;设置8255A的控制字
MOVAL,0CH;置PC6=1控制字
OUT0C6H,AL;使INTE(PC6)为0,禁止中断2).用查询方式输出10个字符程序段:MOVCX,10MOVSI,OFFSETBUF;取缓冲区首地址P1:MOVAL,[SI];取一个字符
OUT0C0H,AL;从A口输出P2:INAL,0C4H;读口CTESTAL,80H;检测OBF(PC7)为1?JZP2;为0,继续检测
INCSI;为1,数据已输出,准备下次输出
LOOPP1例题3:8255端口A工作于方式0,输出8位数字信息到DAC0832;端口B工作于方式1输入,接收模数转换输入信号.8255方式0输出,控制字:1
00001
10=86H方式选择A口方式0A口输出C口高4输出B口方式1B口输入C口低位不用PC2自动作STB信号,PC7作ADC0809的启动转换信号.8086CPU8255ADAC0832ADC0809PA7~PA0PB7~PB0PC2PC7控制系统D7~D0PC0D7~D0D7~D0INTRIN0STARTEOC1)初始化8255A:MOVDX,8255_CTRL;8255A控制端口地址送DXMOVAL,86H;设8255端口A方式0输出,端口B方式1输入;C口高4位输出OUTDX,ALMOVAL,05HOUTDX,AL;置PC2=1,允许中断2)用8255A的PC7启动ADC0809:MOVDX,8255_C;8255A端口C地址送DXMOVAL,80H;PC7输出1OUTDX,ALMOVAL,0OUTDX,AL;PC7输出0,启动ADC08093)中断处理程序
MOV DX,8255_B IN AL,DX … MOV DX,8255_A MOV AL,** OUT DX,AL返回本章6.68255A的应用作为通用的并行接口电路芯片,8255A具有广泛的应用应用在IBMPC/XT微机上应用于打印机接口电路连接简易键盘驱动LED数码管……6.6.18255A在IBMPC/XT上的应用工作在基本输入/输出方式0端口A为方式0输入,用来读取键盘扫描码端口B工作于方式0输出,例如控制扬声器等端口C为方式0输入,读取系统状态和配置系统的初始化编程:
moval,10011001b ;方式控制字99H
out63h,al打印机接口的信号与时序BUSYDATA0~7ACKSTROBE主机把数据送给引脚DATA0~DATA7同时送出数据选通信号STROBE*打印机在BUSY信号线上发出忙信号打印机处理好输入的数据时撤消忙信号同时又送出一个响应信号ACK*6.6.2用8255A方式0与打印机接口BUSY
DATA0~78255APC7PC2PA0~PA7打印机STROBE8255A的初始化
movdx,0fffeh ;控制端口地址:FFFEH
moval,10000001B ;方式控制字:91H outdx,al ;A端口方式0输出,C端口上输出、下输入
moval,00001111B ;端口C的复位置位控制字,使PC7=1 outdx,al例6.1打印子程序:查询printc proc pushax pushdxprn: movdx,0fffch ;读取端口C
inal,dx ;查询打印机状态
andal,04h ;PC2=BUSY=0?
jnz
prn ;PC2=1,打印机忙,则循环等待例6.1打印子程序:输出
movdx,0fff8h ;PC2=0,打印机不忙,则输出数据
moval,ah
outdx,al ;将打印数据从端口A输出例6.1打印子程序:打印
movdx,0fffeh ;从PC7送出控制低脉冲
moval,00001110B ;置STROBE*=0 outdx,al
nop ;产生一定宽度的低电平
nop
moval,00001111B ;置=1 outdx,al ;最终,STROBE*产生低脉冲信号例6.1打印子程序:返回
popdx popax retprintc
endp例6.16.6.3用8255A方式1与打印机接口1000pf2K15321441LS123单稳电路+5VDATA0~78255APC6INTRPC3PC7PA0~PA7打印机ACKACKOBFSTROBE8255A方式1与打印机接口时序配合PA0~PA7(DATA0~7)ACKOBFSTROBE方式1时序打印机时序8255A的初始化
movdx,0fffeh
moval,0a0h outdx,al
moval,0ch
;使INTEA(PC6)为0,禁止中断
outdx,al
……
mov
cx,counter ;打印字节数送CX
mov
bx,offsetbuffer ;取字符串首地址
callprints ;调用打印子程序例6.2打印子程序:输出prints proc pushax ;保护寄存器
pushdxprint1: mov
al,[bx] ;取一个数据
movdx,0fff8h
outdx,al ;从端口A输出例6.2打印子程序:查询
movdx,0fffchprint2: inal,dx
testal,80h ;检测(PC7)为1否?
jzprint2 ;为0,说明打印机没有响应,继续检测例6.2打印子程序:返回
incbx ;为1,说明打印机已接受数据
loopprint1 ;准备取下一个数据输出
popdx ;打印结束,恢复寄存器
popax ret ;返回prints endp例6.26.6.4双机并行通信接口PA0~PA7PC4PC08255A甲方(发送)PA0~PA7PC7PC68255A乙方(接收)甲机的初始化
movdx,0fffeh
moval,0a0h
outdx,al ;工作方式字:端口A方式1输出
moval,0dh ;使PC6(INTEA)=1,允许中断
outdx,al例6.3甲机发送程序
trsmt: movdx,0fffch
inal,dx ;查询PC3(INTRA)=1?
andal,08h
jz
trsmt
movdx,0fff8h ;发送数据
moval,ah
outdx,al例6.3乙机的初始化
movdx,0fffeh
moval,98h
outdx,al ;工作方式字:端口A方式0输入
moval,01h ;使PC0(ACK*)=1,因尚未收到数据
outdx,al例6.3乙机:查询接收 receive: movdx,0fffch
inal,dx ;查询PC4(OBF*)=0?
andal,10h
jnzreceive
movdx,0fff8h;接收数据
inal,dx
movah,al例6.3乙机:接收响应
movdx,0fffeh
moval,00h ;使PC0(ACK*)=0
outdx,al
nop ;适当延时,产生一定宽度的低脉冲
nop
moval,01h ;使PC0(ACK*)=1
outdx,al ;产生低脉冲ACK*信号例6.3**6.7键盘及其接口键盘是微机系统最常使用的输入设备小键盘:适用于单板机或以微处理器为基础的仪器,实现数据、地址、命令及指令等的输入独立键盘:通过5芯电缆与PC微机主机连接6.7.1简易键盘的工作原理+5V+5V+5V最简单的线性结构键盘每一个引脚连接一个键输入0/1反映健是否高低6.7.1简易键盘的工作原理+5V+5V控制线检测线常用的矩阵结构键盘每行连接一个引脚每列连接一个引脚利用控制线为低、
读取检测线来识别闭合键1.扫描法先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合(通过检查列线电位实现)此后,再将第1行接地,然后检测列线是否有变为低电位的线。如此往下一行一行地扫描,直到最后一行在扫描过程中,当发现某一行有键闭合时,便在扫描中途退出通过组合行线和列线可识别此刻按下的是哪一键第1段:是否有键按下key1: moval,00
mov
dx,rowport
outdx,al ;使所有行线为低电平
mov
dx,colport
inal,dx ;读取列值
cmpal,0ffh ;判定是否有列线为低电平
jzkey1 ;无闭合键,循环等待
calldelay ;有,延迟20ms清除抖动键盘扫描程序第2段:识别按键(扫描)
movcx,8 ;行数送CX
movah,0feh ;扫描初值送AHkey2: moval,ah
mov
dx,rowport
outdx,al ;输出行值(扫描值)
mov
dx,colport
inal,dx ;读进列值键盘扫描程序第2段:识别按键(判断)
cmpal,0ffh ;判断有无低电平的列线
jnzkey3 ;有,则转下一步处理
rolah,1 ;无,则移位扫描值
loopkey2 ;准备下一行扫描
jmpkey1 ;所有行都没有键按下,则返回继续检测key3: …… ;此时,al=列值,ah=行值键盘扫描程序2.反转法首先,将行线作为控制线接一个输出端口,将列线作为检测线接一个输入端口CPU通过输出端口将行线(控制线)全部设置为低电平,然后从输入端口读取列线(检测线)然后,将行线和列线的作用互换,即将列线作为控制线接输出端口,行线作为检测线接输入端口将刚才读得的列值从列线所接端口输出,再读取行线的输入值这样,当一个键被按下时,必定可以读得一对唯一的行值和列值条件:连接行线和列线的接口电路必须支持动态改变输入、输出方式第1段:是否有键按下
…… ;设置行线接输出端口,列线接输入端口key2: moval,00
mov
dx,rowport
outdx,al ;设置行线全为低
mov
dx,colport
inal,dx ;读取列值
cmpal,0ffh
jzkey2 ;无闭合键,循环等待
pushax ;有闭合键,保存列值
pushax键盘扫描程序第2段:识别按键(反转法) …… ;设置行线接输入端口,列线接输出端
mov
dx,colport popax outdx,al ;输出列值
mov
dx,rowport inal,dx ;读取行值
popbx ;组合行列值
mov
ah,bl ;此时,al=行值,ah=列值键盘扫描程序行列值表和键代码表 ;键盘的行列值表table
dw0fefeh ;键0的行列值(键值)
dw0fdfeh ;键1的行列值
dw0fbfeh ;键2的行列值
…… ;其他键的行列值
;键盘的键代码表char db…… ;键0的代码值
db…… ;键1的代码值
…… ;其他键的代码值键盘扫描程序第3段:查找键代码
mov
si,offsettable
mov
di,offsetchar
movcx,64 ;CX=键的个数key3: cmp
ax,[si] ;与键值比较
jzkey4 ;相同,说明查到
incsi ;不相同,继续比较
incsi incdi loopkey3
jmpkey1 ;全部比较完,仍无相同,说明是重键键盘扫描程序第4段:等待按键释放key4: mov
al,[di] ;获取键代码送AL …… ;判断按键是否释放,没有则等待
calldelay ;按键释放,延时消除抖动
…… ;后续处理键盘扫描程序3.抖动和重键问题机械按键存在抖动现象当按下或释放一个键时,往往会出现按键在闭合位置和断开位置之间跳几下才稳定到闭合状态抖动的持续时间通常不大于10ms采用硬件消抖电路或软件延时方法解决重键指两个或多个键同时闭合出现重键时,读取的键值必然出现有一个以上的0是否给予识别和识别哪一个键重键问题的处理简单情况:不予识别,认为是错误的按键通常情况:只承认先识别出来的键连锁法:直到所有键都释放后,读入下一个键巡回法:等被识别的键释放以后,就可以对其他闭合键作识别,而不必等待全部键释放正常的组合键:都识别出来DBPB6PB7PAIRQ1T1P10P21P11P22P204GND1CLOCK2DATA5+5V3RESETPC机键盘系统板80488255A8259ALS322串并转换器键盘阵列按键选通6.7.2PC机键盘的工作原理1.PC机键盘的工作过程键盘电路正常工作时不断地扫描键盘矩阵有按键,则确定按键位置之后以串行数据形式发送给系统板键盘接口电路键按下时,发送该键的接通扫描码键松开时,发送该键的断开扫描码若一直按住某键,则以拍发速率(每秒2~30次)连续发送该键的接通扫描码2.键盘接口电路的工作过程接收一个串行形式字符以后,进行串并转换然后产生键盘中断IRQ1请求,等待读取键盘数据CPU响应中断,则进入09H键盘中断服务程序:
①读取键盘扫描码:用INAL,60H即可
②响应键盘:系统使PB7=1 ③允许键盘工作:系统使PB7=0 ④处理键盘数据
⑤给8259A中断结束EOI命令,中断返回3.PC机键盘中断服务程序09H号中断服务程序(kbint过程)完成常规的操作处理键盘数据:将获取的扫描码通过查表转换为对应的ASCII码送缓冲区。对于不能显示的按键,则转换为0,且不再送至缓冲区键盘I/O功能程序(kbget子程序)从缓冲区中读取转换后的ASCII码功能调用(主程序)循环显示键入的字符键盘缓冲区中断服务程序与子程序之间传递参数先进先出循环队列队列空进队列出队列队列满buffer0129队列始端队列末端键盘缓冲区buffer db
10
dup(0)bufptr1
dw0 ;队列头指针bufptr2
dw0 ;队列尾指针例6.4buffer0129队列始端队列末端bufptr1bufptr2键盘代码表scantb db0,1,’1234567890-=’,08h ;键盘第1排的按键,从ESC到退格
db
0,’qwertyuiop[]’,0dh ;键盘第2排的按键,从Tab到回车
…… db0,0,’789-456+1230.’ ;右边小键盘,从NumLock到Del例6.4设置中断向量1
movax,3509h
int21h pushes pushbx ;保存09H号原中断向量
cli ;关中断
pushds ;设置09H号新中断向量
mov
ax,seg
kbint
mov
ds,ax
mov
dx,offset
kbint例6.4设置中断向量2
movax,2509h
int
21h
pop
ds
inal,21h ;允许IRQ1中断,其他不变
pushax andal,0fdh
out
21h,al
sti ;开中断例6.4调用并显示start1: callkbget ;获取按键的ASCII码
cmpal,1
jzstart2 ;是ESC键,则退出
pushax ;保护字符
movdl,al ;显示字符
movah,2
int21h popax ;恢复字符例6.4处理回车符
cmpal,0dh ;该字符是回车符吗?
jnzstart1 ;不是,取下一个按键字符
movdl,0ah ;是回车符,则再进行换行
movah,2
int21h
jmpstart1 ;继续取字符例6.4恢复中断向量start2: cli popax out21h,al popdx popds
movax,2509h
int21h
sti
movax,4c00h ;返回DOS
int21h例6.4子程序:判断缓冲区空否kbget
prockbget1:
push
bx ;保护BX
cli
movbx,bufptr1 ;取头指针
cmpbx,bufptr2 ;与尾指针相等否?
jnzkbget2 ;不相等,说明缓冲区有字符,转移
sti
;相等,说明缓冲区空
popbx
jmp
kbget1 ;等待缓冲区有字符例6.4子程序:获取按键字符kbget2: mov
al,buffer[bx] ;取字符送AL
inc
bx
;队列头指针增量
cmp
bx,10 ;是否指向队列末端
jckbget3 ;没有,转移
mov
bx,0 ;指针指向队列末端,则循环,指向始端kbget3:
movbufptr1,bx ;设定新队列头指针
sti
pop
bx
retkbget
endp例6.4中断服务程序:响应键盘kbint proc
sti ;开中断
pushax ;保护寄存器
pushbx
in
al,60h ;读取键盘扫描码
pushax
in
al,61h ;使PB7=1,响应键盘
oral,80h
out
61h,al
and
al,7fh ;使PB7=0,允许键盘
out
61h,al例6.4中断服务程序:数据处理
popax
test
al,80h ;是断开扫描码?
jnzkbint2 ;是,则退出
mov
bx,offset
scantb ;是接通扫描码,取表首地址
xlat ;将扫描码转换成ASCII码
cmpal,0
;是否为合法的ASCII码?
jz
kbint2 ;不是,则退出例6.4中断服务程序:指针增量
movbx,bufptr2
mov
buffer[bx],al ;将ASCII码存入缓冲区队列尾
incbx ;队列尾指针增量
cmp
bx,10 ;是否指向队列末端?
jckbint1 ;没有,转移
mov
bx,0 ;指针指向队列末端,则循环,指向始端例6.4中断服务程序:判断缓冲区满否kbint1: cmpbx,bufptr1
jzkbint2 ;若队列满,则退出
movbufptr2,bx ;队列不满,设置新的队列尾指针例6.4bufptr1bufptr2buffer41H031H132H239H9队列始端队列末端中断服务程序:中断返回kbint2:
moval,20h ;向8259A发送普通中断结束命令
out
20h,al popbx ;恢复寄存器
popax
iret ;中断返回kbint
endp例6.4**6.8LED数码管及其接口发光二极管LED是最简单的显示设备由7段LED就可以组成的LED数码管LED数码管广泛用于单板微型机、微型机控制系统及数字化仪器中LED数码管可以显示内存地址和数据等1.LED数码管的工作原理主要部分是7段发光管顺时针分别称为a、b、c、d、e、f、g有的产品还附带有一个小数点h通过7个发光段的不同组合主要显示0~9也可显示A~F(16进制数)还可显示个别特殊字符:-、PhgfedcbaLED数码管的结构共阳极阳极+5Vabcdefgh阴极abcdefgh共阴极2.单个LED数码管的显示8255APA0PA1PA2PA3PA4PA5PA6PA7驱动电路abcdefgh单个数码管的显示
LEDtb db3fh,06h,5bh,…… ;显示代码表
……
moval,1 ;AL←要显示的数字
mov
bx,offset
LEDtb
xlat ;换码:AL←DS:[BX+AL]
mov
dx,port
outdx,al ;输出显示软件译码3.多个LED数码管的显示8个数码管:用2个8位输出端口控制硬件上用公用的驱动电路来驱动各数码管软件上用扫描方法实现数码显示位控制端口电路D7D6D5D4D3D2D1D0阳极位0位1位2D0~D7位控制反相寄存驱动bitport,IOW位控制端口作用控制哪个(位)数码管显示当位控制端口的控制码某位为低电平时,经反相驱动,便在相应数码管的阳极加上了高电平,这个数码管就可以显示数据位控制:Di=0,相应位发光D7D6D5D4D3D2D1D0位7位6位5位4位3位2位1位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业可持续发展与环境保护指南
- 2026年电力系统继电保护技术题
- 网络信息安全承诺责任书4篇范文
- 2026年银行校园招聘笔试全真模拟
- 2026年公务员考试申论高分写作宝典
- 信息系统安全守秘管理承诺函6篇
- 在线购物节促销活动策划与执行手册
- 2026年零碳工厂评估师初级笔试高频考点
- 2026年机械加工工中级笔试题集
- 筑牢安全防线远离溺水事故小学五年级主题班会课件
- 延长石油石油员工手册
- 大学语文(第三版)教案 沁园春·叠嶂西驰(教案1)
- 电话邀约话术及技巧
- 新视野大学英语(第四版)读写教程4(思政智慧版)课件 Unit 3 Business success in the new age Section A
- 老年人能力评估师第一章-评估准备
- 绿色食品生产记录表黄瓜
- 消化系统常见肿瘤(临床病理)
- 铁路货车运用维修规程(2021版)
- “减负、增效、提质”理念下基于学科核心素养的小学英语作业设计优化策略研究 论文
- GB/T 26480-2011阀门的检验和试验
- GB/T 13277.3-2015压缩空气第3部分:湿度测量方法
评论
0/150
提交评论