基于单片机的电路设计.doc

上传人:laozhun 文档编号:4148676 上传时间:2023-04-07 格式:DOC 页数:150 大小:10.26MB
返回 下载 相关 举报
基于单片机的电路设计.doc_第1页
第1页 / 共150页
基于单片机的电路设计.doc_第2页
第2页 / 共150页
基于单片机的电路设计.doc_第3页
第3页 / 共150页
基于单片机的电路设计.doc_第4页
第4页 / 共150页
基于单片机的电路设计.doc_第5页
第5页 / 共150页
点击查看更多>>
资源描述

《基于单片机的电路设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的电路设计.doc(150页珍藏版)》请在三一办公上搜索。

1、第1章 MCS51单片机介绍1.1 数字集成电路的发展历程从20世纪60年代开始,数字集成电路在集成度方面的发展经历了以下4个阶段:包含几十到几百个逻辑门的小规模集成电路(Small Scale Integration,SSI);包含几百到几千个逻辑门的中规模集成电路(Medium Scale Integration,MSI);包含几千到几万个逻辑门的大规模集成电路(Large Scale Integration,LSI);包含几万个以上逻辑门的超大规模集成电路(Very Large Scale Integration,VLSI)。在工作原理方面,数字集成电路可以划分为标准逻辑器件、微处理器和

2、专用集成电路。1.1.1 标准逻辑器件标准逻辑器件在集成度方面属于中小规模集成电路,它包括基于TTL工艺的54 / 74系列和基于CMOS工艺的4000系列的各种逻辑门、触发器、译码器、多路选择器和计数器等器件。这些器件的工作原理和应用在数字电路逻辑设计课程中有详细的介绍。作为传统数字系统设计中使用的主要器件,标准逻辑器件的产量很大,因此它们的生产成本低廉,价格便宜。由于这些器件的功能确定,芯片设计主要考虑如何提高器件的性能。标准逻辑器件的工作速度快,但是采用它们设计的数字系统需要较多的器件,这就使得电路连线复杂,系统的可靠性降低。由于用户无法修改这类器件的功能,修改系统设计必须通过对电路重新

3、设计和组装来实现。1.1.2 微处理器微处理器,包括在本书中将要学习的单片机,在集成度方面属于大规模集成电路。它们被应用于数字系统的设计起始于20世纪70年代。这类器件可以通过编写程序来实现系统功能。基于微处理器所设计电路的逻辑功能可由软件配置,这个特点使得设计灵活性得到提高,当修改系统设计时,设计者不需要,或者较少需要修改电路连线。相对于由标准逻辑器件构成的数字系统,基于微处理器设计的系统工作速度较低;其次,微处理器的工作仍需要一些标准逻辑器件或者相关逻辑器件构成的外围电路的支持。1.1.3 专用集成电路专用集成电路(Application Specific Integrated Circu

4、it,ASIC)的出现在一定程度上克服了上述两种逻辑器件的缺点。专用集成电路是为满足一种或几种特定功能而专门设计和制作的集成电路芯片,它的集成度很高,一片专用集成电路芯片甚至可以构成一个完整的数字系统,因此这使得系统的硬件规模进一步降低,可靠性进一步提高。专用集成电路可以分为全定制(Full Custom)产品、半定制(Semi-custom)产品和可编程逻辑器件(Programmable Logic Device,PLD)。(1)全定制产品全定制产品是指专为特定目的设计、制造的集成电路芯片,例如电视机、电话等设备中大量使用的专用集成电路芯片。这类产品的设计是从晶体管的版图尺寸、位置和相互连线

5、开始进行,其目的是达到半导体芯片面积利用率高、工作速度快、功耗低的优良性能。专用集成电路芯片的制作过程包括电路设计、逻辑模拟、版图设计和集成电路的全部生产工序。全定制产品的性能优越,但是它的设计制造成本高、周期长、同时还具有较大的风险,因此该产品仅适用于需要进行特大批量生产的情况。(2)半定制产品半定制产品内部包含基本逻辑门、触发器和具有特定功能的逻辑块所构成的标准单元。这些标准单元是由器件生产厂家预先做好,但是标准单元之间的连线有待按用户要求进行连接。应用半定制产品时,用户需要根据设计要求选择合适的产品,再由产品的结构设计出连线版图,最后交给生产厂家完成各个标准单元之间的连线。(3)可编程逻

