Assembly AVR程序集未执行我希望它执行的操作
我有一个Arduino Uno Rev3,我从C中的主代码调用以下汇编函数Assembly AVR程序集未执行我希望它执行的操作,assembly,arduino,avr,led,Assembly,Arduino,Avr,Led,我有一个Arduino Uno Rev3,我从C中的主代码调用以下汇编函数 # # Global data (val1) # .extern delay .data .comm val1,1 .global val1 # # Program code (compute function) # .text .global compute compute: lds r22, val1 ;value of input ldi r23, 0x00 ;0 value
#
# Global data (val1)
#
.extern delay
.data
.comm val1,1
.global val1
#
# Program code (compute function)
#
.text
.global compute
compute:
lds r22, val1 ;value of input
ldi r23, 0x00 ;0 value
ldi r24, 0x0D ;value to flash led
flash:
# flash LED
call SDelay ;Short Delay
out 0x04, r24 ;LED On
out 0x05, r24
call SDelay ;Delay
out 0x04, r23 ;LED Off
out 0x05, r23
dec r22
brne flash;
finish:
rjmp finish ;keep looping once finished
SDelay:
# Push registers onto stack
push r22
push r23
push r24
push r25
#Delay
ldi r22, 0xa0
ldi r23, 0x00
ldi r24, 0x00
ldi r25, 0x00
call delay
#Pop registers on stack
pop r25
pop r24
pop r23
pop r22
ret
这应该是闪烁LED(我不确定我在这里闪烁的是哪一个)的输入次数。该次数应存储在val1中(以C计算)。然而,我不知道我做错了什么
有人能快速解释一下如何使arduino板上的特定LED闪烁吗?我知道我必须将管脚设置为高或低,但我不知道哪个管脚可以对特定的LED进行设置
我知道这些都是noob问题,但我对AVR汇编还不熟悉,而且真的很烂。我不会这样做,但我们学校的计算机科学系认为我们有必要了解这一点
谢谢 1)导致闪烁
根据Arduino Uno R3板,有2个LED可通过代码控制,连接至PD4和PD5(用作串行RX和TX的双重用途);将这些管脚配置为输出并向其写入0将点亮它们
制定
- 一个ASM例行程序,首先单独闪烁其中一个LED(闪烁=打开0.5秒,关闭0.5秒)
- 一个ASM例程,在“x”次重复执行相同的操作。。。存储在R24中的“x”(参见下文为什么R24)
- 并尽可能使用符号表示法
- 连接一个额外的LED
- 使用诸如pinMode()、digitalWrite()和delay()之类的Arduino例程,保持在C语言中