您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页单片机仿真器

单片机仿真器

来源:小侦探旅游网
第一章 单片机仿真器的开发

第一节、设计前的准备工作

研制者接到某项任务后,在进行具体设计之前,一般需先进行下列工作:

1、可行性调研

可行性调研的目的,是分析完成这个项目的可能性。进行这方面的工作,可参考国内外有关资料,看是否有人进行过类似的工作。如果有,则可分析他人是如何进行这方面工作的,有什么优点和缺点,有什么是值得借鉴的;如果没有,则需作进一步的调研,此时的重点应放在能否实现这个环节,首先从理论上进行分析,探讨实现的可能性 ,所要求的客观条件是否具备(如环境、测试手段、仪器设计、资金等),然后结合实际情况,再决定能否立项的问题。

2、系统总体方案设计

在进行可行性调研后,如果可以立项,下一步工作就是系统总体方案的设计。工作的重点应放在该项目的技术难度上,此时可参考这一方面更详细、更具体的资料,根据系统的不同部分和要实现的功能,参考国内外同类产品的性能,提出合理而可行的技术指标,编写出设计任务书,从而完成系统总体方案设计。

3、设计方案细化,确定软硬件功能

一旦总体方案决定下来,下一步的工作就是将该项目细化,即需明确哪些部分用硬件来完成 ,哪些部分用软件来完成。由于硬件结构与软件方案会相互影响,因此,从简化电路结构、降低成本、减少故障率、提高系统的灵活性与通用性方面考虑,提倡软件能实现的功能尽可能由软件来完成;但也应考虑以软件代硬件的实质是以降低系统实时性、增加处理进行为代价的,而且软件设计费用、研制周期也将增加,因此系统的软、硬件功能分配应根据系统的要求及实际情况而合理安排,统一考虑。在确定软硬件功能的基础上,设计者的工作就开始涉及到一毓的具体问题,如仪器的体积及与具体技术指标相对应的硬件实现方案,软件的总体规划等。在确定人员分工、安排工作进度、规定接口参数后,就必须考虑硬件、软件的具体设计问题了。

在讨论具体设计问题这前,这里还要强调一下,对于一个具体应用系统的设计,上面这几部分工作是必不可少的,否则,可能导致设计方案的整体更改,甚至可能导致方案无法实现造成人力、物力的浪费。这一点,对于设计得来讲,应加倍注意。

一个单片机应用系统的硬件设计包括两大部分内容:一是单片机系统的扩展部分设计。它包括存储器扩展和和接口扩展。存储器的扩展指EPROM、EEPROM和RAM的扩展,接口扩展是指8255、8155、8279以及其它功能器件的扩展。二是各功能模块的设计。如信号测量功能模块、信号控制功能模块、人机对话功能模块、通诚讯功能模块等,根据系统功能要求配置相应的A/D、D/A、键盘、显示器、打印机等外围设备。

在进行应用系统的硬件设计时,首要问题是确定电路的总体方案,并需进行详细的技术论证。所谓硬件电路的总体设计,即是为实现该项目全部基本功能所需要的所有硬件的电气连线原理图。初次接触这方面工作的设计人员,往往急于求在设计总体方案上不愿花更多的时间,过于他促地开始制版和调试。这种方法不仅不妥当,而且往往是得不偿失效。因为就硬件系统来讲,电路的各部分都是紧密相关、互相协调的,任何一部分电路的考虑不充分,都会给其它部分带来难以预料的影响,轻则使系统整体结构受破坏,重则导致硬件总体大返工,由此造成的手果是可想而知的。所以,我们希望设计者不要吝啬在总体方案上所花时间。从时间上看,硬件设计的绝大部分工作量往往在最初方案的设计阶段,一个好的设计方案往往会有事半功倍的效果。一旦总体方案确定下来,下一

1

步的工作就会很顺利进行,即使需要作部分修改,也只是在此基础上进行一些完善工作,而不会造成整体返工。

在进行硬件的总体方案设计时,所涉及到的具体电路可借鉴他人在这方面进行的工作。因为经过别人调试和考验过的电路往往具有一定的合理性(尽管这些电路常与教科书和手册上提供的电路不完全一致,但这也可能正是经验所在)。如果在此基础上,结合自己的设计目的进行一些修改,则是一种简便、快捷的做法。当然,有些电路还需要自己设计,完全照搬是不太可能的。在参考别人的电路时,需对其工作原理有较透彻的分析和理解,根据其工作机理了解其适用范围,从而确定其移植的可能性和需要修改的地方;对于有些关键性和尚不完全理解的电路,需要仔细分析,在设计之前先进行试验,以确定这部分电路的正确性,并在可靠性和精度等方面进行考验,尤其是模拟电路部分,更需进行这方面的工作。

为使硬件设计尽可能合理,根据经验,系统的电路设计应注意以下几个方面: 1、尽可能选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性;

2、在条件允许的情况下,尽可能选用功能强、集成度高的电路或芯片。因为采用这种器件可能代替某一部分电路,不仅元件数量、接插件和相互连线减少,使系统可靠性增加,而且成本往往比用多个元件实现的电路要低。

3、注意选择通用性强、市场货源充足的元器件,尤其对需大批量生产的场合,更应注意这方面的问题。其优点是:一旦某种元器件无法获得,也能用其它元器件直接替换或对电路稍作改动后用其它器件代替。

4、在对硬件系统总体结构考虑时,同样要注意通用性的问题。对于一个较复杂的系统,设计者往往希望将其模块化,即对中曲控制单元、输入接口、输出接口、人机接口等分块进行设计,然后采用一定的边接方式将其组合成一个完整的系统。在这种情况下,连接方式就显得非常重要,有时可选用通用接口方式,如采用STD总线结构、PC总线结构、GPIB总线结构等。因为对于这些总线结构的边接目前应用比较广泛,不少厂家已开发出适合于这些总线结构的接口板,如输入板、输出板、A/D板等。在必要的情况下,选用现成的模块板作为系统的一部分,尽管成本有些偏高,但会大大缩短研制周期,提高工作效率。当然,在有些特殊情况和小系统的场合,用户必须自行设计接口,定义连线方式。此时要注意接口协议,一旦接口方式确定下来,各个模块的设计者应遵守该接口方式。

5、系统的扩展及各功能模块的设计在满足应用系统功能要求的基础上,应适当留有余地,以备将来修改、扩展之需。实际上,电路设计一次成功而不作任何修改的情况是很少的,如果在设计之初未留有任何余地,后期很可能因为一点小小的改动或扩展而被迫进行全面返工。举例来说,在进行ROM扩展时,尽量选用27以上的芯片,这样不仅将来升级方便,成本也会降低;在进行RAM扩展时,为使系统升级或增加内存方便,系统的RAM空间应留足位置,哪怕多设计一个RAM插座,不插芯片好;在进行IO口扩展时,也应给出一定的余量,这样对临时增加一些测量通道或被控对象就极为方便了。辑外在电路板设计时,可适当安排一些机动布线区,在此区域中安排若干集成芯片插座和金属化孔,但不布线,这样的样机研制过程中,若发现硬件电路有不足之处,需增加元器件时,可在机动布线区临时连线来完成,从而避免整个系统返工。在进行模拟信号处理电路设计时,尤其要注意这一点。因为在设计这类电路时,经常会增加一些电容、电阻等元器件。当然,一旦试验完成,制作正式电路板时,可以去掉机动布线区。

6、设计时应尽可能地作些调研,采用最新的技术。因为电子技术发展迅速,器件更新换代很快,市场上不断推出性能更优、功能更强的芯片,只有时刻注意这方面的发展动态,采用新技术、新工艺,才能使产品具有最先进的性能,不落后于时代发展的潮流。

7、在电路设计时,要充分考虑应用系统各部分的驱动能力。一些经验欠缺者往往忽视电路的驱动能力及时序问题,认为原理上通就行了,其实不然。因为不同的电路有不同的驱动能力,对后级系统的输入阻抗要求也不一样。如果阻抗匹配不当,系统驱动能力不够,将导致系统工作不可靠甚至无法工作。值得注意的是,这种不可靠很难通过一般的测试手段来确定而排除这种故障往往需要对系统作较大的调整。因此,在电路设计时,要注意增加系统的驱动能力或减少系统的功耗。

8、工艺设计,包括机箱、面板、配线、接插件等,这也是一个初次进行系统设计人员容易疏忽但又十分重要的问题。在设计时要充分考虑到安装、调试、维修的方便。

2

由于应用系统种类繁多,程序编制者风格不一,因此应用软件因系统而异,因人而异。尽管如此,作为优秀的系统软件还是有其共同特点及其规律的。设计人员在进行程序设计时应从以下几个方面加以考虑:

1、根据软件功能要求,将系统软件分成若干个相对的部分。根据它们之间的联系和时间上的关系,设计出合理的软件总体结构,使其清晰、简捷、流程合理。

2、培养结构化程序设计风格,各功能程序实行模块化、子程序化。既便于调试、连接,又便于移植、修改。

3、建立正确的数学模型。即根据功能要求,描述出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。

4、为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。这不仅是程序设计的一个重要组成部分,而且是决定成败的关键部分。从某种意义上讲,多花一份时间来设计程序流程图,就可以节约几倍源程序编辑调试时间。

5、要合理分配系统资源,包括ROM、RAM、定时器/计数器、中断源等。其中最关键的是片内RAM分配。对8031来讲,片内RAM指00H~7FH单元,这128个字节的功能不完全相同,分配时应充分发挥其特长,做到物尽其用。例如在工作寄存器的8个单元中,R0和R1具有指针功能,是编程的重要角色,避免作为它用;20H~2FH这16个字节具有位寻址功能,用来存放各种标志位、逻辑变量、状态变量等;设置堆栈区时应事先估算出子程序和中断嵌套的级数及程序中栈操作指令使用情况,其大小应留有余量。若系统中扩展了RAM存储器,应把使用频率最高的数据缓冲器安排在片内RAM中,以提高处理速度。当RAM资源规划好后,应列出一张RAM资源详细分配表,以备编程查用方便。

6、注意在程序的有关位置处写上功能注释,提高程序的可读性。

7、加强软件抗干扰设计,它是提高计算机应用系统可靠性的有力措施。

通过编辑软件编辑出的源程序,必须用编译程序汇编后生成目标代码。如果源程序有语法错误则返回编辑过程,修改源文件后再继续编译,直到无语法错误为止。这之后就是利用目标码进行程序调试了,在运行中发现设计上的错误再重新修改源程序,如此反复直到成功。

第二节 单片机应用系统的开发

一个单片机应用系统经过预研、总体设计、硬件设计、软件设计、制板、元器件安装后,在系统的程序存储器中放入编制好的应用程序,系统即可运行。但一次性成功几乎是不可能的,多少会出现一些硬件、软件上的错误,这就需要通过调试来发现错误并加以改正。由于单片机在执行程序时人工是无法控制的,为了能调试程序,检查硬件、软件运行状态,就必须借助某种开发工具模拟用户实际的单片机,并且能随时观察运行的中间过程而不改变运行中有的数据性能和结果,从而进行模仿现场的真实调试。完成这一在线仿真工作的开发工具就是单片机在线仿真器。

一、仿真系统的功能

单片机在线仿真器必须具有以下基本功能: 1、能输入和修改用户的应用程序;

2、能对用户系统硬件电路进行检查与诊断;

3、能将用户源程序编译成目标码并固化到EPROM中去;

4、能以单步、断点、连续方式运行用户程序,正确反映用户程序执行的中间结果。 对于一个完善的在线仿真系统,为了方便用户调试,提高产品的开发效率,还应具备以下特点:

1、不占用用户单片机的任何资源,包括8031内部RAM、特殊功能寄存器,I/O口、串行口、中断源等;

2、 提供给用户足够的仿真RAM空间作为用户的程序存储器(最好是从零地址开始),并提供用户有足够的RAM空间作为用户的数据存储器作用;

3、可以单步、断点、全速断点、连续方式运行仿真RM或样机EPROM内的用户程序(包括中

3

断控制指令和中断服务程序);

4、有较齐全的软件开发工具。如配备有交驻汇编软件,将用户用汇编语言编制的应用程序生成可执行的目标文件;具有丰富的子程序库,汇编时连同用户设计的程序一起编译成目标程序,装入仿真RAM供调和固化;具有高级语言编译系统,用户可用BASIC语言或C51语言进行编程;具有反汇编功能,对目标程序反汇编的结果可以打印或入磁盘等。

二、开发手段的选择

目前国内用于单片机的开发系统很多,大致可分为以下四种:

(一)、通用型单片机开发系统

这是目前国内使用最多的一类开发装置。如上海复旦大学的SICE-Ⅱ、SICE-Ⅵ,中国科技大学的WJ-51-5、WJ-51-Ⅷ。它采用国际上流行的型仿真结构,与任何具有RS-232C串行接口的终端或计算机(PC/XT、286、386、APPLEⅡ等)相连,即可构成单片机开发系统。系统中配备有EPROM读出/与入器、仿真插头和其它外设,其基本配置如图3.1所示。

图3.1

在图3-1中,EPROM读出/写入器用来将用户的应用程序固化到EPROM中,或将EPROM中的程序读到仿真RAM中。在调试用户系统时,仿真插头必须插入用户系统空出的CPU插座中。当仿真器通过串行口与计算机联机后,用户可利用组合软件,先在计算机上编辑、修改源程序,然后通过MCS-51交叉汇编软件将其汇编成目标码,传送到仿真器的仿真RAM中。这时用户可用单步、断点、跟踪、全速等方式运行用户程序,系统状态实时地显示在屏幕上。该类仿真器采用模块化结构,配备有不同外设,如外存板、打印机、键盘/显示板可在现场完成仿真调试工作。

调试完毕的用户程序通过EPROM读出/固化器固化后,将芯片插入用户系统的程序存储器插座中,即可脱机(脱离仿真器)运行。

(二)、实用型开发系统

这类装置的特点是:其硬件按照典型应用系统配置,并配有监控程序,具有自开发能力。如航天部502所的STD工业控制机就是此类产品,系统结构如图3.2所示。

4

图3.2

这类装置采用模块化结构,用户可根据需要选择适当的功能模块板(如A/D板、D/A板、I/O板、键盘/显示板等)组合成自己的应用系统。当它通过主板上的RS-232口和计算机连机后,如同通用型开发系统一样,可对用户程序进行编辑、修改、调试。调试好的应用程序固化到EPROM中,拔去主板上装有监控程序的EPROM芯片,换上用户的EPROM,应用系统即研制完成。为降低成本和使用方便,国内也常见单板机形式的实用型开发系统。

如武汉大学研制的SCB-1型单片单板机,结构上采用键盘/显示内含技术,整机一体化,如图3.3所示。

图3.3