6、辑器件全定制产品和半定制产品的使用都离不开器件生产厂家的支持,这给用户带来很多麻烦。用户希望自己能设计专用集成电路芯片,并且能立即投入实际应用之中,而且在使用中也能比较方便地对设计进行修改。可编程逻辑器件(PLD)就是为满足这一需求而产生的。可编程逻辑器件内的电路和连线都是事先由器件生产厂家做好,但是其逻辑功能并没有确定。逻辑功能的确定可以由设计者借助于开发工具,通过编写程序的方法来实现。可编程逻辑器件的工作速度与标准逻辑器件工作速度相当,但目前使用它们实现信号处理比使用微处理器要复杂,而且使用成本高。1.2 MCS51单片机介绍1.2.1 概述单片机的全称是单片微型计算机(Single Ch

7、ip Microcomputer)。为了使用方便,它把组成计算机的主要功能部件:中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM、EPROM、E2PROM或者FLASH)、定时/计数器以及各种输入/输出接口电路等都集成在一块半导体芯片上,构成了一个完整的计算机系统。与通用的计算机不同,单片机的指令功能是按照工业控制的要求设计,因此它又被称为微控制器(Microcontroller)。MCS51系列单片机是美国Intel公司于1980年推出的一种8位单片机系列。该系列的基本型产品是8051、8031和8751。这三种产品之间的区别只是在片内程序存储器方面。8051的片内程序存储器(

8、ROM)是掩膜型的,即在制造芯片时已将应用程序固化进去;8031片内没有程序存储器;8751内部包含用作程序存储器的4K字节的EPROM。由于8051的编程需要制造商的支持,8751的价格昂贵,因此8031获得更为广泛的使用。MCS51系列单片机优异的性能/价格比使得它从面世以来就获得用户的认可。Intel公司把这种单片机的内核,即8051内核,以出售或互换专利的方式授权给一些公司,如Atmel、Philips、ADI等。这些公司的产品也被称作为8051兼容芯片,这些8051兼容芯片在原来的基础上增加了许多特性。本书应用电路中采用了Atmel公司的AT89S51芯片,它与MCS51单片机指令集

9、兼容,同时它的内部包含用作程序存储器的4K字节的基于FLASH技术的只读存储器。采用这款芯片既克服了采用8031需要添加外部程序存储器导致电路复杂的缺点,又克服了采用8751导致电路制作成本高的缺点。1.2.2 AT89S51 单片机特性Atmel公司的AT89S51芯片具有以下特性: 指令集和芯片管脚与Intel公司的8051兼容; 4K字节片内在系统可编程FLASH程序存储器; 时钟频率:0Hz33MHz; 128字节片内随机读写存储器(RAM); 32个可编程输入/输出管脚; 2个16位定时/计数器; 6个中断源,2级优先级; 全双工串行通信接口; 监视定时器; 2个数据指针。1.2.3

10、 AT89S51 单片机的封装AT89S51单片机具有多种封装形式,包括PDIP40、PDIP42、PLCC44和TQFP44。最适合学校实验室使用的是PDIP40封装形式,它的外形如图1.1所示。PDIP40封装形式的单片机芯片可以很方便地使用面包板来组成应用电路。图1.1 AT89S51单片机PDIP40封装外形图1.3 AT89S51单片机的存储器AT89S51单片机的程序存储空间和数据存储空间是分离的,每种存储空间的寻址范围都是64K。上述存储空间在物理上可以被映射到4个区域:片内程序存储器和片外程序存储器;片内数据存储器和片外数据存储器。存储空间的映射图如图1.2所示。当存储空间映射

11、为外部存储器时,包括程序空间和数据空间,AT89S51单片机的P0口的8个管脚,从P0.0(AD0)到P0.7(AD7)(管脚从39到32),以时分方式被用作数据总线和地址总线的低8位;P2口的8个管脚,从P2.0(A8)到P2.7(A15)(管脚从21到28),被用作地址总线的高8位。由于对外部程序存储器和外部数据存储器的访问都是通过P0口和P2口实现,为了区分它们,外部程序存储器由管脚(管脚29)的输出信号控制;外部数据存储器的写或读操作分别由管脚P3.6()(管脚16)和管脚P3.7()(管脚17)输出信号控制。图1.2 AT89S51单片机的存储器映射图1.3.1 程序存储空间程序存储

