第三章单片机常用软件_第1页
第三章单片机常用软件_第2页
第三章单片机常用软件_第3页
第三章单片机常用软件_第4页
第三章单片机常用软件_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

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

文档简介

《微机原理及应用》教学课件适用2010级32+16学时第三章单片机常用软件主讲教师:

司杨水利电力学院电工教研室第三章单片机常用软件第一节Keil简介第二节Proteus基础第三节汇编程序简介1寻址方式2数据传送指令3算术运算指令4逻辑运算指令5转移控制指令6位处理指令第一节Keil简介一、Keil及其运行二、在Keil中编写程序三、在Keil中调试程序返回1.1、KeilC51基本知识KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。1.2、KeilC51软件开发结构

图2-1C51工具包整体结构uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经BL51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。1.3、KeilC51工具包的安装

在Windows下直接运行软件安装包,然后选择安装目录即可。安装完成之后在安装目录下会有下面目录:文件夹内容C:\KEIL\C51\ASM宏汇编器的源模板及包含文件。C:\KEIL\C51\BINµVision3/C51工具链的可执行文件。C:\KEIL\C51\Examples例程C:\KEIL\C51\FlashMonFlashMonitor的配置文件及预配置版本。C:\KEIL\C51\HLPµVision3/C51在线帮助文档.C:\KEIL\C51\INCC编译器的包含文件.C:\KEIL\C51\ISD51针对ISD51在系统调试器的文件及预配置版本。C:\KEIL\C51\LIB运行时库及CPU启动文件。C:\KEIL\C51\Mon51Monitor-51配置文件(针对传统8051设备)。C:\KEIL\C51\Mon390Monitor-390配置文件(针对DallasContiguous模式).C:\KEIL\C51\RtxTiny2RTX51微型版本2实时操作系统。1.4、KeilC51功能及使用简介

1.4、KeilC51功能及使用简介

1.4.1ProjectWorkspace-Files源文件创建完后,可以在工程里加入这个文件。在工程里加入源文件,µVision3提供了几种方式,例如:可以在ProjectWorkspace–Files页面选择要加入的文件组,单击鼠标右键打开局部菜单,选择AddFiles选项会打开一个标准的文件对话框,在对话框里选择上面创建的MAIN.C源文件。1.4、KeilC51功能及使用简介

1.4.1ProjectWorkspace-Group为CPU配置文件创建一个新文件组是一种好方法。例如:用户在Project–>Components,Environment,Books…对话框中,使用New(Insert)按钮可在目标工程中为CPU配置文件加入一个名为StartupCode的文件组。通过使用按钮AddFiles还可将其它源文件加入到工程里。1.4、KeilC51功能及使用简介

1.4.1ProjectWorkspace-CPU寄存器在在ProjectWorkspace->Regs页中,列出了CPU的寄存器,选中指定寄存器并单击,或按F2键便可以出现一个编辑框,从而可以改变此寄存器的值。1.4、KeilC51功能及使用简介

1.4.1ProjectWorkspace-手册在设备数据库里选择一款CPU后,可以在ProjectWorkspace–Books里打开相应的工具集以及设备的用户手册。大部分用户手册是工具集的一部分,可以在Keil开发工具的CD-ROM里获得。1.4、KeilC51功能及使用简介

1.4.1ProjectWorkspace-函数可以在ProjectWorkspace–函数里查看到各个文件中的函数。1.4、KeilC51功能及使用简介

1.4.1ProjectWorkspace-Edit-Configuration-Templates工程窗口-Templates页中显示用户定义的文本块(模板)。先按Ctrl+空格键然后输入模板名字的几个首字母或者单击模板页面中的条目,可在用户源文件中插入一个模板。用户在Edit-Configuration-Templates对话框中可以定义模板。1.4、KeilC51功能及使用简介

1.4.2OutputWindow-编译工程在Options–Target中包含了创建一个新应用程序所需的所有设置。接下来的工作是编译链接工程,单击工具栏中BuildTarget图标可编译链接工程文件。如果源程序中存在语法错误,μVision则会在OutputWindow->Build窗口中显示出错误和警告信息。双击提示信息所在行,就会在μVision3编辑窗口里打开并显示相应的出错源文件,光标会定位在该文件的出错行上,以方便用户快速定位出错位置。1.4、KeilC51功能及使用简介

