2010-06-09 66 views
2

我正在编写8051微控制器的程序。在程序的第一部分,我做了一些计算,并根据结果,或者点亮LED(使用CLR P1.7,其中P1.7是LED连接到微控制器的端口)。(8051)检查是否设置了一个位

在程序的下一部分,我想检索该位,可能将它存储在某处,然后将其用于if-jump指令,如JB。我怎样才能做到这一点?

另外,我在代码示例中看到了指令MOV C, P1.7。什么是C这里?

回答

4

C这里是8051的进位标志 - 被称为是因为它可以用来在多个字节上执行加法操作时保持“进位”。

它也可以用作单位寄存器 - 所以(如此处)您想要移动位的位置,您可以使用端口值加载它(例如P1.7),然后将其存储在其他位置,例如:

MOV C, P1.7 
MOV <bit-address>, C 

再后来,你可以在上面使用分支:

JB <bit-address>, <label> 
+0

C51编译器使用的另一个技巧是使用'PUSH PSW'来推送'C'标志(以及状态字的其余部分),例如在使用'#pragma disable'时存储以前的中断状态。 – 2014-05-17 07:31:58

1

一些特殊功能寄存器也都位寻址。我相信它所有以0或8结尾的结尾。在我面前没有参考,但是你可以做类似setb r0.1的事情。那样的话,如果你需要携带的东西,你不必担心推动它并占用堆栈空间。

相关问题