Мигание светодиода с помощью ассемблера на разных частотах с помощью двух кнопок

Я хочу мигать светодиодом, используя язык ассемблера и arduino Я хочу, чтобы схема имела нормальное состояние с частотой мигания 5 Гц Затем используйте две кнопки для увеличения или уменьшения частоты мигания Кнопка вверх будет увеличивать частоту мигания на 5 Гц до тех пор пока светодиод не загорится непрерывно В то время как кнопка вниз уменьшит частоту мигания на 5 Гц до тех пор, пока снова не вернется в нормальное состояние Достижимо ли это ? И если кто-нибудь может указать мне, с чего начать, так как это первый раз, когда я использую язык ассемблера, но я знаком с arduino

, 👍1

Обсуждение

Вы видели эти Q+As? https://arduino.stackexchange.com/search?q=сборка, @VE7JRO

Вполне достижимо. Вы изучали некоторые учебники по ассемблеру для микроконтроллеров AVR/ардуино? Короткий поиск, по-видимому, дает многообещающие результаты. Что вы пробовали до сих пор? Вы пробовали строить код шаг за шагом, начиная с включения светодиода, затем мигая им, а затем читая кнопку?, @chrisl

Да, это достижимо. В конце концов, компилятор C++ превращает код в ассемблерный код. Но почему вы хотите это сделать? Это домашнее задание?, @Nick Gammon

1-Нет, я не смотрел на вопросы и ответы, но я буду вам благодарен 2 - нет, я еще ничего не пробовал, так как я полный новичок в ассемблере, и я искал руководство 3 - да и нет , это необязательное задание в моем курсе, которое не имеет никакого кредита, но наш инструктор дал его для нашей пользы, @Abbas Mohammed


1 ответ


1

Вот один из примеров того, как мигать светодиодом в кодировании сборки на Arduino UNO. Вы можете попытаться решить свою задачу. Если вы застряли, пожалуйста, опубликуйте код и соединения, и я уверен, что вы снова получите помощь.

Код находится здесь

#define __SFR_OFFSET 0

#include "avr/io.h"

.global main

main:
  sbi   DDRB, 5     ; Установить PB5 в качестве выхода

blink:
  sbi   PINB, 5     ; Toggle PINB
  ldi   r25, hi8(1000)
  ldi   r24, lo8(1000)
  call  delay_ms
  jmp   blink

delay_ms:
  ; Задержка около (r25:r24)*мс. Клобберы r30 и r31.
  ; Одна миллисекунда составляет около 16000 циклов при частоте 16 МГц.
  ; Внутренний цикл занимает 4 цикла, поэтому мы повторяем его 3000 раз . 
  ldi   r31, hi8(4000)
  ldi   r30, lo8(4000)
1:
  sbiw    r30, 1
  brne    1b
  sbiw    r24, 1
  brne    delay_ms
  ret

Ссылка на проект: https://wokwi.com/arduino/projects/290348681199092237

,

спасибо, сэр, я очень ценю вашу помощь, @Abbas Mohammed