1.4.2OutputWindow-调试命令µVision3支持大量命令,可以通过OutputWindow–CommandLine

键入命令。根据命令的功能,可以将这些命令分为如下几类:断点命令允许创建和删除断点。当遇到一个特定指令时可以使用断点停止程序执行或执行µVision3命令或用户函数。普通命令可以执行一些混合的调试操作。存储器命令显示和改变存储器内容1.4、KeilC51功能及使用简介

1.4.2OutputWindow-文本搜索文本搜索对话框可实现指定文件中的文本搜索。在µVisionIDE中,选择Edit->FindinFiles,将弹出下图所示的文本搜索对话框。1.4、KeilC51功能及使用简介

1.4.3MemoryWindow内存窗口-通过内存窗口可以查看存储器内容。内存窗口可以显示不同的存储域内容,最多可将四个不同的存储域显示在不同的页中,窗口中的右键菜单可以选择输出格式。1.4、KeilC51功能及使用简介

1.4.4Watch&CallStackWindow(观测及调用栈窗口)Watch窗口用于查看和修改程序中变量的值,并可列出当前函数调用关系。在程序运行结束后Watch窗口中的内容自动更新。可能通过设置View->

PeriodicWindowUpdate来实现程序运行时实时更新变量的值。1.4、KeilC51功能及使用简介

1.4.5

Workspace(工作区)用于文件编辑、反汇编输出和一些调试信息显示。1.4、KeilC51功能及使用简介

1.4.5

PeripheralDialogs(外设对话框)帮助设计者观察片内外围接口的工作状态。1.5、KeilC51菜单说明

菜单命令、工具栏、快捷键

菜单栏提供如下菜单功能:编辑、工程维护、开发工具配置、程序调试、外部工具控制、窗口选择及操作及在线帮助等。工具栏按钮可以快速执行µVision3的命令。状态栏StatusBar显示了编辑和调试信息。在ViewMenu中可以控制工具栏和状态栏是否显示。通过键盘快捷键可以快速执行µVision3的命令,快捷键可以通过菜单命令Edit–Configuration-ShortcutKey来进行配置。1.5、KeilC51菜单说明

1.5.1状态栏StatusBar

显示了编辑和调试信息。DebugChannel:显示了当前的调试工具;ExecutionTime:显示了执行时间;CursorPosition:显示光标位置;EditorandKeyboardStatusInformation显示:CAP:Caps键有效NUM:Num键有效SCRL:Scroll键有效OVR:

Insert键有效R/WorR/O:显示了当前编辑的文件的属性。R/W表示可读写、R/O表示只读。

1.5、KeilC51菜单说明

1.5.2File菜单和File命令

1.5、KeilC51菜单说明

1.5.3Edit菜单和Edit命令

1.5、KeilC51菜单说明

1.5.3Edit菜单和Edit命令

1.5、KeilC51菜单说明

1.5.3Edit菜单和Edit命令

1.5、KeilC51菜单说明

1.5.3Edit菜单和Edit命令

选择文本命令在µVision3中,可以通过按住SHIFT并按住相应的光标键选择文本。例如Ctrl+RightArrow可以将光标移动到下一个单词,Shift+Ctrl+RightArrow可以选择从光标的当前位置到下一个单词的开始.同样可以使用鼠标选择文本.1.5、KeilC51菜单说明

1.5.4View菜单(视图)其他工具条工具窗口都可以在这里打开和关闭。1.5、KeilC51菜单说明

1.5.4View菜单(视图)其他工具条工具窗口都可以在这里打开和关闭。1.5、KeilC51菜单说明

1.5.4View菜单(视图)PerformanceAnalyzer。可以在µVision3中使用性能分析仪将目标程序调整为最佳性能。可以指定程序中想要分析的部分,性能分析仪会在程序执行期间收集它们的执行统计信息。针对所分析程序部分,可提供最快的、最慢的和平均的执行时间等信息。最多可以分析多达256个代码域,性能分析仪会记录每块代码被执行的次数及每个区域所消耗的全部时间。区域就是一个简单的地址域。它通常以一个函数的第一条指令为起点,以此函数最后一条指令为终点。然而,也可以指定目标程序中仅包含几条指令的一个区域。随着程序的运行,性能分析的结果在性能分析仪窗口中显示。1.5、KeilC51菜单说明

