nullnull第7讲(2010-09-27)
10-11第1学期第5周汽车单片机null1.指令系统简介;
2.寻址方式;
3.指令系统;
4.汇编语言程序设计;
5.程序设计实例;
第3章 MCS-51指令系统及汇编语言null复习 算术运算类指令
单字节的加、减、乘、除法指令,都是针对8位二进制无符号数。
执行的结果对Cy、Ac、OV 三种标志位有影响。
但增1和减1指令不影响上述标志。
主要包括
(1)加法(带、不带进位加法、加1、十进制调整);
(2)减法(带借位、减1);
(3)乘法;
(4)除法;
3.3.4 控制转移类指令 3.3.4 控制转移类指令 程序的顺序执行是由PC自动递增实现的,要改变程序的执行顺序,实现分支转向,必须通过强迫改变PC值的
来实现,这就是控制转移类指令的基本功能。
控制转移类指令可以控制程序根据不同情况执行不同的程序段,使单片机具有“智能化”功能。
51单片机有17条控制转移指令,包括无条件转移指令、条件转移指令及子程序调用返回指令。 1 无条件转移指令---------类似goto语句 1 无条件转移指令---------类似goto语句 (1)长转移指令LJMP
LJMP addr16 ; PC ← (PC)+2
; PC ← addr16
功能:指令执行后将16位地址(addr16)传送给PC,从而实现程序转移到新的地址开始运行。
说明:该指令可实现64KB范围的任意转移。 例题3-32包括:LJMP, STMP, AJMP,JMP,功能相同,只是转移范围不同。 null AJMP addr11 ;PC ← (PC)+2,
;PC10~0 ← addr11
功能:addr11的11位数取代该指令执行后程序指针PC的低11位PC10~0,程序根据PC值转移运行。
说明:
addr11为11位无符号数,程序转移最大范围为2KB。
(2)绝对转移指令AJMP,null SJMP rel ;PC ← (PC)+2+rel
功能:执行指令后,程序从当前位置向前或向后跳转rel个单元运行。
转移相对范围图是-128~+127H共256个单元;(3)相对转移指令SJMP 例子:
LOOP:SJMP LOOP
或 SJMP $
功能:程序原地踏步。教材错误例题3-33null JMP @ A+DPTR ;PC ← (A)+(DPTR)
功能:由A及DPTR的内容决定程序转移的目的地址。
说明:
①DPTR为基址寄存器,A为变址寄存器,为基址加变址寻址方式。
②把DPTR值固定,赋与A不同的值,则可实现程序的多分支转移(散转)。 64K(4)间接长转移指令JMP2. 条件转移指令---------类似if语句 2. 条件转移指令---------类似if语句 (1)累加器A判0转移指令
JZ rel ;若(A)=0,转移,PC ← (PC)+2+rel
;若(A)≠0,顺序执行。
JNZ rel ;若(A)≠0,转移,PC ← (PC)+2+rel
;若(A) =0,顺序执行。
所谓条件转移就是程序的转移是有条件的,当指令中规定的条则满足时,程序转移,否则程序不转移, 仍顺序执行。 nullJZ rel (b) JNZ rel
累加器A判零转移指令的执行过程null格式为:CJNE <被比较数>,<比较数>, rel
CJNE A,direct,rel ;累加器A与direct单元不等转移。
CJNE A,#data,rel ;累加器A与立即数data不等转移
CJNE Rn,#data,rel ;寄存器Rn与立即数data不等转移
CJNE @Ri,#data,rel ;间接寻址的片内RAM单元
与立即数data不等转移(2)比较不相等转移指令CJNE(三状态判断) 说明:①数据比较转移指令为三字节指令。
②利用该类指令不但可以实现程序的转移功能,也可以用以比较两数值的大小。
③指令执行后进位位Cy的状态,反映了被比较数与比较数相减有无借位。 null注意:1)比较按减法操作,目的操作数-源操作数;
2)影响标志位,但指令执行结果不影响任何操作数。例题3-34null DJNZ Rn,rel
DJNZ direct,rel 功能:寄存器Rn或direct单元内容减1,如果结果为零,则程序顺序执行;如果还没有减到0,则程序转移。
说明:这两条指令主要用于控制程序循环,又称循环指令。预先赋值Rn或RAM单元,以控制循环次数。 (3)减1不为0转移指令DJNZ ----类似for语句例题3-35null〔解〕分析:这是一个重复操作过程,可以使用循环指令。30H~7FH共50H个单元 ,循环次数为50H。
程序如下:
MOV R7,#50H
MOV R0,#30H
NEXT:MOV @R0,#0
INC R0
DJNZ R7,NEXT〔例〕 将内部RAM的30H~7FH单元清0。null 1)位传送指令;MOV C
2)位置位1、复位0指令;SETB,CLR
3)位逻辑指令;ANL,ORL,CPL非
4)位条件转移指令;JC,JNC,JB,
JNB,JBC3.3.5 位控制转移类指令 位操作指令 位操作指令 MOV C,bit ;C ← (bit)
MOV bit,C ;bit ← (C) 〔例〕 将20H位的内容送至50H位,并要求不改变C的状态。
〔解〕 MOV 10H,C ;保护C内容
MOV C,20H
MOV 50H,C
MOV C,10H ;恢复C内容 1 位传送指令MOV 说明:①多数位操作指令由C参与,C称位累加器。
②位操作指令寻址方式为位寻址。 位置位/复位指令 位置位/复位指令 1.位置位(置1)命令SETB
SETB C ;C ← 1
SETB bit ;bit ← 1
2.位复位(清0)命令
CLR C ;C ← 0
CLR bit ;bit ← 0说明:位置位/复位命令可以方便改变位空间的单个位的内容,十分灵活。 位运算指令 位运算指令 1.逻辑与指令ANL
ANL C,bit ;C ←(C)∧(bit)
ANL C,/bit ;C ←(C)∧(/bit)
2.逻辑或指令ORL
ORL C,bit ;C ← (C)∨(bit)
ORL C,/bit ;C ← (C)∨(/bit)
3.逻辑非(求反)指令CPL
CPL bit ; bit ← (/bit) null例1 当位地址(2AH)=1,(32H)=1,同时累加器中(ACC.7)=0时,进位位C=1,否则C清0,可编程序如下:
MOV C, 2AH ;(C)←(2AH)
ANL C, 32H ;(C)←(C)∧(32H)
ANL C, /ACC.7 ;(C)←(C)∧(/ACC.7)例2 写出位地址(2AH)=1和(32H)=1、累加器(ACC.7)=0相或的程序:
MOV C, 2AH ;(C)←(2AH)
ORL C, 32H ;(C)←(C)∨(32H)
ORL C, ACC.7 ;(C)←(C)∨(ACC.7)
结果:(C)=1。null程序如下:
MOV C, P0.1
ANL C, / P0.0
ORL C, / P0.2
MOV P1.7,C 〔例3〕 编程实现逻辑功能。写出例题3-37注解null位条件转移指令1. 判C转移指令JC rel ;若(C)=1,则(PC)←(PC)+2+rel
;若(C)=0,则(PC)←(PC)+2
JNC rel ;若(C)=0,则(PC)←(PC)+rel
;若(C)=1,则(PC)←(PC)+2(a) JC rel (b) JNC rel
图3.7 判C转移指令的执行过程
nullJB bit, rel ;若(bit)=1,则(PC)←(PC)+3+rel
;若(bit)=0,则(PC)←(PC)+3
JNB bit, rel ;若(bit)=0,则(PC)←(PC)+3+rel
;若(bit)=1,则(PC)←(PC)+3
JBC bit, rel ;若(bit)=1,则(PC)←(PC)+3+rel,而且(bit)清0
;若(bit)=0,则(PC)←(PC)+32. 判直接寻址位转移指令(a) JB bit, rel (b) JNB bit, rel (c) JBC bit, rel例题3-38 注意:
1.保护断点
断点是子程序调用指令的下一条指令首地址。将断点压入堆栈SP,执行完子程序,取出送PC。
2.建立子程序入口
子程序第一条指令首地址。送PC。
3.保护现场
调用子程序前,保护原程序寄存器、存储器内容。压入堆栈SP。3.3.6 子程序调用返回指令 1.长调用指令LCALL
LCALL addr16
2.绝对调用指令ACALL
ACALL addr11
3.返回指令
RET
RETI ;中断服务子程序返回指令 3.3.6 子程序调用返回指令null1. 长调用指令
指令格式 保护断点P83,例题3-53null2. 绝对调用指令
指令格式:3. 返回指令
指令格式: null4. 中断返回指令
指令格式:
RETI
该指令用于中断返回。执行过程类似于RET。
RET与RETI指令应分别放在子程序和中断服务程序的最后。