版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章初识51单片机及其开发环境124331.1微型机与单片机1.251单片机的基本结构概述1.351单片机的引脚与封装1.4一个简单LED灯循环点亮实验下一页第1章初识51单片机及其开发环境568371.5μVision4开发环境介绍1.6Proteus仿真环境简介1.751单片机基本电路1.851系列单片机返回1.1微型机与单片机微型计算机系统一般包括中央处理单元(CPU)、存储器(Memory)及输入/输出单元(I/O)三大部分,如图1.1所示。CPU正如人的大脑一样,控制整个计算机系统的运行。存储器则是存放系统运行所需的程序及数据,包括只读存储器(ReadOnlyMemory,ROM)及随机存取存储器(RandonAccessMemory,RAM)。通常ROM用来存储程序或永久性的数据,称为程序存储器;RAM则是用来暂时存储程序执行时的数据,称为数据存储器。I/O是微型计算机系统与外部沟通的管道,其中包括输入端口与输出端口。这三部分分别由不同的元器件组成,然后把它们组装在电路板上,形成一个微型计算机系统。下一页返回1.1微型机与单片机单片微型计算机(即单片机或微控制器)就是把中央处理单元、存储器、输入/输出单元等全部放置在一个芯片里,如图1.2所示,只要再配置几个小元件,如电阻器、电容器、石英晶体、连接器等,就成为一个完整的微型计算机系统。因此整个系统的体积小、成本低、可靠性高,成为目前微型计算机控制系统的主流。上一页返回1.251单片机的基本结构概述51单片机发展至今,虽然有许多厂商各自开发了不同的兼容芯片,但其基本结构变化不大,图1.3为标准的51单片机结构图。本章先介绍51单片机的基本结构、引脚、基本电路及51系列等,其中引脚结构需要熟记,本书提供记忆技巧,很快记住40个引脚和基本电路。返回1.351单片机的引脚与封装1.PDIP40与PDIP4251单片机在教学过程中最常用的是40个引脚双列直插式封装(PlasticDualInlinePackage,简称PDIP),如图1.4所示,还有一种双列直插式封装如图1.5所示,即PDIP42。PDIP40与PDIP42引脚数量不相同,尺寸差异也很大。PDIP40特别适用于学校培训机构使用,但由于体积较大,制作成本较高,很少在商业里使用。根据上述要诀,很容易记住这些引脚的位置和基本功能。需要补充说明的是,51单片机的40个引脚里有很多是复用引脚,简单讲就是多用途的引脚,以39脚到32脚为例,一般情图1.6QFP封装况下为P0;若是连接外部存储器时,则当成AD0~AD7引脚,而AD0~AD7就是地址引脚与数据引脚混合的复用引脚,但如果不接外部存储器时就可以当它不存在。下一页返回1.351单片机的引脚与封装2.QFP与PLCC封装51单片机的QFP封装有PQFP和TQFP两种,均为扁平的44引脚表贴式封装,其体积小,成本低,是目前商业主流,学校和培训结构几乎不用,其引脚如图1.6所示。51单片机中,PLCC也是一种常用的封装方式,也为44引脚表贴式封装,其引脚封装顺序与QFP类似,如图1.7所示,但这种封装可直接卡在电路板上,如图1.8所示,适用于实验室及大批量生产。上一页返回1.4一个简单LED灯循环点亮实验一、实验目的(1)了解51单片机的开发过程,获得单片机系统制作的感性认识。(2)了解51单片机的汇编语言和C语言编程结构。二、实验要求8个LED灯D1~D8由单片机控制,先是全亮,然后D1~D8依次由单片机的P2口控制被点亮。三、电路图系统电路如图1.9所示。依次点亮过程如图1.10所示。四、程序流程图程序的流程图如图1.11所示。下一页返回1.4一个简单LED灯循环点亮实验五、程序设计在μVision4中新建工程,加入汇编程序ch01.asm或C51程序ch01.c,μVision4开发环境在1.5节介绍。在Proteus仿真环境下绘制图1.9,仿真运行该实验,Proteus仿真环境在1.6节介绍。汇编语言参考程序如下:上一页下一页返回1.4一个简单LED灯循环点亮实验上一页下一页返回1.4一个简单LED灯循环点亮实验C语言参考程序如下。上一页下一页返回1.4一个简单LED灯循环点亮实验上一页返回1.5μVision4开发环境介绍1.5.1μVision4开发界面μVision4的开发界面如图1.12所示,包含一个51单片机开发环境所必需的工具,如文件编辑、片内外设所连接窗口(如P0~P3运行观察窗口)、运行信息窗口、存储器信息显示窗口、调试等工具。为便于工程运行,可以展开寄存器(Register)窗口、存储器信息显示窗口和变量观察窗口进行监视,还可以打开其他许多窗口进行调试。μVision4把一个项目当作一个工程来开发,开发过程分为两个阶段,第一阶段是编辑程序,编译工程(build),生成目标程序和可执行文件,如.HEX文件;第二阶段,对编译生成的可执行文件进行调试和仿真。具体运行过程如下。下一页返回1.5μVision4开发环境介绍1.新建工程新建一个文件夹,如test01,用以保存同一工程下的相关文件。在Project菜单下选择NewProject选项,在弹出窗口中,输入工程名test1,系统自动添加扩展名。2.设置工程单击Project菜单下的“OptionsforTarget‘Target1’”选项,弹出工程设置窗口,如图1.13所示。或在工程窗口中右键单击Target1,在弹出菜单中选择“OptionsforTarget‘Target1’”。上一页下一页返回1.5μVision4开发环境介绍1.5.2演示步骤(1)新建文件夹:test01。(2)在文件夹test01中,新建工程test1(工程的扩展名会自动添加)。(3)将1.4节ch01.asm文件复制到文件夹test01中,并添加到工程test1中。(4)在Project菜单的下拉选项中,单击“OptionsforTarget‘Target1’”,在设置窗口中进行以下操作:上一页下一页返回1.5μVision4开发环境介绍(5)在Project菜单下,选择“RebuildallTargetfiles”选项,生成文件test1.hex,该文件可以下载到目标机上进行仿真调试。(6)选择Debug菜单下的“Start/StopDebugSession”选项,进入调试状态。(7)选择Peripherals菜单下“I/OPorts”选项上的“Port2”。(8)在Debug菜单下以Step(单步)方式运行,观察Port2窗口变化状态。也可以使用Run(连续运行)方式,观察LED状态变化。上一页返回1.6Proteus仿真环境简介1.6.1Proteus的安装目前,较新的版本是Proteus8.0,其可适用于XP和Win7用户。Proteus7.8是稍早用于XP用户的版本,下面分别介绍Proteus7.8和Proteus8.0的安装。(1)在Keil目录下的C51/BIN文件夹中,查看是否有VDM51.DLL文件,若没有,将其复制到Keil目录下的C51/BIN文件夹中。(2)查看Keil目录下的TOOLS.ini文件,是否有TDRV3=BIN\VDM51.DLL(“ProteusVSMSimulator”)的字样,字符串“TDRV”后面的数字要按照顺序排列,保证不能重复,要根据自己的情况设置该语句,如图1.14所示,表示在KeilμVision4可以选择用“ProteusVSMSimulator”进行仿真。下一页返回1.6Proteus仿真环境简介Proteus8.0安装主要有以下步骤:(1)下载好压缩包,并进行解压,运行“Setup.exe”安装程序,勾选“Iacceptthetermsof..”之类的选项框,单击“Next”按键弹出如图1.15所示的界面,选择第一个“Usealocallyinstalledlicensekey”,意思是说使用本地的授权文件。(2)单击“Next”→“Next”两下,弹出如图1.16所示的界面。(3)单击“BrowseForKeyFile”按键,找到解压包的Crack目录下的LICENCE.lxk文件,单击“Install”按键后在弹出的提示框单击“是”按键。界面如图1.17所示。上一页下一页返回1.6Proteus仿真环境简介(4)单击“Close”按键关闭,弹出如图1.18所示的界面,意思是问要不要导入Proteus7的配件文件,把三项全部选中。(5)单击“Next”按键后,再单击“Typical”,选择典型安装模式,如图1.19所示。(6)然后按提示操作,单击“Next”按键,直到安装结束。接下来两步操作很重要,请仔细看。(7)找到解压包的Crack目录下的“bin”文件夹,复制整个文件夹到Proteus8.0的安装目录,一般为“C:\ProgramFiles\LabcenterElectronics\Proteus8Professional”。上一页下一页返回1.6Proteus仿真环境简介(8)找到解压包的Crack目录下的“MODELS”文件夹,复制整个文件夹到“C:\DocumentsandSettings\AllUsers\ApplicationData\LabcenterElectronics\Proteus8Professional”目录(仅针对XP用户),如果是Win7用户,将“MODELS”复制到“C:\Users\AllUsers\LabcenterElectronics\Proteus8Professional”目录,“C:\DocumentsandSettings\AllUsers\ApplicationData”一般会隐藏的,如果无法找到,请做如下操作:选择工具菜单→文件夹选择→查看→把“显示所有文件和文件夹”选中。至此,安装Proteus8.0完成。上一页下一页返回1.6Proteus仿真环境简介1.6.2Proteus的使用在“开始”→“所有程序”→“Proteus8Professional”中,选择“Proteus8Professional”,进入Proteus8.0开发界面,如图1.20所示。或在“开始”→“所有程序”→“Proteus7Professional”中,选择“ISIS7Professional”,进入Proteus7.8开发界面。单击图1.20中的ISIS快捷键,即可像Proteus7进入ISIS开发界面一样。在ProteusISIS开发界面中,如图1.21所示,工作区是用来绘制原理图的地方。缩略图区是对工作区的一个概览。器件工具栏是常用公共器件的列表,里面含有大量的公共元器件,如常用的VCC、GND、Buses(总线绘制工具)等,熟练使用会提高绘图效率。上一页下一页返回1.6Proteus仿真环境简介对51单片机加载程序的办法,如图1.23所示。在AT89C51单片机上单击右键,在弹出的窗口中选择“编辑属性”,在“编辑元件”选项对话框中单击“ProgramFile”按钮,选择AT89C51单片机运行时所要运行的程序,与实物运行时一样,选择已将程序编译成十六进制的hex文件。若原理图已绘制完毕,且此时已将程序加载完毕,单击仿真工具条中的“开始”按钮,即可进行仿真。1.6.3μVision4+Proteus运行单片机仿真Proteus可直接运行μVision编译好的目标文件达到仿真目的。首先,在μVision下编译无误后,在工程设置选项卡的Debug选项页,选择“ProteusVSMSimulator”,不同软件版本,字符串“ProteusVSMSimulator”会有不同,但大致是一个意思。如果是本机的Proteus仿真,在“VDMServerSettings”中设置“Host”为“127.0.0.1”,如图1.24所示。上一页下一页返回1.6Proteus仿真环境简介最后,把ProteusISIS和μVision都打开,在μVision中,单击开始调试按钮,ProteusISIS和μVision一起运行,开始仿真。在μVision中单步执行,在ProteusISIS中可以看到单步执行的效果,如图1.26所示。在调试时,μVision4版本下默认打开的是反汇编窗口,可以直接关闭或在调试模式下,单击“View”菜单下的“DisassemblyWindow”,关闭反汇编功能。上一页返回1.751单片机基本电路所谓“基本电路”是指51单片机工作时最基本的连接线路,主要包括电源电路、时钟电路、复位电路和存储器设置电路四部分,如图1.27所示。1.电源电路将51单片机40脚接+5V的VCC,20脚接地即可。2.时钟电路51单片机内部已有振荡电路,只需将18、19脚连接石英晶体(Crystal)和微调电容(2个,30pF左右)即可。对于89S51的时钟脉冲频率,Atmel公司提供的频率为0~24MHz,其他公司提供了40MHz的版本,甚至还有更高,但目前主要使用的还是12MHz,本书使用了12MHz和11.0592MHz两种。如不再设计一个振荡电路,大体采用图1.27的接线方式即可。下一页返回1.751单片机基本电路3.复位电路当51单片机的第9脚接高电平超过2个机器周期(1个机器周期含12个脉冲周期,12MHz的晶振频率,其1个机器周期为1μs,参考后续章节)时,即产生复位。如图1.27所示,当按键按下瞬间,电容器C上没有电荷,相当于短路,第9脚直接接到VCC;当按键松开后,随时间增加,电容器上的电压逐渐增加,第9脚的电压逐渐降至低电平,此时51单片机恢复常态。如果复位电路中的电阻为100kΩ,电容为0.1μF,其时间常数就大于2μs,此时电容器旁边的按键就相当于一个手动复位键。上一页返回1.851系列单片机MCS-51系列(Micro-ControllerSystem)单片机分为基本型(51系列)和增强型(52系列)两大类。其最大的特点就是增强型(52系列)是基本型(51系列)内部存储器的容量加倍,外接的存储器容量不变,定时器/计数器增加一个,价格相差不大。本书只讲51系列单片机的分类,按照片内ROM区分,有四种类型,如表1.1所示。1.无ROM类型8031单片机为无ROM类型,使用时,其必须外接程序存储器,现已很少使用。2.MaskROM类型下一页返回1.851系列单片机8051单片机为MaskROM类型,程序直接放入这种类型单片机的程序存储器中。不能刻录程序,因此价格低廉,但这种单片机需要制作其特有光罩(Mask),量大时才适合生产,如键盘里使用的单片机。3.EPROM类型8751单片机为EPROM类型,这种单片机可以通过紫外线擦除ROM里的数据,从而使其可以运行不同的程序。如图1.28所示,刻录时,通过芯片上的窗口,可看到芯片的内部与连接线,刻录完毕后,在窗口贴上黑色胶布以防数据消失。擦除时,使用紫外线照射窗口15~30min即可。由于成本高,擦除麻烦,目前几乎很少使用。上一页下一页返回1.851系列单片机4.E2PROM类型89C51/89S51单片机为使用Flash技术的E2PROM类型单片机,如图1.29所示。其中89C51单片机使用5V及12V电压刻录与擦除程序;而89S51只用5V电压刻录与擦除程序,已成为主流使用的商品。厂商宣称这种芯片可重复写入达10000次以上,而实际上,若不是操作失误或引脚断裂,很难将其烧坏。上一页返回图1.1微型计算机组成返回图1.2单片机微控制器结构返回图1.351单片机基本结构框图返回图1.4PDIP40双列直插式封装返回图1.5PDIP42双列直插式封装返回图1.6QFP封装返回图1.7PLCC封装返回图1.8PLCC芯片管座返回图1.9系统电路运行截图返回图1.10LED灯循环点亮示意图返回图1.11程序流程图返回图1.12μVision4运行界面返回图1.13工程设置窗口返回图1.14TOOLS.ini文件返回图1.15Proteus8.0安装界面1返回图1.16Proteus8.0安装界面2返回图1.17Proteus8.0安装界面3返回图1.18Proteus8.0安装界面4返回图1.19Proteus8.0安装界面5返回图1.20Proteus8.0启动界面返回图1.21ProteusISIS开发界面返回图1.221.4节实验初始灯全亮时仿真截图返回图1.23AT89C51加载程序截图返回图1.24μVision选择本机Proteus仿真返回图1.25Proteus中选择远程调试功能返回图1.26Proteus和μVision4联机调试界面返回图1.27最小系统基本电路返回表1.1MCS-51单片机分类返回图1.288751单片机返回图1.2989C51/89S51单片机返回谢谢观赏第2章51单片机内部硬件基本结构和原理124332.1CPU单元2.251单片机存储器的配置2.3时序与复位2.4节电方式返回52.5输入/输出端口2.1CPU单元1.运算器运算器由可进行8位算术/逻辑运算的ALU单元,8位的累加器ACC,寄存器B,8位的暂存器1(TMP1)、暂存器2(TMP2)和程序状态寄存器PSW组成。算术/逻辑运算单元ALU:可对4位(半字节)、8位(1字节)和16位(2字节)的数据进行加、减、乘、除、加1、减1、BCD数十进制调整等算术运算,也可进行与、或、异或、求补、循环移位等逻辑操作。累加器ACC:用于向ALU提供操作数和存放运算结果。运算时将操作数经暂存器2(TMP2)送至ALU,与来自暂存器1(TMP1)的操作数在ALU中进行运算,运算结果又送回ACC。下一页返回2.1CPU单元此外,ACC在51单片机内部经常作为数据传送中转站,是微处理器中最繁忙的一个寄存器。在51汇编指令中用助记符A来表示。2.控制器控制器由指令寄存器IR、指令译码器ID和控制逻辑电路组成。指令寄存器IR:保存当前正在执行的一条指令,当执行一条指令时,先把指令从程序存储器(ROM)中取到指令寄存器IR中。指令内容含操作码和地址码两部分,操作码送往指令译码器ID,形成相应的微操作控制信号;地址码送往操作数地址形成电路,形成实际操作数地址。上一页下一页返回2.1CPU单元3.程序计数器PC程序计数器PC是一个16位寄存器,由两个8位的计数器PCH及PCL组成(但PC不属于特殊功能寄存器SFR的空间,其不可寻址)。程序运行过程中,CPU把PC的内容作为地址,从程序存储器(ROM)中取出指令码,取完后,PC内容自动加1。所以,PC实际上是程序的字节地址自动加1计数器,PC中的内容是将要执行的下一条指令的地址,改变PC的内容就可改变程序执行的方向。因此,在执行程序跳转或中断时,给PC置入新的地址即可,在子程序返回时,将断点处的下一个地址值置入PC就完成了中断返回功能。上一页返回2.251单片机存储器的配置在一般微机的存储器配置中,ROM和RAM可以随意安排在一个地址范围内,CPU访问存储器时,其地址对应的存储器单元,可以是ROM,也可以是RAM,并不区分访问ROM和RAM类的指令,即用同类访问指令,此种存储器结构称为普林斯顿结构。从本节以后,将程序存储器简称为ROM,数据存储器简称为RAM,不再另外说明。2.2.1程序存储器ROM空间ROM用于存放编好的程序和表格常数。ROM通过16位程序计数器寻址,寻址能力为64KB。这使得指令能在64KB地址空间内任意跳转,但不能使程序从ROM空间转移到RAM空间。下一页返回2.251单片机存储器的配置当引脚EA接低电平(接地)时,51单片机片内ROM不起作用,CPU只能从片外ROM中取指令,地址可以从0000H开始编址。这种接法适用于8031单片机。由于8031片内不带ROM,所以使用时必须使EA=0,以便能够从片外扩展ROM中读取指令。51单片机从片内ROM和片外ROM取指令时,执行速度相同。51单片机的ROM配置如图2.2所示。ROM低地址的40多个单元是留给系统使用的,见表2.1。存储单元0000H~0002H用作51单片机上电复位后引导程序的存放单元。因为51单片机上电复位后程序计数器的内容为0000H,所以CPU总是从0000H开始执行程序。如果在这3个单元中存有转移指令,那么程序就被引导到转移指令指定的ROM空间去执行。0003H~002AH单元均匀地分为5段,每段8字节,用作5个中断服务程序的入口。上一页下一页返回2.251单片机存储器的配置例如,当外部中断引脚INT0(P3.2)有效时,即引起中断申请,CPU响应中断后自动将地址0003H装入PC,程序就自动转向0003H单元开始执行。如果事先在0003H~000AH存有引导(转移)指令,程序就被引导(转移)到指定的中断服务程序空间去执行。这里,0003H称为中断矢量地址,相应51单片机的5个中断矢量地址均可在表2.1中找到。当51单片机片内4KBROM容量不够时,可选择8KB、16KB、32KB的89C52、89C54、89C58等单片机。但应尽量避免外扩ROM空间而增加硬件的负担。在极特殊的情况26下,才应外扩ROM空间执行外部程序。执行外部程序时的硬件连接如图2.3所示。上一页下一页返回2.251单片机存储器的配置2.2.2数据存储器RAM空间数据存储器RAM用于存放运算的中间结果、数据暂存和缓冲、标志位等。RAM也分为片内和片外两大部分,即片内RAM和片外RAM。51单片机片外RAM为64KB,地址从0000H~FFFFH;片内存储器空间为256B,地址从0000H~00FFH。1.片外RAM如图2.2所示,片外RAM与片内RAM空间的低地址部分(0000H~00FFH)是重叠的,51单片机有MOV和MOVX两种指令,用以区分片内、片外RAM空间。片内RAM使用MOV指令,片外64KBRAM空间专门为MOVX指令(使引脚RD或WR信号有效)所用。上一页下一页返回2.251单片机存储器的配置图2.4所示是访问2KB片外RAM时的硬件连接图。在这种情况下,CPU执行片内ROM中的指令(EA接VCC)。P0口用作RAM的地址/数据总线,P2口中的3位也作为RAM的页面地址。访问片外RAM期间,CPU根据需要发送RD和WR信号。2.片内RAM片内RAM最大可寻址256个单元,它们又分为两部分:低128字节(00H~7FH)是真正的RAM区;高128字节(80H~FFH)为特殊功能寄存器(SFR)区。如图2.5所示。低128字节和高128字节RAM中的配置及含义如图2.6和图2.7所示。上一页下一页返回2.251单片机存储器的配置00H~1FH地址安排为4组工作寄存器区,每组有8个工作寄存器(R0~R7),共占32个单元,见表2.2。通过对程序状态字PSW中RS1、RS0的设置,每组寄存器均可选作CPU的当前工作寄存器组。若程序中并不需要4组,那么其余可用作一般RAM单元。CPU复位后,选中第0组寄存器为当前的工作寄存器。2)高128字节RAM———特殊功能寄存器(SFR)51单片机片内高128字节RAM中,有21个特殊功能寄存器(SFR),它们离散地分布在80H~FFH的RAM空间中。这些特殊功能寄存器如图2.7所示。各SFR的名称及含义如表2.3所示。在这21个特殊功能寄存器中,11个具有位寻址能力,其字节地址正好能被8整除,其地址分布见表2.3。在51单片机中,寄存器只是CPU里特定地址的数据存储器而已。若使用汇编编程,必须熟练掌握;若使用C语言编程,则不太重要。上一页下一页返回2.251单片机存储器的配置下面介绍部分特殊功能寄存器,其余将在后续章节中讲述。(1)累加器ACC(E0H)。累加器ACC是51单片机最常用、最忙碌的8位特殊功能寄存器,许多指令的操作数取自ACC,许多运算中间结果也存放于ACC。在指令系统中用A作为累加器ACC的助记符。(2)寄存器B(F0H)。在乘、除指令中,用到了8位寄存器B。乘法指令的两个操作数分别取自A和B,乘积高位存于B和低位存于A两个8位寄存器中。除法指令中,A中存放被除数,B中存放除数,商存放于A,余数存放于B。上一页下一页返回2.251单片机存储器的配置(3)程序状态寄存器PSW(D0H)。PSW是一个8位特殊功能寄存器,它的各位包含了程序执行后的状态信息,供程序查询或判别之用。PSW除有确定的字节地址(D0H)外,每一位均有位地址,各位的含义及其格式见表2.4。RS0和RS1(PSW.3和PSW.4):工作寄存器组选择控制位。这两位的值可决定选择哪一组工作寄存器为当前工作寄存器组。通过用户用软件改变RS1和RS0值的组合,以切换当前选用的工作寄存器组,其组合关系见表2.5。51单片机上电复位后,RS1=RS0=0,CPU自动选择第0组为当前工作寄存器组。上一页下一页返回2.251单片机存储器的配置根据需要,可利用传送指令对PSW整字节操作或用位操作指令改变RS1和RS0的状态,以切换当前工作寄存器组。这样的设置为程序中保护现场提供了方便。(4)堆栈指针SP(81H)。堆栈指针SP为8位特殊功能寄存器,SP的内容可指向51单片机片内00H~7FHRAM的任何单元。系统复位后,SP初始化为07H,即指向07H的RAM单元。51单片机同一般微处理器一样,设有堆栈。在片内RAM中专门开辟出来一个区域,数据的存取是以“后进先出”的结构方式处理数据。这种数据结构方式对于处理中断、调用子程序都非常方便。上一页下一页返回2.251单片机存储器的配置堆栈的操作有两种:一种叫数据压入(PUSH),另一种叫数据弹出(POP)。在图2.8中,假若有8个RAM单元,每个单元都在其右面编有地址,栈顶由堆栈指针SP自动管理。每次进行压入或弹出操作以后,堆栈指针便自动调整以保持指示堆栈顶部的位置。这些操作可用图2.8说明。(5)数据指针DPTR(83H,82H)。DPTR是一个16位的特殊功能寄存器,其高位字节寄存器用DPH表示(地址83H),低位字节寄存器用DPL表示(地址82H)。DPTR既可以作为一个16位寄存器来处理,也可以作为两个独立的8位寄存器DPH和DPL使用。DPTR主要用于存放16位地址,以便对64KB片外RAM作间接寻址。上一页下一页返回2.251单片机存储器的配置(6)I/O端口P0~P3(80H,90H,A0H,B0H)。除上述21个SFR以外,还有一个16位的PC,在2.1节中曾提到过,且不可寻址的。图2.9所示为各个SFR所在的字节地址位置。空格部分为未来设计新型芯片可定义的SFR位置。上一页返回2.3时序与复位2.3.1时序分析51系列单片机与其他微机一样,从ROM中取指令和执行指令过程中的各种微操作,都是按着节拍工作的。51单片机片内有一个节拍发生器用来提供工作节拍,即片内的振荡脉冲电路。在51系列单片机的111条指令里,除了执行乘法与除法指令需要4个机器周期外,其余指令都能在1个或2个机器周期执行完毕。尽管如此,有些指令的长度为1B,有些为2B,还有少数指令为3B。对于不同的指令,CPU如何读取与执行呢?其工作时序如图2.10所示。首先是地址锁存使能引脚ALE,每个机器周期送出两个脉冲(分别是在S1及S4时),以锁存P0输出的地址(A0~A7),CPU进行读取存储器的动作。对于不同的指令类型,其动作分别说明如下。下一页返回2.3时序与复位(1)1个机器周期、1B的指令,如CLRC指令,在S1时读取指令,在S6时执行完毕;而在S4时读取下条指令,但并不使用它,直到下个机器周期的S1时再重新读取下条指令。(2)1个机器周期、2B的指令,如INCdirect指令,在S1时读取指令,在S4时读取第二个字节,在S6时执行完毕。在下个机器周期的S1时读取下条指令,以此类推。(3)2个机器周期、1B的指令,如RET指令,在S1时读取指令,而在S4及下个机器周期的S1、S4时分别读取下条指令,由于指令尚未执行完毕,所以这三个阶段的指令读取都会被放弃。直到第二个机器周期的S6,指令执行完毕后,CPU才会在第三个机器周期的S1重新读取下条指令,才是有效的读取。上一页下一页返回2.3时序与复位(4)另外一种2个机器周期、1B的指令为存取外部存储器数据的指令,即MOVX指令。2.3.2时序单位51单片机的基本时序定时单位有4个,即振荡周期、状态周期、机器周期和指令周期,将它们分别介绍如下。(1)振荡周期:晶体振荡器的频率为fosc,其倒数是晶振的振荡周期,为最小的时序单位。(2)状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。因此,状态周期也称时钟周期,其包含2个振荡周期。上一页下一页返回2.3时序与复位(3)机器周期(MC):1个机器周期由6个状态周期即12个振荡周期组成,是计算机执行一种基本操作的时间单位。(4)指令周期:执行一条指令所需的时间。一个指令周期含1~4个机器周期,依据指令不同而不同。4个时序单位从小到大依次是节拍(振荡脉冲周期,1/fosc)、状态周期(时钟周期)、机器周期和指令周期,如图2.11所示。上一页下一页返回2.3时序与复位2.3.3复位51系列单片机与其他微处理器一样,在启动时都需要复位,使CPU及系统各部件处于确定的初始状态,并从初态开始工作。如其中的功能之一是把PC初始化为0000H,使单片机从0000H单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也须按复位键重新启动。除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表2.6所示,表中的符号意义如下:A=00H:表明累加器已被清0。PSW=00H:表明选寄存器0组为工作寄存器组。SP=07H:表明堆栈指针指向片内RAM07H字节单元,根据堆栈操作的先加后减法则,第一个被压入的数据被写入08H单元中。上一页返回2.4节电方式图2.12所示为实现这两种方式的内部电路。从图中可见,若IDL=0,则51单片机将进入空闲运作方式。在这种方式下,振荡器仍继续运行,但IDL封锁了去CPU的“与”门,故CPU此时得不到时钟信号。而中断、串行口和定时器等环节却仍在时钟控制下正常运行。掉电方式下(PD=0),此时完全不提供时钟脉冲,振荡器冻结,功率损耗降至最低。图2.12中,PD和IDL均为PCON中PD和IDL触发器的Q输出端。空闲方式和掉电方式是通过对SFR中的PCON(地址87H)相应位置1而启动的,如图2.13所示,其中各符号的名称和功能如下。返回2.5输入/输出端口2.5.1P0口P0为8位、可位寻址的输入/输出端口,图2.14为其中一位的内部结构,其特点说明如下。(1)P0的8位皆为漏极开路输出(OpenDrain,OD),每个引脚可驱动8个LS型TTL负载。(2)P0内部无上拉电阻,执行输出功能时,外部必须接上拉电阻(10kΩ即可)。(3)若要执行输入功能,必须先输出高电平“1”才能读取该口所连接的外部数据。(4)若系统连接外部存储器,则P0可作为地址总线(A0~A7)及数据总线(D0~D7)的复用引脚,此时内部具有上拉电阻,不用外接。下一页返回2.5输入/输出端口2.5.2P1口P1为8位、可位寻址的输入/输出端口,图2.15为其中一位的内部结构,其特点说明如下。(1)P1内部具备约30kΩ上拉电阻,执行输出功能时,无须连接外部上拉电阻。(2)P1的8位类似于漏极开路输出(OD),但已内接上拉电阻,每个引脚可驱动4个LS型TTL负载。(3)若要执行输入功能,必须先输出高电平“1”才能读取该口所连接的外部数据。上一页下一页返回2.5输入/输出端口(4)若是8052/8032,则P1.0兼具Timer2的外部脉冲输入功能(即T2),P1.1兼具Timer2的捕捉/重新加载的触发输入功能(即T2EX)。(5)若是89S51/89S52,进行在线刻录(ISP,在系统编程)时,其中的P1.5作为MOSI之用,P1.6作为MISO之用,P1.7作为SCK之用。2.5.3P2口P2为8位、可位寻址的输入/输出端口,图2.16为其中一位的内部结构,P2的特点说明如下。上一页下一页返回2.5输入/输出端口2.5.4P3口P3为8位、可位寻址的输入/输出端口,图2.17为其中一位的内部结构。P3的特点说明如下。(1)P3内部具备约30kΩ上拉电阻,执行输出功能时,无须连接外部上拉电阻。(2)P3的8位类似于漏极开路输出(OD),但已内接上拉电阻,每个引脚可驱动4个LS型TTL负载。(3)若要执行输入功能,必须先输出高电平“1”才能读取该口所连接的外部数据。(4)P3的8个引脚各有其他功能,如表2.7所示。上一页返回图2.189C51内部逻辑结构图返回图2.251单片机存储器配置返回表2.1保留的存储单元返回图2.3访问片外ROM的连接方法返回图2.451单片机外扩片外RAM接法返回图2.5片内RAM的配置返回图2.6低128字节RAM区返回图2.7高128字节RAM区返回表2.2工作寄存器地址表返回表2.3特殊功能寄存器地址表返回表2.3特殊功能寄存器地址表返回表2.4PSW程序状态字返回表2.5RS0、RS1的组合关系返回图2.8堆栈的压入与弹出返回图2.9特殊功能寄存器SFR的位置返回图2.10时序分析返回图2.1151单片机各种周期的相互关系返回表2.6各特殊功能寄存器的复位值返回图2.12空闲和掉电方式控制电路返回图2.13电源控制寄存器PCON返回图2.14P0口内部一位结构电路图返回图2.15P1口内部一位结构电路图返回图2.16P2口内部一位结构电路图返回图2.17P3口内部一位结构电路图返回表2.7P3口的引脚复用功能表返回谢谢观赏第3章51单片机汇编指令系统与程序设计124333.1汇编语言概述3.2指令格式和描述符号说明3.3寻址方式3.4指令系统返回563.5伪指令3.6汇编与汇编程序设计3.1汇编语言概述在众多的程序设计语言中,计算机唯一能直接识别和执行的语言是用二进制编码表示的机器语言。用机器语言编写的程序称为机器语言程序或指令程序(机器码程序)。因为机器只能直接识别和执行这种机器码程序,所以又称它为目标程序。与机器语言一样,汇编语言也是一种面向机器的语言,与计算机的硬件结构密切相关,不能在不同类型的计算机之间移植,同时使用汇编语言编程对程序设计人员要求也较高,为此,又出现了高级程序设计语言,如针对单片机的高级程序设计语言C51等。高级程序设计语言独立于特定机器,所开发的程序方便进行移植。本书对51单片机汇编语言和单片机C语言编程均进行了介绍。返回3.2指令格式和描述符号说明3.2.1指令格式汇编语言指令由标号、操作码助记符字段、操作数和注释字段四部分组成。指令格式如下:【标号:】操作码助记符【目的操作数】【,源操作数】【;注释】3.2.2指令中常用描述符号说明返回3.3寻址方式寻址方式就是寻找操作数地址的方式。而在3.2.1节指令格式中已说明,操作数有目的操作数和源操作数两种,因此寻址方式包含目的操作数寻址和源操作数寻址两种,若不特别声明,本书所指的寻址方式均指源操作数的寻址方式。51系列单片机的寻址方式共有七种,如表3.1所示。1.立即数寻址立即数寻址就是参与操作的数据(指源操作数)在指令中直接给出。这个直接给出的数据前面有“#”符号,称为立即数。下一页返回3.3寻址方式2.寄存器寻址寄存器寻址就是参与操作的数据由寄存器R0~R7(或DPTR、A、B等)给出的方式。3.直接寻址直接寻址就是参与操作的数据地址(指源操作数)在指令中直接给出,操作数存放在片内低128字节中和特殊功能寄存器SFR中,地址长度为8位。对于特殊功能寄存器,既可以使用它们的名字,也可以使用它们的地址。4.寄存器间接寻址以寄存器的内容作为操作数的地址,在间址寄存器前加“@”符号,这种寻址方式称为寄存器间接寻址。对于这种寻址方式,可使用的间址寄存器有R0、R1、DPTR和SP。51单片机中规定:上一页下一页返回3.3寻址方式(1)以R0、R1为间址寄存器,访问片内低128BRAM和片外256BRAM,它们两个的区别是访问片内指令用MOV,而访问片外指令用MOVX。(2)以DPTR为间址寄存器,访问片外64KBRAM。(3)用SP作为间址寄存器5.变址寻址以基址寄存器(DPTR和PC)的内容为基地址,加上变址寄存器中的内容,形成真正的操作数的地址,这种寻址方式称为变址寻址。变址寻址方式只能用于访问程序存储器ROM,多用于查表程序,范围为64KB。显然,这种访问方式只能从ROM中读取数据而不能写入数据。上一页下一页返回3.3寻址方式6.相对寻址相对寻址就是以程序计数器PC当前值为基准,加上相对偏移量rel得到的程序执行地址的寻址方式。偏移量rel的取值范围为-128~+127,以补码形式存放。这种寻址方式一般是用于修改PC的值,实现程序的分支跳转。转移的目的地址表达式为:目的地址=源地址+转移指令字节数+rel编程时,常将目的地址用地址标号表示,例如以下程序段:上一页下一页返回3.3寻址方式第6句使用的就是相对寻址方式,其所在地址为1008H,目的地址为1002H,第6句的指令长度为2字节,其相对偏移量rel=目的地址-源地址-转移指令字节数=1002H-1008H-2=-8H,用补码表示为F8H,即表示反向跳转8个字节。相对寻址示意图如图3.1所示。7.位寻址位寻址是将8位二进制数中的其中一位作为操作数,在指令中以位地址形式给出,参与操作运算,一般用bit表示。上一页返回3.4指令系统3.4.1数据传送类指令(29条)数据的传送是一种最基本、最主要的操作,是编程时使用最频繁的一种操作,通常不影响PSW的状态。数据传送类指令一般可分为两大类,一类是MOV类传送指令,采用MOV操作符;另一类是非MOV类传送指令,不采用MOV操作符。MOV类指令功能是将源字节的内容传送到目的字节,源字节内容不变,MOV是MOVE的缩写。主要有7种,1种16位数据传送指令,4种8位数据传送指令,2种MOV(指查表指令MOVC和片外数据传送类指令MOVX)扩展类指令。1.16位数据传送指令(1条)下一页返回3.4指令系统这是唯一的一条16位立即数传送指令,将16位立即数的高8位送入DPH,低8位送入DPL。在翻译成机器码时,也是高位字节在前,低位字节在后。如“MOVDPTR,#4321H”的机器码是“904321”,执行结果为:在机器码格式中,rrr为工作寄存器地址,rrr=000~111对应工作寄存器R0~R7的某一个。Ri为间接寻址寄存器,i=0或1,表示R0或R1。direct表示直接地址,data表示8位立即数本身。本组指令只影响PSW中的标志位P(表示累加器A中1的奇偶情况)。3.以寄存器Rn为目的操作数的指令(3条)上一页下一页返回3.4指令系统4.以直接地址为目的操作数的指令(5条)5.以间接地址为目的操作数的指令(3条)8位MOV类传送指令数据传送关系如图3.2所示。6.查表指令(2条)在51单片机指令系统中,有2条极为有用的查表指令,其数据表格放在程序存储器中。“MOVCA,@A+DPTR”指令以DPTR为基址寄存器进行查表。使用前,先给DPTR赋予一任意地址,所以查表范围可达整个程序存储器的64KB空间,称为远程查表。但若DPTR已赋值待用,装入新值之前必须保存其原值,可用栈操作指令PUSH保存。上一页下一页返回3.4指令系统7.累加器A与片外RAM传送指令(4条)在51单片机指令系统中,CPU对片外RAM或片外I/O外设芯片的访问只能用寄存器间接寻址的方式,且仅有4条指令。第一条/第三条指令以R0或R1为间址寄存器,也可以读/写整个64KB的片外RAM空间。指令执行时,高8位地址在P2中,由P2口输出;低8位地址在R0或R1中,由P0口分时输出,并由ALE信号锁存在地址锁存器中。第二条/第四条指令以16位DPTR为间址寄存器读/写片外RAM,可以寻址整个64KB的片外RAM空间。指令执行时,在DPH中的高8位地址由P2口输出,在DPL中的低8位地址由P0口分时输出,并由ALE信号锁存在地址锁存器中。上一页下一页返回3.4指令系统8.栈操作指令(2条)51单片机的堆栈设置在片内RAM的低128字节单元中,一般设在30H~7FH单元中,增长方向为向上型,即进栈时,栈指针向高地址的方向变化。栈顶指针SP复位值=07H,一般给SP赋新值,如30H。(1)PUSH(入栈)指令:单元中,属于直接寻址。本操作不影响标志位。(2)POP(出栈)指令:9.交换指令(5条)(1)字节交换指令(3条):上一页下一页返回3.4指令系统将源操作数所指定的工作寄存器Rn(R0~R7)内容、直接寻址或间接寻址的单元内容与累加器A中的内容互换。其操作如图3.3所示。(2)半字节交换指令(1条):这条指令为低位字节交换指令。该指令将累加器A的低4位与R0或R1所指出的片内RAM单元的低4位数据相互交换,各自的高4位不变。其操作如图3.4所示。(3)累加器半字节交换指令(1条):3.4.2算术运算类指令(24条)算术运算指令可以进行加、减、乘、除、加1、减1和BCD码十进制调整操作。这类多以A为操作数,运算结果再存回A中。这类指令一般都影响标志位,见表3.2。上一页下一页返回3.4指令系统1.不带进位加法指令(4条)这类指令结果存放于累加器A中。当加法运算结果的第3位或第7位有进位时,分别将AC和CY标志位置1;否则为0。参照表3.2,这类指令的运算结果影响标志位AC、CY、OV和P。当然,溢出标志位OV只有带符号数运算时才有用。2.带进位加法指令(4条)这组指令与上面ADD指令的区别是,运算时将进位标志位CY加到累加器A中,结果存放在A中,其余的功能和ADD指令相同。本指令常用于多字节加法。3.十进制调整指令(1条)上一页下一页返回3.4指令系统指令功能:本指令用于对累加器A中刚进行的两个BCD码的相加结果进行十进制调整,调整的结果仍为BCD码。使用时注意以下几点:(1)这条指令只能出现在ADD或ADDC指令之后。(2)不能用DA指令对BCD码减法进行直接调整,如需要,可将减法转换成补码相加,然后再用DA指令调整。(3)本指令不影响OV位。(4)借助标志位可实现多位BCD码加法结果的调整。4.带借位减法指令(4条)上一页下一页返回3.4指令系统这组指令的功能是把累加器A的内容减去进位位CY值和第二操作数的内容,将结果送入累加器A中。54带借位的减法指令可以实现多字节减法运算。由于51单片机指令系统中没有不带借位的减法指令,当使用此组指令完成不带借位的减法功能时,只需先将CY清0即可。5.加1指令(5条)这组指令的功能是将操作数内容加1,结果送回原单元。只有“INCA”影响标志P,其余操作都不影响PSW。6.减1指令(4条)上一页下一页返回3.4指令系统这组指令的功能是将操作数内容减1,结果送回原单元。只有“DECA”影响标志P,其余操作都不影响CY和PSW。7.乘法指令(1条)指令功能:把累加器A和寄存器B中的2个8位无符号数相乘,乘积的低8位留在A中,高8位存放在B中。当乘积大于0FFH、B中内容不为0时,OV置1;否则OV清0。8.除法指令(1条)指令功能:累加器A中的8位无符号整数除以寄存器B的8位无符号整数,所得的整数商存于A,余数存于B中。当存放除数的B为0时,除法无意义,结果无法确定,OV=1,否则OV=0。CY总是被清0。上一页下一页返回3.4指令系统3.4.3逻辑运算与循环类指令(24条)逻辑运算指令包括与、或、异或、清零和取反操作;循环指令可以完成对累加器A的循环左移、循环右移、带进位的循环左移和带进位的循环右移。1.逻辑“与”指令(6条)这组指令中的前4条功能是,将源操作数的内容和累加器A的内容按位“相与”,结果送入A中。后2条指令的功能是,将源操作数的内容和直接地址单元中的内容按位“相与”,结果存入直接地址单元中。2.逻辑“或”指令(6条)上一页下一页返回3.4指令系统这组指令中的前4条功能是将源操作数的内容和累加器A的内容按位“相或”,结果送入A中。后2条指令的功能是,将源操作数的内容和直接地址单元中的内容按位“相或”,结果存入直接地址单元中。3.逻辑“异或”指令(6条)这组指令中的前4条功能是将源操作数的内容和累加器A的内容按位“相异或”,结果送入A中。后2条指令的功能是,将源操作数的内容和直接地址单元中的内容按位“相异或”,结果存入直接地址单元中。4.累加器A清0指令(1条)汇编指令格式上一页下一页返回3.4指令系统5.累加器A取反指令(1条)6.移位指令(4条)(1)累加器A循环左移指令:(2)累加器A循环右移指令:汇编指令格式上一页下一页返回3.4指令系统(3)累加器A连同进位位循环左移指令:(4)累加器A连同进位位循环右移指令:上一页下一页返回3.4指令系统前两条指令的功能分别是,将累加器A的内容循环左移或右移一位;后两条指令的功能分别是,将累加器A的内容连同进位位CY一起循环左移或右移一位。此外,我们通常用“RLCA”指令将累加器A的内容做乘2运算。3.4.4控制转移类指令(17条)程序是顺序执行的,要改变程序的执行顺序,应通过改变PC的值来实现,这就是控制转移类指令的基本功能。51单片机控制转移类指令有无条件转移、空操作、条件转移、子程序调用与返回指令。1.无条件转移指令(4条)不规定转移条件的程序转移称为无条件转移,此类指令共有长转移、短转移、相对转移和散转移指令4条。(1)长转移指令(1条):上一页下一页返回3.4指令系统这是一条3字节指令,该指令能把16位目标地址(addr16)送入PC,转移范围可为64KB程序存储器地址空间的任何单元,因此称为长转移。在实际编程时,通常采用标号地址,如“LJMPLOOP”。转移操作如图3.5所示。(2)短转移指令(1条):上一页下一页返回3.4指令系统由于转移的地址是11位,而11位的地址范围是在2KB范围内(211=2K),故AJMP指令的转移范围是AJMP下一条指令第一个字节开始的2KB范围内。转移操作如图3.6所示。与LJMP指令类似,AJMP指令后面最好也用标号地址,但必须保证标号所处的地址与AJMP指令之间不超过2KB的寻址范围。(3)相对转移(短转移)指令(1条):上一页下一页返回3.4指令系统这是一条2字节指令,其功能是先计算目的地址,并按计算出的目的地址实现程序的相对转移。计算公式:目的地址=(PC)+2+rel(见3.3节寻址方式中的第6种相对寻址)因为本指令为双字节指令,执行时先将PC内容加2,再加相对地址rel,就得到了转移目标地址。其中rel是偏移量,本身是一个带符号的8位二进制数的补码表示形式,取值范围为-128~+127(00H~7FH对应表示0~+127,80H~FFH对应表示-128~-1)。负数表示反向转移,正数表示正向转移。上一页下一页返回3.4指令系统(4)散转移指令(1条):本指令以DPTR的内容为基址,以A的内容为变址,而将这两者的和形成目的地址,送入PC实现程序的转移。即:因此,只要把DPTR的值确定,而对A赋以不同的值,即可实现程序的多分支转移。上一页下一页返回3.4指令系统当(A)=00H时,程序将转到CS0处执行;当(A)=01H时,程序将转到CS1处执行;其余类推。由于AJMP是双字节指令,散转前A中键值应先乘以2。2.空操作指令(1条)这条指令不产生任何操作,只是将PC的内容加1,不影响其他寄存器和标志位。NOP指令常用来产生一个机器周期的延迟。3.条件转移指令(8条)上一页下一页返回3.4指令系统所谓条件转移是指程序的转移是有条件的。若条件满足,则程序转向指定的目的地址(目的地址是以下一条指令的起始地址为中心的-128~+127共256字节范围)去执行,否则仍顺序执行。(1)判零转移指令(2条):上一页下一页返回3.4指令系统(2)比较转移指令(4条):上一页下一页返回3.4指令系统(3)循环转移指令(2条):上一页下一页返回3.4指令系统4.调用和返回指令(4条)在一个程序中经常遇到反复执行某段相同的程序,如果把相同的程序编写为一个子程序,就可以通过主程序来调用它。这样不但减少了编写程序的工作量,而且也缩短了程序的长度。(1)长调用指令(1条):上一页下一页返回3.4指令系统(2)短调用指令(1条):(3)返回指令(2条):上一页下一页返回3.4指令系统3.4.5位操作类指令(17条)位操作指令的操作数是字节中的某一位,故又称为布尔操作。位指令执行时,以进位标志CY作为累加器,但用字符“C”表示。位地址有4种表示形式,以PSW中的第7位,CY为例,说明如下:上一页下一页返回3.4指令系统①直接地址方式,如0D7H;②点操作符方式,如D0H.7、PSW.7;③位名称方式,如CY;④伪指令定义方式,如C_FLAGBITCY。经定义后,允许指令中用C_FLAG代替CY。1.位数据传送指令(2条)上一页下一页返回3.4指令系统2.位值设置指令(6条)(1)位清0指令(2条):(2)位置1指令(2条):上一页下一页返回3.4指令系统(3)位取反指令(2条):3.位逻辑运算指令(4条)(1)位逻辑“与”指令(2条):上一页下一页返回3.4指令系统(2)位逻辑“或”指令(2条):4.位条件转移类指令(5条)(1)判布尔累加器C转移指令(2条):上一页下一页返回3.4指令系统(2)判位变量转移指令(2条):上一页下一页返回3.4指令系统。(3)判位变量并清0转移指令(1条):上一页下一页返回3.4指令系统本条指令对指定的二进制位进行检测,若该位是“1”,则将其清0,同时PC转移到指定的目的地址执行程序;否则,顺序执行。本指令常在定时/计数器查询方式中使用。上一页返回3.5伪指令1.定位伪指令(ORG)格式:[标号:]ORG16位地址表达式功能:说明后面程序紧接程序段或数据段存放的起始地址。2.定义字节数据伪指令(DB)格式:[标号:]DB字节数据表功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。字节数据表可以是一或多个字节数据、括在单引号(′
′)中的ASCII字符串或表达式。将字节数据表中的数据从左到右依次存放在指定地址单元。3.定义字数据伪指令(DW)格式:[标号:]DW字数据表下一页返回3.5伪指令功能:从标号指定的地址单元开始,在程序存储器中定义16位的字数据。与DB类似,但DW定义的数据项为字,包括两个字节,高位字节先存放,低位字节后存放。4.定义空间伪指令(DS)格式:[标号:]DS表达式功能:从指定的地址开始,在程序存储器中保留表达式所规定的存储单元,作备用空间。5.赋值伪指令(EQU)格式:符号名EQU数据或汇编符号上一页下一页返回3.5伪指令功能:将一个数值或特定的汇编符号赋值给指定的符号名。符号名用EQU伪指令赋值后,在以后的程序中可以方便地引用该符号名,每个出现该符号名的地方均用EQU定义的数据或汇编符号来取代。符号名必须先定义后使用,因此该语句通常放在源程序的开头部分。符号名可以代表地址、常数、字符串、寄存器名或位名等,符号名后不需要接冒号。6.数据赋值伪指令(DATA)格式:符号名DATA表达式功能:将表达式的值赋给指定的符号名,只能定义单字节数据,与EQU类似,但有以下差别:(1)EQU必须先定义后使用,DATA可以先使用后定义。上一页下一页返回3.5伪指令(2)EQU可以把一个特定的汇编符号赋给指定的符号名,而DATA只能把数据赋给符号名。(3)DATA可以把一个表达式的值赋给符号名,其中表达式应该是可求值的。7.位地址符号定义伪指令(BIT)格式:符号名BIT位地址表达式功能:将位地址赋给指定的符号名。位地址表达式可以是绝对地址,也可以是符号地址。上一页返回3.6汇编与汇编程序设计3.6.1源程序的汇编将汇编语言源程序转换为用机器码表示的目标程序,这个转换过程称为汇编,能完成该转换功能的程序称为汇编程序。汇编常用的方法有两种:一种是手工汇编,另一种是机器汇编。对于手工汇编,是把程序用助记符指令写出后,人为查找指令代码表,逐个把助记符指令翻译成机器码,然后把得到的机器码程序(以十六进制数形式)输入到单片机开发软件中,并进行调试。由于手工汇编是按绝对地址进行定位的,所以,对于偏移量的计算和程序的修改有诸多不便。而且手工汇编十分复杂,很费时间,也很容易出错,因此,一般只有程序较小或工具有限时才使用。下一页返回3.6汇编与汇编程序设计在ROM的0030H处存放汇编后的十六进制为:780AE428D8FD80FE。在KeilμVision4中汇编后的截图如图3.7所示。3.6.2汇编程序设计1.顺序设计顺序程序设计既无分支,又无循环,按指令的先后顺序逐条执行。所谓表格是指程序中定义的一串常数。因为程序一般都固化在程序存储器(通常是只读存储器ROM)中,因此可以说表格是预先定义在程序的数据区中,然后和程序一起固化在ROM中的一串常数。上一页下一页返回3.6汇编与汇编程序设计2.分支程序设计分支程序设计是根据不同的条件选择不同的程序段来执行,它具有判断和选择能力。3.循环程序设计在程序设计中,经常需要控制一部分指令重复执行若干次,这种按某种规律重复执行的程序称为循环程序。3.6.3综合设计实验———可控灯汇编程序设计一、实验目的(1)掌握51单片机汇编程序设计的综合编程方法。(2)进一步熟悉51单片机I/O接口的使用方法。上一页下一页返回3.6汇编与汇编程序设计二、实验要求当按键K1~K4中的某个按键被按下后,对应的LED灯D1~D4亮1s后熄灭。三、电路图信号灯电路如图3.8所示四、程序设计上一页返回表3.1寻址方式对应的存储空间和寄存器返回图3.1相对寻址示意图返回图3.28位MOV类指令数据传送关系返回图3.3字节交换操返回图3.4半字节交换操作返回表3.2算术运算指令对标志位的影响返回图3.5LJMP转移示意图返回图3.6AJMP转移示意图返回图3.7KeilμVision4中目标码截图返回图3.8信号灯电路图返回谢谢观赏第4章51单片机的C语言程序设计124334.1C51语言与汇编语言和标准C语言的区别4.2C51程序的基本结构4.3数据类型4.4变量和C51存储区域下一页第4章51单片机的C语言程序设计56374.5C51对绝对地址的访问4.6指针4.7C51函数返回4.1C51语言与汇编语言和标准C语言的区别1.C语言与汇编语言的比较使用C语言进行单片机系统的开发,有着汇编语言编程所不具备的优势,主要体现在以下几个方面:(1)不需要了解单片机指令集,也不需
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年黑龙江省英语初三预测模拟卷(含答案)
- 2027年中考海南省语文九年级考前加分卷(含答案)
- 2027年江苏省道德与法治九年级华师大版全真模拟卷(含答案)
- 厚积薄发 2026年秋季高一历史部编版上学期期中测试卷(含答案)
- 巩固提高 2026年秋季八年级英语外研版11月月考试卷(含答案)
- 2027年内蒙古自治区道德与法治初三考前抢分卷(含答案)
- 2027届河南省语文九年级湘教版考前30天加分卷(含答案)
- 超越自我 2026-2027学年第一学期高二语文部编版上学期期中测试卷(含答案)
- 2026财会岗面试易错题预测试卷含解析
- 2026 综合岗事业编面试考点梳理题库
- 北京市大兴区司法局面向社会招聘劳务派遣人员40人考试备考试题及答案解析
- EN 10088-1-2023 中文版(不锈钢 第 1 部分:不锈钢牌号列表及化学成分)
- 动物学课件甲壳纲
- 2026年秋季小学语文开学第一课 学科核心素养解读课件
- 2026高考化学试题贵州卷评析及教学启示讲座
- 建筑工地二氧化碳泄漏应急演练脚本
- 成本实操-汽车零部件行业成本核算报表实例
- 2025-2026月考试卷八年级数学第一次月考卷02(江西专用北师大版八年级上册第一章~第二章)(全解全析)
- 英语+答案【天域全国名校协作体最后一考】天域全国名校协作体2026年5月高三年级5月28日考前模拟联考(5.28-5.29)
- 手术管理委员会工作制度
- 《智能汽车传感器技术》项目二
评论
0/150
提交评论