Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Test STM32F4-Assembler project
- ; http://teplofizik.diary.ru/p179418376.htm
- AREA |.text|, CODE, READONLY
- GET led.inc ; Драйвер светодиодов
- GET button.inc ; Драйвер кнопки
- GET system.inc ; Задержка
- ; Объявления
- DELAY_COUNTER EQU 0x000F4240 ; 1000000UL
- EXPORT __main
- __main PROC
- ; Инициализация кнопок и светодиодов
- BL LedInit
- BL ButtonInit
- ; В регистр R4 запишем величину задержки
- LDR R4, =DELAY_COUNTER
- ; Начнём с нулевого светодиода
- ; R5 - номер текущего светодиода
- MOV R5, #0
- ; Главный цикл программы
- __mainloop
- ; Если кнопка нажата - светятся все светодиоды.
- BL ButtonGet
- CMP R0, #1
- BEQ __button_1
- __button_0
- ; Кнопка не нажата
- ; Прибавляем 1
- ADD R5, R5, #1
- ; Проверяем: не более 3х
- CMP R5, #4
- BNE __button_end
- ; На новый круг, с 0
- MOV R5, #0
- B __button_end
- __button_1
- ; Кнопка нажата
- ; Проверяем: >= 0
- SUBS R5, R5, #1
- BPL __button_end
- ; Заём бита произошёл, -1.
- ; На новый круг, с 3х
- MOV R5, #3
- ; Все проверки на более 3х или менее 0 можно заменить на более простую конструкцию:
- ; MOV R0, #3 ; Переместить маску 0x03
- ; AND R5, R5, R0 ; Оставить только младшие 2 бита
- __button_end
- ; Зажжём светодиод N
- MOV R0, R5
- BL LedOn
- ; Задержка
- MOV R0, R4
- BL delay
- ; Погасим светодиод N
- MOV R0, R5
- BL LedOff
- ; На очередной круг
- B __mainloop
- ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement