时间: 2024-07-08 09:41:47 | 作者: 华体会app怎么样
我们都知道,PIC单片机的大多数寄存器,包含RAM数据存储器的每个存储单元都能完结移位、清位、位测验等系列杂乱操作功用。但是,和谐它们运转的(使用最广泛的基本级、中级)精简指令会集,却没有对寄存器的某“位”进行“取反”运作的现成指令,而在实践使用中对某些“位”进行取反运作是很需求的。如下图所示。单片机PIC16C622的端口RB作为输出端口的8个引脚,别离操控着8个不同的电器设备。按动按钮AN一下,继电器J吸合,再按一下J开释,即按动AN一下,端口RB3引脚的输出状况改动一下,而RB口的其它7个引脚输出坚持原有状况不变。在这种情况下最好的办法是按动一下AN,对PORTB(3)“取反一次”——这关于MCS-51系列单片机来讲是极简单的。只需写一条(如CPL P33)位取反指令就可以了。而PIC16C622只需对字节取反指令,却没有对位取反的直接指令。笔者运用了“W和f相异或”的指令,也轻易地处理了位取反问题。实例:
这样就完结了对F6(3)即RB3脚的“取反”运作。假设其时寄存器F6的状况为“B01101001”则通过上述指令运作后,有
成果寄存器F6的内容为“B01100001”。可见除了F6(3)由“1”取反为“0”外,其它位坚持不变,完结了预期的意图。这种办法,可以对寄存器其间的1位、2位……几位一起“取反”——只需对作业寄存器W送常数时,常数的相应“位”上为逻辑“1”就可以了。
还有像两个数据比较一类程序的编写,一般人们是用“减法”指令来完结的。运用“异或运算”指令相同能处理问题,并且更为简练(它只影响状况寄存器中的零标志位“Z”,对其它概不影响)。如树立时钟程序,当秒计数寄存器计数至60秒时,应向分计数寄存器“进1”,若设秒计数寄存器为F20,分计数寄存器是F21,则定时器中止子程序为:
从上述比如中可以正常的看到,异或跟PIC中的其它指令相同,只需灵活运用其功用是很强壮的。