Макросы в ассемблере позволяют создавать свои инструкции, которые раскрываются в несколько команд. Это ускоряет написание кода и улучшает читаемость.
Макрос для установки нескольких пинов за один такт:
.macro SET_PINS port, mask
SBI \port, \mask
.endm
.macro CLEAR_PINS port, mask
CBI \port, \mask
.endm
.macro TOGGLE_PIN port, mask
SBIC \port, \mask
RJMP toggle_high\@
SBI \port, \mask
RJMP toggle_end\@
toggle_high\@:
CBI \port, \mask
toggle_end\@:
.endm
; Использование:
SET_PINS DDRB, 5 ; Настраиваем пин 13 как выход
SET_PINS PORTB, 5 ; Включаем LED
DELAY_MS 100 ; Ждем 100 мс
CLEAR_PINS PORTB, 5 ; Выключаем LED
Макрос для задержки в микросекундах:
.macro DELAY_US value
LDI R18, \value
DEC R18
BRNE .-2
.endm
; Использование:
DELAY_US 10 ; Задержка ~10 мкс при 16 МГц