用单片机器件80C31和程序存储器28C64.介绍一种单片机主板,
由下图可以看出,80C31的外部资源包括如下:8位数据线,16位地址线,以及8位控制线、20位用户接口。如果将80C31、锁存器、存储器封装在一个芯片里,就构成了80C51。我们通过地址线和数据线,可以将单片机的控制范围进行扩展,其中最典型的就是扩展存储器。与微型计算机的原理有些类似,单片机的地址总线指出外部设备所在的位置,当地址总线确定出外部设备的位置后,由数据总线发送或接收数据。为了给用户留出尽可能大的使用空间,单片机将P1、P2两个端口留给用户。所以相对于用户来说,单片机的资源是相当丰富的,通过地址总线、数据总线和控制总线,单片机几乎可以做无限的扩展。在实际设计中.我们能做的是根据实际情况,尽量将单片机的外部资源全部用上。其设计原则是:在降低成本的前提下,硬件的设计应当方便软件的编写。这样设计出来的单片机主板才能称得上是好的设计。
下图为一种能让单片机从数据存储器中读出指令并执行的设计。
在这个设计中,28C64与6264的数据线,地址线接在一起,共同挂在80C31的数据总线和地址总线上,留出两存储器的片选端。将28C64的片选端直接接在80C31的P2.5脚上,而6264的片选端是通过一个反向器接在P2.5脚上。然后将/RD与PGM通过一个与门接到两存储器的/OE端。这样做的目的是保证单片机能分别读取28C64与6264中的内容。其工作过程如下:
单片机读28C64时,/RD为高电平,其读取信号有PGM产生,/RD对28C64不起作用;单片机读取6264中的内容时,读取信号由/RD产生,PGM对6264不起作用。这样就实现了单片机读取6264中的指令。
最后,将/WR连到6264的/WR端,可以向6264写数据。当然也可以连到28C64的/WE端,向28C64写数据,但这样可能会破坏28C64中的程序,笔者并不建议这样做。
这样,一个基本的设计就算完成了。如果需要测试某些指令,只要通过串口或其他方式将所需测试的指令写到6264中,再由单片机运行就可以完成测试了。
基本设计完成后,80C31还有两根高位地址线没有用上。本着尽可能将单片机外部资源全用上的原则,笔者将其中一根地址线分配到显示部分的使能端,并将显示部分的数据总线挂到单片机的数据总线上,这样,往显示部分所在的地址写数据就可以完成一次显示。
该设计中剩下的用户接口与控制接口,笔者空了出来,作为外部设备的接口,这样整个系统就具有了一定的可再扩展性。
至于剩下的一根地址线,笔者想留给读者进行扩展。笔者相信,读者一定会比作者设计得更好,同时也欢迎读者与笔者进行讨论。
以上完成了单片机控制部分,但如果我们需要和单片机的各种状态进行交互,就需要一组按键及一个显示部分。下图为一个简单的按键显示电路。该电路中,两片移位寄存器74LS164及两个八段数码管组成了显示电路。单片机将需要显示的数据用串行方式送到74LS164,由74LS164驱动数码管来进行显示。键盘由74LS164及P3.3口构成。使用时,先将P3.3口置高电平,然后给74LS164循环送0,当检测到P3.3上电平变低时,记下此时送给74LS164的数据,通过此数据判断是哪个键被按下。为了使键盘、显示两部分分开工作,互不影响,两部分用了一个与非门隔开。
当P3.5为0时,只有键盘部分能正常工作,显示部分无法取得移位脉冲;当P3,5为1时,显示部分可以正常工作,此时键盘部分无法正常工作,工作中心放在显示部分。当加入与非门后,显示数据时给74LS164的脉冲要经过取反后输出才能实现正常显示,即74LS164的数据在丁XD的下降沿进行移位。其实这个与非门完全可以由一个与门代替,并且使用与门时,给74LS164的脉冲不需取反,之所以使用与非门,是与基本设计中的7400相对应,不会产生空余的元件。
当添加完键盘显示部分后,一个基本的设计才算完成。但仅有这些是不够的,单片机在实际使用时,往往需要控制外部其他设备,这个基本设计没有十分明确的目标,只能拿来做一些实验,练练编程。读者在设计主板时,需要联系实际,在此设计的基础上添加一些外围控制电路,使主板更加实用。