曹晓龙
(贵州师范大学,贵州贵阳,550001)
单片机常用于各种需要进行控制的领域,包括工业、工业乃至家庭电子产品。单独一个单片机是无法完成控制作用的,必须通过单片机与外部设备进行连接。然而51单片机的并口资源较少,仅有P0、P1、P2和P3四个8位并口。且在大多数情况下,外接存储器、大量IO接口时,P0、P2作为地址数据线、P3则作为控制线。而余下的仅有P1口。由此可见,51的并口资源是极其缺乏的。有必要采取一定的方法对51的并口资源进行扩展。多数教材中,基本上都介绍了利用锁存器及缓冲器进行双向并口的扩展,以及利用并口芯片8255A进行扩展的方法[1]。然而,教学过程中仅靠老师引导式地讲解,还不足以让学生完全了解这种方法的核心,没有形成直观的感受,在脱离课堂以及课本后,学生仍旧无法充分掌握该扩展法。正是在这一背景下,本文提出了一种利用Proteus仿真平台,设计一个有关利用8255A进行并口扩展的方法实验,旨在通过对整个实验内容的设计,让学生亲自动手,逐步实现其硬件软件设计,并最终能够理解并掌握扩展方法。此外,对于在单片机与其他外部芯片的连接上也有一定的参考价值。
本设计的实验原理图如图1所示。
图1 单片8255A扩展并口实验原理图
实验的主要内容是通过8255A输出数据以使得两个BCD类型数码管显示60秒的计数器。内容较为简单,主要是体现出对8255A的基本设置。为此可按照下述步骤进行实验的准备与设计。
这部分主要是为了帮助学生将课堂所学的有关8255A的相关特点进行一个归纳总结,以便为后续的实验作准备。为此,可以设置一些问答及思考题,让学生在实验中完成。以巩固所学的知识点。例如可设置下面的问题:
(1)8255A内部一共有 个寄存器,其对应的外部地址为A1A0,且当A1A0为 时表示此时的数据接收寄存器为 。
(2)根据图2所示的8255A的控制寄存器格式[2],说明当寄存器为 时,表示A口为输出,方式0、其余口为方式0,输出?
图2 8255A控制方式字
(3)在与8255A进行连接时,_______与A1A0形成地址信号。
通过类似上述三个问题的回答,能够较为清楚地反应出8255A并口芯片在实现连接以及软件设置时的重点。
为了能够实现扩展,51单片机本身的外连时的主要特性也是整个外扩的重点内容,尤其是对P0的外接锁存器以连接地址线,以及同时又要与数据线相连的特点,此外还需要掌握通过MOVX实现对外部数据传输的方法。为此可参考8255A的做法设置相应的问答及思考题加强学生对相关的重点难点理解与掌握。可设置诸如下面所给的例子中相关的思考题以充分发挥学生的主动性
(1)51单片机在外扩时是如何实现与外接设备的地址数据相连操作的?期间用到了锁存器LS373,锁存器用在何处?为什么?
(2)若外设的地址线有3根,那么单片机可设置的地址范围是多少?
(3)单片机的ALE信号主要作用是什么?外接时,一般接在何处?
(4)单片机访问外部的指令是什么?具有怎样的格式?
(5)有哪些间接寻址寄存器可使用?使用所采取的选择标准是什么?
通过类似上述思考题的设置,可以较为全面地归纳了51单片机在外扩时的硬件软件特征。通过对各个问题的回答,更加深了对知识点的了解。
通过上面的分析和准备,指出了外扩时的主要控制信号以及读写实现的原理。因此,可在此处依然以问答的方式逐步引导学生写出关键信号的连接关系,并绘制电路图。相比事先给一个电路图,让学生照着画的方式,更能调动学生的积极主动性,引发思考。充分利用实验课时,提高实验的效率和教学成果。
(1)8255A的A1A0及CS可与单片机的那一部分进行相连,对应的地址分别是多少?
(2)74LS373的LE、OE如 何连接?
(3)数据线之间的连接关系如何?
(4)两个BCD类型的7段数码管与8255A如何连接。
通过对以上问题的思考,基本上能够勾画出整体的电路结构图,能够在Proteus中画出类似本文图1的系统结构图。
单片机的软件设计与硬件电路的构成息息相关,而单片8255A扩展实验中,软件部分主要是实现对8255A的控制寄存器设置以及读写操作。所使用的指令是MOVX。但就对8255A操作上,程序设计并没有任何难度,实验的难点在于60秒显示数据的产生。
8255A相关设置程序设计:
(1)根据电路,所使用的与数码管相连的接口属于输入还是输出?
(2)哪一种工作方式比较适合?由此得出的控制寄存器的值应为多少?
(3)如何将设置的值写入8255A的控制寄存器?
显示部分程序设计:
(1)如何将一个两位十进制数据分离为十位、个位?
(2)BCD显示的显示码如何确定?
(3)1s的时间通过软件如何实现?
通过对上述问题的回答,能够写出如下与实验有关的程序。
在实现上述程序时,对一些较难的点,可在提示下帮助学生完成,以实现在实验教学环节的教学互动。而非老师一味地讲解原理,学生一味地被动听。缺乏独立思考的时间,对所操作的实验没有深入的体会和理解。
通过对这一简单的实验从分析到设计并到最终观察到实验现象,完全是靠学生参与到其中,逐步实现的过程。透过观察到的实验现象,可以看出与之前直接通过51单片机的某个并口输出60的计数显示数据进行对比,通过8255A可以实现相同的功能。实验体现了关键信号之间的连接与控制作用,以及利用MOVX实现外部数据传输等软硬件结合的方法,实现了扩展。由此,能让学生更加深入理解这种扩展方法的核心。此外,可针对连接关系进一步引发学生的思考。如可就其中若改变CS、A1、A0与P0口的连接,则对实验将产生怎样的影响,程序的设计将如何修改等问题进行提问。为后续的多片进行扩展的方法开拓思路。
经过单片8255A扩展并口的基本实验的设计与分析过程,使学生已经建立了对这种扩展方式的感性认识及较为深入的理解。而单片扩展的方法使得51单片机的并口数量扩展为5个8位并口,因为其中P0及P3口被占用了资源。而实际应用中,存在着对并口资源数量更多的要求,因此,如何利用8255A扩展出更多的并口,便成了51单片机外扩并口的一个具有现实意义的问题。为此,有必要在实验中加入这一内容。为此,在单片扩展实验的基础上,加入另一片8255A,从而构成一个具有8个并口的51单片机系统。且整个实验的设置可参考单片的模式,引导学生逐步实现设计并完成实验。
解决的主要问题是,另一片8255A将怎样接入到只有一片8255A的并口系统中,针对这一问题,仍旧可以通过提出对应思考题的方式进行。在有了对8255A关键控制信号以及与单片机互连受单片控制完成控制字的设置,以及数据读写的单片扩展基础,要回答这一类问题相对容易。此外,新引入的8255A也要考虑其内部控制寄存器以及A、B和C口数据寄存器的地址分配问题。而这些早已在上一个单片扩展实验中就已解决的问题,在这里完全具有一定的参考价值,学生能较容易地写出第二片8255A各个口的分配地址。从而更能体会外接存储器或接口地址划分的技术。若此时提出要求增加的第二片8255A将作为输入接入8个按钮以实现第一片上显示第二片中接入的按钮按下的具体哪一号键,则学生能够画出如图3所示的多片8255A扩展的实验硬件结构图。
图3 多片8255A扩展硬件构成图
图3所示的系统连接图,通过同一个P0.2的输出作为对芯片片选信号的输出控制,且从连接的关系来看,两片的片选信号属于互斥关系,当一片被选中时,另一片处于未选中的状态。这一属性是通过P0.2的经锁存器输出以直接接在其中一片,而另一片则经过反相器进行连接对应的CS片选而实现的,而A1A0的连接,可以两片的都通过相同的信号进行控制,也可以选择不同的P0口进行确定,图3所示的采用的是第二种方法。从而保证了两片8255A各个内部寄存器在地址上不会出现重叠。
多片8255A软件设计部分主要是针对两片不同的8255A进行控存不同数据的写入,以及通过第二片的输入按钮数据,并通过第一片8255A输出。程序实现的功能相对简单,但包括了有关外扩的主要特点。按图3所示的结构,第一片的控存地址仍旧为03H,第二片为1CH,第一片的A口地址为00H,第二片B口地址为0CH。另外,第一片的控制数据仍旧为80H,第二片的则为82H。得出这些重要的相关数据后,引导学生写出实验程序。程序的主要功能是通过从第二片读取数据,并通过第一片输出。
通过设置两个基于51单片机与8255A连接以实现并口扩展的实验,让学生掌握并理解这一扩展方法的关键技术。与大多数直接给出实验原理图以及实验代码的方式不同,为了改变老师讲解,学生被动听,最终实验教学效果低下的现状,本实验设计采用的是引导式教学方式。从分析8255A的主要结构包括内部寄存器及外部引脚连接入手,以思考题的方式让学生主动积极复习所学的知识,同时也采用同一方式加深51单片机外接时的主要信号特点。并在对这些关键性问题的回答上,自行在Proteus中画出相应的实验电路图。从而激发学生实验的积极性及主动性。而实验内容的设计上,采用逐步提高的方式,在理解并实际设计单片8255A扩展的基础上,进一步实现通过两片8255A实现扩展的方法。不仅对外接方法有了一进步的认识和掌握,还能深入理解多片扩展增加并口数量的意义所在。在实际的教学中取到了很好地教学效果。使学生能够充分利用实验时间,掌握实验内容。