该机设置有A/D、D/A通道及并行I/O口,可直接驱动打印机、开关、继电器等,用户利用它可方便地构成一个数据采集或控制系统。该机的全双工串行口,提供了方便的多机通信能力,易于建网及群控。SCB-1型单片单板机具有较强的自开发能力,带掉电保护的16KRAM可供用户调试。值得一提的是,在完成调试工作后,将地址切换开关拔向另一端,此时仿真RAM的地址范围成为0000H~1FFFH,即用户程序已完全取代了SCB-1系统监控程序的地址,在系统复位后将自动转入执行用户开发的应用程序。这一点是SCB-1型单片单板机的独特之处。采用上述手段进行开发的优点是:由于减少了系统研制时的硬件工作量,因而研制周期短、开发效率高,并且具有二次开发能力。缺点是:当不能获得最佳配置时,软硬件资源浪费较,应用场合也有一定的局限性。

(三)、通用机开发系统

这是一种在通用计算机(如PC机、286、386、APPLEⅡ等)中加开发模板的开发系统,如图3.4所示。

5

图3.4

开发模板既可插在计算机的扩展槽中,也可以总线联接方式放在外部。开发模板的硬件结构包含有计算机不可替代的部分,如EPROM写入、仿真头及CPU仿真所必须的单片机系统等。这类开发系统的优点是可以充分利用计算机系统的软、硬件资源,开发效率较高。目前国内已有一些厂家推出了用于IBM-PC、APPLEⅡ的开发模板,用户只要购置一块开发模板及相应的软件包,即可利用计算机进行单片机应用系统的开发工作。如北京康华科技发展公司和哈尔滨工业大学共同推出的KHK-ICE-51单片机仿真开发系统即是此类型发装置。

(四)、模拟开发系统

这是一种完全依靠软件手段进行开发的系统,该系统由计算机加模拟开发软件构成。如Cybernetic Microsystem Inc推出的SIM8051,就是在IBM-PC微机上运行的MCS-51单片机模拟/调试软件。

模拟开发系统的工作原理是利用模拟开发软件在计算机上实现对单片机的硬件模拟、指令模拟,从而完成应用软件开发全过程,其间不需要任何在线仿真器和目标机。SIM8051软件的模拟调试功能很强,基本上包括了在线仿真器的单步、跟踪、检查和修改功能,并且还能模拟产生各种中断和I/O应答过程。因此,用户只要配备了模拟/调试软件,就可使IBM-PC微机成为一台通用的模拟开发系统。

模拟开发系统效率高,成本低,不足之处是不能进行硬件系统的诊断与实时仿真。

三、应用系统的开发过程

一般来说,随着用途的不同,应用系统的硬件和软件结构也不相同,但研制、开发的方法和步骤基本上是相同的。综合前面所讲的内容,可以看出应用系统的开发过程主要有下面几个步骤:

1、预研; 2、总体设计; 3、系统硬件设计; 4、系统软件设计;

5、仿真调试(包括硬件调试和软件调试); 6、固化应用程序,脱机运行。

第三节 SICE-Ⅳ型单片机仿真器 一、SICE-IV仿真器系统结构

SICE-Ⅳ采用模块式结构,整个系统由SICE-Ⅳ主模块板、EM-48板、EM-96板、EM-51板、EPROM固化/读出板、外存板及终端或主计算机所组成。用户可以根据所需开发的目标系统的机种条件,选用适宜的模块或设备以组成最佳的单片机开发系统。SICE-Ⅳ系统框图如图3.5所示。

6

图3.5 一、主模块板

SICE-Ⅳ主模块板是单CPU方式的8031/8032/8344单片机仿真器。SICE-ⅣCPU若采用8032则能开发8031/8032的用户系统;若采用8344则能开发8344的用户系统。因此在开发不同机种的单片机产品时,SICE-Ⅳ中的CPU应作相应调整。SICE-Ⅳ内部具有32K EPROM作监控程序存储器,它分成若干块,离散地分布在0~FFFFH的空间内。内部的0~7FFFH的32K仿真RAM仅作为用户的目标程序存储器;8000~DFFFH RAM是多用途存储器,可以用作源程序存储器,也可以出借给用户作为目标程序存储器,还可以出借给用户作为数据存储器。E000~FFFFH为系统工作区。SICE-Ⅳ内部的这些RAM存储器都具有掉电保护功能。

二、仿真接口

SICE-Ⅳ有一个40芯的仿真接口(CN1),用来实现对各种用户系统的调试。

(1) 若用户系统的CPU选用的是8031/8032/8344,那么只需将用户的CPU空出,插上40芯的仿真插头和SICE-Ⅳ仿真接口相连,就可以实现在线仿真调试;

(2)在SICE-主模块板的仿真接口上外接EM-48仿真板,再和8748(或8749/8039/8035)等MCS-48单片机应用系统相连,就可以在线开发这些单片机的产品。

(3)在SICE-Ⅳ主模块板仿真接口上外接IM-96BH仿真板,就可以开发MCS-96系列单片机应用系统。

(4)在SICE-Ⅳ主模块板仿真接口上外接EM-51仿真板,就可以开发8751/8752/8744单片机应用系统。

三、外部设备

SICE-Ⅳ有一个40芯的通用输入/输出接口(CN2),可用来连接各种外部设备(EPROM固化器、打印机等),以满足不同用户的需要。

1、EPROM固化/读出器

该装置用以将SICE-Ⅳ仿真RAM中的用户系统目标程序固化到EPROM芯片中去。根据固化速度不同,分为慢速EPROM固化/读出器和快速EPROM固化/读出器两种。

(1)慢速EPROM固化/读出器

这是一个通用的 EPROM固化/读出器,可将SICE-Ⅳ连上此固化/读出器后,在操作命令控制下对EPROM进行固化,一旦出错,则停止固化并在屏幕上显示出错信息。SICE-Ⅳ还可以将该板上EPROM内的程序读到仿真RAM内,以便复制或通过反汇编分析EPROM内的程序。

(2)快速EPROM固化/读出器

对于27、27128、27256等大容量EPROM芯片,若用慢速EPROM固化/读出器进行固化,

7

则需要八分钟~几十分钟时间(一个字节约50ms),若采用快速EPROM固化/读出器,速度可以提高十倍以上。在固化过程中将自动检测固化的正确性,若出错则显示出错信息。除速度外,其它功能和慢速EPROM固化/读出器相同。

2、外存板

用来存储用户的源程序或仿真RAM内的目标程序,对于无主机或无磁盘驱动器的用户,可将外存板作为存储器使用。按其特点,外存板分为两种:

(1)EEPROM外存板

它的容量为32K由4片8K的580 EEPROM所组成。扩展板插入SICE的I/O扩展口后,电源指示灯亮。开关拨向“读”位置,“允许写入”灯灭,这时只允许读不允许写。拔向“写”位置时,“允许写入”灯亮,这时读/写都可以。将程序存入EEPROM外存板比存入磁盘可靠,而且用EEPROM外存板,可以将所编辑的程序在PC机/APPLEⅡ/终端三者之间调出来或装进去。

(2)快速外存板

由8片8K的62RAM和一节3伏锂电池组成,可存储应用系统的源程序。存储形式与系统机的磁盘存储形式相似,以文件形式最多可存储10个文件目录,并可列表显示文件的占有空间及文件名。它除了具有EEPROM外存板的优点外,还具有价格低、存储速度快(高于EEPROM存储速度)、使用寿命长等特点,是用户比较理想的外存储器。

3、8748/87498751固化/读出器

该固化/读出器对于开发内部含有EPROM单片机应用系统是必须的。它能将仿真RAM内的MCS-48或MCS-51目标程序固化到8748、8749或8751单片机内部的EPROM中,也可以将8748、8749、8048、8049或8751等单片机内部EPROM内的程序读至仿真RAM内,以便复制或分析。该板上有一个8×8双列直插开关,用来选择对8748/8749操作还是对8751操作。在固化过程中,自动检测固化的正确性,一旦出错则停止固化并显示出错信息。

4、打印机

凡具有Centronics通讯标准的打印机,都可以直接和SICE-Ⅳ(通过打印电缆)相连,作为仿真系统的硬拷贝输出设备,打印汇编语言源程序或调试过程中的错误信息等。

四、SICE-Ⅳ的串行口

SICE-Ⅳ具有二个RS-232C串行接口,其中2#RS232由8031的串行口引出,1#RS232由异步串行讯接口芯片8250的串行口引出。在一般情况下,用户可把终端。计算机和1#串行口、2#串行口中的任意一个相连,SICE-Ⅳ内的监控程序将自动检测用户的终端或计算机连接到哪一个串行口上,并自动检则终端或主机的串行通讯波特率,进而设置SICE-Ⅳ串行口的波特率和其一致。但如果出现下述二种情况,选择1#RS232和2#RS232还是有区别的。

1)用户样机MCS-51串行口未接任何外部设备(如计算机),而用户又需调试MCS-51串行通讯程序。这时可将主机或终端连到2#RS232串行口,使用户系统和SICE-Ⅳ监控分时使用8031的串行口,相当于用户系统借用了连在SICE-Ⅳ上的计算机或终端,用户通讯程序的输出信息直接在计算机或终端的屏幕上显示出来,同时计算机或终端键盘上输入的命令又可被用户程序所接受。用这种方法,非常方便用户串行通讯的调试,而不必一定要在用户样机上接好外部设备后才能调试通讯程序。

(2)用户样机8031的P3.0、P3.1作为第一功能I/O口使用或用户样机的MCS-51串行口已外接设备时,为了使用户MCS-51的I/O功能完善,应将主机或终端接到SICE-Ⅳ的1#232串行口上,此时SICE-Ⅳ中8031的串行口所对应的口线P3.0、P3.1由用户样机独用,在单步、断点、连续运行用户程序时,P3.0、P3.1口线状态仅受用户程序或用户操作命令的影响,从而大大方便了对用户样机的调试。

二、SICE-Ⅳ的仿真特性和软件功能

SICE-Ⅳ主模块板可以直接通过仿真插头和8031/8032/8344单片机的应用系统机连,实现在线仿真。

一、MCS-51仿真特性

1、SICE-Ⅳ可以将内部的8031(或8032/8344)完整地出借给用户系统而不占用用户单片机的任

8

何资源(包括RAM、SFR、I/R口、中断源等)。即用户可以把SICE-Ⅳ中的单片机看作是用户系统中的单片机,可任意地安排、使用其内部资源。在调试过程中,系统的内部状态、RAM和I/O的状态只受用户程序或用户操作命令的影响,监控程序的执行不影响用户样机的资源状态。

2、SICE-Ⅳ在线仿真MCS-51应用系统时,不占用用户的K程序存储器空间和K RAM/IO口地址空间,从而使用户在进行应用系统的存储器/IO设计时,不受SICE-Ⅳ结构的任何影响。

3、SICE-Ⅳ可出借从零地址开始的56K仿真RAM作为用户的程序存储器,还可以出借24K RAM作为用户的数据存储器,这就使得用户在样机未组装好之前就可以进行软件的编制和调试工作。

4、用户可以通过SICE-Ⅳ以单步、跟踪、非全速断点、全速断点和连续方式运行仿真RAM或样机EPROM内的程序(包括中断控制指令和中断服务程序)。

5、SICE-Ⅳ具有很强的硬件故障和软件错误的诊断、排除功能。用户可以对样机的各种资源状态进行读出检查、修改,并根据所显示的异常状态或样机输出及相应设备的状态,定位出样机的各种硬件故障。

6、用户通过SICE-Ⅳ具有完全的一次性仿真功能。用户系统联机和脱机时运行的程序相同,空间一致、资源使用一样。

用户通过SICE-Ⅳ在线仿真排除了样机软、硬件故障,并且达到了预定的各项技术指标后,将软件固化,脱机后样机便研制完成。

二、SICE-Ⅳ的软件功能特性

SICE-Ⅳ在SICE-Ⅰ、SICE-Ⅱ的基础上,软件功能又有很大提高。它具有: 1、编辑功能

SICE-Ⅳ具有FD-EDIT编辑程序,提供56K的源程序存储器,用户可通过终端或主机上的键盘输入源程序,并可随时打印、修改、转储。

2、FD-ASM51宏汇编

SICE-Ⅳ主模块板内配有MCS-51扩展汇编程序FD-ASM51.可宏调用SICE-Ⅳ的各种运算子程序,汇编时连同用户设计的程序一起编译成目标程序装入仿真RAM中供调试和固化,文件清单可打印或存入主机中。

3、MBASIC-51编译系统

SICE-Ⅳ具有功能极强的MBASIC-51高级语言编译程序,用户可用BASIC语句编写程序,并允许在源程序中任意使用汇编语言指令,编译时一起编译成目标程序供调试,其间不需要连接。通过MBASIC-51生成的目标程序,具有运行速度快、程序长度短等特点,特别适合于实时控制和实时计算等场合。

4、全符号化调试功能

SICE-Ⅳ具有全符号化的调试功能。它允许使用江编语言的标号作为运行控制命令中的起始地址或断点地址,因此可以按源程序进行调试,不必查找程序中指令的绝对地址。这就给调试人员带来了极大的方便,尤其是在程序局部改动之后。

由于MBASIC-51采用汇编语言的标号的结构,因而在调试用MBASIC-51高级语言编写的程序时,同样可以用标号作为运行控制命令中的起始地址和断点地址,逐个语句或逐段程序进行调试。

5、反汇编功能

AICE-Ⅳ配有MCS-51反汇编程序,可以对目标程序进行反汇编。对目标程序进行反汇编所得到的程序清单,可以打印或存入主机磁盘,以便分析。

三、SICE-Ⅳ与主机和终端的连接使用方法

SICE-Ⅳ具有二个RS232串行接口,用户可选其中之一与任何具有RS232串行口的终端或主机相连。通过键盘,用户可输入各种命令,进行应用系统的软、硬件调试。

SICE-Ⅳ连接主机构成的单片机开发系统结构如图3.6所示。按此配置,用户可充分利用主机的显示器、磁盘、打印机及各种软件件资源,进行应用系统的开发调试工作。

9

图3.6

图3.6中,“EPROM固化器”可根据需要选择慢速EPROM固化/读出器或快速EPROM固化/读出器,而“8748/8749/8751固化器”仅对开发内部含有EPROM的单片机应用系统才是必需的。

系统的操作过程如下: 1、将SICE-Ⅳ所附的RS-232电缆插头分别是插入SICE-Ⅳ和IMB-PC的RS232插座上,使SICE-Ⅳ和主机的串行口相连;

2、开启SICE-Ⅳ和主机电源;

3、将带有TERMSICE通讯程序的磁盘插入IBM-PC的软盘驱动器中; 4、在DOS状态下,在IBM-PC的键盘上打入:TERMSICE〈CR〉(注:〈CR〉即回车键) 屏幕上将出现:

PLEASE INPUT BAUD PATE Baud Rate 9600 Input 1 4800 2 3600 3 2400 4 1800 5 1200 6 900 7 600 8

这时应按屏幕上的菜单选择适当数字(1~8)输入,格式为:数字〈CR〉 以后屏幕上将出现:

