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

;******************************************************************************
;***** Программа включает и выключает порт PB4 микроконтроллера ATtiny13 ******
;***** Created: 2015-02-02 18:55 ******** Site: http://integrator.adior.ru ****
;******************************************************************************
.includepath "inc/"		        ; Папка с файлами заголовками         
.include "tn13def.inc"			; Используем ATtiny13                 
;==============================================================================
reset:
ldi r23, RAMEND ; Загрузить в R23 адрес последней ячейки памяти out SPL, r23 ; Инициализация стека sbi DDRB, DDB4 ; PB4 будет работать на выход main: sbi PORTB, PORTB4 ; PB4 установить уровень 1 ldi r23, 4 ; Установить в регистр R23 время задержки rcall delayR23 ; Вызов подпрограммы задержки cbi PORTB, PORTB4 ; PB4 установить уровень 0 ldi r23, 32 ; Установить в регистр R23 время задержки rcall delayR23 ; Вызов подпрограммы задержки rjmp main ; Зациклить выполнение программы ; Подпрограммы delayR23: ; Задержка на R23*65536*5 тактов sbiw r25:r24,1 ; R25:R24=R25:R24-1 (65535...0) sbci r23,0 ; R23=R23-0-C вычитание с заемом brcc delayR23 ; Повторять пока не было переноса ret ; Возврат из подпрограммы ; Задействованы регистры R23, R24, R25

Переход

RJMP k

относительный безусловный переход (на практике, вместо числового смещения k указывают метку). Допускается переход только в пределах -2047 ... +2048 слов.

IJMP

косвенный переход по адресу, предварительно записанному в регистр Z. Команда поддерживается только новыми микроконтроллерами ATtiny 2313, 24/44/84, 25/45/85, ...


Вызов подпрограмм

RCALL k

относительный вызов подпрограммы

ICALL

косвенный вызов подпрограммы по адресу, предварительно записанному в регистр Z. Команда поддерживается только новыми микроконтроллерами ATtiny 2313, 24/44/84, 25/45/85, ...

RET

возврат из подпрограммы

RETI

возврат из подпрограммы обработки прерывания


Условный переход

BRBS s, k

условный переход, если флаг s регистра SREG установлен

BRBC s, k

условный переход, если флаг s регистра SREG сброшен


Регистр состояния

SREG регистр состояния

Биты регистра состояния I T H S V N Z C :

I Разрешение прерываний. Если 0, прерывания запрещены.

T Хранение бита. Операнд для команд BLD и BST.

H Половинный перенос. 1, если произошел перенос или заем между 3-м и 4-м битом результата операции.

S Знак. 1, если результат выполнения команды меньше 0

V Переполнение. 1, если произошло переполнение числа со знаком.

N Отрицательное значение. 1, если старший бит результата операции равен 1.

Z Ноль. 1, если результат операции равен 0.

C Перенос. 1 если результат операции вышел за границы байта.

7 6 5 4 3 2 1 0
I T H S V N Z C
Разрешение прерываний Хранение бита Половинный перенос Знак Переполнение Отрицательное значение Ноль Перенос

Замечание, ниже следующие команды условного перехода являются эквивалентами предыдущих двух команд с соответствующим значением параметра s.


Условие перехода перенос

BRCC k

условный переход, если ( C=0 ) во время выполнения предыдущей команды не было переноса

BRCS k

условный переход, если ( C=1 ) во время выполнения предыдущей команды был перенос


Условие перехода результат сравнения

BRSH k

условный переход, если ( C=0 ) Rd≥Rr для чисел без знака

BRLO k

условный переход, если ( C=1 ) Rd<Rr для чисел без знака


Условие перехода ноль

BRNE k

условный переход, если ( Z=0 ) не ноль | не равно Rd ≠ Rr для чисел со знаком и без знака

BREQ k

условный переход, если ( Z=1 ) ноль | равно Rd = Rr для чисел со знаком и без знака


Условие перехода знак -

BRPL k

условный переход, если ( N=0 ) результат предыдущей команды положительное значение

BRMI k

условный переход, если ( N=1 ) результат предыдущей команды отрицательное значение


Условие перехода знак для чисел со знаком

BRGE k

условный переход, если ( (N⊕V)=0 эквивалентно S=0 ) Rd≥Rr для чисел со знаком

BRLT k

условный переход, если ( (N⊕V)=1 эквивалентно S=1 ) Rd<Rr для чисел со знаком


Условие перехода переполнение дополнительного кода

BRVC k

условный переход, если ( V=0 ) нет переполнения дополнительного кода

BRVS k

условный переход, если ( V=1 ) произошло переполнение дополнительного кода


Условие перехода половинный перенос

BRHC k

условный переход, если ( H=0 ) не было половинного переноса

BRHS k

условный переход, если ( H=1 ) был половинный перенос


Условие перехода флаг T

BRTC k

условный переход, если ( T=0 ) флаг T сброшен

BRTS k

условный переход, если ( T=1 ) флаг T установлен


Условие перехода разрешение прерываний

BRID k

условный переход, если ( I=0 ) прерывания запрещены

BRIE k

условный переход, если ( I=1 ) прерывания разрешены


где ⊕ исключающее ИЛИ