avr - 如何为特定序列设置两个不同的 LED 延迟?
问题描述
我正在开发一个程序,该程序假设在我的 arduino 板(atmega328p)上创建某个闪烁序列。我要创建的模式是,开 1/2 秒,关 1/2 秒,开 1/2 秒,关一整秒 重复此序列。
我通过创建两个不同的延迟来解决这个问题,一个是 1/2 秒,另一个是 1 秒,然后我打电话给他们。
如果我只有一个延迟,灯光将使用该模式,但一旦我将两个延迟放在循环中,灯光甚至不会遵循该模式。如果这是一个简单的问题,我深表歉意,我不知道我是否接近这个权利。
这是我的代码:
#include "config.h"
.section .data
dummy: .byte 0 ; dummy global variable
.section .text
.global main
.extern delay
.org 0x0000
main:
; clear the SREG register
eor r1, r1 ; cheap zero
out _(SREG), r1 ; clear flag register
; set up the stack
ldi r28, (RAMEND & 0x00ff)
ldi r29, (RAMEND >> 8)
out _(SPH), r29
out _(SPL), r28
; initialize the CPU clock to run at full speed
ldi r24, 0x80
sts CLKPR, r24 ; allow access to clock setup
sts CLKPR, r1 ; run at full speed
; set up the LED port
sbi LED_DIR, LED_PIN ; set LED pin to output
cbi LED_PORT, LED_PIN ; start with the LED off
; enter the blink loop
1: rcall toggle
rcall delay
rcall delay2
rjmp 1b
toggle:
in r24, LED_PORT ; get current bits
ldi r25, (1 << LED_PIN) ; LED is pin 5
eor r24, r25 ; flip the bit
out LED_PORT, r24 ; write the bits back
ret
delay: ; 1/2 sec delay loop
ldi r21, 41
ldi r22, 150
ldi r23, 127
1: dec r23
brne 1b
dec r22
brne 1b
dec r21
brne 1b
ret
delay2: ; 1 sec delay loop
ldi r18, 82
ldi r19, 43
ldi r20, 0
2: dec r20
brne 2b
dec r19
brne 2b
dec r18
brne 2b
ret
解决方案
推荐阅读
- java - 从字符串中剪下不同的元素并将它们放入列表中
- fish - 滚动“太长”命令无法正常工作
- java - java中的方法重载,如何读取variable.method中的变量进行方法声明?爪哇
- python - 无法在博主中找到新帖子按钮
- python - 每次为相同的数据创建不同的哈希值?
- r - 如何使用闪亮的按钮重置 event_data?
- r - Gmail 身份验证错误:invalid_request 缺少必需参数:client_id
- javascript - 提供变量时,Cropbox 不会更新
- javascript - 在 Firefox/Safari 中使用 document.body 上的 scrollLeft 进行水平滚动不起作用
- github - GitHub 项目中的泳道