MCS-51系列单片机的指令系统和时序.ppt_第1页
MCS-51系列单片机的指令系统和时序.ppt_第2页
MCS-51系列单片机的指令系统和时序.ppt_第3页
MCS-51系列单片机的指令系统和时序.ppt_第4页
MCS-51系列单片机的指令系统和时序.ppt_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

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

文档简介

西华大学电气信息学院 郑海春,1,第三章 MCS-51系列单片机的指令系统和时序,本章内容 掌握常用指令的格式和功能。 掌握指令执行时所包含的操作。 了解指令的长度和执行时间。,西华大学电气信息学院 郑海春,2,3.1 MCS-51单片机的时序 3.2 指令系统的概述 3.3 寻址方式 3.4 数据传送类指令 3.5 算术操作类指令 3.6 逻辑操作和循环移位指令 3.7 控制转移类指令 3.8 位操作指令 3.9 汇编语言程序设计 3.10 C51程序设计需要注意的地方,本 章 目 录,西华大学电气信息学院 郑海春,3,3.1 MCS-51单片机的时序,时序图中时间参数的描述: 时钟周期; 机器周期; 指令周期。,西华大学电气信息学院 郑海春,4,时钟周期 T:时序中最小的时间单位,由外接晶体来决定。其值为石英振荡器频率fosc的倒数。 例如:在单片机外接12MH的晶体,则单片机的系统时钟频率为12M, 时钟周期为1/12s.,T,西华大学电气信息学院 郑海春,5,机器周期:完成一个基本操作所需要的时间。 机器周期由12个时钟周期构成,为了描述方便将其分6个状态(S1-S6),每个状态又分为P1和P2两拍。 既:S1P1,S1P2,S2P1,S2P2,S3P1,S3P2 S6P1,S6P2,T,S2,S6,S5,S4,S3,机器周期,P1,S1,P2,西华大学电气信息学院 郑海春,6,指令周期:既执行一条指令所需要的时间, 它是时序图中最大的时间单位。 在MCS-51系统中,不同的指令它所包含的机器周期数不同.它们分别是: 1,单机器周期指令; 2,双机器周期指令; 3,四机器周期指令。,西华大学电气信息学院 郑海春,7,假设:我们使用一个12M的晶体震荡器,那么 一个机器周期为:1/12s121=1s; 两个机器周期为:1/12s122=2s; 四个机器周期为:1/12s124=4s。 可见指令的运算速度与它所包含的机器周期数有关。机器周期数越少,执行的速度就越快(MCS-51单片机的指令系统除了乘、除法指令为四个机器周期外,其余都是单周期和双周期指令),西华大学电气信息学院 郑海春,8,3.2 指令系统的概述,MCS-51共有111条指令,其长度(字节数)和执行时间(指令周期)各不相同。,西华大学电气信息学院 郑海春,9,指令的字节数:MCS-51单片机的指令系统有: 单字节(占用1个ROM存储单元 1个 字节); 双字节(占用2个ROM存储单元 2个字节); 三字节(占用3个ROM存储单元 3个字节)。,ROM,ROM,ROM,单字节指令,双字节指令,三字节指令,思考:指令的字节数与指令执行的时间有关系吗?,西华大学电气信息学院 郑海春,10,操作码,操作数或操作数地址,由操作码和操作数(或操作数地址)两部分构成。,举例:MOV A , #0FFH ADD A , R0,指令格式:,西华大学电气信息学院 郑海春,11,按照指令的功能,可将111条指令分为五大类 1,数据传送类指令 2,算术操作类指令 3,逻辑操作和循环移位指令 4,控制转移类指令 5,位操作指令,指令分类:,西华大学电气信息学院 郑海春,12,1,数据传送类指令:完成数据的传送。 【特点】: 有8位、16位两种传送指令; 除了以累加器A为目标的传送对奇偶位PSW.P有影响外,其余的传送类指令对PSW无影响。,西华大学电气信息学院 郑海春,13,2,算术操作类指令: 用于操作数的加、减、乘、除运算。 【特点】:多数情况下:操作数之一在累加器A中,结果也保留在A中,运算结果要影响PSW(进位标志、奇偶和溢出标志等)。,西华大学电气信息学院 郑海春,14,3,逻辑操作和循环移位指令: 操作数之间的逻辑或、与、取反和异或等操作。 【特点】:多数情况下一个操作数在A中,结果也存于A。移位指令分为左移、右移和带进位和不带进位几种情况。逻辑类指令基本不影响PSW的内容。,西华大学电气信息学院 郑海春,15,4,控制转移类指令: 无条件转移; 条件转移; 调用和返回。 【 特点】:通过修改程序指针PC的内容,使CPU发生转移,从而改变程序的流向。这也是唯一一种间接修改程序指针PC的指令。,西华大学电气信息学院 郑海春,16,5,位操作指令: 位传送: 类似于字节传送,对 bit 进行传送。 位置位/复位: 对某一位置一或清零。 位运算:对某一位进行逻辑与、或、取反等。 位控条件转移:对某一位的状态进行判断,满足条 件转移。 【 特点】:按位操作。指令中所涉及到的地址皆为 “位地址” 。 这类指令基本不影响PSW的内容。,西华大学电气信息学院 郑海春,17,3.3 寻址方式,在指令的操作数位置上,用于表征、寻找操作数的方法定义为“寻址方式”。 正确的理解、掌握寻址方式,是学习、使用指令的关键。 在MCS-51单片机中,共使用了七种寻址方式。,西华大学电气信息学院 郑海春,18,1, 寄存器寻址 2,直接寻址 3,立即寻址 4,寄存器间接寻址 5,基址寄存器加变址寄存器间接寻址; 6,相对寻址; 7,位寻址。,七种寻址方式,西华大学电气信息学院 郑海春,19,3.3.1 寄存器寻址,操作数在寄存器中,因此指定了寄存器就能得到操作数。 可以使用R0R7 , A , B , DPTR寄存器符号名称。 例如: MOV A,R7 ;将寄存器R7中的内容送累加器A中 MOV 20H, A ;将寄存器A中的数据送内存20H单元,西华大学电气信息学院 郑海春,20,3.3.2 直接寻址,指令本身直接给出操作数在RAM中的地址。 MOV A,direct 其中:direct 为8位的RAM地址 如:MOV A,30H ;将RAM 30H单元数据送累加器A,西华大学电气信息学院 郑海春,21,n,n+1,30H,累加器A,MOV A,30H 指令直接寻址示意图,直接寻址的寻址范围: 片内RAM的低128个单元 特殊功能寄存器。除了以单元地址的形式外,还可用寄存器符号的形式给出(但A , B , DPTR寄存器除外)。,西华大学电气信息学院 郑海春,22,例如: MOV A,80H 与 MOV A,P0是等价的。,MOV A,SBUF ;串口数据缓冲器数据送A MOV IE,#00H ;初始化中断允许寄存器 MOV TH1,#0FEH ;为定时器1赋初值,INC A ;寄存器寻址方式 INC Acc ;直接寻址方式 INC 0E0H ;直接寻址方式,西华大学电气信息学院 郑海春,23,3.3.3 立即寻址,指令中直接含有所需要的 操作数 data。 MOV A,# data data称为8位或16位的“立即数” 使用 # 作前缀。如: MOV A,#30H ;将8位立即数送累加器A MOV DPTR,#2000H ;16位立即数送DPTR寄存器,【注意】: MOV A,#30H MOV A,30H 两者的区别。,西华大学电气信息学院 郑海春,24,3.3.4 寄存器间接寻址,指令中含有保存操作数地址的寄存器 Ri( i=0、1) MOV A ,Ri CPU首先从Ri找到操作数地址,然后再从该地址中找到操作数 x。,西华大学电气信息学院 郑海春,25,MOV R0,#30H ;立即数送R0寄存器 MOV A,R0 ;从RAM的30H单元取数送累加器A 【注意】 MOV A,R0 和 MOV A,R0 指令的区别。,西华大学电气信息学院 郑海春,26,使用寄存器间接寻址时应注意的几个问题:,使用间址指令前,往往要事先为间址寄存器Ri赋初值; 只能使用R0、R1作间址寄存器 ,即 R i (i=0、1)。,西华大学电气信息学院 郑海春,27,间址可访问片内RAM,也是访问片外RAM唯一的方式。 对于片内RAM使用Ri寄存器,寻址范围00HFFH; MOV A,Ri ;访问内部RAM单元(低128字节及5x系列高128字节) 对片外RAM可以: 使用Ri。寻址范围为00HFFH; 使用DPTR做间址寄存器。寻址范围为0000HFFFFH。 MOVX A,Ri ;访问外RAM单元,范围256字节MOVX A,DPTR ;访问外RAM单元,范围64K字节 【注意】: Ri、DPTR应事先装入地址。,西华大学电气信息学院 郑海春,28,间址方式不能访问SFR单元。如下面的程序: MOV R1 , #80H MOV A , R1 因为80H为SFR中P0的物理地址,又由于SFR只能采用直接寻址的方式访问。所以对于51系列单片机来说,上面的指令是错误的。但对于5x系列单片机来说,是正确的,表示访问的是内部RAM高128字节中地址号是80H的字节单元内容。,西华大学电气信息学院 郑海春,29,3.3.5 基址寄存器加变址寄存器间接寻址,指令使用DPTR或PC中的内容作为基地址,再与累加器A的变地址内容相加,其和作为操作数地址。如: MOVC A,A+PC ;PC内容为基地址与A的内容相加得 操作数地址,并将此操作数送A MOVC A,A+DPTR;DPTR内容为基地址与A的内容相加 得操作数地址并将此操作数送A 这是访问程序存储器ROM中数据的唯一的寻址方式。,西华大学电气信息学院 郑海春,30,基址加变址间接寻址方式用于查表操作,而数据表是建立在程序存储器ROM中。 【举例】:已知ROM中的0300H-0309H 为09的平方表, 试编程,求A中数据的平方(设A=02H)。 MOV DPTR,#0300H ;指针DPTR赋表头地址 MOVC A,A+DPTR ;从0302H单元取数4送A 这里,DPTR提供平方表的基地址,A的内容为偏移量。,西华大学电气信息学院 郑海春,31,基址加变址间接寻址示意图,02H,0300H,ALU,0302H,累加器A,DPTR,0300H (DPTR) + 02H (A) 0302H,MOVC A,A+DPTR,0300H,ROM,平方表,西华大学电气信息学院 郑海春,32,3.3.6 相对寻址,转移指令使用的一种寻址方式。 MCS-51单片机的指令系统中,有两类转移指令: 相对转移( 2个或3个字节); 绝对转移(3个字节)。 在绝对转移指令中,指令直接给出转移的目标地址(2字节地址)如:LJMP 0100H ,(即0100HPC); 而相对转移指令中给出一个转移地址的偏移量 rel。在执行中将当前PC值与偏移量rel(补码)相加,形成实际转移的目标地址。 SJMP rel 如:SJMP 03H 执行的操作是:PC +03H PC 即用rel修改PC值实现转移。,西华大学电气信息学院 郑海春,33,03H,2002H,ALU,2005H,累加器A,PC,2002H + 03H 2005H,操作码,偏移量,例如:SJMP 03H (机器码80H、03H),2000H,2002H,当前PC值,LOOP,由于偏移量 rel 为带符号的8位补码,所以控制程序转移的 范围为-128 +127 。,西华大学电气信息学院 郑海春,34,相对寻址使用中应注意的问题,与绝对寻址相比,相对寻址具有很好的“浮动性”,因此是编程人员普遍使用的一种寻址方式。 使用时,要注意3点: CPU进行地址计算时,PC取值是执行本条转移指令后的地址值。以上面的例子说明: 指令本身的首地址是2000H,执行完后变为2002H(因为本条转移指令长度为2)。 即PC+2+relPC (PC=2005H) 如果使用三字节的相对转移指令,则PC=PC+3+rel。,西华大学电气信息学院 郑海春,35, 偏移量的计算: 为了减少计算量,汇编程序允许使用“符号地址” 代替偏移量。如: SJMP NEXT 汇编程序在汇编时,自动计算rel,并将结果进行替换。 如果转移地址超过相对寻址的范围(-127+128)时, 在编译时系统会提示出错。这是编程者常见到问题。,西华大学电气信息学院 郑海春,36,绝对转移和相对转移的指令(部分),绝对转移:LJMP addr16 如:LJMP 2000H ;三个字节(OP、add H、addr L) LCALL 2100H ;子程序长调用 相对转移: SJMP rel ;无条件短转移 DJNZ Rn ,rel ;Rn-1Rn,Rn0则转 JZ rel ;A=0则转 JNZ rel ;A0则转 CJNE A , #data ,rel ;A data转,西华大学电气信息学院 郑海春,37,3.3.7 位寻址,指令的形式同直接寻址相似,不同的是:指令中的地址是“位地址”,而不是字节地址。 MOV C,bit 如:MOV C,20H ;将位地址为20H中的内容送Cy中.,西华大学电气信息学院 郑海春,38,作为嵌入式控制器,CPU更多的是处理“开关量”而不单纯是字节结构的数据。因此MCS-51在指令设计上刻意设计了大量的“布尔操作”即位操作,这为系统应用带来了很大的方便。,MCS-51 单片机 控制、检测 系统,驱动器,电动机,外设1,外设2,状态信号,状态信号,控制信号,西华大学电气信息学院 郑海春,39,在MCS-51的硬件设计中,在片内RAM区中还专门开辟了一个 “位寻址区”。布尔变量可以按位进行存储操作。 除了RAM中的位寻址区外,大多SFR都可以按位寻址,这对编程尤为重要。,西华大学电气信息学院 郑海春,40,寻址范围包括: 内部RAM中的位寻址区。位有两种表示方法,例如,40H;另一种是单元地址加上位,例如,(28H).0,指的是28H单元中的最低位。它们是等价的。 特殊功能寄存器中的可寻址位 可寻址位在指令中有如下4种的表示方法: a. 直接使用位地址。例如PSW.5的位地址为0D5H。 b. 位名称的表示方法。例如:PSW.5是F0标志位,可使用 F0表示该位。 c. 单元地址加位数的表示方法。例如 :(0D0H).5。 d. 特殊功能寄存器符号加位数的表示方法。例如:PSW.5。,西华大学电气信息学院 郑海春,41,3.4 数据传送类指令,1. 以累加器A为目的操作数的指令(Move to A),MOV A, data ; (A) data 立即数 MOV A, Rn ; n=07, (A) (Rn) MOV A, Ri ; i=0,1 , (A) (Ri) MOV A, direct ;A (direct) direct为内部RAM或SFR地址,MOV A, #20H ; (A) = 20H A的内容为20H,MOV A, 20H ; (A) = (20H) A的内容为20H中的内容,MOV A, R0 ;将R0的内容送到A去。( A) (R0),MOV A, Ri ;以Ri的内容为地址 ,把该地址中的内容送到A中去。(A) (Ri),西华大学电气信息学院 郑海春,42,例: MOV A,R0 ;(A)(R0) 这条指令表示从R0中找到源操作数所在单元的地址,把该地址中的内容传送给A(存放地址的寄存器称为间址寄存器).,A,34H 40H,R0 34H,设指令执行前 (R0)=34H (34H)=40H 执行指令后,(A)=40H,西华大学电气信息学院 郑海春,43,2. 以Rn为目的操作数的指令(Move to Register),MOV Rn, A ;(Rn ) (A) , n=07 MOV Rn , direct ;(Rn ) (direct) MOV Rn ,data ;(Rn ) data,功能:是把源操作数的内容送入当前一组工作 寄存器区的R0R7中的某一个寄存器。,西华大学电气信息学院 郑海春,44,3.以直接地址为目的操作数的指令 (Move to Direct),MOV direct, A ;(direct) (A) MOV direct, Rn ;(direct) (Rn) , n=07 MOV direct, Ri ;(direct) ( Ri ) , i=0,1 MOV direct, direct ;(direct) (direct) MOV direct, #data ;(direct) data,功能:把源操作数送入直接地址指出的存储单元。direct指的是内部RAM低128字节地址或SFR的地址。,西华大学电气信息学院 郑海春,45,4. 以寄存器间接地址为目的操作数指令(Move to indirect),MOV Ri, A ;(Ri) (A) , i=0,1 MOV Ri , direct ; (Ri) (direct) MOV Ri ,data ; (Ri) data,西华大学电气信息学院 郑海春,46,应用举例1,MOV P1, #0FEH ; 11111110B 可以使P1.0上的发光二极管点亮 MOV P1, #0F0H ; 11110000B 可以使P1口上的上面4个发光二极管点亮,西华大学电气信息学院 郑海春,47,8段数码管显示,MOV P1, #00H ; 显示 8. MOV P1, #0F8H ; 显示 7 MOV P1, #88H ; 显示 A,西华大学电气信息学院 郑海春,48,应用举例2,一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。,西华大学电气信息学院 郑海春,49,5. 16位数据传输指令,MOV DPTR, #data16;(DPTR) data16 DPTR-数据指针,为SFR中DPH、DPL MOV DPTR, #2010H 相当于 MOV DPH, #20H MOV DPL, #10H,西华大学电气信息学院 郑海春,50,6堆栈操作指令(作用:保存数据),MCS-51内部RAM中可以设定一个后进先出的区域称作堆栈.堆栈指针SP指出堆栈的栈顶位置。 (1)进栈指令 PUSH direct 先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内部RAM单元中。 例如:当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令 PUSH ACC ; (SP)+1=61HSP,(A)61H PUSH B ; (SP)+1=62HSP,(B)62H 结果:(61H)=30H,(62H)=70H,(SP)=62H,西华大学电气信息学院 郑海春,51,(2)出栈指令,POP direct SP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1. 例如: 当 (SP)=62H,(62H)=70H,(61H)=30H,执行下列指令: POP DPH ;(SP)DPH,(SP)-1SP POP DPL ;(SP)DPL,(SP)-1SP 结果:(DPTR)=7030H,(SP)=60H,西华大学电气信息学院 郑海春,52,7.累加器A与外部数据存储器传送指令(Move external RAM),MOVX A,DPTR ;(DPTR)A,读外部RAM/IO MOVX A,Ri ;(Ri)A,读外部RAM/IO MOVX DPTR,A;(A)(DPTR),写外部RAM/IO MOVX Ri,A ;(A)(Ri),写外部RAM/IO 功能:读外部RAM存储器或I/O中的一个字节,或把A中一个字节的数据写到外部RAM存储器或I/O中。 注意:RD*或WR*信号有效。采用DPTR间接寻址,高8位地址(DPH)由P2口输出,低8位地址(DPL)由P0口输出。采用Ri(i=0,1)间接寻址,可寻址片外256个单元的数据存储器。Ri内容由P0口输出。MOV后 “X”表示单片机访问的是片外RAM存储器或I/O。,西华大学电气信息学院 郑海春,53,8. 访问程序存储器指令(Move code byte to relatiove to DPTR to Acc),共两条,用于读程序存储器中的数据表格的指令,均采用基址寄存器加变址寄存器间接寻址方式。 (1) MOVC A,A+PC 以PC作基址寄存器,A的内容作为无符号整数和PC中的内容(下一条指令的起始地址)相加后得到一个16位的地址,该地址指出的程序存储单元的内容送到累加器A。 注意:PSEN*信号有效。 PC程序指针,指向下一条将要执行指令的地址。,西华大学电气信息学院 郑海春,54,例如:根据A的内容(09)查平方表。,西华大学电气信息学院 郑海春,55,(2) MOVC A,A+DPTR,例如 (DPTR)=8100H (A)=40H 执行指令 MOVC A,A+DPTR 本指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64K程序存储器中任意安排,一个表格可以为各个程序块公用。 两条指令是在MOV的后面加C,“C”是CODE的第一个字母,即代码的意思。,以DPTR作为基址寄存器,A的内容作为无符号数和DPTR的内容相加得到一个16位的地址,把由该地址指出的程序存储器单元的内容送到累加器A.,西华大学电气信息学院 郑海春,56,9字节交换指令(Exchange with A) XCH A,Rn XCH A,direct XCH A,Ri,例如: (A)=80H,(R7)=08H, 执行指令: XCH A,R7 ;(A)与(R7)互换 结果:(A)=08H,(R7)=80H,例:将片内RAM 60H单元与61H单元的数据交换。 XCH 60H, 61H 对吗?,西华大学电气信息学院 郑海春,57,10半字节交换指令 XCHD A,Ri 累加器的低4位与内部RAM低4位交换。例如: (R0)=60H,(60H)=3EH,(A)=59H 执行完 XCHD A,RO 指令,则(A)=5EH,(60H)=39H。,西华大学电气信息学院 郑海春,58,3.5 算术操作类指令,1. 加法指令 2. 带进位加法指令 3. 增1指令 4. 十进制调整指令 5. 带借位减法指令 6. 减1指令 7. 乘法指令 8. 除法指令,西华大学电气信息学院 郑海春,59,1加法指令 共有4条加法运算指令: ADD A,Rn ;(A)+(Rn)A,n=07 ADD A,direct ;(A)+(direct)A ADD A,Ri ;(A)+(Ri)A,i=0,1 ADD A,#data ; (A)+#dataA 一个加数总是来自累加器A,而另一个加数可由不同的寻址方式得到。结果总是放在A中。 对标志位的影响:,Cy进位位,Ac半进位位,OV溢出位,西华大学电气信息学院 郑海春,60,程序状态字寄存器PSW (1)Cy(PSW.7)进位标志位 (2)Ac(PSW.6) 辅助进位标志位,用于BCD码的十进制调整运算。 (3)F0(PSW.5)用户使用的状态标志位。 (4)RS1、RS0(PSW.4、PSW.3):4组工作寄存器区选择控制位1和位0。,西华大学电气信息学院 郑海春,61,RS1 RS0 所选的4组寄存器 0 0 0区(内部RAM地址00H07H) 0 1 1区(内部RAM地址08H0FH) 1 0 2区(内部RAM地址10H17H) 1 1 3区(内部RAM地址18H1FH) (5)OV(PSW.2)溢出标志位 (6)PSW.1位: 保留位,未用 (7)P(PSW.0)奇偶标志位 P=1,A中“1”的个数为奇数 P=0,A中“1”的个数为偶数,西华大学电气信息学院 郑海春,62,使用加法指令时,要注意累加器A中的运算结果对各个标志位的影响: (1)如果位7有进位,则置“1”进位标志Cy,否则清“0”Cy (2)如果位3有进位,置“1”辅助进位标志Ac,否则清“0”Ac (3)如果位6有进位,而位7没有进位,或者位7有进位,而位6没有,则溢出标志位OV置“1”,否则清“0”OV。,西华大学电气信息学院 郑海春,63,2带进位加法指令 标志位Cy参加运算,因此是三个数相加。 ADDC A,Rn ;(A)+(Rn)+CA,n=07 ADDC A,direct ;(A)+(direct)+CA ADDC A,Ri ;(A)+(Ri)+CA,i=0,1 ADDC A,#data ;(A)+#data+CA 对标志位的影响同ADD指令。,西华大学电气信息学院 郑海春,64,3增1指令 INC A INC Rn ;n=07 INC direct INC Ri ;i=0,1 INC DPTR 不影响PSW中的任何标志。,西华大学电气信息学院 郑海春,65,4十进制调整指令 用于对A中的数据进行压缩的BCD码十进制调整。 指令格式: DA A 两个BCD码按二进制相加之后,必须经本指令的调整 才能得到正确的压缩BCD码的和数。 压缩BCD码:96H 表示十位为9,个位为6. 特点:高低4位必须为09.,调整规则:从低4位开始运算 如果A中数的低4位是09,则不变。 如果低4位大于9,则低4位保留个位,向高4位进一; 如果A中数的高4位是09,则不变。 如果高4位大于9,则高4位保留个位,Cy置1. 例:(A)=9BH DA A ;(A)=01H Cy=1,西华大学电气信息学院 郑海春,66,例 (A)=56H,(R5)=67H,把它们看作为两个压缩的BCD数,进行BCD数的加法。执行指令: ADD A,R5 ;(A)=BDH DA A 结果为: (A)=23H,Cy=1 可见,56+67=123,结果是正确的。 5带借位的减法指令 SUBB A,Rn ;(A)-(Rn)- CyA,n=07 SUBB A,direct;(A)-(direct)- CyA SUBB A,Ri ;(A)-((Ri))- CyA, i=0,1 SUBB A,#data ;(A)-#data - CyA 从累加器A中的内容减去指定的变量和进位标志Cy的值,结果存在累加器A中。,西华大学电气信息学院 郑海春,67,如果位7需借位则置“1” Cy,否则清“0”Cy; 如果位3需借位则置“1”Ac,否则清“0”Ac; 如果位6需借位而位7不需要借位,或者位7需借位,位6不需借位,则置“1”溢出标志位OV,否则清“0”OV。,西华大学电气信息学院 郑海春,68,6减1指令 DEC A ;(A)-1A DEC Rn ;(Rn)-1Rn,n=07 DEC direct ;(direct)-1direct DEC Ri ;(Ri)-1(Ri),i=0,1 减1指令不影响标志位。 注意:无DEC DPTR指令。 7乘法指令 MUL AB ;ABBA 8除法指令 DIV AB ;A/BA(商),余数B,西华大学电气信息学院 郑海春,69,3.6 逻辑操作和循环移位指令,1. 简单逻辑操作指令 (1) CLR A 累加器A清“0”。不影响标志。 (2) CPL A 将累加器A的内容按位逻辑取反,不影响标志。 2左环移指令 RL A 例 (A)6CH = 0110 1100B RL A (A)0D8H = 1101 1000B,西华大学电气信息学院 郑海春,70,3带进位左环移指令 RLC A,例 (A)= 6CH = 0110 1100B,(C) =1 RLC A (A)=0D9H = 1101 1001B,西华大学电气信息学院 郑海春,71,4右环移指令 RR A,例(A)6CH = 0110 1100B RR A (A)36H = 0011 0110B,西华大学电气信息学院 郑海春,72,5带进位右环移指令,RRC A,例(A)6CH = 0110 1100B, (C) =1 RRC A (A)0B6H = 1011 0110B,西华大学电气信息学院 郑海春,73,6累加器半字节交换指令 SWAP A 将累加器A的高半字节(Acc.7Acc.4)和低半字节(Acc.3Acc.0)互换。 例 (A)=0C5H,执行指令: SWAP A 结果:(A)=5CH,西华大学电气信息学院 郑海春,74,7逻辑与指令 ANL A,Rn ; (A)(Rn)A,n=07 ANL A,direct ;(A)(direct)A ANL A,#data ;(A)#dataA ANL A,Ri ;(A)((Ri))A,i=01 ANL direct,A ;(direct)(A)direct ANL direct,#data ; (direct)#datadirect 例 (A)=07H,(R0)=0FDH,执行指令: ANL A,R0 结果:(A)=05H,西华大学电气信息学院 郑海春,75,8. 逻辑或指令 ORL A,Rn ;(A)(Rn)A ,n=07 ORL A,direct ;(A)(direct)A ORL A,#data ;(A) dataA ORL A,Ri ;(A)(Ri)A,i=0,1 ORL direct,A ;(direct)(A)direct ORL direct,#data ;(direct)#datadirect 例 (P1)=05H,(A)=33H,执行指令 ORL P1,A 结果:(P1)=37H,西华大学电气信息学院 郑海春,76,9逻辑异或指令 XRL A,Rn ;(A) (Rn)A XRL A,direct ;(A) (direct)A XRL A,Ri ;(A)((Ri))A ,i=0,1 XRL A,#data ;(A)#dataA XRL direct,A ;(direct)(A)direct XRL direct,#data ;(direct) #data direct 例 (A)=90H,(R3)=73H 执行指令: XRL A,R3 结果:(A)=E3H,西华大学电气信息学院 郑海春,77,3.7 控制转移类指令,1. 跳转指令,短跳指令 AJMP addr11 (PC)addr11,跳转范围2k 长跳指令 LJMP addr16 (PC)addr16,跳转范围64k,相对转移指令 SJMP rel,PC程序指针,指向下一条指令的地址。,地址,西华大学电气信息学院 郑海春,78,汇编语言格式: 地址 机器码 标号 源程序 注释 ORG 0000H ; 整个程序起始地址 0000 02 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 0030 C3 MAIN: CLR C ; MAIN为程序标号 0031 E6 LOOP: MOV A , R0 0032 37 ADDC A, R1 0033 08 INC R0 0034 D9 FB DJNZ R1, LOOP ;相对转移 0036 80 02 SJMP NEXT 0038 78 03 MOV R0, #03H 003A 18 NEXT: DEC R0 003B 80FE SJMP $ ;HERE: SJMP HERE END ; 结束标记,西华大学电气信息学院 郑海春,79,相对转移指令 SJMP rel,rel 机器码的相对偏移量,为8位补码 转移范围:前128后127字节 编程时,可用标号代替转移目的地址,rel 交给编译程序计算。 SJMP NEXT (或AJMP NEXT ,LJMP NEXT) NEXT: 原地踏步指令的指令: HERE: SJMP HERE 常写成: SJMP $,西华大学电气信息学院 郑海春,80,JMP A+DPTR 由A中8位无符号数与DPTR的16位数内容之和来确定。以DPTR内容作为基址,A的内容作变址。给A赋予不同的值,即可实现程序的多分支转移。,间接跳转指令,西华大学电气信息学院 郑海春,81,2. 条件转移指令,JZ rel ;(A)0,转移 JNZ rel ;(A)0,转移,西华大学电气信息学院 郑海春,82,3. 比较不相等转移指令,CJNE A,#data,rel ;(A)=#data,继续 (C)0 ;(A)#data,转 (C)0 ;(A)#data,转 (C)1 ;特点:只有时,(C)1 CJNE A,direct,rel CJNE Rn,#data,rel CJNE Ri,#data,rel,西华大学电气信息学院 郑海春,83,4. 减 1 不为 0 转移指令,DJNZ Rn,rel ;(Rn) (Rn )1 (Rn ) 0,转移 (Rn ) 0,继续 DJNZ direct,rel 例:延时子程序 delay: MOV R7, #03H delay0: MOV R6, #19H delay1: DJNZ R6, delay1 DJNZ R7, delay0 RET,西华大学电气信息学院 郑海春,84,5. 调用子程序指令,短调用指令 ACALL addr11 长调用指令 LCALL addr16,编程时,可用标号代替转移目的地址, addr11,addr16 交给编译程序计算。,西华大学电气信息学院 郑海春,85,7.中断返回指令,NOP,6. 子程序返回指令,8.空操作指令,RETI,RET,从堆栈弹出保存的PC地址,实现子程序返回。,西华大学电气信息学院 郑海春,86,1.数据位传送指令 MOV C,bit MOV bit,C 例 MOV C,06H ;(20H).6Cy 06H是内部RAM 20H字节位6的位地址。 MOV P1.0, C ;CyP1.0 2位变量修改指令 CLR C ;清“0”Cy CLR bit ;清“0”bit位 CPL C ;Cy求反,3.8 位操作指令,西华大学电气信息学院 郑海春,87,CPL bit ;bit位求反 SETB C ;置“1” Cy SETB bit ;置“1” bit位 这组指令将操作数指出的位清“0”、求反、置“1”。 3位变量逻辑与指令 ANL C,bit ;bitCyCy ANL C,/bit; ;/bit CyCy,西华大学电气信息学院 郑海春,88,4位变量逻辑或指令 ORL C,bit ORL C,/bit 5条件转移类指令 JC rel ;如果进位位Cy=1,则转移 JNC rel ;如果进位位Cy=0,则转移 JB bit,rel ;如果直接寻址位=1, ;则转移 JNB bit,rel ;如果直接寻址位=0, ;则转移 JBC bit,rel ;如果直接寻址位=1, ;则转移,并清0直接寻址位,西华大学电气信息学院 郑海春,89,3.9 汇编语言程序设计,3.9.1 汇编语言的格式及伪指令 3.9.2 基本程序设计方法 1 顺序程序设计 2 分支程序设计 3 循环程序设计 4 查表程序设计 5 子程序设计,西华大学电气信息学院 郑海春,90,3.9.1 汇编语言的格式及伪指令,西华大学电气信息学院 郑海春,91,汇编语言格式: 地址 机器码 标号 源程序 注释 ORG 0000H ; 整个程序起始地址 0000 02 00 30 LJMP MAIN ; 跳向主程序 ORG 0030H ; 主程序起始地址 0030 C3 MAIN: CLR C ; MAIN为程序标号 0031 E6 LOOP: MOV A , R0 0032 37 ADDC A, R1 0033 08 INC R0 0034 D9 FB DJNZ R1, LOOP ;相对转移 0036 80 02 SJMP NEXT 0038 78 03 MOV R0, #03H 003A 18 NEXT: DEC R0 003B 80FE SJMP $ ;HERE: SJMP HERE END ; 结束标记,西华大学电气信息学院 郑海春,92,伪指令,ORG(Origin) 定义程序的起始地址 END 程序结束标志 DB (Define Byte) 定义字节 DW (Define Word)定义字,低前、高后 EQU(Equate) 表达式赋值,西华大学电气信息学院 郑海春,93,伪操作指令例子,西华大学电气信息学院 郑海春,94,3.9.2 基本程序设计方法,顺序程序设计,例1:将存放在内部RAM 50H单元内的一位09的数转换成相应的ASCII码,再存入内部RAM 51H单元中。 程序清单如下: 若(50H)=05H ORG 0000H MOV A, 50H ;(A)=05H ADD A, #30H ;(A)=35H MOV 51H, A ;(51H)=35H END,西华大学电气信息学院 郑海春,95,例2:将存放在内部RAM 50H单元内的一个压缩的BCD码中的两位十进制数拆开,并转换成相应的ASCII码,再存入内部RAM 51H单元(高位),52H单元(地位)中。 若(50H)=45H 程序清单如下: ORG 0000H MOV R0,#52H MOV 52H,#00H MOV A,50H XCHD A,R0 ORL 52H,#30H SWAP A ADD A,#30H MOV 51H,A END,西华大学电气信息学院 郑海春,96,分支程序设计,1.单分支结构,例1:按下式编写程序, x为无符号数(128), 存在20H单元 结果y存放在21H单元。,ORG 0000H MOV A, 20H SUBB A, #40H JNC NEXT1 AJMP NEXT2 NEXT1:MOV B,#2 MUL AB NEXT2:MOV 21H, A END 最终结果存在21H中,基本分支程序: (1)若(A) 14H, 转NEXT, 否则继续执行,(A) 14H 相当于(A) 15H,CJNE A, #15H, LOOP LOOP: JC NEXT ,(A) 14H 相当于(A) 15H,CJNE A, #15H, LOOP LOOP: JNC NEXT ,CJNE A, #14H, LOOP LOOP: JNC NEXT ,CJNE A, #14H, LOOP LOOP: JC NEXT ,CJNE A,#data,rel;(A)=#data,继续 (C)0 (A)#data, 转 (C)0 (A)#data, 转 (C)1 特点:只有时(C)1,2.多分支结构,西华大学电气信息学院 郑海春,98,例:按下式编写程序,x为无符号数(128),存在30H单元,结果y存放在31H单元。,ORG 0000H MOV A,30H CJNE A,#21H,LOOP1 LOOP1: JC NEXT1 CJNE A,#40H,LOOP2 LOOP2: JNC NEXT2 MOV B,#2 MUL AB AJMP NEXT2 NEXT1: CPL A NEXT2: MOV 31H,A END,西华大学电气信息学院 郑海春,99,在实际的应用中,经常遇到的下图结构形式的分支转移程序的设计 。,3.散转结构,西华大学电气信息学院 郑海春,100,需根据某一单元的内容是0,1,n,来分别转向处理程序0,处理程序1,处理程序n。一个典型的例子就是当单片机系统中的键盘按下时,就会得到一个键值,根据不同的键值,跳向不同的键处理程序入口。对于这种情况,可用直接转移指令(LJMP或AJMP指令)组成一个转移表,然后把该单元的内容读入累加器A,转移表首地址放入DPTR中,再利用JMP指令实现分支转移。 例 根据寄存器R2的内容, 转向各个处理程序PRGX (X=0n)。 (R2)=0,转PRG0 (R2)=1,转PRG1 (R2)=n, 转PRGn,ORG 0000H JUMP1: MOV DPTR,#TAB MOV A,R2 ADD A,R2 ;乘2 JMP A+DPTR ORG 0100H TAB: AJMP PRG0 ;两个字节 AJMP PRG1 AJMP PRG2 ,西华大学电气信息学院 郑海春,101,例1:对内部RAM 50H开始的10个无符号数求和。 循环程序设计的特点: 1.设定循环初值; 2.确定循环体:重复执行的部分; 3.循环结束条件: (1)计数器:如DJNZ R7,rel (2)比较:如CJNE A,#data,rel,循环程序设计,西华大学电气信息学院 郑海春,102,源程序: ADD1: MOV R7,#10;循环次数 MOV R3,#0 ;存放结果的高8位 MOV R4,#0 ;存放结果的低8位 MOV R0,#50H ;求和的数据存放在RAM中的起始地址 LOOP: MOV A,R4 ADD A,R0 MOV R4,A;结果送回R4 CLR A ADDC A,R3;把进位位

温馨提示

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

评论

0/150

提交评论