我开始学习汇编程序,我有这个疑问。我有以下代码段
LDI R16, 0
OUT DDRB, R16 ; Configures port B as an input port
SBIC PORTB, 0
LDI R18, 0xAA
OUT PORTC, R18
RETI
我已经读过SBIC
正在检查(在这种情况下)端口B的位0是否清除。如果是,则跳过下一条指令。
我的问题是:
1) OUT DDRB, R16
是否在端口B的所有位中写入0,或者它只是一个配置指令但它不会写任何东西?换句话说:端口B的位都设置为0?
2)如果它们都设置为0,则会跳过SBIC
之后的指令。但是,只有下一个跳过的指令,或者到达RETI
之前的所有指令?
答案 0 :(得分:1)
第一条指令在DDRB寄存器的所有位中写入0。我假设从注释和寄存器的名称,这使得端口B输入的所有引脚。这不会明确输出任何内容,但取决于设备如何电气配置,任何试图读取该点上任何端口B引脚的外部设备可能会看到值的变化,因为它们不再配置为读取。
下一条指令测试PORTB寄存器的第0位,其值取决于相应引脚连接的内容。如果清楚,则跳过下一条指令LDI R18, 0xAA
。如果已设置,则执行下一条指令。
这意味着OUT PORTC, R18
存储在PORTC寄存器中的值取决于端口B的第一个引脚的状态和示例代码执行开始时R18中包含的值。