首页 理论教育 单片微机位操作指令:17条指令实现控制和运算

单片微机位操作指令:17条指令实现控制和运算

时间:2023-11-02 理论教育 版权反馈
【摘要】:位操作指令又称布尔变量操作,是一种以二进制位为单位进行运算和操作的指令。位操作指令共有17条,能够完成以位为对象的传送、运算和转移控制等操作。后3条指令是以位地址内容为条件的三字节双周期转移指令。以上5条指令中的rel是8位带符号的偏移量,用补码表示。

单片微机位操作指令:17条指令实现控制和运算

用字节来处理一些数学问题,如控制冰箱的温度、电视的音量等,很直观,可以直接用数值来表示级数。但如果用它来控制一些开关的打开和闭合、灯的亮和灭等,就不直观了。例如,用P1口设计一个流水灯,就不能用字节数来控制灯的亮和灭。工业中有很多场合需要处理这类开关输出、继电器吸合的问题,用字节来处理就有些麻烦,所以在STC单片机中特意引入了一个位处理机制。

位操作指令又称布尔变量操作,是一种以二进制位为单位进行运算和操作的指令。STC单片机内部设计了一个位处理器,包含位运算器、位累加器(用进位位Cy)和位存储器(采用位寻址区),可以完成各种位操作。位操作指令共有17条,能够完成以位为对象的传送、运算和转移控制等操作。

这类指令的操作数可采用片内RAM区中的位寻址区(20H~2FH,对应位地址是00H~7FH)和特殊功能寄存器SFR中的位寻址位。

1.位传送指令

位传送指令有以下2条互逆的双字节单周期指令,可实现进位位Cy与直接地址位bit之间的数据位传送。

978-7-111-51881-5-Chapter03-81.jpg

这组指令的功能是位地址与Cy间传送1位数据,指令执行不影响标志位。其中bit为直接位地址,由于两个可寻址位之间不能直接传输数据,故用Cy作为中介来传送要寻址的位。如把Cy的内容传送给P0~P3中的某一位时,CPU先读某一端口中的1位锁存器内容,再把Cy传送给端口的指定位,最后把修改了的8位数据写入端口锁存器。所以,这也是一条“读→修改→写”指令。

【例3-33】 设单片机片内RAM单元(21H)=58H,(P1)=FFH,要求把21H.2位(其位地址为0AH)的内容送入到P1.6中,则程序指令如下:

978-7-111-51881-5-Chapter03-82.jpg

结果为(P1)=BFH,Cy=1,(21H)=58H。

2.清0置位指令

这组指令共有4条,可对进位位Cy和位地址所指定的位清0或置1操作,指令执行后不影响其他标志。指令格式如下:

978-7-111-51881-5-Chapter03-83.jpg

前2条是对“位”清0指令,后2条是对“位”置1指令。当直接地址bit为P0~P3中的某一位时,指令执行具有“读→修改→写”功能。

【例3-34】 要求将P2.1位置1,23H.1位清0,则指令程序如下:

978-7-111-51881-5-Chapter03-84.jpg

3.位逻辑运算指令(www.xing528.com)

位逻辑运算指令包括“与”ANL、“或”ORL、“非”CPL三种位逻辑运算操作,共有6条操作指令。指令格式如下:

978-7-111-51881-5-Chapter03-85.jpg

978-7-111-51881-5-Chapter03-86.jpg

978-7-111-51881-5-Chapter03-87.jpg

图3-7 数字逻辑电路图

上述指令的操作数中,/bit表示先对bit位取反,然后用bit取反后的数参加逻辑运算,指令执行后bit位本身的内容保持不变。另外,CPL bit指令中,当bit直接地址为P0~P3中的某一位时,指令执行具有“读→修改→写”功能。

利用以上位逻辑指令,可以很方便地模拟数字逻辑电路的功能。指令系统中没有“位异或”指令,但可以通过以上的指令组合来实现异或功能。

【例3-35】 图3-7所示是用与、或和非门电路构成的数字逻辑电路,要求利用位逻辑运算指令实现硬件电路功能。参考程序如下:

例如,设有X、Y、Z三个位地址,试利用位逻辑指令,实现位地址间的“异或”运算,即Z=(X)⊕(Y)。

978-7-111-51881-5-Chapter03-88.jpg

4.位条件转移指令

位条件转移指令是通过判断进位标志Cy或位地址bit的内容是否满足条件来控制转移,共有5条指令,指令格式如下:

978-7-111-51881-5-Chapter03-89.jpg

前2条指令是以Cy内容为条件的双字节双周期转移指令。这2条指令可以与CJNE指令一起联合构成三分支控制转移方式。

后3条指令是以位地址内容为条件的三字节双周期转移指令。这3条指令可测试直接地址位,并根据位变量的值控制程序转向目的地址执行。至于对位变量的判断,测试值为“0”还是为“1”要视编程方便而定。当bit直接地址为P0~P3的某一位时,指令执行具有“读→修改→写”功能。

以上5条指令中的rel是8位带符号的偏移量,用补码表示。当指令测试向前转移时,偏移量为负数的补码;当指令测试向后转移时,偏移量为正数的补码。因此,偏移量的范围是以当前位条件转移指令为中心的-128~127,即从当前位置向前或向后转移rel字节所对应的指令开始执行程序。实际编程时,rel以标号代替,手工汇编时,偏移量rel的值则需程序设计人员计算。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