我正在编写8051微控制器的程序。在程序的第一部分,我做了一些计算,并根据结果,或者点亮LED(使用CLR P1.7
,其中P1.7是LED连接到微控制器的端口)。(8051)检查是否设置了一个位
在程序的下一部分,我想检索该位,可能将它存储在某处,然后将其用于if-jump指令,如JB
。我怎样才能做到这一点?
另外,我在代码示例中看到了指令MOV C, P1.7
。什么是C
这里?
我正在编写8051微控制器的程序。在程序的第一部分,我做了一些计算,并根据结果,或者点亮LED(使用CLR P1.7
,其中P1.7是LED连接到微控制器的端口)。(8051)检查是否设置了一个位
在程序的下一部分,我想检索该位,可能将它存储在某处,然后将其用于if-jump指令,如JB
。我怎样才能做到这一点?
另外,我在代码示例中看到了指令MOV C, P1.7
。什么是C
这里?
C
这里是8051的进位标志 - 被称为是因为它可以用来在多个字节上执行加法操作时保持“进位”。
它也可以用作单位寄存器 - 所以(如此处)您想要移动位的位置,您可以使用端口值加载它(例如P1.7
),然后将其存储在其他位置,例如:
MOV C, P1.7
MOV <bit-address>, C
再后来,你可以在上面使用分支:
JB <bit-address>, <label>
一些特殊功能寄存器也都位寻址。我相信它所有以0或8结尾的结尾。在我面前没有参考,但是你可以做类似setb r0.1的事情。那样的话,如果你需要携带的东西,你不必担心推动它并占用堆栈空间。
C51编译器使用的另一个技巧是使用'PUSH PSW'来推送'C'标志(以及状态字的其余部分),例如在使用'#pragma disable'时存储以前的中断状态。 – 2014-05-17 07:31:58