12、空间可以被映射为内部程序存储器或者外部程序存储器。AT89S51单片机内部具有的4K字节程序存储器,它被映射到程序存储空间的0000H0FFFH区间,如图1.2所示。这部分程序存储空间也可以被映射为外部程序存储器。它具体被映射为那一种程序存储器取决于管脚(管脚31)所接的电平。当管脚为高电平,内部程序存储器被映射到这部分程序存储空间;当管脚为低电平,外部程序存储器被映射到这部分程序存储空间。高于0000H0FFFH区间的程序存储空间只能被映射为外部程序存储器。目前Atmel公司生产的8051兼容芯片具有多种容量的内部程序存储器的型号,例如AT89S52单片机具有8K字节内部程序存储器;T89C

13、51RD2单片机具有64K字节内部程序存储器。鉴于通常可以采用具有足够内部程序存储器容量的单片机芯片,因此用户在使用中不需要再扩展外部程序存储器,这样在单片机应用电路中管脚(管脚31)可以总是接高电平。1.3.2 数据存储空间如图1.2所示,数据存储空间也可以被映射为内部数据存储器和外部数据存储器。进入不同的数据存储器是通过不同的指令来实现,这点与程序存储器不一样。AT89S51的内部数据存储器有256字节,它们被分为2部分:高128字节和低128字节。低128字节的内部数据存储器是真正的RAM区,可以被用来写入或读出数据。这一部分存储容量不是很大,但有很大的作用。它可以进一步被分为3部分,如

14、图1.3所示。图1.3 内部数据存储器低128字节在内部数据存储器低128字节中,地址从00H1FH的最低32个字节组成4组工作寄存器,每组有8个工作寄存器。每组中的8个工作寄存器都被命名为从R0到R7。在一个具体时刻,CPU只能使用其中的一组工作寄存器。当前正在使用的工作寄存器组由位于高128字节的程序状态字寄存器(PSW)中第3位(RS0)和第4位(RS1)的数据决定。程序状态字寄存器中的数据可以通过编程来改变,这种功能为保护工作寄存器的内容提供了很大的方便。如果用户程序中不需要全部使用4组工作寄存器,那么剩下的工作寄存器所对应的内部数据存储器也可以作为通用数据存储器使用。工作寄存器在内部

15、数据存储器中的地址映射如表1.1所示。表1.1 工作寄存器地址映射表0组(RS1=0,RS0=0)1组(RS1=0,RS0=1)2组(RS1=1,RS0=0)3组(RS1=1,RS0=1)地址寄存器地址寄存器地址寄存器地址寄存器00HR008HR010HR018HR001HR109HR111HR119HR102HR20AHR212HR21AHR203HR30BHR313HR31BHR304HR40CHR414HR41CHR405HR50DHR515HR51DHR506HR60EHR616HR61EHR607HR70FHR717HR71FHR7在工作寄存器区上面,内部数据存储器的地址从20H2F

16、H的16个字节范围即可以通过字节寻址的方式进入,也可以通过位寻址的方式进入,位地址范围从00H到7FH。字节地址与位地址的对应关系如表1.2所示。表1.2 字节地址与位地址的关系位地址字节地址D7D6D5D4D3D2D1D02FH7F7E7D7C7B7A79782EF77767574737271702DH6F6E6D6C6B6A69682CH67666564636261602BH5F5E5D5C5B5A59582AH575655545352515029H4F4E4D4C4B4A494828H474645444342414027H3F3E3D3C3B3A393826H37363534333231

17、3025H2F2E2D2C2B2A292824H272625242322212023H1F1E1D1C1B1A191822H171615141312111021H0F0E0D0C0B0A090820H0706050403020100内部数据存储器地址从30H7FH部分仅可以被用作为通用数据存储器。内部数据存储器的高128字节被称为特殊功能寄存器(SFR)区。特殊功能寄存器被用作CPU和在片外围器件之间的接口,它们之间的联系方框图如图1.4所示。图1.4 特殊功能寄存器(SFR)工作框图CPU通过向相应的特殊功能存储器写入数据实现控制对应的在片外围器件的工作,从相应的特殊功能存储器读出数据实现读

