⑴ 单片机系统指令的功能指令
一、字节交换指令
XCH A, Rn
若(A)=80H,(R7)=08H,执行后(A)=08H,(R7)=80H
XCH A, direct
若(A)=80H,(40H)=F0H,执行后(A)=F0H ,(40H)= 80H
XCH A, @Ri
若(A)=80H , (R0)=6AH, (6AH)=0FH ,
执行后(A)=0FH,(6AH)=80H
二、半字节交换指令
XCHD A, @Ri 累加器的低4位与内部RAM低4位交换
三、累加器半字节交换指令
SWAP A
将累加器A的高半字节和低半字节互换。
四、算术运算指令
加、减、乘、除指令,都是针对8位二进制无符号数。执行
的结果对Cy、Ac、OV等标志位有影响,但增1和减1指令不影
响上述标志。
1、加法指令,目的操作数均为ACC。
ADD A, Rn ;(A)+(Rn)→A,n=0~7
ADD A, direct ;(A)+(direct)→A
ADD A, @Ri ;(A)+((Ri))→A,i=0,1
ADD A, #data ;(A)+#data→A
注意运算结果对各个标志位的影响:
(1)、如果位7有进位,则进位标志Cy置“1”,否则清0;
(2)、如果位3有进位,则辅助进位标志Ac置“1”,否则清0;
(3)、溢出标志位OV:
如果位6有进位,而位7没有进位;或者位7有进位,而位6 没有,则溢出标志位OV置“1”,否则清0。
OV状态,只有在带符号数加法运算时才有意义。
当两个带符号数相加时,OV=1,表示加法运算超出了累加器A所能表示的带符号数的有效范围。
2、带进位加法指令
标志位Cy参加运算,因此是三个数相加。共4条:
ADDC A, Rn ;(A)+(Rn)+C→A,n=0~7 ADDC A, direct ;(A)+(direct)+C→A
ADDC A, @Ri ;(A)+(Ri)+C→A,i=0,1
ADDC A, #data ;(A)+#data+C→A
3、增1(加1)指令(C语言的++ )
INC A
INC Rn ;n=0~7
INC direct
INC @Ri ;i=0,1
INC DPTR (除立即数以外)
(1)、不影响PSW中的任何标志局码(除了INC A 外)。
(2)、INC DPTR
该指令是16位数增1指令。指令首先对低8位指针DPL的内容执行加1的操作,当产生溢出时,就对DPH的内容进行加1操作,不影响标志Cy的状态。
4、DA A,十进制调整指令
用于对BCD码加法运算结果的修正。
两个BCD码按二进制相加之后,必须经本指令的调整才能
得到正确的压缩BCD码的和数。
调整方法:十进制调和腊让整修正,即结果加6调整。具体为:
a) 累加器低4位大于9或辅助进位位Ac=1,则进行低4位加6修正;
b) 累加器高4位大于9或进位位Cy=1,则进行高4位加6修正;
c) 累加器高4位大于9, 低4位大于9, 则高4位和低4位分别加6修正;是否加6是通过执行指令 DA A 来自动实现的。
5、带借位的减法指令(注意:减法只有带借位的)
SUBB A, Rn ;(A)-(Rn)- Cy→A,n=0~7
SUBB A, direct ; (A)-(direct)- Cy→A
SUBB A, @Ri ;(A)-((Ri))- Cy→A, i=0,1
SUBB A, #data ;(A)-#data - Cy→A
A的内容减去源操作数和进位标志Cy的值,结果存在A中。
1、如果位7需借位,则Cy置1,否则清0;
2、如果位3需借位,则Ac置1 ,否则清0;
3、如果位6需借位而位7不需要借位,或者位7需借位,位6
不需借位,则溢出标志位OV置1,否则清0。
6、减1指令(C语言的--)
DEC A ;(A)-1→A
DEC Rn ;(Rn)-1→Rn,n=0~7
DEC direct ;唤局(direct)-1→direct
DEC @Ri ;((Ri))-1→(Ri),i=0,1
1、减1指令不影响标志位。
2、增1/加1指令有INC DPTR,减1无DEC DPTR指令。
7、乘法指令
MUL AB ;A×B→BA
1、积的高字节在B中,低字节在A中;
2、如果积大于255,则置“1”溢出标志位OV
8、除法指令
DIV AB ;A/B→A(商),余数→B
如果B的内容为“0”(即除数为“0”),则存放结果的A、B中的内容不定,并置“1”溢出标志位OV。
五、左环移指令RL A
累加器A的内容向左环移一位,Acc.7移入Acc.0 ,不影响标志。
六、带进位左环移指令RLC A
累加器A的内容和进位标志位Cy一起向左环移一位,Acc.7移入进位位Cy,Cy移入Acc.0,不影响其它标志。
七、右环移指令RR A
累加器A的内容向右环移一位,Acc.0移入Acc.7,不影响标志。
八、带进位环移指令RRC A
累加器A的内容和进位标志Cy一起向右环移一位,Acc.0移入Cy,Cy移入Acc.7。不影响其它标志。
九、逻辑与指令
ANL A, Rn ; (A)∧(Rn)→A,n=0~7
ANL A, direct ; (A)∧(direct)→A
ANL A, #data ; (A)∧#data→A
ANL A, @Ri ; (A)∧((Ri))→A,i=0~1
ANL direct, A ; (direct)∧(A)→direct
ANL direct, #data ; (direct)∧#data→direct
十、逻辑或指令
ORL A, Rn ;(A) ∨(Rn)→A ,n=0~7
ORL A, direct ;(A) ∨(direct)→A
ORL A, #data ;(A) ∨data→A
ORL A, @Ri ;(A) ∨((Ri))→A,i=0,1
ORL direct, A ;(direct) ∨(A)→direct
ORL direct, #data ;(direct) ∨#data→direct
十一、逻辑异或指令
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) ⊕#data→A
XRL direct, A ;(direct) ⊕(A)→direct
XRL direct, #data ;(direct) ⊕#data →direct
与1相与取反,与0相与不变。
⑵ 单片机的一条指令: SJMP $ 是啥意思
SJMP $意味着跳转到该指令的开头以开始执行,因此它变为循环执行,就地跳转,通常用于等待中断。
但是本指令也不宜滥用。这是一条死循环指令,如果系统的中断是开放的,那么SJMP $指令实际上是在等待中断,当有中断申请后,CPU 转至执行中断服务程序。
中断返回时,仍然返回到这条死循环指令,继续等待中断,而不是返回到该指令的下一条指令。这是因为执行SJMP $后,PC 仍指向这条指令,中断的断点就是[3]这条指令的首字节地址。
1)在51中,与外部存储器RAM打交道的只可以是A累加器。所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入。
在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行,比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去。
2)要读或写外部的RAM,当然也必须要知道RAM的地址,在后两条指令中,地址是被直接放在DPTR中的。而前两条指令,由于Ri(即R0或R1)只是一个8位的寄存器,所以只提供低8位地址。因为有时扩展的外部RAM的数量比较少,少于或等于256个,就只需要提供8位地址就够了。
3)使用时应当首先将要读或写的地址送入DPTR或Ri中,然后再用读写命令。
⑶ 单片机 CLR 指令的问题
可以用来操作位。
单片机中CLR指令其实只有两类、三种用法:
第一类:字节操作:
仅有将A清0一条指令,即:CLR A
第二类:位操作
1、CLR C:将进位标志位CY(即平时所说的C)清零;这是一条独立的指令,只清除C,机器码只有1个字节(0C3H);
2、CLR bit:将位地址为bit的位清0;bit可以是单片机中任意可进行位寻址的位,机器码占两个字节(0C2H,位地址)。
对ACC.1清0使用CLR命令是可以的,因为A的每一位都有相应的位地址,都可以进行位寻址。如果编译有错只能说明编译器不支持ACC.1的写法,你可以尝试直接使用ACC.1的位地址0E1H来替代,即:
CLR 0E1H
肯定是可以的。
⑷ 单片机命令MOV、MOVX、MOVC 有什么区别
汇编语言指令,MOV用于对单片机内部数据存储器寻址,MOVC用于对单片机内部程序存储器区进行寻址,MOVX用于对外部数据存储器区进行寻址,各种单片机的说明书中指令系统均有详细介绍。
数据传送类指令
MOV 内部 RAM ( 包括特殊功能寄存器)的 数据传送
MOVX 外部扩展 RAM 的 数据传送
MOVC 程序 存储器 的 读取数据 ( 包括数据表)
⑸ 51单片机指令
TF1是定时器1溢出标志位,$是取地址。JNB TF1,$ 实现的功能是查询定时器1溢出标志位,如果为0,跳转到本条指令继续执行(即继续查询)直到定时时间到,TF1置位,才执行下一条指令。
给你注释一下:
MOV TMOD,#10H //设置定时器工作方式(定时器1,工作方式2)
SETB TR1 //开启定时器1
LOOP: MOV TH1,#0D8H //装初值D8F0H 即55536,定时10mS(晶振12M)时间随晶振改变
MOV TL1,#0F0H
JNB TF1,$ //查询等待定时器1中断
CLR TF1 //定时器溢出标志位清0(定时时间到后硬件自动给TF1置位,需软件清0)
CPL P1.1 //P1.1取反
SJMP LOOP //跳到LOOP处循环(是个死循环)
该段程序实现的功能是:每隔10mS对P1.1取反一次。(10mS当然是晶振为12M的情况下)
⑹ 单片机中指令SETB代表什么意思
单片机中指令SETB代表MCS-51的位操作命令。
作为汇编指令,SETB可以实现其后面的那个寄存器的位置为1。就SETB而言,定时/计数器0的中断允许位ET0为1时,单片机会响应定时/计数器0的溢出中断,但为0时,单片机不响应。其中的具体情况如下:
1、SETB C(进位标志置位指令)
①指令代码:D3H;
②指令功能:置进位位;
③操作内容:C←1;
④字节数: 1;
⑤机器周期:1。
2、SETB bit(直接寻址位置位指令)
①指令代码:D2H;
②指令功能:置直接地址位;
③操作内容:bit←1;
④字节数: 2;
⑤机器周期:1。
(6)单片机命令扩展阅读
SETB的相关情况
对于指令SETB来说,单片机的基本功能如下:
1、8位数据总线,16位地址总线的CPU。
2、具有布尔处理能力和位处理能力。
3、采用哈佛结构,程序存储器与数据存储器地址空间各自独立,便于程序设计。
4、相同地址的64KB程序存储器和64KB数据存储器。
5、0-8KB片内程序存储器(8031无,8051有4KB,8052有8KB,89C55有20KB)。
6、128字节片内数据存储器(8051有256字节)。
7、32根双向并可以按位寻址的I/O线。
8、两个16位定时/计数器(8052有3个)。
9、一个全双工的串行I/O接口。
10、多个中断源的中断结构,具有两个中断优先级。
11、片内时钟振荡器。
⑺ 单片机通常指令表示形式有那些
从分类上来说,有以下几种类别的指令(51为例)
1、数据传送指令
2、算术运算指令
3、逻辑运算指令
4、控制转移指令
5、位操作指令
从寻址方式上分为以下几种:
1、立即数寻址
2、直接寻址
3、寄存器寻址
4、寄存器间接寻址
5、变址寻址
6、位寻址
7、相对寻址