微机原理 课程设计-并行打印机控制

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并行打印机控制
1 概述
打印机是微机系统中主要的硬拷贝输出设备,可以打印文字、数字和图形等,常用的打印机有针式打印机、喷墨打印机和激光打印机,常用的打印机接口类型有标准并行接口、串行USB接口等,除此外还发展了增强型并行接口、扩展型并行接口等。

本次课设采用的是并行接口,能够满足数据传输速度快、传输距离短等条件限制的要求。

本次课设采用8255A工作方式0,其A口充当打印机数据线,C口的PC0
S,C口的PC4接打印机“忙”线BUSY,B口不用,8255A 接打印机选通信号线T B
的初始化可以通过74LS138译码器来实现。

为了用键盘来设定打印内容,可以先定义一个数据段,然后调用DOS的1号功能完成数据存储。

在满足一定的条件下,CPU现将打印内容依次送到8255A,然后再送到打印机打印,数据全部传送并打印完毕后退出程序。

2 并行接口简介
一般来说,外设接口可以分为两类:
[1]串行接口:一组数据按位顺序在一根线上一次传输。

[2]并行接口:一组数据在多根线上同时传输。

并行接口连接CPU与并行外设,实现两者间的并行通信,在信息传送过程中,起到输出锁存或输入缓冲的作用。

并行接口的典型硬件结构包括:
[1]一个或一个以上具有锁存或缓冲的数据端口
[2]与CPU进行数据交换所必须的控制和状态信号
[3]与外设进行数据交换所必须的控制和状态信号
[4]端口译码电路
[5]控制电路
3 可编程并行接口芯片8255A
3.1可编程接口的概念
8255A是常用的可编程接口芯片,可编程接口芯片即指电路的工作状态可由计算机指令编程控制的芯片。

目前所用的接口芯片大部分是多通道、多功能的。

多通道即指一个接口芯片一面与CPU连接,另一面可接几个外设。

多功能即指一个接口芯片能实现多种接口功能。

接口芯片中的各硬件单元不是固定接死而是可以通过编程来控制。

编程控制是指通过计算机指令选择通用接口中的不同通道和不同功能。

8255A是一个通用的可编程的并行接口芯片,它有三个并行I/O口,又可通过编程设置多种工作方式,价格低廉,使用方便,可以直接与Intel系列的芯片连接使用,在中小系统中有着广泛的应用。

3.2 8255A的内部结构
3.2.1并行输入/输出端口
8255A的内部结构如图1所示。

8255A芯片包括3个8位端口:A口、B口和C口,它们均可作为CPU与外设通信时的缓冲器或锁存器,用作缓冲器时是输入接口,用作锁存器时是输出接口。

3.2.2 A组和B组控制
8255A的3个端口都没有自己独立的控制部件,内部将端口分为两组,A组由A口和C口的高4位组成,B组由B口和C口的低4 位组成。

3.2.3读/写控制电路
8255A的读/写控制电路接收来自CPU的控制命令,并根据命令向片内各功能部件发出操作命令。

例如CS为低电平时表示8255A芯片被选中,该片选信号由CPU的地址线通过译码产生。

RD和WR控制8255A和CPU之间的数据或信息的传输方向。

端口选择控制由A1和A0的组合状态提供,这两个控制信号提供4个端口地址,即A、B、C三个端口和一个控制端口地址。

3.2.4数据总线缓冲器
这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。

输入输的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。

3.3 8255A的管脚
8255A是一个标准的40管脚芯片(见附录),可分为3个部分:与外设连接
的I/O线,与CPU连接的系统总线以及电源线。

图1 8255A内部结构图
3.3.1与外设连接的管脚
8255A共有3个8位数据端口,与外设连接的管脚共有24位。

其中A口为PA0至PA7,B口为PB0至PB7,C口为PC0至PC7,特别地,C口可有若干根复用线用于联络信号或状态信号,其具体定义与端口的工作方式有关。

3.3.2与CPU连接的管脚
与CPU连接的管脚包括:
D0至D7:8位,双向,三态数据线,用来与系统数据总线相连;
RESET:复位信号,高电平有效,输入,用来清除8255A的内部寄存器,并置A口,B口,C口均为输入方式;
CS:片选,输入,用来决定芯片是否被选中;
RD:读信号,输入,控制8255A将数据或状态信息送给CPU;
WR:写信号,输入,控制CPU将数据或控制信息送到8255A;
A1A0状态组合与端口操作关系如表1所示:
3.3.3电源线与地线
8255A的电源引脚为Vcc和GND,Vcc一般取+5V,与其他常用芯片相同。