18、取对应的在片外围器件的工作结果。在AT89S51单片机中,包括前面提到的程序状态字寄存器(PSW)的特殊功能存储器共有26个,它们离散地分布在80HFFH的内部数据存储器地址空间范围,如表1.3所示。表1.3 AT89S51单片机特殊功能存储器地址映射表F8HFFHF0HBF7HE8HEFHE0HACCE7HD8HDFHD0HPSWD7HC8HCFHC0HC7HB8HIPBFHB0HP3B7HA8HIEAFHA0HP2AUXR1WDERSTA7H98HSCONSBUF9FH90HP197H88HTCONTMODTL0TL1TH0TH1AUXR8FH80HP0SPDP0LDP0HDP1LDP1H

19、PCON87H在表1.3中,对于没有定义的存储单元用户不能使用。如果用户向这些存储单元写入数据将产生不确定的效果,从它们读取数据将得到一个随机数。对于字节地址低位为8H或者FH的特殊功能存储器既可以进行字节操作,也可以进行位操作。例如前面提到的用来确定当前工作寄存器组的程序状态字寄存器(PSW),它的地址为D0H,因此对它可以进行字节操作,也可以进行位操作。采用位操作可以直接控制程序状态字寄存器(PSW)中的第3位(RS0)或者第4位(RS1)数据而不影响其它位的数据。低位地址不为8H或者FH的特殊功能存储器只可以进行字节操作,当需要修改这些特殊功能存储器中的某些位时,对其它的位应注意保护。片

20、外数据存储空间可以被映射为数据存储器、扩展的输入/输出接口、模拟/数字转换器和数字/模拟转换器等。这些外围器件统一编址。所有外围器件的地址都占用数据存储空间的地址,因此CPU与片外外围器件进行数据交换时可以使用与访问外部数据存储器相同的指令。CPU通过向相应的外部数据存储器地址单元写入数据实现控制对应的片外外围器件的工作,从相应的外部数据存储器地址单元读出数据实现读取对应的片外外围器件的工作结果。1.4 单片机最小应用系统电路图1.5 最小AT89S51单片机最小应用系统电路单片机的最小应用系统电路指的是它可以正常工作的最简单电路组成。AT89S51单片机的最小应用系统电路图如图1.5所示。该

21、系统中包含4个电路部分。(1)供电电路。管脚VCC(管脚40)接+5V电源,管脚GND(管脚20)接地线。为提高电路的抗干扰能力,一个0.1uF(器件标注为104)的瓷片电容和一个10uF的电解电容通常被接在管脚VCC和接地线之间。(2)程序存储器选择电路。如前所述,Atmel公司生产的8051兼容芯片具有多种容量的内部程序存储器的型号,因此用户在使用中不需要再扩展外部程序存储器,这样在单片机应用电路中管脚(管脚31)可以总是接高电平。(3)时钟电路AT89S51芯片的时钟频率可以在0Hz33MHz范围。单片机内部有一个可以构成振荡器的放大电路。在这个放大电路的对外管脚XTAL2(管脚18)和

22、XTAL1(管脚19)接上晶体和电容就可以构成单片机的时钟电路。图1.5所示的时钟电路由晶体CRY和电容C2与C3组成。单片机的时钟频率取决于晶体CRY的频率,如果采用面包板来组装单片机应用电路,晶体CRY的推荐值为12MHz以下。电容C2与C3的取值范围为30pF50pF。时钟电路采用晶体的目的是提高时钟频率的稳定性。(4)复位电路对于AT89S51芯片,如果管脚RST(管脚9)保持24个时钟周期的高电平,单片机就可以完成复位。通常为了保证应用系统可靠地复位,复位电路应使管脚RST保持10ms以上的高电平。只要管脚RST保持高电平,单片机就循环复位。当管脚RST从高电平变为低电平,单片机退出

