我试图通过使用portG创建一个简单的功能。如果PG0中的开关闭合,PG1中的LED应该打开。否则,LED应该关闭。但是,我不知道如何使用一位作为输出,而另一位是输入。
的数据
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这样的任意数字,汇编程序并不好看,但你可以找出这些数字所指的寄存器,并用寄存器名称替换这些数字。你还需要重命名标签。)
j8yoct9x2#
如果端口F和端口G作为I/O工作时出现问题,请尝试修复这两个熔丝位。enter image description here
2条答案
按热度按时间rlcwz9us1#
一个这样的C程序应该可以工作:
字符串
我们可以使用Godbolt.org将程序转换为汇编:
型
(That由于99和101这样的任意数字,汇编程序并不好看,但你可以找出这些数字所指的寄存器,并用寄存器名称替换这些数字。你还需要重命名标签。)
j8yoct9x2#
如果端口F和端口G作为I/O工作时出现问题,请尝试修复这两个熔丝位。enter image description here