表1 A1A0组合与端口操作关系
3.4 8255A的工作方式及编程
3.4.1 8255A的工作方式
8255A有3中工作方式:
[1]方式0——基本输入/输出方式
[2]方式1——选通输入/输出方式
[3]方式2——双向传输方式
方式0主要工作在无条件的输入/输出方式下,A口、B口和C口均可工作在此方式下被设置成输入/输出口,但不能既做输入口又做输出口C口的输出位可由用户直接独立设置为0或1。

方式1主要工作在异步或条件传输方式下,需要先检查状态然后才能传输数据,仅有A口和B口可工作在方式1,由于条件传输需要联络线,所以C口的某些位分别作为A口和B口提供3根联络线,以便于8255A和CPU之间传送信息和中断请求信号。

方式2的双向传输方式是指在同一端口内分时进行输入/输出操作。

只有A 口可以工作在此方式下,需要由C口提供PC3至PC7共5个控制信号进行联络。

这种联络信号是由8255A内部规定的,而不由使用者指定。

此方式应用于并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出动作不会同时进行的场合。

3.4.2 8255A的编程
8255A的编程就是用户在使用8255A之前,用软件来定义端口的工作方式,
选择所需要的功能,工作方式是由方式控制字来决定的。

(1)方式控制字
8255A分为A口、B口和C口即A、B两组,其控制字格式如图2所示:
D7 D6 D5 D4 D3 D2 D1 D0
A组控制B组控制
图2 方式控制字
D7=1为控制字的标志,A组由D6、D5、D4和D3组成,B组由D2、D1、D0组成,各口工作方式的选择如表2所示:
表2 工作方式选择
对应的各口I/O选择如表3所示:
表3 各口输入/输出选择
(2)C口清0/置1控制字
清0称为复位操作,置1称为置位操作,其格式如图3所示:
图3 C口置位复位控制字
D7=0为该控制字的标志,D6、D5和D4没有定义,可为任意态,通常取0,D3、D2和D1共组成8种编码对应C口的PC0至PC7,D0=0将D3D2D1编码所对应的C口某位清0,D0=1则是进行对应的置1操作。

例如要对C口的PC2为进行置1操作,则D7D6D5D4=0,D3D2D1=010,D0=1,控制字为00000101B,相应的置1程序段如下:
MOV DX,控制口地址
MOV AL,00000101B
OUT DX,AL
特别注意:该控制字是通过写入8255A的控制寄存器来达到对C口的指定位进行置位/复位操作的,对A口和B口均不适用。

3.4.3 8255A的初始化
初始化就是在完成硬件连接之后,使用8255A接口芯片时,我们要对它进行编程,即将相关的方式控制字和C口置位/复位控制字送入8255A,以设定接口芯片的工作方式和选择芯片的接口功能。

这是8255A进入工作状态前,必须要做的工作。

需要特别注意的是:两种不同类型的控制字都是写入同一个端口,或者说在"out"指令中,使用的是同一个端口地址。

初始化完成后:
当数据端口作为输入接口时,执行输入IN指令从输入设备得到外设数据;当数据端口作为输出接口时,执行输出OUT指令将把CPU的数据送给输出设备。

4 74LS138译码器
由于在设定8255A初始化编写控制字时需要利用译码器,我选用了常用的74LS138译码器,它有3个输入控制使能端,C、B、A共3个输入端,对应8种状态组合,还有8个输出端,输出为低电平有效,其功能表如表4所示:
表4 74LS138功能表
5 打印机并行标准接口信号
打印机并行标准接口(Centronics )信号如表5所示:
表5 Centronics 标准引脚信号
TROBE S 简写T B S ,用于数据选通,来自CPU 的数据选通信号使打印机控制器转入数据接收处理。

DATA 1至DATA 8是与计算机相连的8根数据线。

ACKNLG 简写ACK ,是打印机对CPU 的回答信号,表示已处理好CPU 所发来的数据。

INIT 用于初始化输入,是来自CPU 的信号,它对打印机进行初始化。

