1、1并行打印机控制1 概述打印机是微机系统中主要的硬拷贝输出设备,可以打印文字、数字和图形等,常用的打印机有针式打印机、喷墨打印机和激光打印机,常用的打印机接口类型有标准并行接口、串行 USB 接口等,除此外还发展了增强型并行接口、扩展型并行接口等。本次课设采用的是并行接口,能够满足数据传输速度快、传输距离短等条件限制的要求。本次课设采用 8255A 工作方式 0,其 A 口充当打印机数据线,C 口的 PC0接打印机选通信号线 ,C 口的 PC4 接打印机“ 忙”线 BUSY,B 口不用,TBS8255A 的初始化可以通过 74LS138 译码器来实现。为了用键盘来设定打印内容,可以先定义一个数
2、据段,然后调用 DOS 的 1 号功能完成数据存储。在满足一定的条件下,CPU 现将打印内容依次送到 8255A,然后再送到打印机打印,数据全部传送并打印完毕后退出程序。2 并行接口简介一般来说,外设接口可以分为两类:1串行接口:一组数据按位顺序在一根线上一次传输。2并行接口:一组数据在多根线上同时传输。并行接口连接 CPU 与并行外设,实现两者间的并行通信,在信息传送过程中,起到输出锁存或输入缓冲的作用。并行接口的典型硬件结构包括:1一个或一个以上具有锁存或缓冲的数据端口2与 CPU 进行数据交换所必须的控制和状态信号3与外设进行数据交换所必须的控制和状态信号4端口译码电路5控制电路3 可编
3、程并行接口芯片 8255A3.1 可编程接口的概念28255A 是常用的可编程接口芯片,可编程接口芯片即指电路的工作状态可由计算机指令编程控制的芯片。目前所用的接口芯片大部分是多通道、多功能的。 多通道即指一个接口芯片一面与 CPU 连接,另一面可接几个外设。多功能即指一个接口芯片能实现多种接口功能。接口芯片中的各硬件单元不是固定接死而是可以通过编程来控制。编程控制是指通过计算机指令选择通用接口中的不同通道和不同功能。8255A 是一个通用的可编程的并行接口芯片,它有三个并行 I/O 口,又可通过编程设置多种工作方式,价格低廉,使用方便,可以直接与 Intel 系列的芯片连接使用,在中小系统中
4、有着广泛的应用。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 的控制命令,并根据命令向片内各功能部件发出操作命令。例如
5、 为低电平时表示 8255A 芯片被选中,该片选CS信号由 CPU 的地址线通过译码产生。 和 控制 8255A 和 CPU 之间的数RDW据或信息的传输方向。端口选择控制由 A1 和 A0 的组合状态提供,这两个控制信号提供 4 个端口地址,即 A、B、C 三个端口和一个控制端口地址。3.2.4 数据总线缓冲器这是一个双向三态的 8 位数据缓冲器,它是 8255A 与微机系统数据总线的接口。输入输的数据、CPU 输出的控制字以及 CPU 输入的状态信息都是通过这个缓冲器传送的。3.3 8255A 的管脚38255A 是一个标准的 40 管脚芯片(见附录) ,可分为 3 个部分:与外设连接的
6、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 口均为
7、输入方式;:片选,输入,用来决定芯片是否被选中;S:读信号,输入,控制 8255A 将数据或状态信息送给 CPU;RD:写信号,输入,控制 CPU 将数据或控制信息送到 8255A;WA1A0 状态组合与端口操作关系如表 1 所示:3.3.3 电源线与地线48255A 的电源引脚为 Vcc 和 GND,Vcc 一般取+5V,与其他常用芯片相同。表 1 A1A0 组合与端口操作关系A1 A0 RDWCS功 能0 0 0 1 0 读端口 A 数据0 1 0 1 0 读端口 B 数据1 0 0 1 0 读端口 C 数据0 0 1 0 0 写数据到端口 A0 1 1 0 0 写数据到端口 B1 0 1
8、 0 0 写数据到端口 C1 1 1 0 0 写命令到控制寄存器X X X X 1 数据总线呈高阻状态1 1 0 1 0 非法条件X X 1 1 0 数据总线呈高阻状态3.4 8255A 的工作方式及编程3.4.1 8255A 的工作方式8255A 有 3 中工作方式:1方式 0基本输入/输出方式2方式 1选通输入/输出方式3方式 2双向传输方式方式 0 主要工作在无条件的输入/输出方式下,A 口、B 口和 C 口均可工作在此方式下被设置成输入/输出口,但不能既做输入口又做输出口 C 口的输出位可由用户直接独立设置为 0 或 1。方式 1 主要工作在异步或条件传输方式下,需要先检查状态然后才能
9、传输数据,仅有 A 口和 B 口可工作在方式 1,由于条件传输需要联络线,所以 C 口的某些位分别作为 A 口和 B 口提供 3 根联络线,以便于 8255A 和 CPU 之间传送信息和中断请求信号。方式 2 的双向传输方式是指在同一端口内分时进行输入/输出操作。只有A 口可以工作在此方式下,需要由 C 口提供 PC3 至 PC7 共 5 个控制信号进行联络。这种联络信号是由 8255A 内部规定的,而不由使用者指定。此方式应用于并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出动作不会同时进行的场合。53.4.2 8255A 的编程8255A 的编程就是用户在使用 8255A
10、之前,用软件来定义端口的工作方式,选择所需要的功能,工作方式是由方式控制字来决定的。(1) 方式控制字8255A 分为 A 口、B 口和 C 口即 A、B 两组,其控制字格式如图 2 所示:D7 D6 D5 D4 D3 D2 D1 D01A 组控制 B 组控制图 2 方式控制字D7=1 为控制字的标志,A 组由 D6、D5、D4 和 D3 组成,B 组由D2、D1、D0 组成,各口工作方式的选择如表 2 所示:表 2 工作方式选择D6D5 00 01 1X D2 0 1A 口 方式 0 方式 1 方式 2 B 口 方式 0 方式 1对应的各口 I/O 选择如表 3 所示:表 3 各口输入/输出
11、选择D4 A 口 D1 B 口 D3 C 口上半部 D0 C 口下半部0 输出 0 输出 0 输出 0 输出1 输入 1 输入 1 输入 1 输入(2)C 口清 0/置 1 控制字清 0 称为复位操作,置 1 称为置位操作,其格式如图 3 所示:D7 D6 D5 D4 D3 D2 D1 D00 X X XPC0 至 PC7 的编码图 3 C 口置位复位控制字D7=0 为该控制字的标志,D6、D5 和 D4 没有定义,可为任意态,通常取60,D3、D2 和 D1 共组成 8 种编码对应 C 口的 PC0 至 PC7,D0=0 将 D3D2D1编码所对应的 C 口某位清 0,D0=1 则是进行对应
12、的置 1 操作。例如要对 C 口的 PC2 为进行置 1 操作,则D7D6D5D4=0,D3D2D1=010,D0=1,控制字为 00000101B,相应的置 1 程序段如下:MOV DX,控制口地址MOV AL,00000101BOUT DX,AL特别注意:该控制字是通过写入 8255A 的控制寄存器来达到对 C 口的指定位进行置位/复位操作的,对 A 口和 B 口均不适用。3.4.3 8255A 的初始化初始化就是在完成硬件连接之后,使用 8255A 接口芯片时,我们要对它进行编程,即将相关的方式控制字和 C 口置位/复位控制字送入 8255A,以设定接口芯片的工作方式和选择芯片的接口功能
13、。这是 8255A 进入工作状态前,必须要做的工作。需要特别注意的是:两种不同类型的控制字都是写入同一个端口,或者说在“out“指令中,使用的是同一个端口地址。初始化完成后:当数据端口作为输入接口时,执行输入 IN 指令从输入设备得到外设数据;当数据端口作为输出接口时,执行输出 OUT 指令将把 CPU 的数据送给输出设备。4 74LS138 译码器由于在设定 8255A 初始化编写控制字时需要利用译码器,我选用了常用的74LS138 译码器,它有 3 个输入控制使能端,C、B、A 共 3 个输入端,对应 8种状态组合,还有 8 个输出端,输出为低电平有效,其功能表如表 4 所示:表 4 74
14、LS138 功能表输入 输出7G 12C B A Y0123Y4567X H X X X X H H H H H H H HX X H X X X H H H H H H H HL X X X X X H H H H H H H HH L L L L L L H H H H H H HH L L L L H H L H H H H H HH L L L H L H H L H H H H HH L L L H H H H H L H H H HH L L H L L H H H H L H H HH L L H L H H H H H H L H HH L L H H L H H H H H
15、H L HH L L H H H H H H H H H H L5 打印机并行标准接口信号打印机并行标准接口(Centronics)信号如表 5 所示:表 5 Centronics 标准引脚信号引脚 名 称 方向 功 能1 TROBES入 数据选通,有效时接收数据2-9DATA1 至DATA8 入 数据线10 ACKNLG出 响应信号,有效时准备接收数据11 BUSY 出 忙信号,有效时不能接收数据12 PE 出 纸用完13 SLCT 出 选择联机,指出打印机不能工作14 AUTOLF入 自动换行31 IN入 打印机复位32 ERROR 出 出错36 SLCTIN 入 有效时打印机不能工作8简
16、写 ,用于数据选通,来自 CPU 的数据选通信号使打印机TROBESS控制器转入数据接收处理。DATA1 至 DATA8 是与计算机相连的 8 根数据线。简写 ,是打印机对 CPU 的回答信号,表示已处理好 CPUACKNLG所发来的数据。用于初始化输入,是来自 CPU 的信号,它对打印机进行初始化。ITBUSY 是“忙 ”线,高电平有效,表示打印机忙,不能接收数据。忙的原因:1打印机脱机。2打印机正在接收数据。3打印纸用完。4打印机故障。打印机接收 CPU 数据过程是:当 CPU 准备好输出打印的一个数据时,通过并行接口送给打印机的数据引脚 D0 至 D7 同时将数据选通信号 送给打印TBS
17、机。答应应急收到该信号后,把数据锁存到内部缓冲区,同时在 BUSY 信号线上发出忙信号。打印机处理完数据后撤销忙信号,同时向 CPU 发送响应信号,CPU 根据 BUSY 信号和 信号判断是否发送下一个打印数据。ACKACK6 并行打印机控制设计6.硬件接线图本设计所需的硬件设施主要有 PC 机、打印机、8255 A 芯片和 74LS138 芯片以及导线若干,示意图如图 4 所示。在 Protel99se 中硬件接线图如图 5 所示。8086CPU 8255A 打印机9D7D0TBSBUSYD7D0 PA7PA0WRPC2DA1A0 PC7CS译码器A9A3D7D0RDA2A1M/ IO74L
18、S138图 4 并行打印机控制设计硬件接线示意图说明:CPU 与 8255A 对应的 8 位数据线以及读/写信号线相连,8255A 选择工作方式 0,在实验室 8086CPU 提供起始地址为 300H,因此选择 A9 至 A3以及 M/ 参与 74LS138 译码。CPU 提供 A15 至 A0 共 16 根地址线,选择IOA15 至 A10 不定义,即为 0。A9 和 A8 都为 1,相与后输出接译码器的高电平有效使能端。A7 不定义,即为 0。M/ 和 A6 都为 0,分别接到译码器的低电IO平有效使能端。A2 和 A1 分别接 8255A 的 A1 和 A0。A5A4A3 全为 0,接到
19、译码器的 3 个信号输入端,则译码器输出端为 。A 0 不用,即为 0。则完整的Y16 根地址线 A15 至 A0 为:XXXXXX1100000000B,其中高位 X 取 0,则有输出端输出地址为:1100000000B,即 300H,将 输出接到 8255A 的选通信号端 即可。CS对于 8255A 的 3 个 8 位输出端,选择 A 口的 PA0 至 PA7 分别接到打印机的 D0 至 D7,作为打印机的数据线。C 口的 PC0 接打印机的 ,作为打印机TBS的数据选通信号,PC7 接打印机的 BUSY 线,用于接收打印机是否“忙”的信息。则有 A 口为输出方式,C 口高 4 位为输入方
20、式,低 4 位为输出方式,B 口没用,设为输出方式。由此知 8255A 在方式 0 下的方式控制字为:1010001000B,即 88H,则可对 8255A 进行初始化。对于 C 口,初始化后,首先要使打印机的数据选通信号线无效,即为高电平,PC0 置 1 控制字为00000001B。一定条件下,CPU 将打印内容下先送到 8255A 再送到打印机,使打印机选通信号有效,PC0 清 0 控制字为 00000000B,打印机接收数据打印后再次使选通信号无效,循环完成打印。图 5 硬件接线图6.2 程序设计6.2.1 程序流程图11开始存数循环次数 CX 为200BUFF 首址送给 SI09 功能
21、调用提示信息01 功能键盘输入键盘送数到SISI为EnterNSI为 EscNY8255 初始化YPc7 置 1CX 取为200BUFF 首址送给 DIDI送给ALAL 送给BLBUSY 忙YNBL 送给ALAL 为Enter置 为 0STB送数到打印机延时置 为 1STBCX 为 0DI 加 1NN结束换行YY图 6 程序流程图6.2.2 源程序A_PORT EQU 300H12B_PORT EQU 302HC_PORT EQU 304HCTRL_PORT EQU 306HDATA SEGMENT BUFF DB 200 DUP(?) MESSAGE DBplease input infor
22、mation and strike “Enter“ to print DB 0dh,0ahDBstrike “Esc“ to exit,0dh,0ah,$ ;系统提示信息DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: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 21HMOV SI,AL ;将打印内容存入 BUFF 中CMP SI,1BH ;判断是否是
23、 ESC 键JE FINISH ;若是则退出CMP AL,0DH ;回车键结束数据输入JE L2 ;转入打印程序INC SI ;转入循环存数LOOP L1L2:MOV DX,CTRL_PORT ;初始化 8255AMOV AL,88H ;初始化控制字 10001000B 13OUT DX,AL MOV AL,0FH ;使数据选通信号 为高电平 STBOUT DX,AL ;置 pc0=1,置 1 控制字 00000001BMOV CX,200 ;设置循环次数LEA DI,BUFF L3:MOV AL,DI ;从 BUFF 中取数据 MOV BL,AL ;保存数据L4:MOV DX,C_PORT
24、;判断打印机的状态 IN AL,DX ;查看 BUSY 信息TEST AL,80H ;检测 pc7 口状态JNZ L3 ;若忙,则等待MOV DX,A_PORT ;送数据到 8255AMOV AL,BLOUT DX,AL CMP AL,0DH ;判断回车键JNE L5 MOV DL,0AH ;若是回车键,则输出一行空行MOV AH,02HINT 21H L5:MOV DX,CTRL_PORT ;送数据选通信号 STBMOV AL,0H ; 清 0,清 0 控制字 00000000BSTOUT DX,AL NOP ;延时 NOP MOV AL,1H ; 置 1,置 1 控制字 00000001B
25、STBOUT DX,AL INC DILOOP L3 ;进行下一轮循环FINISH:MOV AH,4CH14INT 21H CODE ENDS END START6.2.3 程序调试及结果分析根据题意要求,本程序主要需要完成以下三个步骤:1设定数据段用于存放需要打印的内容。2通过并行接口讲一个打印数据由 CPU 送入 8255A 锁存,在打印机BUSY 信号不忙,将打印机数据选通信号 信号置为有效, 8255A 将打印数STB据再送给打印机,然后置 无效完成本次打印任务。ST3步骤2完成后,通过程序中的循环结构依次完成打印数据由 CPU 经8255A 再到打印机打印。在 Masm for wi
26、ndows 实验集成环境 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 hjsdf
27、hsjdfhh ”。由于程序设计由按下回车键“Enter”来结束打印字符的输入,再转入打印阶段,受硬件条件限制没有接到打印机,按照这运行后因无外设程序不再响应。通过调试运行的结果发现,用键盘来设定打印内容的要求已经达到。至于打印阶段,可以从上文的程序及下文的流程图来检验:8255A 完成初始化后CPU 将打印字符由数据缓冲器送到打印机,打印机不忙并置选通信号有效,接受数据打印再封锁选通信号执行打印,再由循环控制完成所有打印任务。15心得体会通过学习先期课程 C 语言、软件技术基础和 VB,我对程序设计有了一定的了解,学习到了程序设计的一般方法和步骤。模拟电子技术和数字电子技术的学习使我对硬件有
28、了更深的认识。综合到微机原理与接口技术,我发现自己还有很多知识还很不全面。在本次设计并行打印机控制接口过程中,我重温了相关知识,有了进一步的提高。特别地对于 8255A 这一微机系统中应用最广泛的并行 I/O 接口芯片,我更了解了其内部结构、各管脚功能、工作方式、初始化以及如何进行并行接口的设计。在设计的过程中,我曾遇到一些难题,查阅资料特别是在同学的帮助下基本解决。同时更感觉到自己所学的知识非常有限,不能很好的应用到实际问题中来,以后要加强相关知识的学习,提高自己的理论水平和动手能力。16参考文献1周佩玲.微机原理与接口技术第 2 版.北京:电子工业出版社,2008.32谭浩强编著.C 语言
29、程序设计.北京:清华大学出版社,19993 赵国相.微机计算机原理与接口技术第四版.北京:科学出版社,2004.44耿恒山.微机原理与接口第一版.北京:中国水利水电出版社,2005.105杨立.微型计算机原理与接口技术第一版.北京:中国水利水电出版社,2005.46段承先编著.微型计算机原理及接口技术.北京:兵器工业出版社,20007谢瑞和.微型计算机原理与接口技术教程第一版.北京:科学出版社,2005.88康华光主编.电子技术基础数字部分第五版.北京:高等教育出版社,2006.117附录1、8255A 管脚如图 7 所示:图 7 8255A 管脚图2、74LS 138 管脚如图 8 所示:图 8 74LS138 管脚图3、常见 DOC 功能调用指令如表 6 所示:表 6 DOC 功能调用指令表01H 单字符输入,键盘读取02H 单字符输出,屏幕显示06H 单字符输入/输出,01H 和 02H 功能组合09H 多字符输出,屏幕显示0AH 多字符输入,送到缓冲区4CH 过程终止,结束当前程序