Communication on between IBM PC and SICE „„ „„

这时如连接无误,SICE将显示:

SICE 8031 Emulator V3.0

Copyright 1998 Microcomputer Lab Fudan University *

这里的“*”为监控提示符。如“*”没有出现,表明主机和SICE-Ⅳ没有联系上,这时可按一下SICE-Ⅳ上的复位键,再在键盘上按一下〈CR〉。如还是没出现“*”符号,这时应检查SICE-Ⅳ和主机的RS-232插头是否插紧,否则就是SICE-Ⅳ的串行口或主机的串行通讯卡有故障。

在SICE的监控提示符“*”下,用户可根据手册提供的各种操作命令对应用系统进行软件、硬件的开发调试工作。

二、SICE-Ⅳ与终端的连接

SICE-Ⅳ连接终端组成的单片机开发系统,如图3.7所示。 在图3-8中,“EPROM固化器”根据所要固化的EPROM型号和速度来选择慢速EPROM固化读出器或快速EPROM固化器/读出器,外存储器也在EEPROM板和快速存储板任选一种。至于图

10

中的“8048/49/8751固化读出器”仅对开发内部含有FPROM的单片机应用系统才是必需的。当使用终端和SICE-Ⅳ组成的开发系统对应用系统调试时,先用RS-232专用连接插头将终端与SICE-Ⅳ相连,接通SICE和终端电源,在键盘上打入一个回车键(RETURN),以启动SICE-Ⅳ进行波特率检测和设置。这时如果无连接错误,则终端的屏幕上将出现。

图3.7

SICE 8031 Emulator V3.0

Copyright 19 Microcomputer Lab Fuban University *

最后出现的“*”为监控状态提示符。在这以后可打入各种操作命令。

第四节 用户程序的编辑、汇编、调试、固化及运行

当一个单片机应用系统经过预研、总体设计、硬件设计、软件设计、制做电路板、安装好元器件准备进行仿真调试时,必然会面临下述问题:

1、如何编辑、修改用户源程序;

2、如何将源程序汇编成单片机可执行的目标程序; 3、如何对应用程序进行仿真调试;

4、如何将调试好的用户目标程序固化到EPROM中。

下面结合SICE-Ⅳ仿真器,介绍用户程序的编辑、编译、调试及固化的方法。为使其更具普遍性,下面的讨论均假设SICE-Ⅳ与带有磁盘的个人计算机相连。

一、源程序的编辑

源程序的编辑方法有二种:

一、利用SICE仿真器的编辑程序编写源程序

SICE-Ⅳ配置有行编辑程序FD-EDIT,固化于系统的监控程序中,其功能和使用方法类似于IBM-PC机的EDLIN行编辑。SICE-Ⅳ向用户提供56K源程序存储器,用于存放MCS-51或MBASIC-51高级语言源程序。用户可以在主机键盘上输入源程序,并可以随时列表显示、修改源程序,还可将源程序转储到主机磁盘、外存板中,或将主机磁盘上、外存板上的源程序读至SICE-Ⅳ的源程序存储器中。 1、编辑状态进入方法

用SICE-Ⅳ仿真器编辑程序时,只需在监控状态“*”下键入EDIT〈CR〉,即转到FDEDIT编辑状态,显示:

FD-EDIT V3.0

Copyright 1988 Mircocomputer Lab Fudan University 〉

这里的“〉”为编辑状态揭示符。此后用户就如同使用IBM-PC的IDLIN一样,通过主机键盘输入源程序并进行编辑。具体使用方法请参考SICE-Ⅳ用户手册。

2、源程序的存盘操作

11

在编辑状态下,键入

〉MSV Ctrl+v ;Ctrl+v是Ctrl键和V键同时按下的意思。 此命令不是以回车结束,而是以Ctrl+v结束的,打入该命令后,显示: New Source File Name:

要求输入源程序的文件名(以回车结束)。打入文件名后,开始向主机传送源程序,一面传送,一面在显示器上显示传送内容。传送完毕,主机把全部接收到的源程序记入盘中。

3、源程序的读盘操作

如果在SICE-Ⅳ的编辑状态“〉”下,要求把存放在主机磁盘中的源程序传至SICE的源程序存储器中,则在“〉”键入

〉MLD Ctrl+W

此命令是以Ctrl+W结束的,此时屏幕显示: Output Source FILE Name:

要求输入将要传输到SICE的文件名(以回车结束)。打入文件名后,先清除源程序存储区,然后主机把磁盘上的源程序传输到SICE的源程序存储区中,同时在屏幕上显示传输内容。

4、从编辑状态退回监控状态 在“〉”下,键入EXIT及回车键,则从编辑状态退回监控状态,即揭示符由“〉”变为“*”,以后可打入监控命令。另外,按SICE的复位键也可直接退回到监控状态(需再按一次回车)。

二、利用IBM—PC的编辑程序编写源程序

利用SICE—IV所提供的FD—EDIT编写源程序显然比较麻烦,如要和SICE仿真器连机、接电源,况且FD—EDIT的编辑功能并非完美。因此在编写源程序,尤其是编辑较长的源程序时,软件设计人员往往喜欢利用PC机所能支持的编辑软件写源程序。目前使用较多的是:

(1)PE—全屏幕编辑软件

(2)WordStar—全屏幕编辑软件 (3)EDLN—行编辑软件

通过这些编辑软件编写的源程序,可以利用SICE的源程序读盘命令传到SICE的源程序存储器中。

二、源程序的汇编

用户编辑的源程序,必须经过编译才能成为单片机可执行目标程序。通常的编译方法有三种: 一、利用SICE的FD—ASM51汇编源程序

SICE—IV主模块板的监控程序中配有功能极强的MCS—51扩展汇编程序FD—ASM51.它能对Intel的《MS—51用户手册》中规定的标准格式MCS—51汇编指令进行汇编,允许在指令中使用8031、8032、8344的特殊功能寄存器名和各种位名,允许使用程序标号和各种符号。FD—ASM51除了有常规的伪指令外,还具有功能极强的宏调用指令,使用户可在汇编中直接调用浮点加、减、乘、除等各种运算三角函数、指数、对数等各种函数运算子程序。在汇编时,连用户的源程序一起将宏调用的子程序汇编成机器码装配到用户目标程序中。调用FD—ASM51的方法如下:

在编辑状态“>”下,完成对源程序的编写,或把主机磁盘上将要汇编的源程序传输到SICE的程序存储区后,键入以下命令:

>ASM51<CR>

命令执行后将对源程序存储区中的汇编程序进行汇编,执行时先显示: FO—ASM—51 V2.0

COPYRIGHT 1987 Microcomputer Fudan University Pass 1

开始对源程序进行第一遍扫描,生成用户符号表,并对程序进行语法检查,如有错误,显示错信号和出错数目,然后返回编辑状态,这时可对源程序进行修改。如没有错误,则开始第二遍扫描,生成的机器码(目标程序)放入由ORG命令所指标的仿真RAM中(没有ORG命令时则从0000H开始存放目标程序)。

在第二遍扫描完成后,如没有错误则显示用户符号表,然后显示仿真RAM中目标程序的下一空闲单元地址,再返回编辑状态。必须指出的是:在使用扩展宏子程序调用指令Call时,由于在用

12

户目标程序后自动插入了所调用的各种浮点运算程序,故此时显示的仿真RAM的下一空闲单元地址将远大用户自己程序的末地址L:以后固化时,应以显示的末地址为准。

二、利用SICE的MBASEC—51编译源程序

MBASIC—51是一种适合于实时控制计算使用的编译型高级语言,固化于SECE—Ⅳ的32K的监控程序中,能对MBASEC—51高级程序进行编译,产生用户的目标程序。MBASIC—51具有赋值、FOR—NEXT、IF—THEN等各种语句;能使用位、字节、整数和浮点数等数据类型,并能对各种采用汇编语言的标号结构,并允许在源程序中使用汇编语言语句。MBASEC—51是一种高速、高效的编译系统,用它产生的目标程序具有运行速度快、程序长度短等特点,特另适合于实时控制、实时计算等场合使用。调用MBASIC—51的方法如下:

在编辑状态提示符“>”下,完成对源程序的编写,或把主机磁盘上将要编译的源程序传输到SICE程序存储区后,键入以下命令:

>MBASIC 〈CR〉

可启动编译程度开始对用户的MBASIC—51源程序进行编译。编译采用二遍扫描方法,第一遍检查误法错误,形成用户符号表(包括地址标号、变量多、数据符号等)。

如果有错误,将显示出错信息和出错数目,然后返回编辑状态,这时可对源程序修改;如果没有错误,将进行第二遍扫描,逐行生成的全部机器码(目标程序)放由源程序ORG命令所指定的SICE仿真RAM中(没有ORG命令时,从0地址开始存放)在第二遍扫描完成后,若没有错误,则显示用户符号表,显示仿真RAM中目标程序的下一个空闲单元地址,再返回编辑状态,由于使用MASEC语言时,用户一般不知道自己目标程序和的长度,所以下一个空闲单元地址用户十分重要,它指出了用户目标程序的长度和位置。在调试完成后,把仿真RAM中的目标程度固化到ERPOM中去时,必须按实际的目标程序大小进行。

三、利用MCS—51交叉汇编软件汇编源程序

为了方便使用,在IBM—PC机上提供有一个MCS—51的交叉汇编程序(由出售SICE仿真机的厂家提供)。用它可在IMB—PC系列机上把MCS—51的汇编程度变成机器码程序存入在磁盘上。该交叉汇编的文件名为MCS51.EXE。例如,要把一个MCS—51的汇编程序文件PROGRAM.A SM汇编成目标文件,可在DOS状态下打入:

C〉MCS51 PROGRAM.ASM PROGRAM.PRT PROGRAM.OBJ

按回车键后,即启动MCS51交叉汇编软件对程序名为PROGRAM.ASM的源程充进行汇编。汇编完成后,生成一个列表文件PROGRAM.PRT和一个目标文件PROGRAM.OBJ,后者即为机器程序(目标程序)。

如果要利用SICE仿真器对该机器程序进行调试,可用通讯程序(文件名为TERMSICE,该软件,由出售仿真器的厂家提供)把它传输到SICE—Ⅳ中。传输方法是,在DOS状态下,键入:

C〉TERMSICE〈CR〉

在选择通讯波特率使主机与SICE—Ⅳ连机后,在监控状态睛打入: L Ctrl+L 这时屏幕上显示:

Output File Name:

可打入需传输的程序的文件名,如打入PROGRAM.OBJ及回车后就开始传输,同时,在屏幕上显示传输的内容。传输完毕,显示Nextadr:××××

××××为下一地址。

如果检验出错,则显示:Checksum Error

传送的目标程序放到SICE仿真器的仿真RAM中,存放的开始地址与原来汇编时的定位(ORG)地址相同。

如果需传输的地址与原来汇编时的定位地址不一样,如汇编地址为0000H,而需传输到7000H 开始的访真RAM中,可打入:

L7000 Ctrl+L

这以后目标程序的传送过程同上,不再重复。

13

三、用户程序的调试

用户的源程序经过汇编后,生成的目标文件必须经过仿真调试,才能固化到应用系统的程度存储器EPROM中。

从实质上讲,应用软件的调试是对软硬件的综合调试,一方面要排除软件错误,同时进一步解决硬件部分的遣留故障。调试时可以将软件模块一个一个分开进行,再将它们连在一起统调。

仿真调试时,需将SICE-Ⅳ的仿真插头插入到应用系统空出的CPU插座中,将主机和SICE相连;通电启动后,在监控状态“*”下将被调试软件的机器码(目标文件)传送到SICE仿真器的仿真RAM中。这以后用户便可以在监控状态下,通过主机输入各种操作、控制、运行命令,对软件进行在线仿真调试。SICE-Ⅳ提供的调试命令有很多,归纳起来分为六大类:

(1) 状态和工作方式转换命令 SICE-Ⅳ处于监控状态时,有系统状态(提示符为“*”)和编辑状态(揭示符为“〉”) 二 种状态。在仿真调试MCS-51应用系统时,根据资源出借情况,分程序存储器出借方式、数据存储器出借方式、SICE串行口上设备出借方式等。

(2) 信息传送命令

这一类命令用于将目标文件在主机、SICE仿真RAM、用户ROM之间传送,包括:主机←→仿真RAM;用户ROM→仿真RAM。

(3) 读出检查命令

执行此类命令,可将8031内部各种寄存器、内部RAM、仿真RAM、用户EPROM、用户数据存储器的内容读出,并显示在主机屏幕上。

(4) 读出修改命令

执行此类命令后,可将8031内部可寻址位、特殊功能寄存器、工作寄存器、内部RAM、仿真RAM、用户数据存储器的内容读出,显示在屏幕上,并可对其进行修改。

(5) 外部设备操作命令

执行此类命令,可对SICE-Ⅳ仿真器的外部设备(如EPROM固化/读出器、EPROM外板、快速外存板、8748、8749、8751、固化读出器等)进行各种操作。

(6) 运行控制命令

执行此类命令,可以单步、跟踪、断点、连续方式运行仿真RAM或样机EPROM内的用户程序(包括中断控制指令和中断服务程序)。

限于篇幅,这里主要介绍如何利用运行控制命令对软件进行仿真调试。有关SICE-Ⅳ其它操作命令的详细使用,请读者查阅SICE-Ⅳ用户手册。

为方便用户,SICE-Ⅳ提供了二种不同风格的运行控制命令:一是非符号化运行控制命令, 二是符号化运行控制命令。

一、非符号化运行控制命令的基本格式为: 〈命令〉n1,n2,n3〈CR〉

其中命令由1~5个字符组成,n1,n2,n3为参数,均为16进制数,命令与参数之间必须用空格隔开,参数之间必须使用逗号分隔,命令必须用回车结束。

程序的调试运行可分为单步、跟踪、断点、连续四种方式: 1、单步运行命令Sn〈CR〉

它启动用户机执行地址n处的一条指令,执行完后返回监控状态。这是软件调时用来故障定位的最基本方法。由于每次执行一条指令后停止,因而用户可对执行后的现场进行检查,检查和这一条指令运行有关的特殊寄存器、内部RAM、数据存储器以及I/O口和设备的情况。

全部正确时,可继续执行下一条指令,再返回监控检查运行后的现场,若某状态或数据与指令应达目的不符,则说明这一指令或设备有问题,需根据有关状态对故障定位处理。

值得注意的是,单步命令不适用于串行通讯和I/O实时控制的调试。因为串行通讯输入是连续的,如果用单步调试,串行口的输入数据必然会产生丢失现象。

2、跟踪运行命令:Tn1,n2,n3〈CR〉

它启动用户机从n1开始逐条执行用户程序,直到n3次遇到地址n2为止。即n1为开始地址,

14

n2为断点地址,n3为断点次数。若缺省n3(即仅键入Tn1,n2,〈CR〉),则遇到断点n2时停止。在跟踪时,每执行一条指令,显示PC、ACC、SP、„„等寄存器的内容,用户可用Ctrl+S命令暂停命令的执行,以便观察程序的执行情况。

