,,,;Tiny 15 -     Пример применения микроконтроллера
,,,;                      для обеспечения индикации светодиода.
,,,         
,,,; Определение устройства.
,,,.device ATTINY15
,,,         
,,,; Определение имен регистров ввода/вывода
,,,.equ    SREG    =$3F
,,,.equ    GIMSK   =$3B
,,,.equ    GIFR    =$3A
,,,.equ    TIMSK   =$39              
,,,.equ    TIFR    =$38 
,,,.equ    MCUCR   =$35
,,,.equ    TCCR0   =$33
,,,.equ    TCNT0   =$32
,,,.equ    TCCR1   =$30
,,,.equ    TCNT1   =$2F
,,,.equ    OCR1A   =$2E
,,,.equ    OCR1B   =$2D
,,,.equ    PORTB   =$18
,,,.equ  DDRB    =$17
,,,.equ    ACSR    =$08     
,,,.equ    ADMUX   =$07
,,,.equ    ADCSR   =$06
,,,.equ    ADCH    =$05
,,,.equ    ADCL    =$04  
,,,.equ  PINB    =$16     
,,,         
,,,.cseg                                 ; Сегмент кода (находится во Flash памяти).
,,,                                              ; Для t11 память данных (EEPROM) отсутствует.
,,,         
,,,;Вектор прерываний
,,,.org 0
000000,C005,,       rjmp init                       ;Инициализация и обработка прервания по Reset
,,,         
,,,.org $5
00000A,C00E,,       rjmp time                       ;Обработка прерывания по переполнению Timer0 (тип А)
,,,         
,,,;Блок инициализации
,,init,init:   
,,,         
00000C,E008,,       ldi r16,$8                      ; 1 бит на вывод
00000E,BB07,,       out DDRB,r16            ; Установить бит 3 в portb для вывода на LED
,,,         
000010,E005,,       ldi r16,$5                      ; Установить параметры делителя частоты (Timer 0)
000012,BF03,,       out TCCR0,r16           ; TCCR0 = $5 => 1MHz/256/1024 = 4Hz
,,,         
000014,E002,,       ldi r16,(1<<1)          ; Разрешить прерывания Timer0
000016,BF09,,       out TIMSK,r16
,,,         
000018,E200,,       ldi r16,$20                     ; Разрешить режим холостого хода
00001A,BF05,,       out MCUCR,r16  
,,,         
00001C,E008,,       ldi r16,$8                      ; Погасить LED
00001E,BB08,,       out PORTB,r16
,,,         
000020,E030,,       ldi r19,0x00            ; Дополнительный программный делитель частоты
,,,   
000022,9478,,       sei                                     ; Разрешить прерывания  
,,,         
,,,         
,,loop2,loop2:        
000024,9588,,       sleep                           ; Перейти в режим холостого хода
000026,CFFE,,       rjmp    loop2           ; После обработки прерывания по переполнению Timer0
,,,                                              ; снова перейти в режим холостого хода
,,time,time:
000028,9533,,       inc     r19                     ; Увеличить значение счетчика
00002A,3032,,       cpi     r19,2           
00002C,F01A,,       brmi    fin                     ; Если счетчик <2 то переход
,,,      
00002E,9502,,       swap    r16                     ; Изменение значения требуемого бита 
000030,BB08,,       out     PORTB,r16       ; Вывод в PORTB 
,,,         
000032,E030,,       ldi     r19,0           ; Сброс счетчика
,,fin,fin: 
,,,         
000034,9518,,       reti
,,,         
,,,
