单片机软件仿真实验指导书_第1页
单片机软件仿真实验指导书_第2页
单片机软件仿真实验指导书_第3页
单片机软件仿真实验指导书_第4页
单片机软件仿真实验指导书_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE86编著蔡骏安徽电子信息职业技术学院二00七年九月前言本实验指导书结合单片机实验教学和高职生的学习特点,引入较为先进的单片机与嵌入式系统仿真与开发平台——Proteus仿真软件,对传统的单片机实验方法和实验内容进行充实和完善。全书共分5章,各章内容的编排顺序基本上与理论课教材相近。第1章介绍Proteus仿真软件,第2、3章分别介绍单片机硬件、指令系统和程序设计,第4、5章分别介绍单片机定时器/计数器、中断技术和系统扩展。各项实验提供的参考程序均通过ProteusV7.1版调试。在本书编写过程中,主要突出以下几个特点:1.以培养应用技术性人才为目标,突出基本技能训练,加强对指令系统的理解和输入输出口控制应用的训练,培养学生的编程能力。2.考虑到各系电类及相关专业对单片机课程的要求不同,各专业学生的基础不同,每章安排的实验数量较多,难易程度也有所不同,各专业可以根据各自的专业要求和学生的学习能力选择实验项目。3.在各章节的参考程序中,都给出了与汇编语言对应的机器码,使学生对机器码有一定的了解。4.实验内容的编排顺序基本上与理论课教学一致,努力做到理论与实践相结合,互相补充。单片机硬件结构学习过程中即可安排实验课程。由于编者水平有限,书中难免会有错误和不妥之处,恳请广大读者给予批评指正。蔡骏2007年9月目录第1章单片机仿真软件概述…………………11.1Proteus软件仿真系统的构成与功能……………………11.2Proteus软件仿真系统的使用方法………4第2章单片机硬件和指令系统实验………132.1数据存储器实验………………………132.2数据传送指令实验……………………192.3算术运算指令实验……………………212.4逻辑运算指令实验……………………232.5控制转移指令实验……………………252.6位操作指令实验………………………28第3章单片机程序设计实验………………303.1流水灯实验……………303.2步进电机实验…………343.3汽车转向信号灯控制实验……………383.4步进电机控制实验……………………41第4章单片机定时与中断实验……………474.1外部中断实验…………474.2交通信号灯控制实验…………………504.3广告灯实验……………554.4脉冲计数实验…………584.5电子音乐实验…………614.6直流电动机控制实验…………………66第5章单片机系统扩展实验…………………705.1数据存储器扩展实验…………………705.2简单I/O口扩展实验…………………735.38255扩展I/O口实验…………………76附录一MCS-51指令表…………80第1章单片机仿真软件概述Proteus是英国LabcenterElectronics公司开发的多功能EDA软件。Proteus不仅是模拟电路、数字电路、模/数混合电路的设计与仿真平台,也是目前较先进的单片机和嵌入式系统的设计与仿真平台。它实现了在计算机上完成从原理图与电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证到形成PCB的完整的电子设计、研发过程。由于Proteus丰富的元器件模型、对处理器的支持、多样的虚拟仪器、强大的图表分析功能和与第三方集成开发环境的无缝集成,已被公认为电类教学与实验的巨大资源,得到越来越多的高校的认同,并在教学实践中取得了明显效果。1.1Proteus软件仿真系统的构成与功能1.1.1PProteus组合了高级原理布图、混合模式SPICE仿真、PCB设计以及自动布线来实现一个完整的电子设计系统。Proteus包含了VSM(VirturalSystemModelling虚拟系统模型)技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。Proteus包括ProteusVSM(Proteus虚拟系统模型)和ProteusPCBDesign(Proteus印制电路板设计)两大部分。ProteusVSM包括智能原理图输入系统ISIS(IntelligentSchematicInputSystem)、带扩展的ProSPICE(SimulationProgramWithIntegratedCircuitEmphasis)混合模型仿真器、动态器件库、高级图表仿真ASF(AdvancedSimulationFeature)和微控制器虚拟系统仿真模型VSM。ProteusPCBDesign包括高级布线编辑软件ARES(AdvancedRountingandEditingSoftware)、智能原理图输入系统ISIS和高级图表仿真ASF。该软件运行于Windows操作系统上,主要特点是:实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C支持主流单片机系统的仿真。目前支持的单片机类型有:8051/52系列、ARM7(LPC21xx)、AVR系列、PIC10/12/16/18系列、HC11系列以及多种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态。支持第三方的软件编译和调试环境,如KeilC51uVision2、MPLAB、IAR等软件。具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。1.1.2P本实验指导书主要涉及与单片机课程有关的软件设计与仿真,故只叙述ProteusVSM的功能。ProteusVSM组合了混合模式的ProSPICE电路仿真、动画器件和微控制器模型,实现了完整的基于微控制器设计的协同仿真。使在物理原型出来之前对这类设计的开发和测试成为可能。ProteusVSM的各组成部分的功能简介如下:一、智能原理图输入系统ISISISIS是Proteus系统的中心,它远不仅是一个图表库。它既是智能原理图设计、绘制和编辑的环境,又是数字电路、模拟电路和数/模混合电路设计与仿真的环境,更是单片机与外围设备的设计、仿真和协同仿真的环境。ISIS组合有很多易用的功能强大的编辑工具,是单片机系统的设计与仿真的平台。其主要特点如下:生成出版质量的原理图。风格模板允许提供库部件的用户化。鼠标驱动和内容关联的用户界面。自动走线,以及接点的布置和切除。参数表示子电路元件值的层次设计。包括子电路端口以及总线引脚的总线支持。挑选元件或建立新库元件可预览PCB封装。完全体现多元器件的同性和异性。包括相应对话框用户化的元件特性的精细管理。超过8000元件的大型元件库,完全适用于仿真模型。网表格式:LabcenterSDF、SPICE、Tango、Boardmaker、EEDeginer、Futurenet等。电气规则检查以及元件报告清单。可彩色或单色输出到Windows打印设备。图形输出格式:WMF、BNP、DXF、EPS、HPGL。二、ProSPICE混合模型仿真器ProSPICE是结合ISIS原理图设计环境使用的混合型电路仿真器。它基于工业标准SPICE3F5(美国加州Berkeley大学开发)的模拟内核,加上混合型仿真的扩展以及交互电路动态,提供了开发和测试设计的强大交互式环境。ProSPICE使用了Berkeley的源代码,包含了最新的整合技术以及原型,保证在数字结果方面和生产商SPICE模型的最好兼容性。三、微控制器虚拟系统仿真模型VSMProteus可以仿真51系列、AVR、PIC、ARM等常用的MCU及其外围电路。可仿真的51系列单片机模型如下:通用:80C31、80C32、80C51、80C52、80C54、80C58。Atmel:AT89C51、AT89C52、AT89C55;AT89C51RB2、AT89C51RC2、AT89C51RD2(X2和SPI没有模型)Philips:P87C51FX、P87C51RX+(如FA、FB、FC、RA+、RB+、RC+、RD等系列)。通过51系列单片机模型可完成以下仿真:全部8051指令系统。所有I/O操作。所有片上外设的各种操作模式。所有中断模式。内部产生处理器时钟以优化经济结构性能,I/O和其它事件定时器精确至一个时钟相位。程序和外部数据存储器能被仿真为内部模型,以提高吞吐量,或仿真为外部模型以验证硬件设计。提供内部一致性代码检查功能。完整集成ISIS的源码级调试和源码管理系统。支持集成Keil等第三方编译器和调试器。支持的编译器:KeilC51/μVision2、MPLAB和IAR。四、动态器件库VSM包含超过8000种元器件模型:标准电子元件:电阻、电容、二极管、晶体管、晶闸管、光耦合器、运放、555定时器等。74系列TTL和4000系列CMOS器件。存储器:ROM、RAM、EEPROM、I2C器件等微控制器支持的器件:如I/O口、USART等。ProteusVSM除上述库外,同样包含大量复杂的外设模型,如表1-1所示。表1-1ProteusVSM高级外设模型虚拟仪器和分析工具交互式虚拟仪器双通道示波器24通道逻辑分析仪计数器/计时器RS232终端交流电压表/直流电压表交流电流表/直流电流表规程分析仪双模式(主/从)I2C规程分析仪双模式(主/从)SPI规程分析仪交互式电路激励工具模拟信号发生器-可输出方波、锯齿波、三角波、正弦波信号数字图形发生器-支持1K的标准8-bit数据流光电显示模型和驱动模型数字式LCD模型、图形LCD模型、LED模型、七段显示模型、光电驱动模型、光耦模型电机模型和控制器电机模型(直流、步进和伺服电机)、电机控制器模型存储器模型I2CEPROM存储器模型、静态存储器模型、永久性EPROM温度控制模型温度计和温度自动调节器模型、温度传感器模型、热电偶模型计时模型实时时钟模型I2C/SPII2C外设、SPI外设、规程分析仪一线规程模型一线EEPROM模型、一线温度计模型、一线开关模型、一线按钮模型RS-232/RS-485/RS-422规程模型RS232终端模型、Maxim外设模型ADC/DAC转换模型模/数转换模型、数/模转换模型电源管理模型正电源标准仪、负电源标准仪、混合电源标准仪脉宽控制模型全桥脉宽放大器、半桥脉宽放大器、脉宽调节器拉普拉斯转换模型操作模型、一阶模型、二阶模型、过程控制、线性模型、非线性模型热离子管模型二极管模型、五极真空管模型、四极管模型、三极管模型变换器模型压力传感器模型五、高级图表仿真ASF基于图形化的仿真是传统的SPICE仿真,包括以下特点:标准SPICE分析包括:模拟瞬态、数字瞬态、混合模式瞬态、频率、傅里叶、噪声、失真、转换曲线、直流特性、交流特性和工作点。图形显示模拟、数字和总线数据,频谱显示增益和相位。音频分析可形成波形或在声卡上播放。交互仿真后,捕捉结果到图形上,并进行交互的分析。数字信号一致性分析,后面会详细介绍该工具。探针所观测点的电压或电流可以用数字标示出来。使用图形的图标可以精确度量。以CSV格式将仿真结果输出给其它软件,如EXECL。Proteus做为单片机与嵌入式系统仿真与开发平台,支持外围数电/模电与微控制器的协同仿真,真正实现了虚拟物理原型功能。在目标板还没有投产前,就可以对设计的硬件系统的功能、合理性和性能指标进行充分调整,并可以在没有物理目标板的情况下,进行相应软件的开发和调试,进行完全的虚拟开发,明显提高企业的开发效率,降低开发风险。无论是51系列、AVR、还是PIC系列,他们各有各的特点,学习者也是逐年增加,但是在学习开发过程中,我们往往在确定方案后做试验的开支比较大,尤其是对于一些学生或者初学者这就可能成为他们学习的障碍。使用Proteus软件可大大节省时间和开发费,在校学生只要配备一台电脑就可以在宿舍用Proteus构建成单片机与嵌入式系统仿真与设计实验室,同时也是数电/模电仿真实验室。1.2Proteus软件仿真系统的使用方法单片机的软件设计与仿真主要在智能原理图输入系统ISIS中进行,本书只介绍ISIS的使用,并以Proteus7.1SP2Professional(汉化版)版本为平台。双击桌面上的ISIS7Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus7Professional”→“ISIS7Professional”,进入ProteusISIS集成环境,如图1-1所示。菜单栏菜单栏标题栏命令工具栏状态栏仿真工具栏编辑区器件选择按钮对象选择器窗口预览窗口方向工具栏模式选择工具栏库管理按钮标签图1-1ISIS窗口1.2.1ISIS窗口简介一、菜单栏菜单栏中的每项都有下一级菜单,许多命令左方的图标表明该命令在工具栏中有相应的按钮,有部分命令的右方标有该命令的快捷键。二、编辑区编辑区用来绘制原理图。蓝色方框内为可编辑区,元件要放到可编辑区的里面。这个窗口没有滚动条,可用预览窗口来改变原理图的可视范围。三、工具栏工具栏分为命令工具栏、模式选择工具栏、方向工具栏和仿真工具栏四类。许多操作既可通过菜单栏有可通过工具栏来执行,一般来说使用工具栏要方便快捷。常用命令的名称和功能说明如下:1、命令工具栏文件操作按钮新建设计――在默认的模板上新建一个设计文件。加载设计――装载一个新的设计文件。保存设计――保存当前设计文件。导入――将一个局部文件导入ISIS中。导出――将当前对象导出为一个局部文件。打印――打印当前设计文件。设置区域――打印选中的区域。显示操作按钮刷新屏幕网格――显示/不显示网格点。原点――显示/不显示原点。平移――使可编辑区充满整个编辑区。放大――放大可编辑区,也可通过中键放大。缩小――缩小可编辑区,也可通过中键放大。全部显示――使可编辑区充满整个编辑区。放大到区域――放大选中的区域充满整个编辑区。编辑操作按钮撤销――撤销最后的操作。重做――恢复最后的操作。剪切――剪切选中的对象。复制――复制选中的对象到剪贴板。粘贴――从剪贴板粘贴。块复制――复制选中的块对象到剪贴板。块移动――移动选中的块对象。块旋转――旋转选中的块对象。块删除――删除选中的块对象。选择元件/符号――从元器件库中选取元件。制作器件――将原理图符号封装成元件。器件封装工具――定义PCB封装。分解――打散选中的元件成原始组件。。设计操作按钮实时Snap(捕捉)搜索并标记属性分配工具设计管理器添加一张图纸移除一张图纸电气规则检查网表到AREA(2)模式选择工具栏主模式选择按钮用于即时编辑元件参数(先单击该按钮再单击要修改的元件)元件――选择元器件(默认选择)。点――放置连接点(电线的交点)。网路标号――放置电线标签(总线标记时用)。文本――放置文本。总线――用于绘制总线。子电路――用于放置子电路。工具箱终端――有VCC、地、输出、输入等接口终端。器件引脚――用于绘制各种引脚。仿真图表――用于各种分析(如Frequency、Analogue)。录音机信号发生器电压探针――图表仿真分析时用。电流探针――图表仿真分析时用。虚拟仪表――有示波器、逻辑分析仪等。2D绘图按钮画各种直线画各种方框画各种圆画各种圆弧画各种多边形画各种文本画符号画原点(3)方向工具栏右旋转:旋转角度只能是90的整数倍。水平翻转:完成水平翻转。左旋转:旋转角度只能是90的整数倍。垂直翻转:完成垂直翻转。(4)仿真工具栏运行单步运行暂停停止四、预览窗口预览窗口可显示如下内容:当在对象选择器窗口中单击某一个元器件时,该元器件会显示在预览窗口。此时可通过方向工具栏中的按钮对该元器件进行旋转和翻转操作。当鼠标指针在编辑区窗口操作时,预览窗口会显示可编辑区的缩略图,并显示一个绿色方框,绿色方框内的内容就是当前编辑区窗口中显示的可编辑区的内容。当单击预览窗口的绿色方框后,移动鼠标可改变绿色方框的位置,从而改变可编辑区的可视区域,再次单击预览窗口的绿色方框退出移动绿色方框。五、对象选择器窗口对象选择器用来选择绘图用各类元器件、仪器等,可执行以下操作:当单击模式选择工具栏某一按钮时,标签显示对象选择器窗口所列对象的类型。当单击器件选择按钮“P”时,可从打开的“PickDevices”对话框中选取元器件。Proteus有30多个元器件库,选取元器件对话框如图1-2所示。当单击库管理按钮“L”时,可从打开的“DevicesLibrariesManager”对话框中整理元器件库。用户器件库USERDVC可由用户自己添加元器件,也可单击建库按钮“CreateLibrary”建立自己的库。元器件名称元器件元器件名称元器件描述所属库元器件列表关键字类别子类别生产厂家元器件预览元器件封装元器件PCB预览图1-2选取元器件对话框1.2.2单片机应用系统的Proteus设计与仿真步骤一、Proteus使用中的操作步骤Proteus设计与仿真以ISIS为平台,用于单片机应用系统的开发,主要可分为三大步骤。1.Proteus电路设计该步骤主要包括电路设计、选取元器件、接插件、连接电路和电气检测等。绘制原理图要在可编辑区的蓝色方框内完成。具体步骤如下:(1)新建设计文件:单击“文件”→“新建设计”,在弹出的“CreateNewDeign”对话框中选择模板后单击“OK”。(2)设置图纸尺寸:单击“系统”→“设置图纸尺寸”,在弹出的“SheetSizeConfigueration”对话框中选择图纸尺寸或自定义尺寸后单击“OK”。(3)保存设计文件:单击“文件”→“保存设计”,在弹出的“SaveISISDesignFile”对话框中指定文件夹、输入文件名并选择保存类型为“DesignFile”后单击“保存”。(4)选取元器件:单击模式选择工具栏“元件”按钮,单击器件选择按钮“P”,在弹出的“PickDevices”(选取元器件)对话框的“Keywords”(关键字)栏中输入元器件名称(也可以是分类、小类、属性值),与关键字匹配的元器件显示在元器件列表(Results)中。双击选中的元器件,便将所选元器件加入到对象选择器窗口。同样方法选取其他元器件,单击“OK”完成元器件选取。(5)设置网格:单击“查看”→“网格”,网格显示;再次单击,网格不显示(也可单击命令工具栏的“网格”按钮)。单击“查看”→“Snapxxth”(或Snapx.xin),改变网格单位。(6)放置元器件:单击对象选择器窗口的元器件,该元器件名背景变为蓝色,预览窗口显示该元器件;将鼠标指针移到编辑区某一位置,单击一次就可放置一个元器件。(7)编辑元器件:右击(或单击)编辑区的元器件,该元器件变为红色表明被选中,鼠标指针放到被选中的元器件上,按住左键拖动,将鼠标移到编辑区某一位置松开,即完成元器件的移动。鼠标指针放到被选中的元器件上右击,单击弹出的快捷菜单中的方向工具命令可实现元器件的旋转和翻转。右击编辑区中被选中的元器件,可删除该元器件。(8)放置终端:单击模式选择工具栏“终端”按钮,单击对象选择器窗口的终端(如POWER为电源、GROUND为地),该终端名背景变为蓝色,预览窗口显示该终端;将鼠标指针移到编辑区某一位置,单击一次就可放置一个终端。(9)连线:单击命令工具栏“实时Snap(捕捉)”按钮,实时捕捉有效,当鼠标指针接近引脚末端时,该处会自动出现一个小方框“□”,表明可以自动连接到该点,2.Proteus源程序设计与编译该步骤主要包括源程序设计、编辑、汇编编译、生成目标代码文件(HEX格式)。3.Proteus仿真该步骤主要包括加载目标代码文件、仿真。4.常用的操作要点左键放置元件;右键选择元件;双击右键删除元件;右键拖选多个元件。先右键后左键编辑元件属性;先右键后左键拖动可移动元件。连线用左键;删除用右键;先右击连线再左键拖动可改连接线。中键缩放原理图。使用的Proteus软件版本不一样,操作上会有点差异,较新的版本在保留原有操作方法的基础上会有一些扩展二、Proteus使用中的注意事项1.设置代码产生工具第一次使用该软件时,要设置代码产生工具。单击“源文件”→“定义代码产生工具”,在弹出的“Add/RemoveCodeGenerationTools”对话框中,单击“CodeGenerationTool”栏下拉列表框按钮,选择“ASEM51”(51汇编器);在“MakeRules”栏和“DebugDataExtraction”栏按表1-3所示进行设置,单击“OK”。图1-3定义代码产生工具对话框2.编译出错信息(1)常见编译出错信息一Processing..\..\..\..\Keil\dz\Text1.LST...源程序名ASEM51..\..\..\..\Keil\dz\Text1.LST/INCLUDES:C:\ProgramFiles\LabcenterElectronics\Proteus7Professional\TOOLS\ASEM51源程序路径InvalidkeyboardcodespecifiedMCS-51FamilyCrossAssemblerASEM-51V1.2汇编器@@@@@toomanyparameters:7@@@@@usage:ASEM<source>[<hex>[<list>]][/INCLUDES:p][/DEFINE:s:v:t][/COLUMNS]ERROR:ASEM.EXEreportederrorcode(2L).Extractingdebugdatafrom..\..\..\..\Keil\dz\Text1.LST...从列表提取调试数据Processed15lines.处理行数15行BuildFAILEDwith1error(s).代码建立失败原因:命令参数不正确。解决办法:单击“源文件”→“定义代码产生工具”,在弹出的“Add/RemoveCodeGenerationTools”对话框中,删除“CommandLine”栏中的内容,重新输入“%1,%2,%3”。(2)常见编译出错信息二MAIN为未定义符号(应检查标号为MAIN的指令)“:MAIN为未定义符号(应检查标号为MAIN的指令)“:”为非法字符(应改为英文输入法下的“:”)“,”为非法字符(应改为英文输入法下的“,”)L2为未定义符号(应检查标号为L2的指令)第2行未定义符号第6行非法字符图1-4源程序编译窗口单击“源文件”→“构建所有”(编译源程序),弹出源程序编译窗口如图1-4所示。若编译不出错,则自动生成目标代码文件(HEX格式);若编译出错,根据提示修改源程序并保存,直至编译成功。原因:图1-4中有未定义符号(symbolnotdefined)和非法字符(illegalcharacter)。解决办法:根据源程序编译窗口提示的信息修改源程序并保存,然后重新编译。提示:程序输入要在英文输入法下进行,否则会造成编译出错。3.8051CPUSourceCode源代码调试窗口信息使用Proteus自带汇编器(如ASEM51),它将产生SDI文件。当单步调试程序时,源代码窗口将出现SDI文件。8051CPUSourceCode源代码调试窗口按钮说明:全速运行单步执行,跳过子程序内部单步执行,进入子程序内部跳出子程序运行到选中指令行设置断点第2章单片机硬件和指令系统实验2.1数据存储器实验一、实验目的1.掌握片内数据存储器的地址分配。2.掌握对片内数据存储器进行数据读写的方法。3.掌握用Proteus调试汇编源程序的方法。二、实验预备知识8051的片内数据存储器共有256个单元,按其功能划分为两个部分:低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH)。低128单元按其用途划分为工作寄存器区(单元地址00H~1FH)、位寻址区(单元地址20H~2FH)、用户RAM区(单元地址30H~7FH)三个区域。如图2-1所示。高128单元是分配给特殊功能寄存器使用的,其中部分单元(单元地址能被8整除的)可以进行位寻址。如表2-1、2-2所示。三、实验内容通过执行程序中的相关指令,将有关数据写入工作寄存器区、位寻址区、数据缓冲区和特殊功能寄存器区各存储单元,观察当前在用工作寄存器组的选择与数据传送目标的对应关系、字节地址与位地址的区别、特殊功能寄存器的字节地址、程序计数器PC在执行指令中的作用。表2-18051单片机特殊功能寄存器表符号名称字节地址符号名称字节地址BB寄存器F0HSBUF串行数据缓冲寄存器99HACC累加器E0HTH1定时/计数器1(高字节)8DHPSW程序状态字D0HTH0定时/计数器0(高字节)8CHIP中断优先级控制寄存器B8HTL1定时/计数器1(低字节)8BHP3P3口锁存寄存器B0HTL0定时/计数器0(低字节)8AHIE中断允许控制寄存器A8HTMOD定时/计数器方式寄存器89HP2P2口锁存寄存器A0HPCON电源控制寄存器87HSCON串行口控制寄存器98HDPH数据指针高8位83HP1P1口锁存寄存器90HDPL数据指针低8位82HTCON定时/计数器控制寄存器88HSP堆栈指针81HP0P0口锁存寄存器80H17H17H10H18H0FH08H07H00H7FH30H工作寄存器区位寻址区用户RAM区(堆栈、数据缓冲区)1FH2FH77E7D7C7B7A79782EH77767574737271702DH6F6E6D6C6B6A69682CH67666564636261602BH5F5E5D5C5B5A59582AH575655545352515029H4F4E4D4C4B4A494828H474645444342414027H3F3E3D3C3B3A393826H373635343332313025H2F2E2D2C2B2A292824H272625242322212023H1F1E1D1C1B1A191822H171615141312111021H0F0E0D0C0B0A090820H0706050403020100R7R0第3组工作寄存器(R0~R7)R7R0第2组工作寄存器(R0~R7)R7R0第1组工作寄存器(R0~R7)R7R0第0组工作寄存器(R0~R7)图2-1片内RAM地址空间表2-2SFR中位地址分布表SFRMSB位地址/位定义LSB字节地址BF7F6F5F4F3F2F1F0F0HB.7B.6B.5B.4B.3B.2B.1B.0ACCE7E6E5E4E3E2E1E0E0HACC.7ACC.6ACC.5ACC.4ACC.3ACC.2ACC.1ACC.0PSWD7D6D5D4D3D2D1D0D0HCYACF0RS1RS0OV-PIPBFBEBDBCBBBAB9B8B8HPSPT1PX1PT0PX0P3B7B6B5B4B3B2B1B0B0HP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0IEAFAEADACABAAA9A8A8HEA--ESET1EX1ET0EX0P2A7A6A5A4A3A2A1A0A0HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0SCON9F9E9D9C9B9A999898HSM0SM1SM2RENTB8RB8TIRIP1979695949392919090HP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0TCON8F8E8D8C8B8A898888HTF1TR1TF0TR0IE1IT1IE0IT0P0878685848382818080HP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0四、实验参考程序参考程序1:工作寄存器区的数据传送地址机器码源程序注释检查数据ORG0000H;表示程序从地址0000H存放0000H7811MOVR0,#11H;将立即数11H送到寄存器R0中(H)=11H0002H7922MOVR1,#22H;将立即数22H送到寄存器R1中(H)=22H0004H7A33MOVR2,#33H;将立即数33H送到寄存器R2中(H)=33H0006H7B44MOVR3,#44H;将立即数44H送到寄存器R3中(H)=44H0008H75D010MOVPSW,#10H;使工作寄存器工作于2区(H)=10H000BH7855MOVR0,#55H;将立即数55H送到寄存器R0中(H)=55H000DH7966MOVR1,#66H;将立即数66H送到寄存器R1中(H)=66H000FH7A77MOVR2,#77H;将立即数77H送到寄存器R2中(H)=77H0011H7B88MOVR3,#88H;将立即数88H送到寄存器R3中(H)=88HEND;程序结束参考程序2:位寻址区的数据传送地址机器码源程序注释检查数据ORG0100H;表示程序从地址0100H存放0100H7520F0MOV20H,#0F0H;将字节地址20H单元中的内容置F0H(20H)=0103HD200SETB00H;将位地址00H单元中的内容置1(H)=10105HD201SETB01H;将位地址01H单元中的内容置1(H)=10107HD202SETB02H;将位地址02H单元中的内容置1(H)=10109HD203SETB03H;将位地址03H单元中的内容置1(H)=1010BHC204CLR04H;将位地址04H单元中的内容置0(H)=0010DHC205CLR05H;将位地址05H单元中的内容置0(H)=0010FHC206CLR06H;将位地址06H单元中的内容置0(H)=00111HC207CLR07H;将位地址07H单元中的内容置0(H)=0(20H)=0113H7590FFMOVP1,#0FFH;将字节地址90H单元中的内容置FFH(90H)=0116HC290CLR90H;将P1.0置0(H)=00118HD290SETB90H;将P1.0置1(H)=1011AHC291CLR91H;将P1.1置0(H)=0011CHD291SETB91H;将P1.1置1(H)=1END;程序结束参考程序3:数据缓冲区和特殊功能寄存器区的数据传送地址机器码源程序注释检查数据ORG0200H;表示程序从地址0200H存放0200H753099MOV30H,#99H;将立即数99H送到30H中(30H)=(PC)=0203H7545AAMOV45H,#0AAH;将立即数AAH送到45H中(45H)=(PC)=0206H758150MOVSP,#50H;将立即数50H送到堆栈指针SP中(H)=50H(PC)=0209H7460MOVA,#60H;将立即数60H送到累加器A中(H)=60H(PC)=020BH759055MOVP1,#55H;将立即数55H送到P1口中(H)=55H(PC)=020EH75D090MOVPSW,#90H;使工作寄存器工作于2区、进位位CY置1(H)=90H(PC)=0211H901234MOVDPTR,#1234H;将立即数1234H送到数据指针DPTR中(H)=12H(H)=34HEND;程序结束五、实验步骤1.新建设计文件。单击“文件”→“新建设计”,在弹出的“CreateNewDeign”对话框中选择“DEFAULT”模板后单击“OK”。2.设置图纸尺寸。单击“系统”→“设置图纸尺寸”,在弹出的“SheetSizeConfiguration”对话框中选择“A4”图纸尺寸或自定义尺寸后单击“OK”3.设置网格。单击“查看”→“网格”,网格显示(再次单击,网格不显示)。单击“查看”→“Snapxxth”(或Snapx.xin),可改变网格单位,默认为“Snap0.1in”。4.保存设计文件。单击“文件”→“保存设计”,在弹出的“SaveISISDesignFile”对话框中指定文件夹(如D盘电信061××文件夹)、输入文件名“reg”并选择保存类型为“DesignFiles”后单击“保存”。5.选取元器件。从Proteus元器件库中选取元器件AT89C51(单片机)。单击模式选择工具栏“元件”按钮,单击器件选择按钮“P”,在弹出的“PickDevices”(选取元器件)对话框的“Keywords”(关键字)栏中输入元器件名称“AT89C51”(也可以是分类、小类、属性值),与关键字匹配的元器件“AT89C51”显示在元器件列表(Results)中。双击选中的元器件“AT89C51”,便将所选元器件“AT89C51”加入到对象选择器窗口。单击“6.放置元器件。单击对象选择器窗口的元器件“AT89C51”,元器件名“AT89C51”变为蓝底白字,预览窗口显示“AT89C51”元器件;单击方向工具栏按钮可实现元器件的左旋、右旋、水平和垂直7.编辑元器件。单击模式选择工具栏“编辑”按钮,进入编辑状态。右击(或单击)元器件,该元器件变为红色表明被选中,鼠标指针放到被选中的元器件上,按住左键拖动,将鼠标移到编辑区某一位置松开,即完成元器件的移动。鼠标指针放到被选中的元器件上右击,单击弹出的快捷菜单中的方向工具栏按钮可实现元器件的旋转和翻转。右击被选中的元器件,可删除该元器件。被选中的元器件外单击,可撤销选中。8.放置终端。单击模式选择工具栏“终端”按钮,单击对象选择器窗口的电源终端“POWER”,该终端名背景变为蓝色,预览窗口显示该终端;单击方向工具栏“左旋转”按钮,电源终端逆时针旋转90°;将鼠标指针移到编辑区某一位置,单击一次就可放置一个终端。9.连线。单击命令工具栏“实时Snap(捕捉)”按钮,实时捕捉有效(再次单击,实时捕捉无效),当鼠标指针接近引脚末端时,该处会自动出现一个小方框“□”,表明可以自动连接到该点。按图2-3所示单击要连线的元器件起点和终点,完成连线。10.添加源程序。单击“源文件”→“增加/移除源文件”,在弹出的“Add/RemoveSourceCodeFiles”对话框中单击“CodeGenerationTool”栏下拉列表框按钮,选择“ASEM51”(51汇编器);单击新建源文件按钮“NEW”,在弹出的“NewSourceFile”对话框中指定文件存放的文件夹,输入文件名“reg.asm”,单击“打开”,在单击打开的对话框中的按钮“是”;确认“SourceCodeFilename”栏下拉列表框中显示文件名为“reg.asm”,单击“OK”第一次使用该软件时,要按1.211.编辑源程序。单击“源文件”→“reg.asm”,在“SourceEditor”源文件编辑器中输入并编辑源程序,确认无误后,单击保存按钮。12.编译源程序。单击“源文件”→“构建所有”,弹出源程序编译窗口如图2-2所示。若编译不出错,则自动生成目标代码文件(格式为HEX);若编译出错,根据提示修改源程序并保存,直至编译成功。参见1.2.2节介绍的编译出错的解决办法。图2-2源程序编译窗口13.加载目标代码文件。先右击后单击单片机“AT89C51”,在弹出的“EditComponent”对话框中单击“ProgramFile”栏的打开按钮,在弹出的“SelectFileName”对话框找到刚才编译生成的HEX文件,单击“打开“按钮,完成HEX文件加载;同时将“ClockFrequency”栏中的频率设为12MHz,单击“OK”,完成加载目标代码文件14.仿真。单击仿真工具栏“单步运行”按钮,进入单步运行状态。单击“调试”→“8051CPURegisters”,单击“调试”→“8051CPUSFRMemory”,单击“调试”→“8051CPUInternal(IDATA)Memory”,单击“调试”→“8051CPUSourceCode”,分别打开工作寄存器窗口、特殊功能寄存器窗口、片内数据存储器窗口和源代码调试窗口。单击源代码调试窗口“单步执行”按钮一次,可执行一条指令;通过各调试窗口观察每条指令执行后数据处理的结果,以加深对硬件结构和指令的理解。程序调试窗口如图2-3所示。图2-3程序调试窗口六、实验分析与总结1.在实验过程中,要注意选取元器件、编辑元器件、连接电路、源程序编辑、汇编编译和加载目标代码文件的操作步骤。2.单步运行程序过程中,要随时查看相关单元的内容,并与理论分析结果对比;发现错误,应及时查找原因。七、实验思考1.程序计数器PC在专用寄存器区有无地址?2.位寻址区(单元地址20H~2FH)能否作一般RAM区使用?2.2数据传送指令实验一、实验目的1.掌握内部RAM和外部RAM数据传送指令的用法。2.掌握数据交换和堆栈指令的特点。3.掌握用Proteus调试汇编源程序的方法。二、实验预备知识寄存器间接寻址是把指定寄存器的内容作为操作数地址,该地址所指定的单元内容作为操作数。这种寻址方式用于访问内部RAM和外部RAM。工作寄存器R0和R1作为间接寻址寄存器,可寻址内部RAM的低位地址的128B单元内容。栈操作指令PUSH和POP,用堆栈指针SP进行寄存器间接寻址。数据指针DPTR作为间接寻址寄存器,寻址外部RAM的64KB空间。单片机开机后自动将堆栈指针SP指向07H,即(SP)=07H,一般在使用中可将堆栈设置在片内RAM的30H~7FH的范围内,栈底是固定的,栈顶是浮动的,所有的信息存入和取出都是在浮动的栈顶进行的。这个堆栈具有FILO(先进后出)的功能。堆栈的栈顶由堆栈指针SP指出其栈顶的位置。入栈(PUSH)的过程是堆栈指针SP先加1,并指向栈顶的上一个空单元,然后再将直接地址(direct)寻址的单元内容压入当前SP所指示的堆栈单元中。出栈(POP)的过程是先将堆栈指针(SP)所指示的内部RAM(栈顶)单元中内容送入由直接地址寻址的单元中,然后再将栈指针(SP)减1并回送SP。三、实验内容将数据传送类指令分成四类,分别编写四个小程序,以完成数据在不同区域内的传送、交换。1.参考程序1内部RAM数据传送(1)将立即数#12H、#34H、#56H分别传送至内部RAM区40H、R2、A中。(2)将内部RAM区40H、R2、A中的内容分别传送至R0、内部RAM区50H和12H中。2.参考程序2外部RAM数据传送(1)将立即数#2000H、#30H、#55H分别传送至DPTR、R1、A中。(2)将A中的内容分别传送至外部RAM区2000H、30H中。3.参考程序3数据交换(1)将立即数#65H、#60H、#24H分别传送至内部RAM区60H、R0、A中。(2)将A中高低半字节交换。(3)将A中的内容与内部RAM区60H中的内容交换。(4)将A中的内容与R0中的内容交换。4.参考程序4堆栈操作(1)将栈底指针调至30H,并将立即数#20H、#40H分别传送至内部RAM区70H、A中。(2)将内部RAM区70H、A中的内容分别压入堆栈区中。(3)将堆栈区中的内容分别弹出至A、内部RAM区50H中。四、实验参考程序参考程序1:内部RAM数据传送地址机器码源程序检查数据ORG0000H0000H754012MOV40H,#12H(40H)=0003H7A34MOVR2,#34H(R2)=0005H7456MOVA,#56H(A)=(P)=0007HA840MOVR0,40H(R0)=0009H8A50MOV50H,R2(50H)=000BHF6MOV@R0,A(12H)=(R0)=END参考程序2:外部RAM数据传送地址机器码源程序检查数据ORG0100H0100H902000MOVDPTR,#2000H(DPTR)=0103H7930MOVR1,#30H(R1)=0105H7455MOVA,#55H(A)=(P)=0107HFOMOVX@DPTR,A(2000H)=(DPTR)=0108HF3MOVX@R1,A(30H)=(R1)=END参考程序3:数据交换地址机器码源程序检查数据ORG0200H0200H756065MOV60H,#65H(60H)=0203H7860MOVR0,#60H(R0)=0205H7424MOVA,#24H(A)=0207HC4SWAPA(A)=0208HC6XCHA,@R0(60H)=(A)=(R0)=0209HC8XCHA,R0(A)=(R0)=END参考程序4:堆栈操作地址机器码源程序检查数据ORG0300H0300H758130MOVSP,#30H(SP)=0303H757020MOV70H,#20H(70H)=0306H7440MOVA,#40H(A)=0308HC070PUSH70H(SP)=(31H)=030AHC0EOPUSHACC(SP)=(32H)=030CHD070POP70H(SP)=(70H)=030EHD0EOPOPACC(SP)=(A)=END五、实验步骤步骤与2.1节相似,本章以后各节只列出几大步骤和每个步骤与2.1节不同的要求,不再详细叙述具体操作过程。1.新建设计文件、设置图纸尺寸、设置网格、保存设计文件。文件名为“mov”。2.选取元器件。从Proteus元器件库中选取元器件AT89C51(单片机)。3.放置元器件、编辑元器件、放置终端、连线。按图2-3所示放置元器件并连线。4.添加源程序、编辑源程序、编译源程序。源文件名为“mov.asm”。5.加载目标代码文件。“ClockFrequency”栏中的频率要设为12MHz。6.仿真。单击仿真工具栏“单步运行”按钮,进入单步运行状态。分别打开工作寄存器窗口、特殊功能寄存器窗口、片内数据存储器窗口和源代码调试窗口。单击源代码调试窗口“单步执行”按钮一次,可执行一条指令,通过各调试窗口观察每条指令执行后数据处理的结果,以加深对硬件结构和指令的理解。六、实验分析与总结1.将每执行一条指令后的理论分析结果与实验中检查的数据进行比较,若不一致,请查找原因。2.分析堆栈指针SP内容和堆栈区内的内容与压入或弹出指令的对应关系。七、实验思考1.MOV、MOVX和MOVC三类指令有什么区别? 2.编写一个将内部RAM区40H中的内容传送至外部RAM区3000H中的程序。2.3算术运算指令实验一、实验目的1.掌握单字节的加减法指令的使用。2.掌握单字节的乘除法指令的使用。3.掌握用Proteus调试汇编源程序的方法。二、实验预备知识执行加法指令时,当和的第3位或第7位有进位时,分别将AC、CY标志位置1;否则为0。如果第6位向第7位有进位而第7位没有向前进位,或者如果第7位向前有进位而第6位没有向第7位进位,OV=1,否则OV=0。该操作也影响标志位P。执行减法指令时,如果第7位有借位,则CY置1,否则清0。若第3位有借位,则AC置1;否则清0。两个带符号数相减,还要考查OV标志,若OV为1,表示差数溢出,即破坏了正确结果的符号位。该操作也影响标志位P。执行乘法指令时,若乘积大于0FFH,则OV置1,否则清0(此时B的内容为0)。CY总是被清0。该操作也影响标志位P。执行除法指令时,若除数(B)=00H,则结果无法确定,OV置1。CY总是被清0。该操作也影响标志位P。三、实验内容将算术运算指令分成两类,分别编写两个小程序,以完成数据的加减法、乘除法运算。1.参考程序1加减法运算(1)将立即数#B5H、#36H、#89H分别传送至内部RAM区40H、R2、A中。(2)将内部RAM区40H中的内容与A中的内容相加,然后再与R2中的内容相加,结果存放至内部RAM区50H中。(3)将A中的内容与内部RAM区40H中的内容相减,结果存放至内部RAM区60H中。2.参考程序2乘除法运算(1)将立即数#75H、#31H分别传送至内部RAM区15H、33H中。(2)将内部RAM区15H单元的内容与33H单元的内容相乘。(3)将乘积的高8位和低8位分别传送至内部RAM区31H、30H中。(4)将内部RAM区15H单元的内容除以33H单元的内容。(5)将商和余数分别传送至内部RAM区41H、40H中。四、实验参考程序参考程序1:加减法运算地址机器码源程序检查数据ORG0050H0050H7540B5MOV40H,#0B5H(40H)=0053H7A36MOVR2,#36H(R2)=0055H7489MOVA,#89H(A)=(P)=0057H2540ADDA,40H(A)=(CY)=(AC)=(40H)=0059H3AADDCA,R2(A)=(CY)=(AC)=(R2)=005AHF550MOV50H,A(50H)=(A)=005CH9540SUBBA,40H(A)=(CY)=(AC)=(40H)=005EHF560MOV60H,A(60H)=(A)=END参考程序2:乘除法运算地址机器码源程序检查数据ORG0150H0150H751575MOV15H,#75H(15H)=0153H753331MOV33H,#31H(33H)=0156HE515MOVA,15H(A)=0158H8533FOMOVB,33H(B)=015BHA4MULAB(A)=(B)=(OV)=015CHF530MOV30H,A(30H)=015EH85F031MOV31H,B(31H)=0161HE515MOVA,15H(A)=0163H8533FOMOVB,33H(B)=0166H84DIVAB(A)=(B)=(OV)=0167HF541MOV41H,A(41H)=0169H85F040MOV40H,B(40H)=END五、实验步骤1.新建设计文件、设置图纸尺寸、设置网格、保存设计文件。文件名为“add”。2.选取元器件。从Proteus元器件库中选取元器件AT89C51(单片机)。3.放置元器件、编辑元器件、放置终端、连线。按图2-3所示放置元器件并连线。4.添加源程序、编辑源程序、编译源程序。源文件名为“mov.asm”。5.加载目标代码文件。“ClockFrequency”栏中的频率要设为12MHz。6.仿真。单击仿真工具栏“单步运行”按钮,进入单步运行状态。分别打开工作寄存器窗口、特殊功能寄存器窗口、片内数据存储器窗口和源代码调试窗口。单击源代码调试窗口“单步执行”按钮一次,可执行一条指令;通过各调试窗口观察每条指令执行后数据处理的结果,以加深对硬件结构和指令的理解。六、实验分析与总结1.将每执行一条指令后的理论分析结果与实验中检查的数据进行比较,若不一致,请查找原因。2.分析不带进位的加法指令和带进位的加法指令的区别。七、实验思考1.BCD码调整指令能否直接用于减法指令后面?2.执行除法指令时,若寄存器B的内容为0,结果会如何?2.4逻辑运算指令实验一、实验目的1.掌握逻辑“与”、“或”、“异或”指令的使用。2.掌握移位指令的使用。3.掌握用Proteus调试汇编源程序的方法。二、实验预备知识逻辑“与”、“或”、“异或”指令的功能是将两个指定的操作数按位进行逻辑“与”、“或”、“异或”。目的操作数为累加器A时,指令的操作影响标志位P。执行累加器A循环左移指令(RLA)一次,累加器A中的数据乘2;执行累加器A循环右移指令(RRA)一次,累加器A中的数据除2。指令的操作不影响PSW标志位。累加器A带进位循环左移指令(RLCA)和累加器A带进位循环右移指令(RRCA)的操作影响标志位P和CY。三、实验内容将逻辑运算指令分成两类,分别编写两个小程序,以完成数据的逻辑运算、移位。1.参考程序1逻辑“与”、“或”、“异或”运算(1)将立即数#E6H、#82H分别传送至P0、A中。(2)将P0的高4位保留、低4位屏蔽,A的高4位屏蔽、低4位保留。(3)将P0与A进行逻辑“或”运算。(4)将P0与立即数#AAH进行逻辑“异或”运算。2.参考程序2移位操作(1)将立即数#88H、#03H分别传送至内部RAM区60H、70H中。(2)将内部RAM区60H单元的内容除以4,结果传送至内部RAM区61H。(3)将内部RAM区70H单元的内容乘4,结果传送至内部RAM区71H。(4)将内部RAM区60H单元的内容带进位右移两次,结果传送至内部RAM区62H。(5)将内部RAM区70H单元的内容带进位左移两次,结果传送至内部RAM区72H。四、实验参考程序参考程序1:逻辑“与”、“或”、“异或”运算地址机器码源程序检查数据ORG0030H0030H7590E6MOVP1,#0E6H(P1)=0033H7482MOVA,#82H(A)=(PSW.0)=0035H5390FANLP1,#0FOH(P1)=0038H540FANLA,#0FH(A)=(PSW.0)=003AH4290ORLP1,A(P1)=003CH6390AAXRLP1,#0AAH(P1)=END参考程序2:移位操作地址机器码源程序检查数据ORG0130H0130H756088MOV60H,#88H(60H)=0133H757003MOV70H,#03H(70H)=0136HE560MOVA,60H(A)=0138H03RRA(A)=0139H03RRA(A)=013AHF561MOV61H,A(61H)=013CHE570MOVA,70H(A)=013EH23RLA(A)=013FH23RLA(A)=0140HF571MOV71H,A(71H)=0142HE560MOVA,60H(A)=0144HD3SETBC(CY)=0145H13RRCA(A)=0146H13RRCA(A)=0147HF562MOV62H,A(62H)=0149HE570MOVA,70H(A)=014BHD3SETBC(CY)=014CH33RLCA(A)=014DH33RLCA(A)=014EHF572MOV72H,A(72H)=END五、实验步骤1.新建设计文件、设置图纸尺寸、设置网格、保存设计文件。文件名为“logic”。2.选取元器件。从Proteus元器件库中选取元器件AT89C51(单片机)。3.放置元器件、编辑元器件、放置终端、连线。按图2-3所示放置元器件并连线。4.添加源程序、编辑源程序、编译源程序。源文件名为“logic.asm”。5.加载目标代码文件。“ClockFrequency”栏中的频率要设为12MHz。6.仿真。单击仿真工具栏“单步运行”按钮,进入单步运行状态。分别打开工作寄存器窗口、特殊功能寄存器窗口、片内数据存储器窗口和源代码调试窗口。单击源代码调试窗口“单步执行”按钮一次,可执行一条指令;通过各调试窗口观察每条指令执行后数据处理的结果,以加深对硬件结构和指令的理解。六、实验分析与总结1.将每执行一条指令后的理论分析结果与实验中检查的数据进行比较,若不一致,请查找原因。2.分析不带进位的移位指令和带进位的移位指令的区别。七、实验思考1.执行求反指令CPLA后,程序状态寄存器的奇偶标志位P有无变化?2.P3口作为输入口时,要想保留高4位数据到累加器A中,应如何编程?2.5控制转移指令实验一、实验目的1.掌握无条件转移指令和条件转移指令的使用。2.掌握调用指令和返回指令的使用。3.掌握用Proteus调试汇编源程序的方法。二、实验预备知识无条件转移指令是指当程序执行到该指令时,程序无条件转移到指令所提供的地址处执行。条件转移指令是指根据给出的条件进行判断,若条件满足,则程序转向由偏移量确定的目的地址处去执行;若条件不满足,程序将不会转移,而是按原顺序执行。相对偏移量为一个带符号的8位数,偏移范围为-128~+127,共256个字节。累加器A判零转移指令不改变累加器A的内容,也不影响任何标志位。减1非零转移指令又称循环转移指令,该指令是把源操作数减1,结果送回到源操作数中去。并判断结果是否为0,若不为0则转移到目标地址,继续执行循环程序;若为0则终止循环程序的执行。把具有一定功能的公用程序段作为子程序,在主程序中采用调用指令(LCALL)调用子程序,子程序的最后一条指令为返回主程序指令(RET)。长调用指令(LCALL)的执行过程是先将(PC)+3→PC,指向下一指令地址;再将把下一指令的16位地址(断点)压入堆栈,先压入PC0~7低位地址,后压入PC8~15高位地址,(SP)+2→SP;最后将指令中给出的16位目标地址addr16送入程序计数器PC。从而使程序转向目标地址addr16去执行被调用的子程序。子程序返回指令(RET)的作用是将栈顶的断点地址送PC,于是,子程序返回主程序继续执行。三、实验内容根据控制转移类指令的不同用途,分别编写二个小程序,以完成程序在不同条件下的转移、调用。1.参考程序1累加器A判零转移指令和无条件转移指令(1)将立即数#01H传送至A中。(2)判断A中的内容,若(A)=00H,则顺序执行MOVA,#02H指令;若(A)≠00H,则转移执行DECA指令;循环往复。2.参考程序2减1非零转移指令、调用指令和返回指令(1)将片内RAM20H~22H单元全部送入立即数#11H。(2)调用子程序将立即数#55H传送至片内RAM22H单元中。(3)返回主程序将立即数#55H分别传送至片内RAM20H、21H单元中。四、实验参考程序参考程序1:累加器A判零转移指令和无条件转移指令地址机器码源程序检查数据ORG0000H0000H4130AJMPMAINORG0230H0230H7401MAIN:MOVA,#01H(A)=0232H7003L1:JNZL20234H7402MOVA,#02H(A)=0236HOONOP(A)=0237H14L2:DECA(A)=0238H80F8SJMPL1END参考程序2:减1非零转移指令、调用指令和返回指令地址机器码源程序检查数据ORG0000H0000H020320LJMPMAINORG0320H0320H758130MAIN:MOVSP,#30H(SP)=0323H7820MOVR0,#20H(R0)=0325H7A03MOVR2,#03H(R2)=0327H7411MOVA,#11H(A)=0329HF6LP:MOV@R0,A(20H)=(21H)=(22H)=032AH08INCR0(R0)=(R2)=032BHDAFCDJNZR2,LP032DH00NOP032EH120340LCALLL1(SP)=(31H)=(32H)=0331H752055MOV20H,#55H(20H)=(21H)=(22H)=0334H752155MOV21H,#55H(20H)=(21H)=(22H)=0337H80FESJMP$ORG0340H0340H752255L1:MOV22H,#55H(20H)=(21H)=(22H)=0343H22RETEND五、实验步骤1.新建设计文件、设置图纸尺寸、设置网格、保存设计文件。文件名为“jump”。2.选取元器件。从Proteus元器件库中选取元器件AT89C51(单片机)。3.放置元器件、编辑元器件、放置终端、连线。按图2-3所示放置元器件并连线。4.添加源程序、编辑源程序、编译源程序。源文件名为“jump.asm”。5.加载目标代码文件。“ClockFrequency”栏中的频率要设为12MHz。6.仿真。单击仿真工具栏“单步运行”按钮,进入单步运行状态。分别打开工作寄存器窗口、特殊功能寄存器窗口、片内数据存储器窗口和源代码调试窗口。单击源代码调试窗口“单步执行”按钮一次,可执行一条指令;通过各调试窗口观察每条指令执行后数据处理的结果,以加深对硬件结构和指令的理解。六、实验分析与总结1.将每执行一条指令后的理论分析结果与实验中检查的数据进行比较,若不一致,请查找原因。2.分析累加器A判零转移指令和减1非零转移指令的偏移量的区别。七、实验思考1.若将参考程序1中的指令JNZL2改为CJNEA,#00H,L2,参考程序1的执行结果如何?2.若将参考程序2中的指令LCALLL1改为ACALLL1,该指令的机器码如何翻译?2.6位操作指令实验一、实验目的1.掌握位传送、运算、置位、清零指令的使用。2.掌握位转移指令的使用。3.掌握用Proteus调试汇编源程序的方法。二、实验预备知识在进行位寻址时,PSW中的进位标志CY作为位处理机的累加器,称为位累加器。位寻址空间包括以下两部分:片内RAM中位寻址区——即字节地址20H~2FH单元中连续的128个位,位地址为00H~7FH。部分特殊功能寄存器中的可寻址位——凡SFR中字节地址能被8整除的特殊功能寄存器都可以进行位寻址。位地址为80~F7H,一共83位。三、实验内容根据位操作类指令的不同用途,分别编写二个小程序,以完成程序在不同情况下的位传送、运算、置位、清零、转移。1.参考程序1位传送、运算、置位、清零指令(1)将ACC.0、B.0置1,P2.1、P3.2置0。(2)编程计算逻辑方程P1.7=ACC.0∧(B.0∨P2.1)∧/P3.2。2.参考程序2位转移指令(1)将立即数#87H、#5BH、#11H分别传送至P1、A、内部RAM区20H和24H中。(2)判断P1中的内容,若(P1.3)=0,则顺序执行JBCACC.3,L2指令;若(P1.3)≠0,则转移执行MOV20H,P1指令。(3)判断A中的内容,若(ACC.3)=0,则顺序执行MOV20H,P1指令;若(ACC.3)≠0,则转移并把ACC.3位置0,然后执行MOV20H,A指令。四、实验参考程序参考程序1:位传送、运算、置位、清零指令地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论