23、复位状态,从程序空间的0000H地址开始执行用户程序。图1.5所示复位电路由C1和R1组成。当系统加电时,由于C1两端的电压不能突变,因此管脚RST为高电平,单片机进入复位状态。随着C1充电,它两端的电压上升,使得管脚RST上电压下降,最终使单片机退出复位状态。合理地选择C1和R1的取值,系统就能可靠地复位。C1的推荐值是10uF,R1的推荐值是10k。完成复位后,单片机不仅从程序空间的0000H地址开始执行用户程序,而且还影响一些特殊功能存储器的初始状态。相应的特殊功能存储器的复位值如表1.4所示。表1.4 特殊功能存储器的复位值特殊功能寄存器复位值特殊功能寄存器复位值PC0000HTMOD

24、00HACC00HTCON00HB00HTH000HPSW00HTL000HSP07HTH100HDPTR0000HTL100HP0P3FFHSCON00HIPXXX0 0000BSBUFXXXX XXXXBIE0XX0 0000BPCON0XXX 0000B注:PC被称作为程序指针,它被用来存储下一条要执行的指令地址,PC的位置并不在特殊功能存储器区域DPTR被称作为数据指针,它由2个特殊功能寄存器DP0H和DP0L组成1.5 单片机模拟调试软件单片机本身不具备自主开发能力,即使在单片机应用系统的设计完成以后用户也不能直接对程序进行修改。单片机应用系统的开发必须借助一套开发工具和软件环境才能

25、进行。本节介绍一种单片机模拟调试软件的使用。模拟调试软件不仅可以在程序下载到单片机芯片之前验证它的正确性,而且模拟调试软件也可以被用来学习单片机的基本知识。1.5.1 Keil单片机模拟仿真调试软件的安装和启动Keil单片机模拟调试软件是目前获得广泛应用的一种开发MCS51系列兼容单片机的软件。该软件可以从Keil公司中国代理处购买,也可以从Keil公司的网站(http:/)上下载它的免费评估(Eval)版本。下载获得的Keil单片机模拟调试软件是一个压缩包。压缩包解压后执行其中的Setup.exe程序就可以安装这个软件。软件的安装过程与一般的Windows应用软件类似,只要按照安装提示就可以

26、完成软件的安装,因此这里对它不作详细的介绍,仅需要注意的是安装方式要选择Eval Vision安装。Keil单片机模拟调试软件安装完成以后,计算机桌面上将产生一个标注有“Keil uVision2”的图标,双击这个图标就可以进入Keil单片机模拟调试软件的集成开发环境。集成开发环境的界面如图1.6所示,初次进入的集成开发环境界面中只包括空的工程管理窗口和输出窗口。图1.6 Keil单片机模拟调试软件的集成开发环境1.5.2 工程(Project)的建立Keil单片机模拟调试软件对MCS51单片机应用系统的软件开发过程采用工程(Project)管理。工程(Project)保存着程序编辑的信息和程

27、序调试的环境。在开始编写程序之前首先应该建立一个工程。新建一个工程之前通常还需要建立一个文件夹,后面产生的工程文件以及源程序文件等都将存储在这个文件夹之中。在如图1.6所示的集成开发环境的窗口中选择菜单“Project New Project.”将打开建立新工程的对话框。建立新工程的对话框如图1.7所示。图1.7 建立新工程的对话框在下拉列表框“保存在(I)”中选择新建工程将要存储的文件夹名,在文本框“文件名(N)”输入工程的名称,注意对于工程不要添加扩展名,单击“保存(S)”按钮即可完成一个工程的创建。单击“保存(S)”按钮在完成一个工程创建的同时也打开单片机芯片型号选择对话框。图1.8所示

28、的对话框已经完成芯片型号的选择。图1.8 单片机芯片型号选择对话框Keil单片机模拟调试软件支持许多公司的MCS51单片机兼容产品。如前所述,本书应用电路中采用Atmel公司的AT89S51芯片,下面以这款芯片为例介绍如何实现选择。在图1.8所示的对话框中的“Data base”列表框内首先选择生产芯片的公司名称“Atmel”,双击这个公司名称即可打开Atmel公司目前生产的所有芯片型号。接着在列出的产品清单中选择将使用的AT89S51芯片,如图1.8所示。最后单击“确定”按钮即可完成芯片的选择。完成芯片的选择后又回到如图1.6所示的集成开发环境的窗口,但是这时该窗口中的工程管理窗口不再是空白

