您当前的位置:五五电子网电子知识单片机-工控设备51单片机51单片机入门 第五章 指令系统 正文
51单片机入门 第五章 指令系统

51单片机入门 第五章 指令系统

点击数:7990 次   录入时间:03-04 11:38:25   整理:http://www.55dianzi.com   51单片机

在讲指令系统前我们先来复习一下数制的概念。
1.十进制(Decimal)
基数是10,它有10个数字符号,即0,l,2,3,4,5,6,7,8,9。其中最大数码是基数减1,即9,最小数码是0。
2.二进制(Binary)
基数是2,它只有两个数字符号,即0和1。这就是说,如果在给定的数中,除0和1外还有其它数,例如 1012,它就决不会是一个二进制数。
3、十六进制(Hexadecilnal)
基数是16,它有16个数字符号,除了十进制中的10个数可用外,还使用了6个英文字母。它的16个数字依次是0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A至F分别代表十进制数的10至15,最大的数字也是基数减1。
4、二进制数与十六进制数的相互转换。
(1)、二进制转换为十六进制:
整数部分,从低位开始,小数部分,从高位开始,每四位一组(不够四位的补0),转换为对应的十六进制数。
例:(1 0001 0011.1100 0111)2=(113.C7)H
(2)、十六进制转换为二进制:
将十六进制数的每一位分别转换为对应的四位二进制数。
例:(3E9D)H=(11 1110 1001 1101)B
例:( 2ABE)H= 0010 1010 1011 1110B
以后我们在 单片机 编程方面采用十六进制,这个请大家注意了!
MCS-51系列 单片机 的指令系统共有111条指令,其中49条是单字节指令,45条是双字节指令,17条是三字节指令。
MCS-51的指令系统共有33个功能,用汇编编程时只需要42个助记符就能指明这33个功能操作。
1、 指令格式:MCS-51汇编语言指令格式与其他微机的指令格式一样,均由以下几部分组成:[标号:]操作码 [操作数][,操作数][;注释]
标号:又称为指令地址符号,地址的符号化,一般由1到6个字符组成,以字母开头的字母数字串,与操作码之间用冒号分开。
操作码:是由助记符表示的字符串,它规定了指令的操作功能。
操作数:是指参加操作的数据和数据的地址。
注释:是为该条指令作说明,以便于阅读。
注意:[ ]中表示为可选项。操作数可以为1、2、3个,也可以没有。
不同功能的指令,操作数作用不同,如:传送指令多数有两个操作数,写在左面的是目的操作数(表示操作结果存放的单元地址),写在右面的称为源操作数(指出操作数的来源)。操作码和操作数之间必须用空格分隔,操作数与操作数之间必须用逗号“,”分隔。带方括号项可有可无,称为可选项。操作码是指令的核心不可缺少。
2、 指令分类
MCS-51的111条指令分为下面5类:
(1) 数据传送类指令29条,分为片内RAM,片外RAM、程序存储器的传送指令,交换及堆栈操作指令。
(2) 算术运算类24条,分为加,带进位加,减,乘,除,加1,减1指令。
(3) 逻辑运算类24条,分为逻辑与、或、异或、移位指令。
(4) 控制程序转移类17条,分为无条件转移与调用,条件转移,空操作指令。
(5) 布尔变量操作类17条,分为数据传送、位与、位或,位转移指令。
3. 指令代码:
(1) 数据传送类
MOV 传送数据
指令格式:MOV A,#DATA;将立即数DATA送到累加器A中。
例:
MOV P1,#11111110B;把立即数11111110B传送到P1口。

MOVX 片外数据存储器传送数据
指令格式:MOVX A,@DPTR;将DPTR指向的地址单元中的内容传送至A中。
例:MOV DPTR,#1000H;将地址1000H传送到数据指针DPTR中。
MOVX A,@DPTR;将DPTR指向的地址单元(1110H)中的内容传送至A中。
MOVC 程序存储器传送数据
指令格式: MOVC A,@A+DPTR;
例:MOV A,#00H
MOV DPTR,#1000H;将地址1000H传送到数据指针DPTR中。
MOVC A,@A+DPTR;把累加器A的值和DPTR的值相加得到值作为地址,把这个程序存储器的地址单元中的内容传送到A中。
(2) 算术运算指令
ADD 不带进位的加法类指令
指令格式:ADD A,#DATA;把立即数DATA和累加器A的内容相加得到的值存放到累加器A中。A+DATA→A
例:
SETB C;让累加器C置1
MOV A,#01H;A=01H
ADD A,#01H;A=02H

