Member 14611851 Ответов: 2

AVR assembly - led включение/выключение с помощью кнопок


Я пишу ассемблерный код для ATMEGA328P (arduino uno). у меня есть пример из книги.

- Отрегулируйте предыдущее задание так, чтобы светодиод оставался включенным, даже когда вы отпустите кнопку. Светодиод должен гореть до тех пор, пока не будет нажата другая кнопка'

предыдущее задание было:

- Создайте программу, которая будет гореть светодиодом при нажатии кнопки. При нажатии кнопки 0 должен загореться светодиод 0. При нажатии кнопки 1 должен загореться светодиод 1.'

для этого я должен написать какой-то код( может быть, не самый лучший, но он работает )

 .include "m328Pdef.inc"
    .def temp=r16 
    .def temp1=r18
    .cseg
    .org 0x0000


init:
    ldi temp, 0xff
    ldi temp1, 0x00
    out DDRD, temp
    out DDRB,temp1
    out PORTB,temp1

loop: 
    in temp,PINB
    out PORTD, temp
    rjmp loop

Итак, мой вопрос заключается в том, как я могу выполнить второе задание?

Что я уже пробовал:

я попытался добавить это:
delay:
    ldi temp, 0xFF
delay_loop_1:
    dec temp
    cpi temp, 0x00
    jmp delay_loop_1
ret

Richard MacCutchan

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

Member 14611851

это уже другой вопрос

Mike Hankey

Вы должны следить за состоянием светодиода, то есть за тем, горит он или нет.

Почему вы используете петлю задержки, поскольку светодиод должен гореть до тех пор, пока не будет нажата другая кнопка?

Если вы используете Atmel Studio, то используйте симулятор для отладки своей программы, и это избавит вас от многих головных болей.

Member 14611851

мне не нужна петля задержки?

2 Ответов

Рейтинг:
2

Richard MacCutchan

Вы можете найти много образцов на сайте Tinkercad | из виду, чтобы создать в течение нескольких минут[^]


Member 14611851

я знаю, но 90% этих образцов написаны на языке Си

Рейтинг:
2

Mike Hankey

Напишите свое задание на языке Си, а затем посмотрите на файл .lss для ассемблерного кода, который выводит компилятор.