,,,;Tiny 11 -     Пример применения микроконтроллера
,,,;                      для обеспечения индикации светодиода.
,,,         
,,,; Определение устройства.
,,,.device ATTINY15
,,,         
,,,; Определение имен регистров ввода/вывода
,,,.equ    SREG    =$3F
,,,.equ    GIMSK   =$3B
,,,.equ    GIFR    =$3A
,,,.equ    TIMSK   =$39              
,,,.equ    TIFR    =$38 
,,,.equ    MCUCR   =$35
,,,.equ    MCUSR =$34
,,,.equ    TCCR0   =$33
,,,.equ    TCNT0   =$32
,,,.equ    TCCR1   =$30
,,,.equ    TCNT1   =$2F
,,,.equ    OCR1A   =$2E
,,,.equ    OCR1B   =$2D
,,,.equ    PORTB   =$18
,,,.equ  PINB    =$16
,,,.equ  DDRB    =$17
,,,.equ    ACSR    =$08     
,,,.equ    ADMUX   =$07
,,,.equ    ADCSR   =$06
,,,.equ    ADCH    =$05
,,,.equ    ADCL    =$04       
,,,         
,,,.cseg                                 ; Сегмент кода (находится во Flash памяти).
,,,                                              ; Для t11 память данных (EEPROM) отсутствует.
,,,         
,,,;Вектор прерываний
,,,.org 0
000000,C002,,       rjmp init                       ;Инициализация и обработка прервания по Reset
000002,C012,,       rjmp int0                       ;Обработчик Int0 - кнопка "ВКЛ"
000004,C00A,,       rjmp button                     ;Обработчик нажатия кнопки "ВЫКЛ"
,,,      
,,,;Блок инициализации
,,init,init:   
,,,         
000006,E008,,       ldi r16,0x08                    ; 1 бит на вывод
000008,BB07,,       out DDRB,r16            ; Установить бит 3 в portb для вывода на LED
,,,         
00000A,9AC3,,       sbi PORTB,3             ; Погасить LED
,,,         
00000C,E100,,       ldi r16,0x10            ; Разрешить режим холостого хода (For ISIS 6.5 - 13)
00000E,BF05,,       out MCUCR,r16           ; и прерывание по низкому уровня   
,,,         
000010,E600,,       ldi r16,0x60                    ; Разрешить прерывания по входам порта B и INT0 
000012,BF0B,,       out GIMSK,r16
,,,         
000014,9478,,       sei                                     ; Разрешить прерывания  
,,,      
,,loop2,loop2:        
000016,9588,,       sleep                           ; Перейти в режим пониженного энергопотребления
000018,CFFE,,       rjmp    loop2           ; После обработки прерывания нажатия кнопок
,,,                                              ; снова перейти в режим пониженного энергопотребления
,,button,button:
,,,         
00001A,E400,,       ldi r16,0x40                    ; Разрешить прерывания по входам порта B и INT0 
00001C,BF0B,,       out GIMSK,r16
,,,         
00001E,9AC3,,       sbi PORTB,3                     ; PIN0 - Зажечь 
,,,         
000020,D011,loop,loop:  rcall Delay
000022,9BB4,,       sbis PINB,4
000024,CFFD,,       rjmp loop
,,,         
000026,C006,,       rjmp fin
,,int0,int0:
000028,E200,,       ldi r16,0x20                    ; Разрешить прерывания по входам порта B и INT0 
00002A,BF0B,,       out GIMSK,r16
,,,         
00002C,98C3,,       cbi PORTB,3                     ; PIN0 - Зажечь 
,,,         
00002E,D00A,loop1,loop1: rcall Delay
000030,9BB2,,       sbis PINB,2
000032,CFFD,,       rjmp loop1
,,,         
,,fin,fin: 
,,,                                      ; Вывод в PORTB 
000034,0000,,       nop
000036,E600,,       ldi r16,0x60                    ; Разрешить прерывания по входам порта B и INT0 
000038,BF0B,,       out GIMSK,r16
00003A,0000,,       nop
00003C,E600,,       ldi r16,0x60                    ; Игнорировать другие прерывания
00003E,BF0A,,       out GIFR,r16
000040,0000,,       nop
000042,9518,,       reti
,,,; 200 mks
,,Delay,Delay:
000044,E124,ldi r18,20,ldi r18,20
000046,E230,,       d2: ldi r19,32
000048,0000,,               d3: nop
00004A,953A,,                       dec r19
00004C,F7E9,,               brne d3
00004E,0000,,               nop
000050,952A,,       dec r18
000052,F7C9,,       brne d2
000054,0000,,       nop
000056,9508,ret,ret
,,,         
,,,