3、断点运行命令

一套应用系统软件,即使是某一模块,往往也有成百甚至上千条语句,若全用单步方法调试显然是不现实的。而连续运行虽然快,但难以知道故障位置,此时可以采用断点方式调试程序,即在程序中设置断点,程序从起始外运行到断点时停止,然后调试者可以检查执行后的现场状态,根据该功能段应达到的要求判断该段程序有无问题。假若运行不到断点地址(屏幕显示一址处于空白状态)或到达断点后的现场有错,说明这一段程序有错,这时可进一步用上述单步运行法,在有错误的程序段中一条一条执行指令,检查出错原因。灵活地使用断点和单步命令,可以很快解决软件中存在的大部分问题。

断点运行命令分为非全速和全速二种方式,应根据调试要求分别选用。 非全速断点运行命令:BK n1,n2,n3〈CR〉

其中n1为开始地址,n2为断点地址,n3为断点次数。执行此命令,使8031转到n1处开始执行用户程序,当n3次遇到n2地址时停止运行,返回监控。若参数n3省略(即输入BK n1,n2〈CR〉),表示n3=1.由于执行非全速断点运行命令,目标程序的运行时间比实际指令运行长的多,故不能用该命令调试串行口和I/O实时控制,主要用来排除用户系统中软件或硬件的静态性错误。

全速断点运行命令:G n1,n2,n3〈CR〉

其中n1,n2同前,应注意这时n3不是断点次数,而是断点处的中断状态。n3=1断点地址不在中断服务程序中;n3=2断点地址在低优先级中断服务程序中;n3=3断点地址在高优先级中断服务程序中;若n3省略则作n3=1处理。

本命令只适合于调试仿真RAM中的用户程序。执行该命令,使用户CPU全速执行仿真RAM内从地址n1开始的用户程序,直至执行到地址n2时才停下来回到监控。用全速断点运行命令可以提高调试速度,调试实时控制和串行口通讯程序应尽量采用此方式。

4、连续全速运行命令:EXn〈CR〉

执行该命令后,屏幕上显示:Execute Begin。用户CPU从地址n处连续地全速运行仿真RAM内或用户样机EPROM内的应用程序,这时不受SICE—Ⅳ监控程序的控制,只有按下SICE仿真器上的复位键才能使SICE—Ⅳ返回监控。

执行连续全速运行命令,一般是在排除了用户系统的各种软硬件故障以后才使用。主要用于全面测试用户系统技术指标。发现的错误主要是元件速度不够和多个任务之间关系处理不当引起的。一般情况下,连续全速运行时应选用用户系统的晶振工作,使测试和动态性能更精确地反映用户系统的真实情况。

二、符号化运行控制命令

为了方便对汇编或高级语言编写的源程序进行调式,SICE—Ⅳ提供有一系列符号化调试命令。符号化调式命令的格式为

〈命令〉L1,L2,n3〈CR〉

其中L1、L2为用户符号,它们为汇编或高级语言源程序的标号地址或十进制/十六进制绝对地址。符号化调试命令是微机开发系统的一个重要标志,有了它,可大大方便对用户汇编程序的调试工作。因为有了符号化调式命令,可不必去关心目标程序的存放地址,设置断点,启动运行都可以根据汇编程序的标号来进行。尤其是程序局部改动后(特别是插入一些指令),程序地址变动了,若按十六进制地址调试(非符号化调试),必须重新打印程序清单或者通过反汇编查出程序绝对地址才能进行调试。有了全符号化调试功能,则只要程序中标号名不变,就可仍用原程序清单调试。

符号化运行控制命令的执行和显示方式与对应的非符号运行控制命令相同,也具有: 1、符号化单步运行命令:STEP L〈CR〉 其中L为标号地址或用十进/十六进制格式

表示的绝对地址,能省略。该命令的执行方式同S n〈CR〉命令。 2、符号化跟踪命令:TR L1,L2〈CR〉

其中L1为标号启动地址,L2为标号断点地址,它的执行方式同T n1,n2命令。

15

3、符号化断点运行命令:EBL1,L2,n3〈CR〉

L1为标号启动地址,L2为标号断点地址,n3为断点次数(十进制数或标准格式的16进制数)。它的执行方式同BK n1,n2,n3〈CR〉命令。

4、符号化全速断点运行命令:GO L1,L2, n3〈CR〉

n3为中断状态说明(n3=1~3)。它的执行方式同G n1,n2,n3〈CR〉命令。 5、符号化连续全速断点运行命令:EXEC L〈CR〉命令 L为标号启动地址,该命令的执行方式同EX n〈CR〉。

符号化调试命令应在监控状态下使用。使用前必须在编辑状态下输入汇编或MBASIC—51源程序,并用ASM51或MBASIC命令进行汇编或编译,然后退回到监控状态才能使用。需特别指出的是:如果使用主机如IBM—PC上的交叉汇编软件对源程序进行汇编。不仅要把目标程序传送到SIC的仿真RAM,而且要用SYMB命令装入编用户符号表后才能使用符号化调试命令。下面举例来说明符号化调试命令的使用方法:

例:设在地址1000H处编写一个向8031内部RAM20~2FH送立即数55H的程序。其汇编程序发下:

CRG 1000

START: MOV RO,#20H MOV R1,#10H MOV A,#55H LOOP: MOV @RO,A INC RO

DJNZ R1,LOOP END: NOP

SJMP END 在SICE的编辑状态“〉”下输入该程序,并用ASM51对它进行汇编,汇编无错后,用EXIT回到监控状态, 这时目标程序已存放到从1000H开始的仿真RAM中。不面举出用各种符号化调试命令对其进行调试的方法。

(1)键入:STEP START〈CR〉

将执行第一条指令 MOV RO,#20H (2)键入:TR START,LOOP〈CR〉 将跟踪执行

MOV RO,#20H MOV R1,#10H MOV A,#55H 三条指令。

(3)健入:BE START,END〈CR〉

将慢速执行该程序至结束,随后返回监控。 (4)键入;GO START,END〈CR〉

将全速执行该程序至结束,随后返回监控。 (5)键入:EXEC START〈CR〉 将全速执行程序,并进入循环。

四、用户程序的固化

用户目标程序经过仿真调试通过后,就可以进行固化了。SICE—Ⅳ信真器配备有快速和慢速二种固化读出器,用于将SICE—Ⅳ仿真RAM内用户的目标程序固化到EPROM中,或将ERPOM中的程序读到SICE—Ⅳ的仿真RAM内。下面以快速固化/读出器为例,说明将仿真RAM内的0000H~1FFFH内容固化到27EPROM内0000~1FFFH的方法。快速固化的命令是:

FMEPn1,n2,n3.〈CR〉

其含义是将仿真RAM内n1~n2的内容快速固化

16

到EPROM内n3为首地址的单元中去。本例的操作步骤如下:

1、将快速EPROM固化/读出器接到SICE扩展I/O口上,把27EPROM芯片放入可锁插座内锁紧(注意方向),EPROM型号选择开关拨向27位置,并在DICE—Ⅳ上接上固化电源Vpp(Vpp大小与所需固化的EPROM芯片有关)。

2、输入EPROM检查命令:MECK 000,1FFF〈CR〉 该命令用来检查EPROM是否空片。若是空片,屏幕就显示“OK”;否则就显示“NOT all clear! 3、输入快速EPROM与入命令:FMEP 0000,1FFF,0000〈CR〉

固化过程中,固化指示灯亮。每固化一个单元,就进行一次检查,最后进行总的检验。若正确固化完,则显示“OK”;若固化错就立即停止固化,并显示固化出错信息:

Error

Adr:××××

××××为出错的EPROM单元的下一个地址。

4、固化完成后,可用CMP命令进一步验证固化的正确性。方法是先用MCR命令将固化好的EPROM中的内容传送到仿真RAM的某个区域,再和原来需要固化的程序进行比较,检查是否一致。即键入:

MCR 0000,1FFF,4000〈CR〉 ;将EPROM内的内容读到仿真RAM 4000H开始的单元 MCR 0000,1FFF,4000〈CR〉 ;将仿真RAM中0000H~1FFF单元的内容与仿真RAM 4000H开始的单元内容进行比较

在比较过程中,如果发现有不相同的地方,则逐个显示地址和对应的二个单元的内容,如全部相同,则不显示,直接回到监控状态。

固化出错的主要原因是:

·芯片未插好或固化板未连接好; ·EPROM芯片是坏的;

·EPROM芯片内原来就有内容,需进行紫外线擦除;

·固化电压Vpp太高或太低,不符合标准(固化电压Vpp必须根据所要固化的EPROM型号、制造厂家来确定。若不知道EPROM的固化电压,则Vpp可从+12V开始试验,逐渐加高,直至写入为止)。

五、用户程序的运行

经过仿真调试的用户目标程序固化到EPROM后,将其插入到样机的程度存储器插座中,连上仿真插头,接地电源,启动SICE进入监控状态,下一步就可以运行样机EPROM内的积序了。在运行之前,首先在监控状态下键入MAPO及回车,即:

MEP0〈CR〉

该命令执行后,用户程序存储器已切换到样机中,这时可继续使用单步、跟踪、断点(全速点除外)、连续等运行控制命令运行目标样机EPROM内的程序。若程序运行不正常,则首先考虑样机程序存储器的故障,这时可使用用户程序读出合令DCn1,n2〈CR〉,检查用户样机EPROM中的程序是否能读出,读出的内容是否正确。

在一切正常后,拔下仿真插头,将8031芯片插入到样机CPU插座中,样机即研制完成。一般情况下,目标样机都能正确工作。若脱机工作不正常,则应考虑样机上的复位电路是否有故障,系统晶振是不否起振等。

应用系统的调试、开发是一件复杂而细致的工作,只能给出大致步骤,经验还需在实践中不断积累。

17

第二章 8255A可编程并行I/O扩展接口

一、8255A芯片介绍

8255A是Intel公司生产的可编程输入输出接口芯片,它具有3个8位的并行I/O口,具有三种工作方式,可通过程序改变其功能,因而使用灵活方便,通用性强,可作单片机与多种外围设备连

接时的中间接口电路。8255A的引脚及内部结构如图4.27所示。

图4.27

引脚说明

8255共有40个引脚,采用双列直插式封装,各引脚功能如下:

D7~D0:三个态双向数据线,与单片机数据总线连接,用来传送数据信息。 CS:片选信号线,低电平有效,表示芯片被选中。 RD:读出信号线,低电科有效,控制数据的读出。 WR:写入信号线,低电平有效,控制数据的写入。 VCC:+5V电源。

PA7~PA0:A的输入/输出线。 PB7~PB0:B口输入/输出线。 PC7~PC0:C口输入/输出线。 RESET:复位信号线。

A1~A0:地址线,用来选择8255内部端口。 GND:地线。 内部结构

8255内部结构如图4.27所示,其中包括三个并行数据输入/输出端口,二个工作方式控制电路,一个读/写控制逻辑电路和8位总线缓冲器。各部分功能概括如下:

端口A、B、C

A口:是一个8位数据出锁器/缓冲器和一个8位数据输入锁存器。 B口:是一个8位数据输入/输出锁存器和一个8位数据输入结冲器。

C口:是一个8位数据输入/输出端口。C作为控制/状态住处缓冲器(输入不锁存)。

18

通常A口、B口作为数据输入/输出端口。C口作为控制/状态信息端口,它在“方式控制字”的控制下可分为二个4位端口。每个端口有一个4位锁存器,分别与A口和B口配合使用,作为控制信号输出或状态信息输入端口。

工作方式控制电路

工作方式控制电路有两个,一个是A组控制电路,另一个是B组控制电路。这两组控制电路具有一个控制命令寄存器,用来接收处理器发来的控制字,以决定两组端口的工作方式,也可根据控制字的要求对C口按位清“0”或者位置“1”。

A组控制电路用来控制A口和C口的上半部分(PC7~PC4)。B组控制电路用来控制B口和C口的下半部分(PC3~PC0)。

总线数据缓冲器

总线数据缓冲器是一个三态双向8位缓冲器,作为8255与系统总线之间的接口,用来传送数据、指令、控制命令以及外部状态信息。

读/写控制逻辑电路

读/写控制逻辑电路接收CPU发来的控制信号WR、RD、RESET、地址信号A1~A0等,然后根据控制信号的要求,将端口数据读出,送往CPU,或者将CPU送来的数据写入端口。

各端口的工作状态如表4.7所求。

表4.7 8255接口工作状态表 A1 A2 工作状态 RD WR CS 0 0 0 1 0 A口数据 数据总线 0 1 0 1 0 B口数据 数据总线 1 0 0 1 0 C口数据 数据总线 0 0 1 0 0 总线数据 A口 0 1 1 0 0 总线数据 B口 1 0 1 0 0 总线数据 C口 1 1 1 0 0 总线数据 控制字寄存器 ╳ ╳ ╳ ╳ 1 数据总线 三态 1 1 0 1 0 非法状态 1 1 0 ╳ ╳ 数据总线 三态 工作方式选择 8255有三种基本工作方式: 方式0:(MODE 0):基本输入输出 方式1(Mode 1):选通输入输出 方式2(Mode 2):双向传送

三种工作方式如图4.28所示,由工作方式控制字来决定。

19

图4.28

方式控制字的格式如图4.29所示,由CPU通过输入/输出指令来提供。三个端口中C口被分为两个部分,上半部分随A口称为A组,下半部分随B口称为B组。其中A口可工作于方式0、1和2,而B口只能工作在方式0和1.

图4.29

例如:输入工作方式控制字95H,可将8255编程为A口方式0输入,B口方式1输出,C口的上半部分(PC7~PC4)输出,C口的下半部分(PC3~PC0)输入。

另外,C口还具有位控制功能,它可通过工作方式控制字将其任意一位置“1”或者清“0”,

20

其方式控制字如图4.30所示。这样,就可使8255方便地用于逻辑控制方面。

图4.30

下面对三种工作方式分别介绍:

二、工作方式0

工作方式0是一种基本的输入/输出的工作方式。在这种方式下,三个端口都可以由程序设置为输入或者输出,没有固定的用于应答的联络信号。其基本功能可概括如下:

可具有两个8位端口(A、B)和两个四位端口(C口的上半部分和下半部分)。

b.任何一个端口都可以设定为输入或者输出。各端口的输入、输出可构成16种组合。 C.数据输出时可以锁存,输入时不锁存。

按照方式0工作时,CPU可以通过简单的传送指令对任意一个端口进行读/写。这样各端口就可以作为查询式输入/输出接口。按照查询方式工作时,A口、B口可作为两个数据输入/输出端口,C口的某些位可作为这两个端口的控制/状态信号端。

三、工作方式1

工作方式1是一种选通式输入/输出工作方式。在这种工作方式下,选通信号与输入/输出数据一起传送,由选通信号对数据进行选通。基基本功能可概括如下:

