为什么我不能在 P1MDOUT 中使用 SETB 设置位?

问题描述

为什么我不能使用 SETBP1MDOUT 中设置位?另外,我将如何用汇编语言展示如何设置 P1MDOUT 的第 0 位和第 6 位(保持其他 6 位不变)。

解决方法

为什么我不能在 P1MDOUT 中使用 SETB 设置位?

考虑:

  • SETB 指令用于设置 256 个可直接访问的位之一。
  • 特殊功能寄存器 (SFR) P1MDOUT 位于地址 0xA5。
  • 地址以 0x0 或 0x8 结尾的 SFR 既可按位寻址,也可按字节寻址。所有其他 SFR 只能按字节寻址。

我们可以得出结论,SFR P1MDOUT 只能按字节寻址,因为它的地址以 0x5 结尾。因此我们不能使用保留用于操作位寻址寄存器和内部存储器范围从 20h 到 2Fh 的 SETB 指令。

另外,我将如何用汇编语言显示如何设置 P1MDOUT 的第 0 位和第 6 位(保持其他 6 位不变)。

ORL 0xA5,#0x41