在单个位上设置SFR或在8051 arch上设置为字节

时间:2012-11-05 21:53:12

标签: assembly 8051

将整个字节分配给SFR或对其值应用AND或OR是否有区别?

换句话说,如果我将某些位设置为与之前相同的值,或者这会引发某些硬件反应,这是否重要?

例如我从:

开始
MOV UARTCON, 0x9b

然后我可以做同样的最终值

ORL UARTCON, 0x40

MOV UARTCON, 0xdb

甚至

SETB UARTCON.6

有什么不同吗?

我在这里不是特别谈论UARTCON,而是关于SFR的一般机制。有点重要还是仅仅改变那一位?

UPD 我可以缩小这个问题:即使使用CLRSETB,{{1}等指令,位内部也可以通过位或整个字节更改位可寻址SFR }和ORL

1 个答案:

答案 0 :(得分:0)

读取和写入时可能会有一些具有不同含义的位,例如端口引脚。写入时,它们设置锁存器和输出,读取时返回输入。要为引脚配置引脚,请为其写入1。假设您已将P1.0设置为输入并且从外部拉低,即它将被读为0.现在,如果您还要将P1.1设置为输入,则可以执行{{1}这将很好。但是,如果您读取SETB P1.1的值,请修改该值,然后将其写回,然后它将无效:

P1

注意MOV P1, #1 ; set P1.0 to input MOV A, P1 ; reads 0 ORL A, #2 MOV P1, A ; P1.0 no longer input ,虽然它在逻辑上做同样的事情,工作,因为处理器有特殊的支持,并且知道读取端口锁存器而不是引脚输入。

你提到的另一种可能性是写入触发的东西。一个这样的例子是ORL P1, #2。即使你在那里写相同的值,它也会触发传输。然而,这与您的问题无关,因为它不是位可寻址的。在标准8051的背景下,我想不出另一个表现出类似行为的SFR。