三个端口分为两组,即A组和B组。

每一组包括一个8位数据端口和一个4位的控制/状态端口

每一个8位数据端口均可设置为输入或者输出,输入输出均可锁存。 4位端口作为8位数据端口的控制/状态信号端口。 方式1输入:

当任何一个端口按照工作方式1输入时,控制联络信号如图4.31所示.

21

图4.31

各控制信号的功能如下:

STB:选通输入,低电平有效,是由外设送来的输入信号,用来将输入数据送入输入锁存器。 IBF:输入缓冲器满信号,高电平有效,表示数据已送入输入锁存器,它由STB信号的下降沿置位,由RD信号的上升沿置复位。

INTR:中断请示信号,高电平有效,由8255输出,向CPU发中断请求。发中断请求的条件是STB、IBF和INTE(中断允许)为高电平。中断请求信号由RD的下降沿复位。

INTE A:A口中断允许信号,由PC4的置位/复位来控制。INTE B由PC2的置位/复位来控制。 方式1输出:

当任何一个端口按照工作方式1输出时,控制联络信号如图4.32所示各控制信号的功能如下:

22

图4.32

OBF:输出缓冲器满信号,低电平有效,是8255输出给外围设备的联络信号。表示CPU已把输出数据送到指定端口,外设可以将数据取走。它由WR信号的上升沿置“0”(有效),由ACK信号的下降沿置“1”(无效)。

ACK:外设响应信号,低电平有效。表示CPU输出给8255的数据已由外设取走。

INTR:中断请求信号,高电平有效。表示数据已被外设取走,请求CPU继续输出数据。中断请求的条件是ACK、OBF和INTE(中断允许)为高电平,中断请求信号由WR的下降沿复位。 INTE A:由PC6的置位/复位来控制。 INTE B:由PC2的置位/复位来控制。

四、工作方式2

A口除了工作方式0和工作方式1之外,还有工作方式2.按照方式2工作时,A口成为双向数据总线端口,既可以发送数据,又可以接收数据。其主要功能可概括如下:

有一个8位双向数据输入/输出端口(A)和一个5位控制信号端口(C)。 输入、输出均锁存。

5位控制信号端口(C)作为8位双向数据输入/输出端口A的控制/状态信号端口。 工作方式2只适合于A口。

按照工作方式2工作时,A口既可工作于查询方式,又可工作于中断方式。其控制联络信号如图4.33所示,各控制信号的功能如下:

23

图4.33

INTR:中断请求信号,高电平有效。在输入、输出方式时,可用于向CPU发中断请求。 ACK:外设响应信号,低电平有效。表示CPU输出给8255的数据已由外设取走。

INTR:中断请求信号,高电平有效。表示数据已被外设取走,请求CPU继续输出数据。中断请求的条件是ACK、OBF和INTE(中断允许)为高电平,中断请示信号由WR的下降沿复位。 INTE A:由PC6的置位/复位来控制。 INTE B;由PC2的置位/复位来控制。 工作方式2

A口除了工作方式0和工作方式1之外,还有工作方式2.按照方式2工作时,A口成为双向数据总线端口,既可以发送数据,又可以接收数据。其主要功能可概括如下:

有一个8位双向数据输入/输出端口(A)和一个5位控制信号端口(C) 输入、输出均锁存

5位控制信号端口(C)作为8位双向数据输入、输出端口A的控制/状态信号端口。 工作方式2只适合于A口。

按照工作方式2工作时,A口既可工作于查询方式,又可工作于中断方式。其控制联络信号如图2-29所示,各控制信号的功能如下:

INTR:中断请求信号,低电平有效。是8255输出给外设的联络信号,表示CPU已把数据输出到A口。 ACK :外设响应信号,低电平有效,用来启动A口三态输出缓冲输出数据。

INTE1:是一个与输出缓冲器相关的中断允许触发器,由PC6的置位/复位来控制。

STB:选通输入,低电平有效。是由外设送来的输入信号,用来将数据送入输入锁存器。 IBF:输入缓冲器满信号,高电平有效,表示数据已送入输入锁存器。

INTE2:是一个与输入缓冲器相关的中断允许触发器,由PC4的置位/复位来控制。

当A口工作在方式2时,B口可工作于方式0或方式1,既可以作为输入端口,又可以作为输出端口。这时C口主要用于控制/状态信号的输入/输出。C口各位的功能如图4.34所示,其中5位用于A口,低3位用于B口。

24

图4.34

8031单片机和8255的接口

在8031单片机的I/O口上扩展8255芯片,其接口逻辑相当简单,如图4.35所示。

图4.35

图中,8255的片选信号CS及口地址选择线A0、A1分别由8031的P0.7和P0.0、P0.1经地址锁存后提供。故8255的A、B、C口及控制口地址分别为FF7CH、FF7DH、FF7EH、FF7FH。8255的复位与8031的得位端相连,都接到8031的复位电路上。

五、8255编程举例

在实际的应用系统中,必须根据外围设备的类型选择8255的操作方式,并在初始化程序中把相应控制字写入操作口。下面根据图4.35,举例说明8255的编程方法。

图4.35中,各端口地址如下:

25

A口地址:FF7CH B口地址:FF7DH C口地址:FF7EH 控制口地址:FF7FH

假设要求8255工作方式0,且A口作为输入,B口、C口作为输出,则工作程序如下: MOV A,#99H ;方式0,A口输入,B口、C口输出 MOV DPTR,#0FF7FH ;控制寄存器地址 DPTR MOVX @DPTR,A ;方式控制字 控制寄存器 MOV DPTR,#0FF7EH ;A口地址 DPTR MOVX A,@DPTR ;从A口读数据

MOV DPTR,#0FF7DH ;B口地址 DPTR MOV A,DATA1 ;要输出的数据DATA1 A MOVX @DRTR,A ;将DATA1送B口输出

MOV DPTR,#0FF7EH ;C口地址 DPTR MOV A,DATA2 ;DATA2 A

MOVX @DPTR,A ;将DATA2送C口输出 对端口C的置位/复位

8255的C口8位中的任一位,均可用指令来置位或复位。例如,如果想把C口的第6位PC5置1,相应的控制字为:00001011B=0BH(关于8255的C口置/复位的控制字说明参见图4.30),程序如下:

MOV DPTR,#0FF7FH;控制中地址 DPTR MOV A,#0BH :控制字 A

MOVX @DPTR,A ;控制字 控制口 ;PC5=1

如果想把C口的第6位PC5复位,相应的控制字为:00001010B=0AH。程序如下:

MOV DPTR,#0FF7FH ;控制口地址 DPTR MOV A,#0AH ;控制字 A MOVX @DPTR,A ;控制字送到控制口 ;PC5=0

8255接口芯片在MCS-51单片机应用系统中广泛用于连接外部设备,如打印机、键盘、显示器以及作为控制信息的输入、输出口。

26

第三章 MCS-51 单片机串行接口的扩展

MCS-51系列单片机仅有一个异步通讯串行接口,而在实际应用中,经常需要一个以上的串行口。例如当8031用于构成主从式多机系统时,主机8031一方面要和从机通讯,另一方面还要和终端(或上级管理机)通讯。利用可编程同步/异步接收/发送器(USART),如INTEL8251来扩展通道是一个有效的办法。

一、8251的基本功能

1. 可用于同步和异步传送

2. 同步传送:5—8bit字符,内部或外部字符同步化,自动插入同步字符。 3. 异步传送:5—8bit字符,时钟速率为通讯波特率的1、16或倍。 4. 可产生中止字符(Break Character);可产生1、1.5或2位的停止位。可检查假启动位。自动检测和处理中止字符。

5. 波特率:DC—19。2K(异步); DC-K(同步)。 6. 完全双工,双缓冲发送和接收器。

7. 误差检测——具有奇偶、溢出和帧错误检测电路。

二、8251的功能框图

8251的结构如图8.41的功能框图所示。整个8251可以分成5个主要部分:接收器,发送器,调制控制,读写控制以及I/O缓冲器。而I/O缓冲器由状态缓冲器,发送数据/命令缓冲器和接收数据缓冲器三部分组成。8251的内部由内部数据总线实现相互之间的通讯。

图8.41

1.接收器

接收器接收在RXD脚上的串行数据并按规定的格式把它转换为并行数据,存放在接收数据缓冲器中。

当8251工作在异步方式且允许接收和准备好接收数据时,它监视RDX线。在无字符传送时,RXD线上为高电平(即所谓MARK),当发现RXD线上出现低电平时,即认为它是起始位(即所谓的Space),就起动一个内部计数器,当计数到一个数据位宽度的一半(若时钟脉冲频率为波特率的16倍时,则为计数到第8个脉冲)时,重新采样RXD线作为输入信号,送至移位寄存器,经过

27

移位,以经过奇偶校验和去掉停止位后,就得到了变换为并行的数据,经过8251内部数据总线传送至接收数据缓冲器,同时发出RXRDY信号,告诉CPU数据已接收到。

2. 发送器

发送器接收CPU送来的并行数据,加上起始位、奇偶校验位和停止位后由TXD脚发送。 在异步方式时,发送器加上起始位;检查并根据程序规定的检验要求(奇校验还是偶校验)加

1上适当的校验位;最后根据程序的规定,再加上1位、 1 位或2位停止位。

不论在同步或异步工作方式,只有当程序设置了TXEN(Transmitter Enable——2 允许发送)和

CTS(Clear to Send——这是对调制器发出的请求发送的响应信号)有效时,才能发送。

1. I/O控制

读/写控制逻辑对CPU输出的控制信号进行译码以实现表11-13所示的读/写功能。 USART是以RD或WR信号中的一个为“0”来实现I/O操作的。若两者中无一“0”,则USART不执行I/O操作;若两者全为“0”,这是一种无确定结果的非法状态。

三、接口信号

8251是用来用为CPU与外设或调制解调器之间的接口,如图8.42所示。

图8.42

其接口信号可以分为两组:一组为CPU接口的信号;另一组为与外设(或调制器)接口的信号。

表8.7 8251读写操作真值表 功能 CS C/D RD WR 0 0 0 1 CPU从8251该数据 0 1 0 1 CPU从8251读状态 0 0 1 0 CPU写数据到8251 0 1 1 0 CPU写命令到8251 1 ╳ ╳ ╳ 8251未选中,不操作 1. 与CPU的接口信号 DB7~DB0——8251的外部三态双向数据总线,它可连到CPU的数据总线。CPU与8251之间的命令信息、数据以及状态信息都是通过这组数据总线传送的。

CLK——由这个CLK输入产生8251的内部时序。CLK的频率在同步方式工作时,必须大于接收器和发送器输入时钟频率的30倍;在异步方式工作时,必须大于输入时钟的4.5倍.

另外,规定CLK的周期要地0.42us到1.35us的范围内。 CS——选片信号,它应由CPU的地址信号经译码后供给。

C/D —— 控制/数据端。在CPU读操作时,若此端为高电平,由数据总线读入的是8251的状态信息;低电平时,读入的是数据。此端通常连到CPU地址总线的A0.

TXTRDY(Transmitter Ready)——发送准备好信号。只有当USART允许发送(即CTS是低和TXEN是高),且发送命令/数据缓冲器为空时,此信号有效。它用以通知CPU,8251已准备好接收一个数据。当CPU与8251之间用查询方式交换信息时,此信号可作为一个“联络”信号;在用中断方式交换信息时,此信号可用为8251的一个中断请求信号。当USART 从CPU接收了一个字符

28

时,TXRDY复位。

TXE(Transmitter Empty)——发送器空信号。当它有效(高电平)时,表示发送器中的并行串行转换器空。

RXRDY(Receiver Ready)——接收器准备好信号。若命令寄存器的RXE(Receive Enable)位置位时,当8251已经从它的串行输入端接受了一个字符,可以传送到CPU时,此信号有效。用查询方式时,此信号可作为一个“联络”信号;在中断方式时可作为一个中断请求信处号。当CPU读入一个字符后,此信号复位。

SYNDET(Synchronous Ready)——同步检测信号。它只用于同步方式。 2. 与装置的接口信号

DTR(Data Terminal Ready)—— 数据终端准备好。这是一个通用的输出信号,低电平有效。它能由命令指令的bit 5置“1”变为有效,用以表示CPU准备就绪.

DSR (Data Set Ready)——数据装置准备好。这是一个通用的输入信号,低电平有效。用以表示调制器或外设已准备好。CPU可通过读入状态操作,在状态寄存器的bit1检测这个信号。

RTS(Reguest to Send)——请求传送,这是一个输出信号,等效于DTR这个信号用于通知调制器CPU准备好发送。可由命令指令的bit5置“1”来使其有效(低电平有效)。

CTS(Clear To Send)——清除传送,这是调制器对USART的RTS信号的响应,当其有效时(低电平),USART发送数据。

RXC(Receiver Clock)——接收器时钟,这个时钟控制USART接收字符的速度。 在异步方式,RXC是波特率的1倍,16倍或倍,由方式控制指令预先选择。USART在RXC的上升沿采样数据。

RXD(Receiver Data)——接收器数据,字符在这条线上串行地被接收。在USART中转换为并行的字符。

TXC(Transmitter Clock)——发送器时钟,这个时钟控制USART发送字符的速度。在时钟速度与波特率之间的关系同RXC。数据在TXC的下降沿由USART发送字符的速度。 T

TXD(Transmitter Data)——发送器数据。由CPU送来的并行数据在这条线上被串行地发送。 XC

四、8251的编程

8251是一个可编程的多功能通讯接口。所以在具体使用时必须对它进行初始化编程,确定它的具体工作方式。例如:规定工作于同步还是异步方式:传送的波特率;字符格式等等。

初始化编程必须在系统RESET以后,在USART工作以前进行 ,即USART不论工作于任何方式,都必须先经过初始化。

初始化编程的过程如图8.43所示

29

图8.43

1. 方式选择指令

其指令格式如图8.44所示.

图8.44

指令可以分为四组,每组两位。首先,由D1D2确定是工作于同步方式还是异步方式。当D1D2=00时,则为同步方式;而在D1D0≠00时为异步方式,且D1D0的三种组合用以选择输入时钟频率与波特率之间的系数。

D3D2用以确定字符的位数;D5D4用以确定奇偶校验的性质;D7D8在同步和异步方式时的意义是不同的。异步时用以规定停止位的位数,同步时用以确定是内同步还是外同步,以及同步字符的个数。

在同步方式时,紧跟在方式指令后面的是由程序输入的同步字符。它是用与方式指令类似的方法由CPU输出给USART的。

在输入同步字符后,或在异步方式时,在方式选择指令后应由CPU输给命令指令,其格式如图8.45所示。

30

图8.45

方式选择指令是规定8251的工作方式,而命令指令直接使8251处于规定的工作状态,以准备接收或发送数据。

8251内部设有状态寄存器,CPU可通过I/O读操作把8251的状态读入CPU,用以控制CPU在8251之间的数据交换。读状态字时,C/D端为“1”。状态的格式见图8.46.