29、,在它的文件选项卡中出现目录列表“Target 1”和它的子目录“Source Group 1”。集成开发环境中的菜单“Project”内还包含“Open Project”和“Close Project”等选项。“Open Project” 选项用来以后再次进入已经建立的工程。选择菜单“ProjectOpen Project.”将打开选择工程的对话框,该对话框与图1.7类似。在下拉列表框“查找范围(I)”中选择将要打开的工程被存储的文件夹名,列表框中将出现该文件夹中的所有工程,选择将要打开的工程,单击“打开(O)”按钮即可打开一个工程。选择菜单“ProjectClose Project.”将关

30、闭当前的工程。1.5.3 源文件的输入Keil单片机模拟调试软件内集成了一个文本编辑器,用该文本编辑器可以编辑源程序。在如图1.6所示的集成开发环境中选择菜单“File New.”、单击对应的工具按钮或者快捷键Ctrl +N将打开一个新的文本编辑窗口如图1.9所示。在图1.9中已经完成汇编语言源文件的输入,并且完成源程序向当前工程的添加。图1.9 Keil单片机模拟调试软件的集成开发环境完成汇编语言源文件的输入后,在集成开发环境中选择菜单“FileSave As.”可以完成文件的第一次存储。注意,汇编语言源文件的扩展名应该是“ASM”,它应该与工程文件存储在同一文件夹之内。在完成文件的第一次存

31、储以后,当对汇编语言源文件又进行了修改,再次存储文件则应该选择菜单“FileSave”、单击对应的工具按钮或者快捷键Ctrl +S实现文件的保存。接着的工作需要把汇编语言源文件加入工程之中。选择图1.9中的工程管理器窗口的子目录“Source Group 1”,再单击鼠标右键打开快捷菜单。在快捷菜单中选择“Add File to Group Source Group 1”,加入文件对话框被打开。在这个对话框的“查找范围(I)” 下拉列表框中选择存储汇编语言源文件的文件夹,在“文件类型(T)” 下拉列表框选择“Asm Source file(*.a*;*.src)”,这时存储的汇编语言源文件将显

32、示出来。双击要加入的文件名或者选择要加入的文件名再单击“Add”按钮即可完成把汇编语言源文件加入工程。文件加入以后,加入文件对话框并不消失,更多的文件也可以利用它加入工程。如果不需要加入其它文件,单击“Close”按钮可以关闭加入文件对话框。这时工程管理窗口的文件选项卡中子目录“Source Group 1”下出现一个汇编语言源文件,如图1.9所示。需要注意,当把汇编语言源文件加入工程但还没有关闭加入文件对话框,这时有可能被误认为文件没有成功地加入工程而再次进行加入操作,系统将显示所需的文件已经加入的提示。在这种情况下,单击提示框中的“确定”按钮,再单击“Close”按钮可以关闭加入文件对话框

33、。1.6 学习编写第一个程序最好的学习编写程序的方法就是从编写真实的、可以运行的程序开始。在图1.9显示的集成开发环境的编辑工作区中已经输入一段汇编语言源程序。这段程序是一段小程序,但它却充分说明汇编语言源程序由什么构成。下面列出这段汇编语言源程序。程序示例1.1:ORG0000H;定位源程序在程序存储空间的存储起始地址BEGIN:MOVR0,#01H;向工作寄存器R0送入数据01HMOV00H,#02H;向内部数据存储器的00H地址单元送入数据02HMOV02H,#03H;向内部数据存储器的02H地址单元送入数据03HMOVA,R0;把工作寄存器R0内的数据复制到累加器AMOVA,R0;把以

34、工作寄存器R0内的数据为地址的内部数据存储器;对应的地址单元内的数据复制到累加器AAJMPBEGIN;转到语句标号“BEGIN”所对应的指令处执行END;源程序结束1.6.1 ORG指令程序示例1.1的第一条语句是:ORG0000H这一条语句是一条伪指令,即程序被汇编后不会产生可执行的指令代码。伪指令可以参考本书后面附录2列出的MCS51单片机汇编器伪指令。伪指令ORG用来定位指令代码在程序存储空间的位置。由于单片机复位后程序指针PC=0000H,即指令从程序存储空间的0000H地址开始执行,因此汇编语言源程序的第一句必须是:ORG0000H指令代码没有必要在程序存储空间连续放置,所以除第一句

