摘要:哈尔滨工业大学张毅刚教授主编的《单片机原理与应用》一书,由高等教育出版社出版,在全国发行量较大,影响面较广。本文对该书的例9-7内容进行了分析讨论,指出了该例题的错误所在,并進行了更正,在Proteus软件平台和实验平台上对更正前后的内容分别进行了仿真验证。
关键词:单片机;教学;Proteus仿真;高等教育
《单片机原理及应用》C51编程+Proteus仿真一书,哈尔滨工业大学教授张毅刚老师主编,由高等教育出版社出版。该书内容安排合理,涵盖了单片机的关键知识点,例题简洁明了。在全国高校应用范围较广。正因为如此,该书内容的正确性,对大学生及其他单片机初学者影响较大,有必要对部分错误内容进行探讨。本文对该书的例9-7的内容进行了分析讨论,并对相关内容进行了更正。
一、例9-7内容原文引述见教材[1]
二、有关内容的分析讨论与更正
该例题要求把SO-S7的开关状态显示在LEDO-LED7的8个发光二极管上。内容简单明了,讲述了如何将单片机访问外部数据存储器的方法应用于扩展外部并行I/O口上,包括硬件连接及软件编程。但是该例中有两个错误,第一个错误出现在该例题的配图9-30中控制74LS373的锁存信号上:与G端相连的“或门”应该改成“或非门”;第二个错误是为该硬件配备的端口地址0xf7ff;应改为峨蛛斥任。本以为是印刷错误,但见该书新版本仍然保持原理的错误状态,觉得有必要讨论更正。
(一)芯片74LS373功能简介及控制信号分析
74LS373是一款常用的地址锁存器芯片,由八个并行的、带三态缓冲输出的D触发器构成。G为数据打入端:当G为“1”时,锁存器输出状态(1Q~8Q)同输入状态(1D~8D);当G由“1”变“0”时,数据打入锁存器中[2]。
因此要为G端提供一个高电平才能使输入的数据输入锁存器,并在其下降沿将数据锁存在内部,并通过OED控制三态门输出。
(二)芯片74LS244功能简介及控制信号分析
74LS244是TTL八同相三态缓冲器/线驱动器,不具备锁存功能。在单片机系统中,常用作输入输出数据缓冲器。在选通时将输入数据送到总线上,在非选通时对总线呈高阻态。其选通控制信号为低电平有效[3]。
(三)AT89S51访问外部数据存储器时序逻辑分析
如图1所示为AT89S51单片机访问外部数据存储器时序图[4]。结合教材[例9-7]可知,在执行软件i=XBYTE[Oxfeff]语句过程中,就是对外部的74LS244进行读操作。在此过程中,RR=0期间,与有效的地址P2.0=0的共同作用下,同RD相连的“或门”输出为0,打通了74LS244的输入与输出,使8个开关的状态送到了PO口上(此时PO口为数据总线),通过数据总线传送到了内部变量i中。由于74LS244的控制端1G和2G是低电平有效,所以与RD相连的电平逻辑是正确的。
由于地址信号使用了P2.0,如果按照书上的地址编码默认规则:不用的地址默认为1,那么该口的16位地址应该为1111111011111111,即Oxfeff。而不是书上的Oxf7ff。
根据AT89S51单片机写外部数据存储器时序图,结合教材[例9-7]可知,在执行软件XBYTE[Oxfeff]=i语句过程中,就是对外部的74LS373进行写操作。在此过程中,WRY期间,与有效的地址P2.0=0的共同作用下,同WR相连的“或门”输出为0,根据74LS373控制逻辑,无法将总线上的数据锁存进74LS373中,因此无法点亮8个LED灯。只有将该处的或门改为“或非门”才符合74LS373的控制逻辑,才能使电路正常工作。
三、在Proteus平台上仿真及硬件电路上的验证
在Proteus仿真软件平台上[5]画出教材[例9-7]的原理图,并将与WR相连的“或门”改成“或非门”。在软件方面,将端口地址修改为Oxfeff,并补全其他程序。从仿真结果看,完全实现了例题的要求:可以将8个开关的状态稳定地显示在8个LED上。将仿真所用的硬件和软件在实验箱上进行验证得出与仿真同样的结果。
如果按照书上的内容在Proteus上进行仿真,不修改端口地址,将无法实现相关功能。如果仅仅更正了端口地址,不修改硬件,那么8个开关的状态偶尔能在8个LED上显示,且非常不稳定。
四、结语
本文对发行量较大、影响较广的一本高等学校单片机教材中的一个例题进行了分析讨论,提出了修改办法,并在软件仿真平台和硬件试验箱上进行了验证。供相关初学者参考。
参考文献:
[1]张毅刚.单片机原理及应用-C51编程+Proteus仿真[M].北京:高等教育出版社,2016:269-270.
[2]http://m.clecfans.com/article/594067.html
[3]http://www5lhei.com/chip/344.html
[4]https://wenku_baidu.com/view/8393c5f0770bf78a652954c7.html
[5]林立,张俊亮.单片机原理及应用:基于Proteus和Keil C-第4版[M].北京:电子工业出版社,2018,1.
作者简介:韩强(1964-),男,汉,安徽泗县人,博士在读,副教授/高级工程师,上海电机学院电气学院教师。研究领域为信号与信息处理。