assembly 端口G ATmega128 AVR组件

ymzxtsji  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(75)

我试图通过使用portG创建一个简单的功能。
如果PG0中的开关闭合,PG1中的LED应该打开。否则,LED应该关闭。但是,我不知道如何使用一位作为输出,而另一位是输入。


的数据

rlcwz9us

rlcwz9us1#

一个这样的C程序应该可以工作:

#include <avr/io.h>

void main() {
  DDRG |= (1 << 1);
  while (true) {
    if (PING & (1 << 0)) {
      // Button is pressed so drive PG1 high.
      PORTG |= (1 << 1);
    }
    else {
      PORTG &= ~(1 << 1);
    }
  }
}

字符串
我们可以使用Godbolt.org将程序转换为汇编:

main:
        lds r24,100
        ori r24,lo8(2)
        sts 100,r24
.L2:
        lds r24,99
        sbrs r24,0
        rjmp .L3
        lds r24,101
        ori r24,lo8(2)
        rjmp .L5
.L3:
        lds r24,101
        andi r24,lo8(-3)
.L5:
        sts 101,r24
        rjmp .L2


(That由于99和101这样的任意数字,汇编程序并不好看,但你可以找出这些数字所指的寄存器,并用寄存器名称替换这些数字。你还需要重命名标签。)

j8yoct9x

j8yoct9x2#

如果端口F和端口G作为I/O工作时出现问题,请尝试修复这两个熔丝位。enter image description here

相关问题