ADDC 带进位的加法类指令
指令格式:ADDC A,#DATA;把立即数DATA和累加器A的内容相加,再加上进位标志C得到的值存放到累加器A中。A+DATA+C→A
例:
SETB C; 把累加器C置1
MOV A,#01H ; A=01H
ADDC A,#01H; A+DATA+C→A ,A=03H

SUBB带借位的减法类指令
指令格式:SUBB A,#DATA;把累加器A的内容减去立即数DATA再减去进位标志C得到的值存放到累加器A中。A-DATA-C→A

例:
SETB C; 让累加器C置1
MOV A,#03H; A=03H
SUBB A,#01H; A=01H

INC加一指令
指令格式:INC A ;把A的内容加1再存储到A中。
例:
MOV A,#01H;A=01H
INC A ;A=02H
DEC 减1指令
指令格式:DEC A ;把A的内容减1再存储到A中。
例:
MOV A,#03H ;A=03H
DEC A ;A=02H
(3) 逻辑运算指令
CLR 清零指令
指令格式:CLR A ;把A的内容清零再存储到A中,A=00H。

MOV A,#00000001B;A=00000001B
CLR A ;A=00000000B
CPL 按位取反
指令格式:CPL A ;把A的内容按位取反后再存储到A中。
例:
MOV A,#00000001B;A=00000001B
CPL A ;A=11111110B
ANL 按位取与
指令格式:ANL A ;把A的内容按位取与后再存储到A中。
例:
MOV A,#01000001B ; A=00000001B
ANL A,#01001111B ; A=01000001B
ORL 按位取或
指令格式:ORL A ;把A的内容按位取或后再存储到A中。
例:
MOV A,#00000001B ;A=00000001B
ORL A,#10001111B ;A=10001111B
XRL 按位取异或,相同为0,不同为1。
指令格式:XRL A ;把A的内容按位取异或后再存储到A中。
例:
MOV A,#00000001B;A=00000001B
XRL A,#00001111B ;A=00001110B
RL左移位指令
指令格式:RL A ;把A的内容按位左移后再存储到A中。
例:
MOV A,#00000001B;A=00000001B
RL A ;A=00000010B
RL A ;A=00000100B
RL A;A=00001000B
RR右移位指令
指令格式:RR A ;把A的内容按位右移后再存储到A中。
例:
MOV A,#00000001B ;A=10000000B
RR A ;A=01000000B
RR A ;A=00100000B
RR A ;A=00010000B
(4) 位操作指令
SETB 置1指令,只能对位操作,不可以对字节操作。
指令格式:SETB BIT ;对位BIT置1。
例:
SETB P1.0 ;P1.0=1
CLR 清零指令,可对位操作,也可对字节操作。
指令格式:CLR BIT ;对位BIT置0。

SETB C
MOV A,#11110000B
CLR C
CLR A
CPL 取反,可对位操作,也可对字节操作。
指令格式:CPL BIT ;对位BIT取反。
SETB C
MOV A,#11110000B
CPL C
CPL A

(5) 控制及转移指令
LJMP 长跳转指令
指令格式: LJMP 标号;程序将跳转到标号处执行。
LCALL长调用子程序指令,常与RET配合使用。
指令格式: LCALL 标号;调用为标号的子程序去执行。
RET子程序返回指令。
DJNZ 条件转移类指令(自减一指令)
指令格式: LOOP:DJNZ R7,LOOP
执行分两步:
(1) 将R7的内容减一后再送到R7中。
(2) 判断R7是不是等于0
如果是等于0,顺序执行下面的程序。
如果不等于0,跳转到标号为LOOP的地方去执行。
例:
MOV R7,#3;送循环次数。
CLR A;对A清零。
LOOP:INC A;对A加1。
DJNZ R7,LOOP;先让R7自减1,后判断是否等于0。
       ;不等于0跳转,等于零往下执行。
END
运行上面的程序后累加器A的值是多少?
答案:A=03H




本文关键字:单片机  51单片机单片机-工控设备 - 51单片机