1.5.4View菜单(视图)逻辑分析仪。µVision3逻辑分析仪可以将指定的变量或VTREGs值的变化以图形方式表示出来。1.5、KeilC51菜单说明

1.5.5Project菜单和Project命令1.5、KeilC51菜单说明

1.5.6Debug菜单和Debug命令1.5、KeilC51菜单说明

1.5.6Debug菜单和Debug命令1.5、KeilC51菜单说明

1.5.7Flash菜单Flash菜单可以配置和运行Flash编程设备。通过ConfigureFlashTools,可选择并被配置编程工具,细节请参考配置Flash菜单小节。Flash菜单下的条目如下表所示:1.5、KeilC51菜单说明

1.5.8Peripherals菜单外设菜单,可以模拟中断,串口,定时器和IO口的操作。1.5、KeilC51菜单说明

1.5.9Tool菜单Tool菜单能够配置和运行GimpelPC-Lint及自定义程序。通过Tools-CustomizeToolsMenu…,用户程序可以添加到此菜单下。详情请查阅RunExternalPrograms。Tool菜单下的条目如下表所示:(Gimpel软件公司的PC-Lint可以检查应用程序所有模块的C语法和语意错误。PC-Lint可以标记可能的错误或不一致的、定位不清晰的、错误的或不合理的代码。因此,PC-Lint可以有效的提高目标应用程序的调试效率。)1.5、KeilC51菜单说明

1.5.10SVCS菜单SVCS菜单可以配置及添加SVCS命令。详情请查阅UsingtheSVCSMenu.Tool菜单下的条目如下表所示:(µVision3为软件版本控制系统SVCS(SoftwareVersionControlSystems)提供了一个可编程的接口,可为IntersolvPVCS、MicrosoftSourceSafe、MKSSourceIntegrity和RationalClearCase提供了预配置模板文件。µVision3集成的CVS(ConcurrentVersionsSystem)是一个遵守GNUGPL协议的软件版本控制系统,可以自由使用,详细信息请参考应用笔记179:µVision3可集成的CVS

。)1.5、KeilC51菜单说明

1.5.11Window菜单1.5、KeilC51菜单说明

1.5.12Help菜单第二节Proteus基础一、Proteus及其运行二、用Proteus绘制电路图三、Proteus中程序的装载四、Proteus虚拟仪器的使用五、Proteus与Keil的联合调试返回第三节汇编程序简介51系列单片机指令集含有111条指令每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:单字节(49条);双字节(46条);3字节(16条)每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:单周期(64条);双周期(45条);4周期(2条)返回ASM-51指令的格式方括符[]表示可选项标号代表指令所在地址,1-8个字母/数字,“:”结尾操作码就是指令功能助记符,指令实体目的操作数源操作数注释,以“;”开头[标号:]操作码[目的操作数][,源操作数][;注释]一、51单片机指令的寻址方式寄存器寻址立即寻址寄存器间接寻址直接寻址变址寻址(基址寄存器+变址寄存器间接寻址)相对寻址位寻址寻址方式:指令按地址获得操作数的方式七种寻址方式,一条指令可能含多种寻址方式1.寄存器寻址从寄存器中读取操作数或存放操作数进寄存器例:MOVA,B;(A)←(B)

MOV30H,R0

;(30H)←(R0)

MOVA,R1;(A)←(R1)2.立即寻址操作数直接就出现在指令中例:MOVA,#64H;(A)←立即数64H

ADDA,#05H

;(A)←(A)+立即数05H注意:符号“#”表明其后跟的是立即数,

立即数——就是数字量本身。3.寄存器间接寻址寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数注意:1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。2)符号“@”表示“在…”,其含义与读音皆同“at”。例:[MOVR1,#30H;(R1)←立即数30H

]

[MOVR1,#30H;(R1)←立即数30H

]

MOV@R1,#0FH;(30H)←立即数0FH

MOVA,@R1;(A)←((30H))=#0FH4.直接寻址指令中直接给出了操作数所在单元的地址或名称例:MOVR1,1FH

;(R1)←(1FH)

MOV30H,4AH

;(30H)←(4AH)在本单片机中规定:访问特殊功能寄存器SFR只能采用直接寻址方式。例如:MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)

MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)

MOVB,30H;(B)←(30H)SFR的地址见教材相同相同在本单片机中访问特殊功能寄存器SFR只能采用直接寻址方式的原因:SFR分布在80H~0FFH范围内,而52系列单片机有256字节的片内RAM,其中的80H~0FFH的RAM与SFR所占地址重叠。MOVA,90H

等效于MOVA,

P1属直接寻址MOVA,@R0

;[事先已知(R0)=#90H]

执行的操作:A←(90H)

属寄存器间接寻址,随意写的指令如:MOVA,85H

则是非法的!于是规定:80H~0FFH范围内的RAM只能用寄存器间接寻址方式,而SFR只能用直接寻址方式。从而解决了地址冲突的问题。例如:5.变址寻址也称为:基址寄存器+变址寄存器间接寻址以16位的地址指针寄存器DPTR或16位的PC寄存器为基址寄存器,以累加器A为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。P47例:[设:A中已存有#A4H,DPTR中已存有#1234H]

MOVCA,@A+DPTR;(A)←((A)+(DPTR))操作:将A4H+1234H=12D8H单元中的数放进累加器A6.相对寻址当前PC值加上指令中规定的偏移量rel,构成实际的操作数地址例:SJMPrel

操作:跳转到的目的地址

=

当前16位PC值+rel注意:1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128—+127(80H—7FH),在实际编程中,“rel”

通常用标号代替7.位寻址指令中直接给出了操作数所在的位地址。例:CLRP1.0

;(P1.0)←0

SETBACC.7

;(ACC.7)←1

CPLC

;(C)←NOT(C)注意:

1)位地址里的数据只可能是一个

0

1

2)有的位地址十分明确,如

P1.0,ACC.7等,

有的位地址则“不太明确”,如:

[MOVA,17H;(A)←(17H),17H是字节地址]

MOVACC.0,17H;(ACC.0)←(17H),这里ACC.0

是位地址所以该指令中的17H是22H单元的第7位8.存储器配置(片内RAM)89C51片内RAM128字节(00H—7FH)89C52片内RAM256字节(00H—0FFH)00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM区普通RAM区位寻址区工作寄存器区SFR分布在80H-FFH其中92个位可位寻址80HFFH89C51128字节89C52256字节只能直接寻址只能寄存器间接寻址片内RAM中有128个位可按位寻址的位,位地址:00H—7FH分布在:20H—2FH单元;另外,在SFR中还有92个位可按位寻址00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM区普通RAM区位寻址区工作寄存器区27H22H21H20H26H24H25H23H28H07060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A191827262524232221202F2E2D2C2B2A292837363534333231303F3E3D3C3B3A393847464544434241402FH7F7E7D7C7B7A7978位地址总共128个可按位寻址的位单元地址17D7D6D5D4D3D2D1D0二、数据传送指令按指令的功能分类,可分为5大类:数据传送类(29条);算术运算类(24条)逻辑运算及移位类(24);控制转移类(17条)位操作类(布尔操作)

(17条)返回内部存储器间传送:(MOV——16条)外部数据存储器与累加器间传送:

(MOVX——4条)程序存储器向累加器传送:(MOVC——2条)数据交换:(XCH,XCHD,SWAP——5条)堆栈操作:(PUSH,POP——2条)数据传送类指令(5种/29条)Acc累加器Direct直接寻址@Ri间接寻址Rn寄存器#data立即数Rn:R0—R7@Ri:@R0,@R1#data:8位立即数#data16:16位立即数direct:直接地址rel:8位带符号偏移量1.MOV指令内部存储器间传送指令(16条):

MOV类指令的操作方向总是后面的操作数指向前面的操作数!例:MOVA,30H——(A)(30H)

2.MOVX指令外部数据存储器与累加器间传送(4条):MOVX类指令可在累加器与以@DPTR或@Ri所代表的外部RAM

之间进行数据传送。例如:

MOVXA,@DPTR——(A)((DPTR))MOVXA,@Ri——(A)

((Ri))MOVX@DPTR,A——((DPTR))(A)MOVX@Ri,A——((Ri))(A)程序存储器向累加器传送指令(2条):

MOVCA,@A+DPTR

MOVCA,@A+PC