图8.46

31

第四章 扩展多路串行口

一、硬件设计

以扩展二路串行通道为例,介绍8251与MCS-51单片机的接口方法,相应的硬件电路见图8.47。

图8.47

8253可编程定时器/计数器用来产生8251所需要的接收发送时钟。它片内包含三个的通道,每个通道为16位的计数器,均可工作在不同的工作方式,由软件预先设置。在图8.47中,8253的计数器0通过OUT0输出一定频率的方波作为8251的接收发送时钟;计数器1通过OUT1输出一定频率的方波作为8251(II)的接收发送时钟。由于8253的三个定时器/计数器相互,因此8251(I)和8251(II)所采用的波特率可以相同,也可以不同,视实际需要而定。

当8031以中断方式管理8251的操作时,可将TXRDY和RXRDY相或后连接到8031中断源INT0、 INT1.当8251发送缓冲器空接收了一个字符后,便向8031发出中断信号。当然,8031也可以通过查询方式管理8251的操作,这只需在每次发送或接收字符前查询8251状态寄存器的内容即可。在图8.47中,由于不对发数据实行中断控制,故仅将8251的RXRDY信号线经反相后连到8031的中断输入端。

由于不采用调制解调器,各个8251的有关信号DSR、CTS接地。

在图8.47的安排中,8031的P2口高位地址经138译码器后产生8253、8251的片选信号,从而得到:8253控制寄存器的地址是2403H,计数器0和计数器1的地址是2400H、2401H、825(I)的控制字和状态字寄存器地址为2001H,数据缓冲器地址为2000H,8251(II)的控制、状态寄存器的地址为2801H,数据缓冲寄存器的地址为2800H。

二、软件设计

软件设计包括波特率的计算、初始化程序及通讯程序。 波特率的计算

8251的波特率取决于RXC、TXC的时钟输入。在异步方式中,RXC、TXC可以是波特率,也

32

可以是波特率的16倍或倍,由8251控制字中的波特率因子决定。在本例中,我们设波特率因子为异步*16,即RXC、TXC是传输波特率的16倍。

从图8.47可以看出,8251的接收发送时钟由8253的OUT端提供。因此设置波特率的关键在于确定8253的计数常数N。

若将8253设置成工作方式3,则OUT端输出周期性的方波信号,其频率为fout=fclk/N,其中N为计数器的计数常数,fclk为8253的输入时钟.

设8251的分频系数为16,则波特率可由下式计算:

波特率=

foutfclk= 1616N在图8.47中,fclk由系统时钟经4分频得到,若系统选用6M晶振,则fout=1.5MHz. 若8251采用2400的波特率发送、接收数据,则8253的计时常数为:

fclk1.5106N==≈39=27H 162400162400同样,当采用1200的波特率时:

1.5106N=≈78=4CH 161200(二)初始化编程

初始化程序主要包括8253的初始化及8251的初始化。

在图8.47中,若要求8251(Ⅰ)的波特率为2400,8251(Ⅱ)的波特率为1200,均工作在异步方式,波特率因子为异步*16,每个字符8位,一个停止位,偶校验,允许发送/接收,则初始化编程如下:

;8253初始化:

MOV DPTR,#2403H ;对0通道初始化 MOV A,#36H ;送0通道控制字 MOVX @DPTR,A

MOV DPTR,#2400H ;送0通道时间常数 MOV A,#27H ;送时间常数低字节 MOV @DPTR,A

MOV A,#00H ;送时间常数高字节 MOVX @DPRT,A

MOV DPTR,#2403H ;送1通道控制字 MOV A,#76H MOVX @DPTR,A

MOV DPTR,#2401H ;送1通道时间常数 MOV A,#4CH ;送时间常数低字节 MOVX @DPTR,A MOV A,#00H MOVX @DPTR,A ;8251(Ⅰ)初始化:

MOV DPTR,#2001H ;送方式控制字 MOV A,#7EH MOVX @DPTR,A

MOV A,#37H ;送命令指令 MOVX @DPTR,A ;8251(Ⅱ)初始化:

33

MOV DPTR,#2801H MOV A,#7EH MOVX @DPTR,A MOV A,#37H MOVX @DPTR,A (三) 查询方式通讯软件

以8251(Ⅰ)为例,给出发送、接收一个字符的子程序。其中2000H为数据口,2001H为命令/状态口。(初始化程序同上,略)

发送一个字符子程序:

Sendchar: PUSH ACC ;保护将要发送的数据

MOV DPTR,#2001H ;读状态口

Waitsend: MOVX A,@DPTR

RRC A

JNC Waitsend ;发送器未准备好,循环等待 POP ACC

MOV DPTR,#2000H ;发送字符 MOVX @DPTR,A RET

接收一个字符子程序:

Recelive: MOV DPTR,#2001H ;读状态口 Waitrece: MOVX A,@DPTR

ANL A,#02H

JZ Waitrece ;接收器未准备好就循环 MOV DPTR,#2000H ;从数据口读入一字符 MOVX A,@DPTR

RET ;返回

(四) 中断方式通讯软件

以8251(Ⅰ)为例。若8251波特率为2400,异步方式,分频系数为16,字符长度为8位,偶校验,1位停止位,编写程序如下:

ORG 0000H

LJMP START ;转初始化程序 ORG 0003H

LJMP SERVE ;INT0中断入口 „„

ORG 0050H

SETART:MOV DPTR,#2403H ;8253通道0初始化

MOV A,#36H

MOV @DPTR,A ;送控制字

MOV DPTR,#2400H ;送时间常数低位 MOV A,#27H MOVX @DPTR,A

MOV A,#00H ;送时间常数高位 MOVX @DPTR,A

MOV DPTR,#2001H ;8251(Ⅰ)初始化 MOV A,@7EH ;送方式控制字 MOVX @DPTR,A

MOV A,#37 ;送命令指令 MOVX @DPTR,A

34

SETB EA ;开中断

SETB EX0 ;允许外部中断0中断 LJMP MAIN ;转主程序 „„

;INT0中断服务程序:

SERVE:CLR EA ;禁止中断

PUSH ACC ;保护现场 PUSH PSW PUSH DPH PUSH DPL

MOV DPTR,#2001H MOVX A,@DPTR RRC A

JC Send RRC A

JC Receive END:POP DPL

POP DPH POP PSW POP ACC SETB EA

RETI Send:„„ LJMP END „„

Receive:„„ „„

LJMP END

;为TXRDY,转发送处理 ;为RXRDY,转接收处理

;中断返回

;发送处理程序(略)

;接收处理程序(略)

35

第五章 应用系统的抗干扰设计

用于生产现场的单片机应用系统,易受各种干扰侵袭,直接影响到系统的可靠性。因此,应用系统的抗干扰设计已经成为设计人员关注的重要课题。由于各应用系统所处环境不同,面临的干扰源也不同,相应采取的抗干扰措施也不尽相同。

在计算机应用系统的设计中,主要考虑以下各方面的问题:

1、切断来自电源的干扰

对微机系统危豁最严重的干扰来源于电源污染。由于任何电源及输电线路都存在内阻和分布电容、电感等,正是这些因素引起了电源的噪声干扰。解决的方法是:采用交流稳压器来保证供电的稳定性,防止电源系统的过压和欠压;利用低通滤波器滤去高次谐波以改善电源波形;采用隔离变压器,双层屏蔽(初、次级屏蔽)措施来减少分布电容,提高系统抗共模干扰能力;在有条件的情况下,还可采用分散功能块供电和干扰抑制器,均有利于切断来自电源的干扰。

2、切断来自传感器、各功能模块部分的干扰。采取的措施有:模拟电路通过隔离放大器进行隔离;数字电路通过光电耦合器进行隔离;模拟地和数字地分开;或采用提高电路共模抑制比等手段。

3、在应用系统的长线传输中,采用双绞线作传输线能有效的抑制共模噪声及电磁场干扰。但应注意必须对传输线进行阻抗匹配,以免产生反射,使信号失真。

4、对空间干扰(来自于系统内部和外部的电磁场在线路、导线、壳体上的幅射、吸收与调制)的抗干扰设计主要考虑地线设计、系统的屏蔽与布局设计。

5、地线设计是一个很重要的问题。在微机应用系统中,地线结构大致有系统地、机地(屏蔽地)、数字地、模拟地等。在设计时,数字地和模拟地要分开,分别与电源端地线相连;当系统工作频率小于1MHz时,屏蔽线应采用单点接地;当系统工作频率在1M~10MHz时,屏蔽线应采用多点接地。

6、在印刷电路板设计中,要将强、弱电路严格分开,尽量不要把它们设计在一块印刷电路板上;电源线走向应尽量与数据传递方向一致;接地线应尽量加粗,在印刷电路板的各个关键部位应配置去耦电容。

7、对系统中用到的元器件要进行筛选,要选择标准化以及互换性好和器件或电路。对硬件电路存在的故障可通过常规的电平检测、信号检测或编制自诊断程序来加以诊断。

8、电路设计时要注意电平匹配。如TTL“1”电平是2.4~5伏,“0”电平是0~0.4伏;而CMOS输入“1”电平是4.99~5伏,“0”电平是0~0.01伏。因此,当CMOS器件接受TTL输出时,其输入端就要加电平转换器或上拉电阻,否则,CMOS器件就会处于不确定状态。

9、单片机进行扩展时,不应超过其驱动能力,否则将会使整个系统工作不正常。如果要超负载驱动,则应加上总线驱动器,如74LS244、74LS245等。

10、CMOS电路不使用的输入端不允许浮空。否则会引起逻辑电平不正常,易接受外界干扰产生误动作。在设计时可根据实际情况,将多余的输入端与正电源或地相连接。

11、软件的抗干扰设计,是应用系统抗干扰设计的一个重要组成部分。在许多情况下,应用系统的抗干扰不可能完全依靠硬件来解决。而对软件采取抗干扰设计,往往成本低,见效快,起到事半功倍的效果。

在实际情况中,针对不同的干扰后果,采取不同的软件对策。在实时数据采集系统中,为了消除传感器通道中的干扰信号,可采用软件数字滤波,如算术平均值法、比较舍取法、中值法、一阶递推数字滤波法等;在开关量控制系统中,为防止干扰进入系统,造成各种控制条件、输出控制失误,可采取软件冗余、设置当前输出状态寄存单元、自检程序等措施;为防止PC失控,造成程序“乱飞”而盲目运行,可设置软件“监视跟踪定时器”来监视程序运行状态,也可在非程序区设置软件陷阱,强行使程序回到复位状态。用硬件设置Watchdog电路强制系统返回也是一种常用的方法。

36

第六章 MCS-51指令系统表

助记符 ACALL addrll ADD A,Rn ADD A,direct ADD A,@R ADD A,#data ADDC A,Rn ADDC A,dircet ADDC A,@R ADDC A,dircet AJMP addrll ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data ANL C,bit ANL C,/bit CJNE A,dircet,rel CJNE A,#data,rel CJNE Rn,#data,rel CJNE @R,#data,rel CLR A CLR bit CLR C CPL A CPL bit CPL C DA A DEC A DEC Rn DEC direct DEC @Ri DIV AB DJNE Rn,rel DJNE direct,rel INC A INC Rn INC direct INC @Ri INC DPTR JB bit;rel JBC bit,rel JC rel JMP @A+DPTR JNB bit,rel JNC rel JNZ rel JZ rel LCALL addr16 操作码 X1* 28~2F 25 26,27 24 38~3F 35 36,37 34 Y1** 58~5F 55 56,57 52 53 82 B0 B5 B4 B8~BF B6,B7 E4 C2 C3 F4 B2 B3 D4 14 18~1F 15 16,17 84 DB~DF D5 04 08~0F 05 06,07 A3 20 10 40 73 30 50 70 60 12 说明 绝对子程序调用 寄存器和A相加 直接字节和A相加 间接RAM和A相加 立即数和A相加 寄存器、进位位和A相加 直接字节、进位位和A相加 间接RAM、进位位和A相加 立即数、进位位和A相加 绝对转移 寄存器和A相”与” 直接字节和A相”与" 间接RAM和A相"与" 立即数和A相"与" A和直接字节相"与" 立即数和直接字节相"与" 直接位和进位相"与" 直接位的反和进位相"与" 直接字节与A比较,不相等则相对转移 立即数与A比较,不相等则相对转移 立即数与寄存器相比较,不相等则相对转移 立即数与间接RAM相比较,不相等则相对转移 A清零 直接位清零 进位清零 A取反 直接位取反 进位取反 A的十进制加法调整 A减1 寄存器减1 直接字节减1 间接RAM减1 A除以B 寄存器减1,不为零则相对转移 直接字节减1,不为零则相对转移 A加1 寄存器加1 直接字节加1 间接RAM加1 数据指针加1 直接位为1,则相对转移 直接位为1,则相对转移,然后该位清0 进位为1,则相对转移 转移到A+DPTR所指的地址 直接位为0,则相对转移 进位为0,则相对转移 A不为零,则相对转移 A为零,则相对转移 长子程序调用 37

字节 2 1 2 1 2 1 2 1 2 2 1 2 1 2 2 3 2 2 3 3 3 3 1 2 1 1 2 1 1 1 1 2 1 1 3 3 1 1 2 1 1 3 3 2 1 3 2 2 2 3 振荡周期 24 12 12 12 12 12 12 12 12 24 12 12 12 12 12 24 24 24 24 24 24 24 12 12 12 12 12 12 12 12 12 12 12 48 24 24 12 12 12 12 24 24 24 24 24 24 24 24 24 24

LJMP addr16 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,direct MOV Rn,#data MOV direct,A MOV direct,Rn MOV direct,direct MOV direct,@Ri MOV direct,#data MOV @Ri,A MOV @Ri,direct MOV @Ri,#data MOV C,bit MOV bit,C MOV DPTR,#data16 MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A MUL AB NOP ORL A,Rn ORL A,direct ORL A,@Ri ORL A,#data ORL direct,A ORL dircect,#data ORL C,bit ORL C,/bit POP direct PUSH direct RET RETI RL A RLC A RR A RRC A SETB bit SETB C SJMP rel SUBB A,Rn SUBB A,direct SUBB A,@Ri SUBB A,#data SWAP A XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri XRL A,Rn XRL A,direct 02 E8~EF E5 E6,E7 74 F8~FF A8~AF 78~7F F5 88~8F 85 86,87 75 F6,F7 A6,A7 76,77 A2 92 90 93 83 E2,E3 E0 F2,F3 F0 A4 00 48~4F 45 46,47 44 42 43 72 A0 D0 C0 22 32 23 33 03 13 D2 D3 80 98~F 95 96,97 94 C4 C8~CF C5 C6,C7 D6,D7 68~6F 65 长转移 寄存器送A 直接字节送A 间接RAM送A 立即数送A A送寄存器 直接字节送寄存器 立即数送寄存器 A送直接字节 寄存器送直接字节 直接字节送直接字节 间接RAM送直接字节 立即数送直接字节 A送间接RAM 直接字节送间接RAM 立即数送间接RAM 直接位进位 进位送直接位 16位常数送数据指针 由A+DPTR寻直的程序存储器字节送A 由A+PC寻址的程序存储字节送A 外部数据存储器(8位地址)送A 外部数据存储器(16位地址)送A A送外部数据存储器(8位地址) A送外部数据存储器(16位地址) A乘以B 空操作 寄存器和A相"或" 直接字节和A相"或" 间接RAM和A相"或" 立接数和A相"或" A和直接。字节"或" 立即数和直接字节相"或" 直接位和进位相"或" 直接位的反和进位相"或" 直接字节退栈,SP减1 SP加1,直接字节进栈 子程序调用返回 中断返回 A左环移 A带进位左环移 A右环移 A带进位右环移 直接位置位 进位置位 短转移 A减去寄存器及进位位 A减去直接字节及进位位 A减去间接RAM及进位位 A减去立即数及进位位 A的高半字节和低半字节交换 A和寄存器交换 A和直接字节交换 A和间接RAM交换 A和间接RAM的低四位交换 寄存器和A相"异或" 直接字节和A相"异或" 38

