述 一个单片机所需执行指令的集合即为单片机的指令系统。
单片机使用的机器语言、汇编语言及高级语言,但不管使用是何种语言,最终还是要“翻译”成为机器码,单片机才能执行之。
现在有很多半导体厂商都推出了自己的单片机,单片机种类繁多,品种数不胜数,值得注意的是不同的单片机它们的指令系统不一定相同,或不完全相同。
但不管是使用机器语言、汇编语言还是高级语言都是使用指令编写程序的。
2.3.2 指令系统简介 8051 的指令系统按功能可以分为数据传送、算术操作、逻辑操作和控制转移四大类。
以下分别介绍这几类指令。
1.数据传送 数据传送指令可分为通用的、累加器专用的目标地址用的三种: (1)通用的传送MOV 执行第二操作数到第一操作数地位、字节字的传送。
PUSH 把 SP 寄存器加 1,然后从第二操作数传送一个字节到当前 SP 寻址的堆 栈单元中。
POP 把有 SP 寄存器寻址的栈单元中传送一个字节到第一操作数,然后把 SP 减 1。
(2)累加器专用传送XCH 第二操作数的字节于 A 累加器的字节交换。
XCHD 第二操作数的地半字节于 A 累加器的地半字节交换。
MOVX 外部数据存储器和 A 累加器之间传送一个字节。
外部抵制可由 DPTR 寄 存器(16 位)或 R1、R0(各 8 位)来指定。
MOVC 从程序集存器传送一个字节到 A 寄存器中。
(3)目标地址传送MOV DPTR data 把 16 位立即数装入一对目的寄存器 DPH 和 DPL 中。
2. 算术操作 8051 指令系统的特点是除了加、减法外,还有乘法和除法功能,因而加快了运算速度,增强了运算功能,减少了编程工作量。
此外还有一种调整操作,它可以允许对压缩的十进制数(BCD)直接执行算术操作。
(1)加法(四种)INC (加 1)执行源操作数和 1 的加法,结果回送到源操作数中。
ADD 执行 A 累加器与第二操作数之间的加法,结果送回 A 累加其中。
ADDC (带进位加) 执行 A 累加器和第二操作数之间的加法,若以前 C 标志置 位则加 1,把结果送到 A 累加器中。
DA (BCD 加法的使劲违法调整) 对两个 2 位十进制操作数的二进制加法结 果进行调整。
由 DA 所形成的压缩十进制数之间和回送到 A 累 加器中。
如 果 BCD 结果大于 99 则进位标志位置位,否则清 0。
(2)减发(两种)SUBB (连借位减) 执行从第一操作数(累加器)中间去第二操作数, 如果 C 标志位置位则再减 1,把结果回送到 A 寄存器。
DEC (减 1) 执行从操作数减 1,结果送到操作数中。
(3) 乘法MUL 执行 A 累加器与 B 寄存器的无符号乘法。
双字节乘法的高位字接送 B 寄存 器,低位字节送 A 累加器。
如果乘积的高位字节为 0 则 OV 清零,若非 0 则 OV 置位。
C 清零,AC 保持不变。
(4) 除法DIV 执行 A 累加器与 B 寄存器的无符号数除法,把上送到累加器 A;余数送到 B 寄存器。
若除数为 0,则累加器 A 和寄存器 B 内容不定,并置位 OV否则 OV 清 0。
C 清 0,AC 保持不变。
3. 逻辑操作 8051 除了能执行一般操作数的基本逻辑操作数外,还能对位进行逻辑操作,有较强的布尔处理功能。
(1)单操作数逻辑操作CLR 用于 A 累加器和 C 进位标志或任何直接寻址为清 0。
SETB C 进位标志或任何直接寻址的位置 1。
CPL 把 A 累加器中的操作数取反,并把结果回送到 A 累加器中,不影响标志位; 或者将 C 进位标志或任何直接寻址位取反。
(2)双操作数逻辑操作ANL 对两个操作执行按为逻辑“与”操作,并把结果回送到第一个操作数中。
ORL 对两个操作数(字节)执行按位逻辑“或”操作,并把结果回送到第一个操 作数中。
XRL 对两个操作数(字节)执行按位逻辑“异或”操作并把结果回送到第一个操 作数中。
ACALL 绝对调用指令、无条件地调用指定地址的子程序。
所调用的子程序的起 始地址必须在与 ACALL 后面指令的第一字节在同一 2K 区间的程序存储 器中,并不影响标志。
LCALL 长调用指令。
它调用指定地址的子程序。
所调用的子程序可以从全部 64K 字节程序存储器地址空间的任何地方开始。
不影响任何标志。
RET 转移控制到前一次调用操作时保存在堆栈中的地址,一般为 ACALL 或 LCALL 所调用的子程序结束语句。
AJMP 转移控制到目标操作数。
AJMP 和 LJMP 操作类似于 ACALL 和 LCALL。
SJMP 指令提供了一下一条指令的起始地址为中心的 256 字节范围的转移 (-128-127)。
JMP 间接转移指令。
把累加器 A 的无符号内容与数据指针的 16 位数据相加, 然后把结果送到程序计数器。
这样转移的实际目的可以是程序储存空间中 的任何单元。
这种间接转移对程序中实现 N 路散转很方便。
(1) 有条件转移JZ 如果累加器 A 为 0 则执行一次转移。
JNZ 如果是累加器 A 部委 0,则执行一次转移。
JC 如果仅为标志 Cy 为 1,则执行转移。
JNC 如果仅为标志 Cy 为 0,则执行转移。
(2) 无条件转移JB 如果直接寻址位为 1,则执行转移。
JNB 如果直接寻址位为 0,则执行转移。
JBC 如果直接寻址位为 1,则执行转移,然后直接寻址为清 0。
CJNE 把第一操作数以第二操作数相比较,如果不相等,则执行转移。
DJNE 把操作数减 1,结果送回源操作数的地址中,若不为 0 则转移。
试用制条 指令可有效地把 RAM 单元用作程序循环计数器。
4. 中断 通过内部或外部终端方法可执行程序的转移。
所有的中断通.
上一篇:
vc++毕业设计参考题目免费下载
下一篇:
不规则零件优化排样的神经网络混合优化算法