——通常称为查表指令,寻址方式属:

“基址寄存器

+变址寄存器间接寻址”3.MOVC指令@A+DPTR或@A+PC指向程序存储器中的某单元。拟传送给累加器ACC的数据就是程序中事先写进去的表格数据。这些表格数据往往用伪指令DB,DW等定义在程序中。4.数据交换指令数据交换指令(5条):XCHA,direct(字节互换)XCHA,@Ri(字节互换)XCHA,Rn(字节互换)(A)(direct)[或((Ri)),或(Rn)]XCHDA,@Ri

累加器Acc的低4位与((Ri))的低4位互换,各自的高4位不变SWAPA

累加器Acc的低4位与自身的高4位互换堆栈操作指令(2条):PUSH——压栈指令POP——弹栈指令√堆栈区由特殊功能寄存器堆栈指针SP

管理√堆栈区可以安排在RAM区任意位置,一般不安排在工作寄存器区和可按位寻址的RAM区,而是放在RAM区的靠后的位置√堆栈总是指向栈顶√通常PUSH与POP两条指令成对使用5.堆栈指令例如:设(A)=7BH;(35H)=11H

并且知道(SP)=60HPUSHACC;(61H)#7BHPUSH35H;(62H)(35H)

即:(62H)#11HPOPACC;(A)(62H)

即:(A)#11HPOP5AH;(5AH)(61H)

即:(5AH)#7BH三、算术运算指令算术运算类指令(6种/24条)加法运算:

(ADD——4条)带进位加法运算:

(ADDC——4条)带借位减法运算:

(SUBB——4条)加1/减1操作:

(INC,DEC——9条)单字节乘/除法运算:(MUL,DIV——2条)十进制调整:

(DAA——1条)返回加法运算:

(ADD——4条)带进位加法运算:

(ADDC——4条)带借位减法运算:

(SUBB——4条)所有的加法(ADD)、带进位加法(ADDC)、带借位减法(SUBB)运算都是以

A为一个加数或被减数,最终结果也存进

A。加法(ADD)、带进位加法(ADDC)以及带借位减法(SUBB)运算中,如果产生了进位或借位,将自动对PSW中的Cy标志位置“1”

。带进位加法(ADDC):(A)(A)+(Cy)+(第二操作数)带借位减法(SUBB):(A)(A)-(Cy)-(第二操作数)加1/减1操作:

(INC,DEC——9条)INC,DEC与用加/减法指令做加1/减1操作不同之处在于INC、DEC不影响标志位.单字节乘/除运算:(MUL,DIV——2条)两个单字节数的乘/除法运算只在A与B之间进行。MULAB:(A)与(B)相乘,积为16位数,(A)积的高8位;(B)积的低8位DIVAB:(A)除以(B),结果用2字节表示,(A)商的整数部分;(B)余数BCD码是指“用二进制表达的十进制数”。如:十进制数20可以用二进制数00010100B表示;也可以用十六进制数14H表示;还可以用BCD码00100000B或20H表示。4个二进制位就可以表示一位BCD码:0000~1001可表示十进制数(BCD数)0~9;

8个二进制位就可以表示两位压缩的BCD码:00000000~10011001表示00~99。十进制调整:

(DAA——1条)用于两个BCD码之间的相加,这条指令只能跟在ADD或ADDC之后若(A)3~09或(AC)=1则(A)3~0(A)3~0+6;若(A)7~49或(CY)=1则(A)7~4(A)7~4+6;例:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。MOVA,#65HADDA,#58H

DAA结果:(A)=23H(CY)=1指令“DAA”

完成的操作:65011001015801011000

+13181926601100110若(A)3~09或(AC)=1则(A)3~0(A)3~0+6;若(A)7~49或(CY)=1则(A)7~4(A)7~4+6;又如:两个十进制数“39”与“58”相加,根据常识,显然其和应当为“97”。MOVA,#39HADDA,#58H

DAA结果:(A)=97H(CY)=039001110015801011000

+0723960110指令“DAA”

完成的操作:四、逻辑运算指令逻辑运算及移位类指令(5种/24条)