3 1 2 1 2 1 2 2 2 2 3 2 3 1 2 2 2 2 3 1 1 1 1 1 1 1 1 1 2 1 2 2 3 2 2 2 2 1 1 1 1 1 1 2 1 2 1 2 1 2 1 1 2 1 1 1 2 24 12 12 12 12 12 24 12 12 24 24 24 24 12 24 12 12 24 24 24 24 24 24 24 24 48 12 12 12 12 12 12 24 24 24 24 24 24 24 12 12 12 12 12 12 24 12 12 12 12 12 12 12 12 12 12 12

XRL A,@Ri XRL A,#data XRL direct,A XRL direct,#data 66,67 62 63 间接RAM和A相"异或" 立即数和A相"异或" A和直接字节相"异或" 立即数和直接字节相"异或" 1 2 2 3 12 12 12 24 * X=1,3,5,7,9,B,D,F,即X1为11,31,51,71,91,B1,D1,F1 ** Y=0,2,4,6,8,A,C,E,即Y0

为01,21,41,61,81,A1,C1,E1

39

第七章 8098单片机简介

一、8098概述

80年代中期,单片机的应用进入了16位单片机的时代。Intel公司继MCS-51单片机之后,于1983年推出16位单片机8098,并于1985年年底推出改进型8096BH,它与8096相比,最大改进是外部数据总线的宽度既可以是16位,又可以是8位,在适应外部设备的需要方面,具有很强的灵活性。虽然16位8096单片机在性能上优于51系列,但由于它价格昂贵,与目前广泛使用的8 I/O接口芯片匹配较为复杂,帮使其普及应用受到一定。1988年年底Intel公司推出了具有8位机价格16位机性能的8098单片机,从而使MCS-96系列单片机的应用有了飞跃性的突破。在此基础上,Intel公司又推出了性能更强的CMOS芯片80C196/80C198,它们除保留了8096BH/8098的功能外,还增加了许多内部功能和指令功能,且速度相当于9096BH/8098的两倍,使其在高层次的应用中有很大的前景。表13.1给出了MCS-96系列单片机主要芯片(8097,8097BH,8098,80C196KB和80C198)的性能。

表13.1 MC-96系列单片机性能表

MCS-96包含3 个子系列:8096、8098和8096BH。8096BH完全兼容8096/98,且功能更强。它们可有三种分类方式:按片内有无ROM或EPROM分类;按片内有无A/D分类;按管脚数目分类(可为49/68),其中48引脚采用双列直插式结构,陶瓷或塑料封装,68引脚采用格栅阵列和扁平式结构,陶瓷或塑料封装。表13.2列出了20种产品的型号(对8096,8096BH型而言)。

表13.2 MCS-96系列的产品型号 类 型 无ROM型 脚 数 48脚 68脚 有ROM型 48脚 68脚 ERROM型 48脚 68脚 无A/D 8094-90 8094BH 8096-90 8096BH 8094-90 8094BH 8096-90 8096BH 94BH 8796BH 有A/D 8095-90 8095BH 8097-90 8097BH 8095-90 8095BH 8097-90 8097BH 8795BH 8797BH 40

MCS-96是高性能的单片机,特别适合应用于要求很高的实时控制场合,如工业控制、仪器仪表和计算机的智能外设。表13.3列出了MCS-96系列单片机的应用。

表13.3 MCS-96系列单片机的的应用 工业方面: 导航与控制方面 电机控制 导弹制导 工业机器 鱼雷制导控制 离散与连续过程控制 智能武器装置 数字控制 航天导航系统 智能传感器 数据处理方面: 仪器仪表方面: 图开终端 医疗器械 彩色与黑白复印机 液体和气体色谱仪 温式硬盘驱动 示波器 磁带机驱动 消费品方面: 打印机 录像机 汽车方面: 激光盘驱动 点火控制 高级电视游戏 变速器控制 电讯方面: 燃料控制 调制解调器 防滑刹车 智能线路控制 排气控制 二、8098内部结构

图13.1是8098的内部结构框图.

图13.1

它主要由一个寄存器算术逻辑单元RALU、232B的寄存器阵列以及一些外围子系统构成。由RALU控制的外围子系统包括以下部分:高速输入/输出口(HIS/HSO)、带有采样/保持电路的4通

41

道10位A/D转换器、一个可供D/A转换使用的脉冲宽度调制输出(PWM)、中断控制器和等待状态产生逻辑、一个同步/异步串行口、两个16位定时器、一个监督定时器。此外,片内还设有时钟脉冲发生器。

8096系列产品包括三种芯片:8398、8795BH和8098,它们的不同之处在于:8398片内有8K字节的掩膜ROM;8795BH片内有8KB的EPROM;8098片内无ROM(EPROM)。本书将主要介绍8098单片机。

三、引脚功能

8098采用48引脚双列直插式封装,其引脚排列如图13.2所示。

图13.2

引脚功能如下:

。Vcc ——主电源(+5V)。 。Vss —— 数字地(0V),有两个Vss,须同时接地。 。Vpd —— RAM备用电源(+5V)。正常操作期间,此电源必须接通。在掉电情况下,当Vcc 尚未降至RAM所需规范电压值以下时(Vpd正常供电),RESET信号有效,则片内寄存器顶部的16个字节内容得以维持不变,在掉电期间RESET必须保持低电平,直至Vcc恢复正常且振荡器达到稳定时为止。

。Vref—— 片内A/D的参考电压(+5V),同时也是A/D模拟部分的电源电压及读P0所用逻辑电路的供电电压。

。ANGND——A/D的模拟地,通常应与Vss保持同电位。 。Vpp ——片内EPROM的编程电压针对8795BH而言。

。STAL1——片内反相振荡器的输出,也是片内时钟发生器的输入,通常接外部晶体。 。STAL2——片内反相振荡器的输出,通常接外部晶体。

。RESET——复位信号输入,低电平有效,两个状态周期以上的低电平输入可使芯片复位。RESET再变为高电平时(高电平持续时间大于10个状态周期)可产生10个周期的内部复位序列,复位序列之后各专用寄存器的状态参看表13.4。

42

表13.4 8098复位寄存器的状态 寄存器 P2 P3口 P3口 PWM控制 TXD串行口发送 RXD串行口接收 波特率寄存器 串行口控制 串行口状态 A/D命令寄存器 A/D结果寄存器 中断登记寄存器 中断屏蔽寄存器 定时器1 复位状态 --0----1H FFH FFH 00H 不定 不定 不定 ----0---B -00-----B 不定 不定 不定 00 0000H 寄存器 定时器2 监视定时器 HIS方式寄存器 HIS状态寄存器 IOS0 IOS0 IOC0 IOC0 HIS FIFO HSO CAM HSO SFR(HSO通道 ) PSW 堆栈指针寄存器 程序计数器PC 复位状态 0000H 0000H FFH 不定 00H 00H -0-0-0-0-0B -0-0---1B 空 空 00H 0000H 不定 2080H 。EA——存储器选择输入端。当EA=0时,CPU对外部存储器操作,当EA=1时,CPU对片内存储器(EPROM/ROM)的2000H––3FFFH单元操作,地址在4000H以后,访问外部存储器,此引脚内部有下拉作用,若引脚无驱动,它总保持低电平。

。ALE/ADV——地址锁存允许或地址输出有效(由芯片控制器CCR选择)。当ALE为高电平时,表示地址/数据总线上传送的是存储器地址,ALE下降沿将地址锁存到地址锁存到地址锁存器中。

。RD——外部存储器读信号,输出低电平有效。 。WR——外部存储器写信号,输出低电平有效。 。READY——准备就绪信号(输入)。它用来延长对外部存储器的访问周期,以便与慢速存储器或动态存储器接口。它也可用于总线共享,总线周期最多可延长至1μs。通过CCR寄存器可控制插入总线周期中的状态数。该引脚内部有微弱的上位作用,在无外部驱动器时,为高电平。

。HIS——高速输入(HIS。0~HIS。3)引脚,其中HIS。2和HIS。3与两个高速输出引脚公用。

。HSO——高速输出(HSO。0~HSO。5)引脚,其中HSO。4和HSO。5与两个HIS引脚公用。

。P0口——4路高阻输入口,既可作为A/D转换器的模拟量输入(ACH4~ACH7),又可作为数字量输入(P0.4~宽。7),也可同时输入模拟信号和数字信号。

。P2口——4位多功能口(P2.0,P2.1,P2.5)。它们除用作标准的I/O口之外,还具有复用功能,表13.5给出P2口各引脚的基本功能和复用功能。

。P3/P4口 ——均为8位双向I/O口,具有两种功能,既可用作具有漏极开路输出的双向口,也可作为系统总线。用作系统总线时,P3口传送低8位地址及8位数据,P4口传送高8位地址,此时,引脚内部有上位作用。

表13.5 P2口的多功能表 引 脚 P2.0 P2.1 P2.2 P2.5 功 能 输出 输入 输入 输出 复 用 功 能 TXD(串行口发送) RXD(串行口接收) EXTINT(外中断) PWM(脉宽制) 控 制 位 IOC1.5 SP-CON.3 IOC1.1 IOC1.0 四、8098 单片机CPU结构

8098CPU由寄存器算术逻辑单元(RALU)和寄存器组两个部件组成,它与外界的通信是通过特殊功能寄存器(SFR)或存储器控制器进行的。8098CPU在结构上的最大特点是抛弃了类似MCS-51系列单片机的只有1~2个累加器的常规结构,CPU可在SFR和片内寄存器阵列所构成的256个字节空间内进行操作。这些寄存器都具有累加器的功能,它们可使CPU对运算数据进行快速交换,并且提供高速数据处理和频繁的I/O访问能力,从而消除了常规累加器结构所出现的“瓶颈

43

现象”。

(一)CPU总线

CPU的两个主要部件RALU和寄存器是通过一个控制单元和两组总线连接起来的。这两组总线是:8位地址总线(A––BUS)和16位数据总线(D––BUS)。D––BUS仅在RALU与寄存器阵列或SFRP之间传送数据,A––BUS则用作上述数据传送的地址总线,或用作与存储器控制器连接的多路复用地址/数据总线。应该指出,无论是对片内ROM或是对片外存储器的访问都是通过存储器控制器进行的。

(二)CPU寄存器阵列

CPUP寄存组共有232B的RAM单元,这些单元可按字节、字或双字存取。这些单元中的任何一个都可以为RALU所用,这样,CPU好比有232个累加器一样,使用灵活方便。需要指出的是,寄存器阵列中的第一个字专门留作堆栈指针,因此,当需要用堆栈时,该字不得用以存放数据。访问寄存器阵列和SFR的地址由CPU硬件控制,它们存放在两个8位地址寄存器内。

(三)寄存器算术逻辑单元RALU

8098的大多数运算是由RALU来完成的,其结构框图如图13.3所示。它主要包括一个17位的算术逻辑单元(ALU)、程序状态字(PSW)、程序计数器(PC)、循环计数器(LOOP COUNTER)和三个暂存器。上述所有寄存器都是16位或17位(16位加符号扩展位)。其中有些寄存器可以脱离ALU而单独进行一些简单的运算,以减轻CPU的负担。例如框图中为PC设置的增一器,用以在每取一字节指令使PC值自动增1,然而,程序的转移必须用ALU控制。

图13.3

三个暂存寄存器中,有两个自身具备移动逻辑,用于需要进行逻辑移位(包括规格化、乘、除运算)的操作中,低位字寄存器仅在双字长数据移位时使用,而高位字寄存器用于各种移位操作,也可用作指令的暂存器。当执行循环移位操作时,由5位循环计数器完成循环计数。第三个暂存器的任务是暂存器。当执行循环移位操作时,由5位循环计数器完成循环计数。第三个暂存器的任务是在执行双操作数指令时,存放第二个操作数。

延时电路用于将16位总线转换成8位总线,即把ALU同时送出的16位数分成高低8位先后送往8位总线。这一做法也是在8位A总线上传送所有地址和指令时所要求的。此外,在RALU中还存放有若干常数(如0,1,2),它们用于加速某些运算。例如,当RALU需要求补或执行如

44

加1、减1指令时,这些常数就会有用。

(四)内部定时

8098时钟信号的产生有内部时钟方式和外部时钟方式两种。内部时钟方式与MCS-51内部时钟方式类似,是直接利用芯片内部的振荡器,外接晶体到引脚XTAL1和XTAL2;外部时钟方式是将外部时钟信号由XTAL1输入。8098的工作时钟频率为6MHz—12MHz。

8098单片机内部定时波形图如图13.4所示。内部产生或外部输入的振荡信号经片内三相发生器三分频后得到三相内部定时信号。各相信号每过三个振荡周期重复一次。故三个振荡周期称作一个状态周期 — 8098操作的基本时间单位。大部分内部操作都与A相、B相或C相同步。三相信号的占空比均为33%。

图13.4 8098内部定时波形图

五、8098单片机存储空间与总线控制

8098的存储器是采用程序存储器和数据存储器合二为一的普林斯顿结构。直接寻址范围为KB。其中大部分空间(0100H-1FFFH和2080H-FFFFH)是用户可以自由使用的空间,可用来存放程序、数据或用作I/O口的映象存储区。图13.5为8098存储空间分布图。其中“保留”的空间是Intel公司试验所用或留待新产品设计时使用。这些单元中必须置为FFH,以确保现有芯片与新产品兼容。

45

图13.5

(一) 存储空间分配

特殊功能寄存器(SFR)

8098地址为00H-FFH的空间为内部RAM空间(参看图13.5),它由特殊功能寄存器(SFR)和寄存器阵列组成,其中00H-17H单元为24个SFR。8098内部的各功能部件都通过SFR进行控制。SFR的功能如表13.6所示。其中许多SFR具有两种功能,即读操作时为一种功能,写操作时为另一种功能。