BUSY是“忙”线,高电平有效,表示打印机忙,不能接收数据。

忙的原因:
[1]打印机脱机。

[2]打印机正在接收数据。

[3]打印纸用完。

[4]打印机故障。

打印机接收CPU数据过程是:当CPU准备好输出打印的一个数据时,通过并行接口送给打印机的数据引脚D0至D7同时将数据选通信号T B
S送给打印机。

答应应急收到该信号后,把数据锁存到内部缓冲区,同时在BUSY信号线上发出忙信号。

打印机处理完数据后撤销忙信号,同时向CPU发送响应信号ACK,CPU根据BUSY信号和ACK信号判断是否发送下一个打印数据。

6 并行打印机控制设计
6.1硬件接线图
本设计所需的硬件设施主要有PC机、打印机、8255A芯片和74LS138芯片以及导线若干,示意图如图4所示。

在Protel99se中硬件接线图如图5所示。

8086CPU 8255A 打印机Array
图4 并行打印机控制设计硬件接线示意图
说明:CPU与8255A对应的8位数据线以及读/写信号线相连,8255A选择工作方式0,在实验室8086CPU提供起始地址为300H,因此选择A9至A3以及M/IO参与74LS138译码。

CPU提供A15至A0共16根地址线,选择A15至A10不定义,即为0。

A9和A8都为1,相与后输出接译码器的高电平有效使能端。

A7不定义,即为0。

M/IO和A6都为0,分别接到译码器的低电平有效使能端。

A2和A1分别接8255A的A1和A0。

A5A4A3全为0,接到译码器的3个信号输入端,则译码器输出端为Y0。

A0不用,即为0。

则完整的16根地址线A15至A0为:XXXXXX1100000000B,其中高位X取0,则有输出端输出地址为:1100000000B,即300H,将Y0输出接到8255A的选通信号端CS即可。

对于8255A的3个8位输出端,选择A口的PA0至PA7分别接到打印机的
S,作为打印机的数D0至D7,作为打印机的数据线。

C口的PC0接打印机的T B
据选通信号,PC7接打印机的BUSY线,用于接收打印机是否“忙”的信息。

则有A口为输出方式,C口高4位为输入方式,低4位为输出方式,B口没用,设为输出方式。

由此知8255A在方式0下的方式控制字为:10001000B,即88H,则可对8255A进行初始化。

对于C口,初始化后,首先要使打印机的数据选通信号线无效,即为高电平,PC0置1控制字为00000001B。

一定条件下,CPU将打印内容下先送到8255A再送到打印机,使打印机选通信号有效,PC0清0控制字为00000000B,打印机接收数据打印后再次使选通信号无效,循环完成打印。

图5 硬件接线图
6.2程序设计
6.2.1程序流程图
图6 程序流程图
6.2.2源程序
A_PORT EQU 300H
B_PORT EQU 302H
C_PORT EQU 304H
CTRL_PORT EQU 306H
DATA SEGMENT
BUFF DB 200 DUP(?)
MESSAGE DB'please input information and strike "Enter" to print'
DB 0dh,0ah
DB'strike "Esc" to exit',0dh,0ah,'$' ;系统提示信息DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV CX,200 ;循环次数设定
LEA SI,BUFF
MOV AH,09H ;显示系统提示信息
LEA DX,MESSAGE
INT 21H
L1:MOV AH,1 ;键盘设定打印内容
INT 21H
MOV [SI],AL ;将打印内容存入BUFF中
CMP [SI],1BH ;判断是否是ESC键
JE FINISH ;若是则退出
CMP AL,0DH ;回车键结束数据输入
JE L2 ;转入打印程序
INC SI ;转入循环存数
LOOP L1
L2:MOV DX,CTRL_PORT ;初始化8255A
MOV AL,88H ;初始化控制字10001000B
OUT DX,AL
MOV AL,0FH ;使数据选通信号ST B为高电平
OUT DX,AL ;置pc0=1,置1控制字00000001B MOV CX,200 ;设置循环次数
LEA DI,BUFF
L3:MOV AL,[DI] ;从BUFF中取数据
MOV BL,AL ;保存数据
L4:MOV DX,C_PORT ;判断打印机的状态
IN AL,DX ;查看BUSY信息
TEST AL,80H ;检测pc7口状态
JNZ L3 ;若忙,则等待
MOV DX,A_PORT ;送数据到8255A
MOV AL,BL
OUT DX,AL
CMP AL,0DH ;判断回车键
JNE L5
MOV DL,0AH ;若是回车键,则输出一行空行
MOV AH,02H
INT 21H
L5:MOV DX,CTRL_PORT ;送数据选通信号ST B MOV AL,0H ;ST B清0,清0控制字00000000B OUT DX,AL
NOP ;延时
NOP
MOV AL,1H ;ST B置1,置1控制字00000001B OUT DX,AL
INC DI
LOOP L3 ;进行下一轮循环
FINISH:MOV AH,4CH
INT 21H
CODE ENDS
END START
6.2.3程序调试及结果分析
根据题意要求,本程序主要需要完成以下三个步骤:
[1]设定数据段用于存放需要打印的内容。