逻辑与运算:(ANL——6条)逻辑或运算:(ORL——6条)逻辑异或运算:(XRL——6条)累加器清零/取反:(CLR,CPL——2条)累加器移位操作:(RL,RLC,RR,RRC—4条)返回逻辑与(ANL),逻辑或(ORL),逻辑异或(XRL):累加器清零/取反操作(CLR,CPL——2条)CLRA——对累加器清零1Byte1

个TmCPLA——对累加器按位取非1Byte1

个Tm指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11逻辑与ANL用于清0或者保留某些位:例:ANLA,#0FH;则(A)=0AH(已知累加器A中已存有数:9AH)逻辑或ORL用于置1或者保留某些位:例:ORLA,#0FH;则(A)=9FH逻辑异或XRL用于取反或者保留某些位:例:XRLA,#0FH;则(A)=95H(A)10011010#0FH00001111

95H10010101累加器移位操作:(RL,RLC,RR,RRC——4条)RLA左环移累加器A累加器ACy累加器ACy累加器ARRCA

带进位位右环移RRA右环移RLCA带进位位左环移五、转移控制指令控制转移类指令(4种/17条)此类指令改变程序的执行顺序——改变当前PC值无条件转移:(LJMP,AJMP,SJMP,JMP——4条)条件转移(判断跳转):(JZ,JNZ,CJNE,DJNZ——8条)子程序调用及返回:(LCALL,ACALL,RET,RETI——4条)空操作:(NOP——1条)“耗时”一个机器周期。

donothing!返回无条件转移:LJMP,AJMP,SJMP,JMP——4条LJMPaddr16长跳转指令

——可在64K范围内跳转AJMPaddr11绝对跳转指令

——可在指令所在的2K范围内跳转SJMPrel相对跳转指令

——可在当前PC-128与+127范围内跳转JMP@A+DPTR间接长跳转指令

——可在以DPTR为基址

+

A为偏移量

之和所指向的64K程序范围内跳转条件转移:JZ,JNZ,CJNE,DJNZ——8条JZrelJNZrel——根据Acc的内容是否为0决定是否跳转DJNZdirect,relDJNZRn,rel——将direct(或Rn)里的内容减1,结果不等于0就跳转;等于0则不跳转继续往下走。CJNEA,

#data,relCJNEA,

direct,relCJNE@Ri,#data,relCJNERn,

#data,rel

——将A(或@Ri,或Rn)与#data(或direct)相比较,其值不相等就跳转;相等则不跳转,继续往下走。LCALLaddr16子程序长调用指令——可在64K范围内调用子程序子程序调用及返回:(LCALL,ACALL,RET,RETI——4条)ACALLaddr11子程序绝对调用指令——可在指令所在的2K范围内调用子程序RET子程序返回指令——子程序结束并返回调用的下一条指令RETI中断服务子程序返回指令——中断结束/返回被打断处的下一条指令六、位处理指令位操作类指令(17条)位操作类指令以位为单位进行逻辑运算及操作,可分为4种:位传送:(MOV——2条)位清零/置位:(CLR,SETB——4条)位逻辑与/或/非运算:(ANL,ORL,CPL——6条)位条件转移:(JC,JNC,JB,JNB,JBC——5条)返回位传送指令(2条):

MOVC,bit——(C)(bit)

MOVbit,C——(bit)(C)

注:bit表示位地址位清零/置位指令(4条):

CLRbit(或C)——

(bit或C)“0”

SETBbit(或C)——

(bit或C)“1”

位逻辑与/或/非指令(6条):

ANLC,bit(或/bit)

ORLC,bit(或/bit)

CPLbit(或C)

注:“/bit”表示对bit位先取反然后再参加运算判位条件转移指令(5条):

JCrel——(Cy)=“1”就跳转;否则不跳转JNCrel——(Cy)“1”就跳转;否则不跳转JBbit,rel

——(bit)=“1”就跳转;否则不跳转JNBbit,rel

——(bit)“1”就跳转;否则不跳转JBCbit,rel

——(bit)=“1”就先将其清零再跳转;否则,不动此位也不跳转。任务一:控制一盏灯点亮任务二:红灯周期性地亮/灭JOB3:CLRP1.1;P1.1清“0”

,亮绿灯REDO:SETBP1.3;将P1.3置“1”CHECK:JNBP1.3,CHECK;检测传感器是否被阻断LOOP:…………;有入侵者,报警!

温馨提示

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

评论

0/150

提交评论