编者按:单片机体积小、功能强、价格低并且应用灵活,渗透到国民经济的许多部门,并发挥了重要作用。国家有关部门已经将单片机的生产、推广应用纳入到“八五”规划。单片机开发应用时代已经到来。
为适应这种形势和引导广大无线电爱好者学习单片机,我们特意组织了“单片机原理和开发应用”系列讲座。目的是打破计算机的神密感,把单片机纳入到无线电爱好者的活动中,让广大无线电爱好者在业余条件下也能学习和开发应用单片机。为此,我们组织有关专家研制了3种价格低廉、功能较强的单片机学习开发装置。讲座内容分三大部分。单片机开发装置介绍、单片机原理学习与实验、单片机开发应用实践。讲座中安排了大量实验,这些实验不论是硬件实验还是软件编程实验都很接近实际应用,使读者通过亲自动手实验掌握开发装置的使用,深入了解单片机指令功能和用法,掌握开发单片机的必备技能。最后我们还将组织一次大奖赛,检验大家学习的效果。我们要求读者在学习时掌握正确的学习方法,把主要精力放在单片机指令用法和软、硬件搭配关系上,为开发应用单片机打下良好基础。
这次讲座得到了北京计算机学会副理事长兼微机单片机专业委员会主任曹名扬、中国人民解放军总参谋部刘尚诚、北京地震技术专科学校周振安、北京宣武区青少年科技馆钱忠慈等同志及武汉铁路电器服务部的大力支持,在此谨表谢忱。
我们衷心希望广大读者踊跃参加讲座的学习,并把学习中的意见和建议反映给我们,使讲座更好地为推动普及单片机开发应用作出贡献。
大家知道,Apple-Ⅱ、IBM-PC等微机中有中央处理器CPU、存储器。输入/输出(I/O)接口以及其他外围电路和设备。其中CPU、存储器和I/O接口是整个微机系统的核心部分,担负着主要的处理、协调功能。科学技术发展到今天,生产厂家已经能将CPU、存储器、I/O接口等功能部件都集成到一块芯片上。这种芯片也能够完成微机相应部分的功能,人们把它称作单片微型计算机,简称单片机。
单片机以其体积小、功能强、价格低以及应用灵活等突出优点,在科研、生产及生活中得到了迅速的应用。比如进入家庭的这类产品有全自动洗衣机、电子琴、电脑电风扇、录象机、中华学习机的软盘驱动器等等。现在单片机已经成为一个拥有50个系列、400多个型号的庞大家族,其中Intel公司的MCS-51系列单片机在我国得到了广泛的应用。
MCS-51系列单片机包括8031、8051、8751、8032及8052等型号,它们之间的主要差别在于片内存储器。比如8051片内程序存储器为只读存储器ROM,其中的程序可由厂家一次做在片内,不允许用户修改。8751片内程序存储器是紫外线擦除可编程只读存储器EPROM,用户可以自己擦除原有程序和编制新的程序,只是价格较贵。8031片内无程序存储器,外接程序存储器后,就相当于8751,修改方便,又由于价格便宜,故颇受用户青睐,它也是我们这次讲座的重点。
8031单片机外接程序有储器后就构成了可以工作的最小系统,图1是这个最小系统的原理框图。图中D3就是外接的程序存储器,它里面存储着实现该系统功能的指令。D2是地址锁存器,用来接收8031送出的地址信号(低8位),并提供给D3地址信号。