[2]通过并行接口讲一个打印数据由CPU送入8255A锁存,在打印机BUSY 信号不忙,将打印机数据选通信号ST B信号置为有效,8255A将打印数据再送给打印机,然后置ST B无效完成本次打印任务。

[3]步骤[2]完成后,通过程序中的循环结构依次完成打印数据由CPU经8255A再到打印机打印。

在Masm for windows实验集成环境2007中调试程序过程如下:
完成汇编和连接后按运行屏幕分两行显示:
please input information and strike“Enter” to print
strike“Esc” to exit
按Esc后退出程序。

在汇编连接后在DOS环境下进行调试,利用Add watch 查看用于存放打印机打印内容的数据段BUFF,显示:BUFF byte[200] “”,按F9运行程序后,根据屏幕显示内容输入打印字符例如“hjsdfhsjdfhh”,再按Esc,利用Add watch查看BUFF,显示“BUFF byte [200] hjsdfhsjdfhh← ”。

由于程序设计由按下回车键“Enter”来结束打印字符的输入,再转入打印阶段,受硬件条件限制没有接到打印机,按照这运行后因无外设程序不再响应。

通过调试运行的结果发现,用键盘来设定打印内容的要求已经达到。

至于打印阶段,可以从上文的程序及下文的流程图来检验:8255A完成初始化后CPU 将打印字符由数据缓冲器送到打印机,打印机不忙并置选通信号有效,接受数据打印再封锁选通信号执行打印,再由循环控制完成所有打印任务。

心得体会
通过学习先期课程C语言、软件技术基础和VB,我对程序设计有了一定的了解,学习到了程序设计的一般方法和步骤。

模拟电子技术和数字电子技术的学习使我对硬件有了更深的认识。

综合到微机原理与接口技术,我发现自己还有很多知识还很不全面。

在本次设计并行打印机控制接口过程中,我重温了相关知识,有了进一步的提高。

特别地对于8255A这一微机系统中应用最广泛的并行I/O接口芯片,我更了解了其内部结构、各管脚功能、工作方式、初始化以及如何进行并行接口的设计。

在设计的过程中,我曾遇到一些难题,查阅资料特别是在同学的帮助下基本解决。

同时更感觉到自己所学的知识非常有限,不能很好的应用到实际问题中来,以后要加强相关知识的学习,提高自己的理论水平和动手能力。

参考文献
[1]周佩玲.微机原理与接口技术第2版.北京:电子工业出版社,2008.3
[2]谭浩强编著.C语言程序设计.北京:清华大学出版社,1999
[3] 赵国相.微机计算机原理与接口技术第四版.北京:科学出版社,2004.4
[4]耿恒山.微机原理与接口第一版.北京:中国水利水电出版社,2005.10
[5]杨立.微型计算机原理与接口技术第一版.北京:中国水利水电出版社,2005.4
[6]段承先编著.微型计算机原理及接口技术.北京:兵器工业出版社,2000
[7]谢瑞和.微型计算机原理与接口技术教程第一版.北京:科学出版社,2005.8
[8]康华光主编.电子技术基础数字部分第五版.北京:高等教育出版社,2006.1
附录1、8255A管脚如图7所示:
图7 8255A管脚图2、74LS138管脚如图8所示:
图8 74LS138管脚图3、常见DOC功能调用指令如表6所示:
指导教师签字:
年月日。

相关文档
最新文档