35、外,可以使用ORG指令把其余的指令代码放置于程序存储空间的任意地方。紧跟着ORG指令后面的汇编语言语句产生的指令代码将位于ORG指令后面带的程序存储空间地址,再后面的汇编语言语句产生的指令代码将紧跟在它的后面连续地在程序存储空间中放置。1.6.2 语句标号第二条语句的开头是:BEGIN:它被称作为语句标号。语句标号可以由字母、数字和下划线组成,但是必须以字母开始。语句标号以冒号结束。应该注意,语句标号不能使用一些保留字,这些保留字包括寄存器名和下面将要提到的汇编指令名称等。语句标号用来为跳转等语句指出相对地址,绝对地址由汇编语言源程序被汇编成指令代码时产生。使用语句标号简化了涉及跳转等语句的程

36、序编写。语句标号的使用使得当源程序被调整后也不需要通过手工对相应的地址进行对应的改变。1.6.3 MOV指令程序示例1.1中出现了2种汇编语言指令,它们的符号是MOV和AJMP。MCS51单片机的汇编语言指令系统参见附录1。MOV指令的功能是数据传送,它的指令格式为: MOV目标地址,源地址MOV指令的作用空间为内部数据存储器的256字节,该指令不能用来访问外部数据存储器。进入数据存储空间的方法称作为寻址方式,换句话说就是如何寻找参与操作的数据。MCS51单片机的汇编语言指令系统具有7种寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、相对寻址、变址寻址和位寻址。下面仅对程序示例1.1

37、中出现的寻址方式进行介绍。程序示例1.1中显示的第二条语句为:MOVR0,#01H这句的功能是向工作寄存器R0赋值为01H的数据。语句中包含2种寻址方式。语句在源地址的位置是一个具体的操作数据。当汇编语言指令中有具体的操作数据则被称作为立即寻址,这个数据也被称作为立即数。立即数由“#”符号开始,它可以采用16进制数(后缀H)、10进制数(无后缀)和2进制数(后缀B)来表示。该语句的目标地址为工作寄存器R0,访问工作寄存器的寻址方式被称为寄存器寻址。寄存器寻址可以使用当前工作寄存器组中R0R7的任意一个工作寄存器。MCS51单片机的数据宽度为8位,用16进制格式进行描述,数据则具有2位。语句中出

38、现的16进制数的高位不能是字母。如果高位是字母,则字母前应加一个“0”,例如要把立即数F6H送入工作寄存器R0,则应写为:MOVR0,#0F6H程序示例1.1中的第三条语句是:MOV00H,#02H注意这一句的目标地址。这里的00H表示地址,直接给出数据存储器地址的寻址方式称作为直接寻址。注意00H和#02H的区别,前者表示一个地址,后者表示一个立即数。如果地址的最高位是字母,则字母前也应加一个“0”。程序示例1.1中的第六句语句是:MOVA,R0这一句源地址的寻址方式采用了寄存器间接寻址,它的功能为把以工作寄存器R0的内容为地址的存储单元内的内容复制到累加器A。注意只有工作寄存器R0和R1可

39、以用于寄存器间接寻址。1.6.4 注释在程序示例1.1中,汇编语言源程序语句后面存在被称作为注释的程序说明。注释由分号“;”开始,直到本行结束。注释可以与某条语句同行,也可以独立成行。使用注释的目的是为了方便程序阅读。切忌有这样的想法:我是程序的唯一阅读者,我不会忘记自己编写的程序中语句的含义。一个好的注释记载了设计思想,同时它也可以方便别人阅读,方便互相交流。1.6.5 AJMP指令程序示例1.1中的第七条语句是: AJMPBEGIN这条指令的功能是无条件跳转。在这条以前的语句执行时,程序指针PC将自动按顺序指向下一条语句。AJMP指令影响程序指针PC,它把语句中包含的语句标号所指向的语句的