图1中,低8位地址信号7A~0A和数据信号7D~0D都通过8031的7P0~0P0端。工作过程是,8031从7P0~0P0输出低8位地址信号7A~0A加到地址锁存器D2的输入端7D~0D。8031的ALE端送出一高电平信号并在它变低时“打开”地址锁存器D2,此时低8位地址信号7A~0A从D2的7D~0D端进入地址锁存器并使该锁存器在输出端7Q~0Q也呈现低8位地址信号7A~0A,该信号加到程序存储器D3的7A~0A端,使D3得到了低8位地址信号7A~0A。与此同时,8031的2P2~0P2直接送出高3位地址信号10A~8A加到D3的相应端子。至此,D3所有的地址信号10A~0A就齐备了。随后,8031通过PSEN-输出低电平信号“打开”程序存储器D3,D3就将上述高3位、低8位地址所决定的存储器地址单元的内容(数据)从D3的7D~0D端送给8031的7P0~0P0端,由8031从7P0~0P0读入。8031依次执行这些读入的数据信号(即程序存储器D3中的指令)就可以实现该系统的功能了。实际应用中的各种控制系统的核心都是上面所说的最小系统,只不过实际应用系统多加了一些外围扩展电路而已。
上面提到的低8位、高3位地址是什么意思呢?我们把存储器比作一座仓库,仓库的每个库房(存储器的存储单元)存放着各种物资(数据)。每个存储单元象库房一样有着自己的编号,即地址。需要取哪个地址的数据由接在存储器(例如图1中的D3)地址端(10A~0A)上的地址信号线高、低电平状态决定。地址线条数的多少决定了所能寻找地址的多少,即所说的寻址能力。条数越多寻址能力越大,反之条数越少寻址能力越小。当地址线只有1条时,用0A表示。0A只能出现高、低两种电平状态,即二进制数0、 1,故只能寻找到存储器中的0号和1号2个地址单元,所以我们说0A地址线的寻址能力为2\(^{1}\)=2个地址单元。当地址线有2条时,由高到低表示为1A、0A,这2条地址线上的高、低电平状态有00、01、10、11等共4种,故2条地址线1A、0A的寻址能力为22=4个地址单元。……当地址线有10条时,它们由高到低表示为9A、8A、7A~1A、0A,能寻址210=1024个地址单元。我们把1024个地址单元称作1k个地址单元,所以我们又可以说9A~0A这10条地址线能寻址1k个地址单元。当地址线有16条时,它们由高到低表示为15A、14A、13A~1A、0A,能寻址216=65536,即64k个地址单元。我们将7A~0A这8个地址信号称为低8位地址信号,而把15A~8A称作高8位地址信号。图1中D3有11条地址线,其中10A~8A为高3位地址信号,7A~0A为低8位地址信号。D3的寻址能力为2\(^{11}\)=2048、即2k个地址单元。
8031单片机芯片的引脚功能见表1所示。

表中P0~P3口是单片机与外部电路联系的通道,这些通道既可以输出信号也可以输入信号,称为双向输入/输出通道,简称双向I/O。在8051、8751单片机中,这些双向I/O都留给了用户,可灵活安排。而在8031单片机应用中,P0口就用作程序存储器低8位地址信号和数据信号的共公通道。P1口留给用户设计输入和输出信号用。P2口用来提供程序存储器D3的高位地址信号。P3口可以象P1口一样使用,而一般则多用其第二功能。8031的其余各脚功能接法比较固定,见图2。其中EA-—/VPP(31)脚接地,8031只执行外接程序存储器中的指令。1XTAL(19)脚、2XTAL(18)脚接6MHz晶体振荡器。RST/VPD(9)脚可接成手动复位方式,也可接成如图中的上电复位方式,接通电源后自动复位。图中R1、C3接通电源瞬间,电容C3相当于一个交流通路,所接8031的9脚呈高电平,RST有效,8031进行复位。稳定后R1、C3处于直流状态,C3相当无穷大电阻,9脚电平下降至零,8031停止复位,开始工作。余下的VCC接+5V,E端接地。

下面我们详细分析8031最小系统的工作原理。图2中,地址锁存器D2选用74LS373(8D锁存器),当其O-E输出允许)为低电平,LE(锁存允许)电平由高变低时(下降沿),D\(^{2}\)2被“打开”。程序存储器D3选用EPROM2716,为2k×8位即2kB容量的只读存储器。它内部存储着许多指令,输出哪个地址单元的指令,由接在10A~0A地址端的外加地址信号Γ0A~0A决定。当O-E(输出允许)C-E/PGM(片选/编程脉冲)均为低电平时,D3可从输出端7D~0D输出指定地址单元的内容(数据)。了解了这些知识就不难理解该最小系统的工作原理了。
接通电源,8031上电复位后开始工作。首先8031送出ALE(地址锁存允许)高电平信号,并随后从P0口输出低8位地址信号7A~0A,同时从P2口输出高3位地址信号10A~8A,直接送到程序存储器的相应端。这时,ALE信号由高电平降为低电平。在它变低期间,P0口输出的低8位地址信号7A~0A输入到D2的输入端7D~0D,并从其输出端7Q~0Q输送给程序存储器D3的相应地址端。至此,D3地址信号10A~0A都被确定了。随后8031输出P-SEN(外接程序存储器输出允许)低电平信号,这样D3就可以输出指定地址单元的内容(数据)给8031的P0口了。在随后的P-SEN由低电平变高电平时,8031从P0口读入数据信号并执行这些数据(指令),便能实现这个系统的功能。需要说明的是,8031单片机ALE、P-SEN等信号工作的这种时间关系是自动的,不需要人工干涉。8031读程序存储器时几种信号的时序图见图3所示,请读者参照前面所述分析该图中各信号的时序关系。(曹名扬)