46

表13.6 SFR及其功能说明一览表 寄存器 R0 AD–RESULT AD–COMMAND HIS–MODE HIS–TIME HSO–TIME HSO–COMMAND HIS–STATUS SBUP(TX) SBUP(RX) INT–MASK INT–PENDINC WATCHDOC TIMER1 TIMER2 IO–PORT0 IO–PORT1 IO–PORT2 BAUD–RATE SP–STAT SP–CON IOS0 IOS1 IOC0 IOC1 PWM–ONTROL 零寄存器 A/D结果寄存器 A/D命令寄存器 HIS方式寄存器 HIS时间寄存器 HIO时间寄存器 HSO命令时间寄存器 HIS状态寄存器 串行口发送缓冲器 串行口接收缓冲器 中断屏蔽寄存器 中断登记寄存器 监督定时寄存器 定时器1 定时器2 P0口寄存器 P1的寄存器 P2口寄存器 波特率寄存器 串行口状态寄存器 串行口控制寄存器 I/O状态寄存器0 I/O状态寄存器1 I/O控制寄存器0 I/O控制寄存器1 脉宽调制控制寄存器 名称 功能说明 读出值恒为零,作变址寻址的基地址,亦可作计数和比较时的常数 存入A/D转换结果的高低字节,只能按字节该出 控制A/D转换 用于设置高速输入部件的工作方式 有高、低两字节,存放触发HIS的时间值。只能按字读出 有高、低两字节,存放高速输出的时间值,以便根据此值执行寄存器中的命令。只能按字写入 确定在装入HSO–TIME的时间过后该发生的事件 批示在HIS–TIME所记录的时刻,HIS引脚是否发生了事件以及它们的当前状态 存放要发送的数据字节 存放刚收到的数据字节 设置各中断源的中断允许/禁止 用来记录各中断源的中断申请 具有计数功能,用来以时钟脉冲计数,以跟踪程序的运行 具有高字节和低字节的16位定时计数器,只能按字读出 具有高字节和低字节的16位定时计数器,只能按字读出 存放P0口各引脚的输入值 用于对P1口的读写,这是8096BH的P1口,8098无此端口 用于对P2的读写 存放串行口的波特率 批示串行口的工作状态 设置串行口的工作方式 存放HSO状态信息 存放定时器及HIS的状态信息 控制HIS引脚的输入、定时器2的源及时钟源 控制P2口引脚的利用功能、定时器中断和HIS中断 设置PWM脉冲宽 1. 寄存器阵列 在内部RAM中,除24个SFR外,其余各寄存器构成寄存器阵列。在232个寄存器阵列中。18H和19H两个单元作为堆栈地址指针(若无堆栈操作,则这两个单元可作为内部RAM使用),内容可由用户程序在初始化时设定,指向KB存储空间的任何地方。其余230个单元作为用户寄存器使用,它们相当于RALU的230个(或232个)累加器。

2. 掉电保护空间

8098内部RAM空间顶部的16个字节(F0H––FFH)接Vcc和Vpd引脚电源,在Vcc电压下降期间,可由Vpd引脚的备用电源供电,以维持这些单元中的内容不被丢失。此备用电源的电流约为1mA,电压为4.5~5.5V,故可用电池作此引脚的后备电源。

电源电压掉电时序如图13.6所示。为了防止在电源电压下降时对上述单元进行误写入,必须保证RESET引脚在电压下降时首先下拉为低电平时,并保持2个状态周期,使CPU和其他有关寄存器复位,不再进行写入操作。此后,只要Vpd维持不变,上述单元中的内容就会长期保存。

47

图13.6

当Vcc升至正常值时,RESET仍应保持低电平,当片内振荡器起振时,8098必须稳定供电。时钟振荡稳定两个状态周期后,RESET引脚可被拉成高电平,8098脱离供电周期后,开始执行2080H单元的指令。

(二)存储控制器

存储控制器是RALU用以访问存储器(寄存器组或用寄存器空间诸单元除外)的中间媒介,它通过A–BUS和其他控制线与RALU相连接。由于A–BUS是8位的。因此,为避免频繁地从RALU取指令地址,加快取指令速度,在存储控制器中设有一个辅助程序计数器(或称为PC),当顺序执行指令时,每次取指令后该PC值自动加1,只有执行跳转指令或子程序调用指令时,才把RALU的主PC的内容通过A–BUS加载到PC中去。

此外,存储控制器中还有一个4字节的寄存器阵列,以加速执行过程,除在外总线周期期间插入等待状态外,此4个寄存器阵列对RALU和用户来说可自由使用。

(三)系统总线

8098有多种运行方式,最常用的是标准总线方式,在此方式下,CPU通过16位地址线AD0~AD15对片外存储器或I/O寻址,其中低8位地址线与8位数据总线多路切换运行。这些线共用P3和P4口的引脚。地址锁存允许信号ALE用于分离总线上的地址和数据信息,其下降沿锁存低8位地址AD0~AD7。

总线定时

图13.7为8098外部存储器操作的定时波形。当从外存储器取数时,ALE变高,16位地址从AD0~AD15送出,随后ALE变低,其下降沿将地址低8位送入地址锁存器。然后地址信号从引脚上消失,RD降为低电平,此时,片外存储器应将其数据送入8098的数据总线,在RD上升沿之前,来自片内存储器的数据必须在总线上稳定一段时间,这段时间不得低于RD的上升沿把数据锁入8098,这就是读操作。

48

图13.7 8098总线定时波形

片外存储器的写操作要求的时序与读操作相似。主要判别为写操作由WR取代RD。当WR下降时,8098从总线上撤消地址信号的同时送出所要写的数据。WR升为高电平时,总线上的数据被锁入片外存储器。

为实现对低速存储器的存取及总线共享(DMA),8098提供了一条准备就绪READY信号,以展宽读写信号。当READY为低电平时,CPU进入等待状态,READY变高,CPU继续对存储器进行读写操作。

1. 芯片配置寄存器(CCR)

8098内设一个存放芯片操作方式信息的寄存器CCR,通过CCR选择不同的操作方式以简化存储器系统,简化接口要求和总线控制。CCR寄存器中各位的定义如图13.8所示。其中CCR最高两位用于以控制内部ROM/EPROM的加密等级。

图13.8

CCR是一个不属于内部RAM的特殊功能寄存器,系统工作时,无法通过访问内部RAM指令改变CCR内容。CCR的内容由用户预先写入2018H单元(芯片配置字节),8098复位时,该芯片配置字节被自动送入CCR。CCR一旦被加载,便不能再改变,直至下一次复位。在每种总线方式下,8098总能正确地读取该单元的内容。

49

2. 总线控制

通过CCR,8098可提供四种类型的总线控制信号。为减少片外硬件,ALE和WR信号线被赋予了双重功能,由CCR.2和CCR.3选择。如表13.7所示。

(1) 标准总线方式 此方式提供标准的ALE 和WR控制信号。每次写操作都产生WR信号,当总线上出现地址码时,ALE变为高电平,此后的下降沿用以将地址码的低8位锁存在外部锁存器中。图13.9(a)所示为它的时序。

(2) 地址有效选通方式 此方式ALE的功能被地址有效选通信号ADV取代。一旦外部地址建立起来,ADV变低,直至总线周期结束才升为高电平,这表明ADV可作为外部存储器的片选信号,时序见图13.9(b).

(3) 写选通方式 8098总线控制器的一个特有功能是利用CCR来选择WR信号的宽度.写选通方式为窄宽度WR方式,时序如图13.9(c)所示。显然,在与靠WR下降沿锁存数据的器件接口时,这一特点非常有用。

(4) 地址有效并写选通方式 此方式ALE引脚出现ADV,WR为窄宽度信号,如图13.9(d)所示。

(a) 标准总线方式 (b) 地址有效选通方式 (c) 写选通方式 (d) 地址有效并写选通方式

图13.9 总线控制信号

3. 准备就绪控制

为简化就绪控制,8098提供了四种方式的内部就绪控制逻辑,可通过CCR.4和CCR.5选择,表13.8给出了可选择的等待状态数内部就绪控制逻辑可用来慢速器件插入到总线周期中的等待状态数。当就绪引脚(READY)被拉成低电平时,总线周期中将插入等待状态,直到READY升为高电平或者到已插入的等待状态数等于CCR。4和CCR。5所限定的数目为止。两种情况以先出现者为准。

50

六、8098单片机的中断系统

(一) 中断源

8098有八种中断类型,包括两个外部中断(EXTINT 和HIS。0)和六个内部中断。有些中断又有若干个中断请求.这样中断源共计有20多个,图13.10是8098中断源简图。图中外部中断源EXTINT和A/D转换通道7合用一个中断源 ;六个内部中断包括:串行口中断、定时器溢出断、A/D转换结束中断、高速输出HSO中断、HIS数据中效中断,另外,软件定时器中断、启动A/D转换中断、复位定时器2中断三者合用一个中断源。图中虚线处标的是与该中断有关的控制位。

图13.10

8098每个中断源都有相对应的中断向量,中断向量单元存放着中断服务程序的入口地址。表13.9给出了中断向量地址表。

表13.9 8098中断向量地址表 中 断 源 软件中断 外中断 串行口中断 软件定时器中断 HIS。0中断 高速输出中断 高速输入数据有效中断 高速输入数据有效中断 A/D转换结束中断 定时器溢出中断 中断向量地址 高字节 2011H 低字节 2010H 优 先 权 用户不采用 200FH 200DH 200BH 2009H 2007H 2005H 2003H 2001H 200EH 200CH 200AH 2008H 2006H 2004H 2002H 2000H 7(最高) 6 5 4 3 2 1 0(最低)

51

第八章 PL/M语言简介

PL/M语言及其特点

PL/M语言是一种高级语言,它由美国INTEL公司设计,主要用于Intel公司生产的单片机和微处理器系统软件和应用软件的开发。作为高级语言,它更接近和体现人的设计思想。PL/M语言不仅具有一般高级语言的特点,而且还能象汇编语言那样直接利用CPU的硬件特性进行程序设计。因而,与其它高级语言相比,功能多,用途更广泛,尤其在16位单片机应用领域更受到人们的普遍重视。

PL/M语言的特点主要体现在以下几方面: 1. 简单、易学。PL/M语言的语句可分为两类:一类是说明语句,用于说明变量和过程(过程类似于其它语言中的子程序,但功能更强);另一类是可执行语句,如赋值语句。 2. 可读性好。PL/M语言属于结构化语言,其程序是块式结构,层次清晰,便于理解和阅读。一个完整的程序可由多个单独编译的模块组成,每个模块可由多个程序块组成,程序块可以互相嵌套。 3. 占用内存容量小,运行速度快。若程序长度接近或超过2K字节时,其占用内存大小和运行速度甚至可优于一般人直接用汇编语言编写的程序。 4. 可靠性高。用PL/M语言编写的程序容易达到正确的目的。 5. 可维护性好。既便于修改和增添,有利于将来扩充和开发,也便于发现程序中的错误。 6. 能够使用与实际问题更接近的数据类型和数据结构。例如,布尔变量,字符,数组,结构,有符号和无符号整数,浮点数,位操作等。 7. 作用域概念和规则,增强了程序编写的灵活性。例如,可以多人共同编制一个程序,而不必担心是否使用了相同的标识符。 8. 程序设计速度快,开发成本低(投入人力、财力少),周期短,效益高。 9. PL/M语言可与汇编及其它高级语言程序连接生成一组目标码。 10. PL/M语言程序库可由用户增加和删改。

PL/M语言到机器代码的转换主要由编译程序完成。经过编译后生成可重定位的机器代码文件最终由连接程序将多个模块连接定位。可重定位的目标模块(机器代码)可由PL/M语言、汇编语言或其它高级语言程序生成。编译程序提供一个输出清单、错误信息、一定数量的控制功能,以帮助进行程序开发和调试。程序编译后可得到列表文件,其扩展名为.LST,程序连接后可得到有关列表文件,其扩展名为.M96。列表文件给出了各种有关的信息。PL/M编译程序主要特点如下: 1. 结构化编程。

2. 兼容性好。可与其它语言程序生成的目标模块相连接。

3. 支持多种数据类型及逻辑、算术、关系等多种运算。还可使用基变量。 4. 支持多种数据结构,如数组、结构(可有不同类型),数组和结构的结合。 5. 支持中断管理,使用INTERRUPT过程。

6. 丰富的编译控制,提高了程序编译灵活性。这些控制包括: (1) 优化。 (2) 条件编译。 (3) 将磁盘上的PL/M源文件引入到程序中。 (4) 符号交叉引用。 (5) 选择列出PL/M语言程序对应用的汇编语言程序和机器代码。 7. 有4级代码自动优化功能,优化内容为: (1) 常数表达式的结合。例如,用左移代替乘2

52

(2) 机器码优化;除去不必要的分支;重复使用完全相同的代码;除去不可能到达的代码。 (3) 片内寄存器覆盖。 (4) 基变量优化处理。 (5) 尽可能使用短跳转。

8. 提供了作为PL/M语言组成部分之一的内部过程。除了类型转换、串处理、位操作内部过程外,还提供了访问硬件标志的过程。

9. 详细的错误检查。PL/M编译程序发现程序错误,则提供很详细的错误信息。

使用PL/M语言的必要性

PL/M语言,尤其是用于开发MCS-96系列单片机的PL/M-96,其优越性已在微机开发中明显体现出来了。从80年代中期开始,国际上单片机应用就进入了16位单片机时代,我国目前也在逐步跟上国际微机应用发展的步伐。在诸多的单片机中,功能强、应用广的Intel公司的MCS-96系列单片机占有一定的优势。16位单片机的高性能,不仅在于其字长,且硬件功能大大加强(片内RAM,片内A/D,片内高速I/O,片内串行通讯口,片内定时器等),而价格却很低(比使用单独的器件价格要低得多)。16位单片机的机器指令远远比8位机丰富,指令功能强,指令字节数也相应加长,最长的有7字节指令,这使我们编写程序时觉得很灵活,但也有不利因素,即在程序较长时,我们很难靠人工来充分利用各种指令的功能,很难使整个程序水平达到最优。对此,PL/M语言可以很好地予以解决。

当今国际上科技发展速度加快,要想跟上世界科技发展速度,只靠增加工作时间是不行的,必须使用先进的技术和手段。在微机开发应用领域更是如此。对此,使用PL/M语言开发微机(尤其是单片机),可大大缩短开发周期。

使用PL/M语言的工作效率高,其生成的机器代码质量也是高水平的。下面仅举一例就可说明这个问题。某单位对35K程序使用计算机进行优化,仅寄存器覆盖一项优化,就使程序长度减少3K。若由人工完成这项工作,除了要花费大量时间外,且很难做得理想,也很容易由此引起其它错误。程序越长,使用PL/M语言的优越性越明显。

使用PL/M语言可显著增加程序可靠性。这一点与其它高级语言一致。

53

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务