40、地址装入程序指针PC,从而影响程序的流向。程序示例1.1中的语句必须包含这一条无条件跳转语句。如果没有它,程序指针PC将指出程序设计者所编写程序存在程序存储空间的地址范围,导致工作失去控制。1.6.6 END指令最后一条语句是:END。它和第一条语句(ORG)一样,这也是一条伪指令。该语句不产生可执行的指令代码,仅用来告诉汇编程序我们编写的汇编语言源程序到此结束。1.7 程序调试模拟软件的功用之一就是可以在程序下载到单片机芯片之前验证其正确性。当在集成开发环境的文本编辑窗口中完成汇编语言源程序的编辑,下一步的工作就是对它进行调试。下面介绍实现汇编语言源程序调试所需要的步骤。1.7.1 汇编语言

41、源程序的汇编计算机的CPU只理解机器语言指令,上面基于符号表述的汇编语言源程序是不能在CPU中运行的,我们需要一种专门的软件把汇编语言源程序转变成机器语言指令。这种专门的软件被称作为汇编程序,把汇编语言源程序转变成机器语言指令的过程被称作为汇编。Keil单片机模拟调试软件对汇编语言源程序进行汇编可以在集成开发环境中选择菜单“ProjectBuild target”、对应的工具按钮或者快捷键F7来实现当前汇编语言源程序的汇编。汇编过程中的信息将出现在输出窗口的Build选项卡中。如果被汇编的汇编语言源程序中不存在语法错误,汇编结果报告将出现在输出窗口的Build选项卡中,如图1.10所示。如果被

42、汇编的汇编语言源程序中存在语法错误,错误报告也将出现在输出窗口的Build选项卡中。在对汇编语言源程序中存在的语法错误进行修改后可以再次选择菜单“ProjectBuild target” 、对应的工具按钮或者快捷键F7对当前汇编语言源程序再次进行汇编,也可以选择菜单“ProjectRebuild all target files”或者对应的工具按钮对当前汇编语言源程序再次进行汇编。使用“ProjectRebuild all target files”可以对工程中的所有文件进行重新汇编,这样可以防止由于一些意外情况而导致汇编语言源程序与目标代码的不一致,建议汇编语言源程序的再次汇编尽量采用这种方

43、法。图1.10 Keil单片机模拟调试软件的集成开发环境1.7.2 汇编语言源程序的调试成功地完成汇编语言源程序的汇编仅表明汇编语言源程序没有语法错误,下一步的工作将通过模拟调试验证它的逻辑是否满足设计要求。Keil单片机模拟调试软件的调试状态可以通过选择菜单“Debug Start/Stop Debug Session”、对应的工具按钮或者快捷键Ctrl+F5进入或者退出。进入调试状态以后,这时的Keil单片机模拟软件的集成开发环境如图1.11所示。比较图1.10和图1.11,这时集成开发环境发生了一些变化:工程管理器窗口从文件选项卡自动地切换到寄存器选项卡,输出窗口从“Build” 选项卡

44、自动地切换到“Command”选项卡。在输出窗口的“Command”选项卡中显示信息“Running in eval Mode (2K)”,这条信息在进入调试状态时也出现过,这是因为Keil单片机模拟调试软件的评估(Eval)版本只支持2K字节的程序空间寻址操作。在图1.11中还通过选择菜单“ViewMemory Window” 或者对应的工具按钮打开了存储器观察窗口。刚打开存储器观察窗口时它的内部是空白的。通过向文本框“ddress”输入“字母:数字”来打开想要观察的存储空间和它的起始地址。字母可以是C、D、I和X,它们分别代表程序存储空间、直接寻址的片内数据存储空间、间接寻址的片内数据存储

45、空间和外部数据存储空间。数字表示想要观察的存储空间的起始地址。在图1.11中,向文本框“ddress”输入“D:0000H”打开从地址0000H开始的直接寻址的片内数据存储空间。在工程管理器窗口的寄存器选项卡中现在显示当前的工作寄存器R0R7和部分特殊功能寄存器的内容。在进入调试状态的同时也完成了单片机的复位,所以这时特殊功能寄存器的内容就是它们的复位值。程序指针PC的复位值为0000H,表示单片机在复位后从程序空间的地址0000H处开始执行指令代码。在文本编辑器窗口这时也发生变化,在汇编语言源程序的第二条的左侧出现一个黄色的箭头,它表示这句指令将被执行。汇编语言源程序的第一条是伪指令,源程序被汇编后它不会产生可执行的指令代码。图1.11 Keil单片机模拟仿真调试软件的集成开发环境通过选择菜单“D

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号