Гость Vlad5 Опубликовано 29 Ноября, 2012 в 16:33 Жалоба Поделиться Опубликовано 29 Ноября, 2012 в 16:33 Я написал прогамму на ассемблере для AVR 4. Нужно, чтобы при запуске данной программы на рабочем макете при нажатой первой кнопки загорелся первый светоиод, при нажатии второй кнопки первый светодиод потух а второй светодиод загорелся и так далее в любой последовательности для восьми кнопок (01234567). Помогите упростить ее. .include "8515def.inc" .def Temp=r16; .def Null=r17; ldi Null,0b0; rjmp START START: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; out ddrb,Null; rjmp START; OUTLED: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b1; out ddrb,Temp; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; rjmp OUTLED; SECOND: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b10; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; rjmp SECOND; THIRD: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b100; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; rjmp THIRD; ASAS: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b1000; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; rjmp ASAS; ZZZZ: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b10000; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; rjmp ZZZZ; AAAA: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b100000; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd6; rjmp QQQQ; sbis pind,pd7; rjmp WWWW; rjmp AAAA; QQQQ: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b1000000; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd7; rjmp WWWW; rjmp QQQQ; WWWW: Как этот цикл можно преобразовать, при это чтобы работал также. Если можно с коментариями ldi Temp,0b10000000; out ddrb,Temp; sbis pind,pd0; rjmp OUTLED; sbis pind,pd1; rjmp SECOND; sbis pind,pd2; rjmp THIRD; sbis pind,pd3; rjmp ASAS; sbis pind,pd4; rjmp ZZZZ; sbis pind,pd5; rjmp AAAA; sbis pind,pd6; rjmp QQQQ; rjmp WWWW; Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость galrad Опубликовано 23 Октября, 2014 в 17:32 Жалоба Поделиться Опубликовано 23 Октября, 2014 в 17:32 (изменено) Программа очень простая вариант, когда светодиод загорается только при нажатии на соответствующую кнопку: .def temp=r16; назначает регистру r16 имя temp ;==================================================== ; Начало программы .cseg ; начало сегмента .org 0 ; начало первой строки программы ; ==================================================== clr temp; обнуляет регистр temp out DDRB,temp; переводит все биты порта B на ввод ser temp; устанавливает все биты регистра temp в 1 out DDRA,temp; переводит все биты порта A на вывод out PortB,temp; подключает подтягивающие резисторы к порту B Loop: in temp,PinB; считывает значение порта B com temp; инвертирует значение порта В out PortA, temp; переводит результат в порт A rjmp Loop; Возвращает к метке Loop, и повторяет все с начала... вариант, когда светодиол продолжает гореть после отпускания кнопки, и горит до нажатия другой кнопки: .def temp=r16 ; назначает регистру r16 имя temp ;==================================================== ; Начало программы .cseg ; начало сегмента .org 0 ; начало первой строки программы ; ==================================================== clr temp ; обнуляет регистр temp out DDRB,temp ; переводит все биты порта B на ввод ser temp ; устанавливает все биты регистра temp в 1 out DDRA,temp ; переводит все биты порта A на вывод out PortB,temp ; подключает подтягивающие резисторы к порту B Loop: in temp,PinB ; считывает значение порта B com temp ; инвертирует значение регистра temp breq Loop ; если регистр temp обнуляется, то переход в начало... out PortA, temp ; если нет, то переводит результат в порт A rjmp Loop ; Возвращает к метке Loop, и повторяет все с начала... схема подключения: Изменено 23 Октября, 2014 в 19:52 пользователем galrad Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти