
AVRASM ver. 1.57  LED_KBD.asm Thu Aug 03 12:40:05 2006


         ;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
000001 c012      	rjmp int0			;Обработчик Int0 - кнопка "ВКЛ"
000002 c00a      	rjmp button			;Обработчик нажатия кнопки "ВЫКЛ"
         	
         ;Блок инициализации
          init:   
         
000003 e008      	ldi r16,0x08			; 1 бит на вывод
000004 bb07      	out DDRB,r16   		; Установить бит 3 в portb для вывода на LED
         
000005 9ac3      	sbi PORTB,3		; Погасить LED
         
000006 e100      	ldi r16,0x10		; Разрешить режим холостого хода (For ISIS 6.5 - 13)
000007 bf05      	out MCUCR,r16		; и прерывание по низкому уровня   
         
000008 e600      	ldi r16,0x60			; Разрешить прерывания по входам порта B и INT0 
000009 bf0b      	out GIMSK,r16
         
00000a 9478      	sei					; Разрешить прерывания  
         	
          loop2:	
00000b 9588      	sleep				; Перейти в режим пониженного энергопотребления
00000c cffe      	rjmp 	loop2		; После обработки прерывания нажатия кнопок
         						; снова перейти в режим пониженного энергопотребления
          button:
         
00000d e400      	ldi r16,0x40			; Разрешить прерывания по входам порта B и INT0 
00000e bf0b      	out GIMSK,r16
         
00000f 9ac3      	sbi PORTB,3			; PIN0 - Зажечь	
         
000010 d011      loop:	rcall Delay
000011 9bb4      	sbis PINB,4
000012 cffd      	rjmp loop
         
000013 c006      	rjmp fin
          int0:
000014 e200      	ldi r16,0x20			; Разрешить прерывания по входам порта B и INT0 
000015 bf0b      	out GIMSK,r16
         
000016 98c3      	cbi PORTB,3			; PIN0 - Зажечь	
         
000017 d00a      loop1:	rcall Delay
000018 9bb2      	sbis PINB,2
000019 cffd      	rjmp loop1
         
          fin: 
         					; Вывод в PORTB 
00001a 0000      	nop
00001b e600      	ldi r16,0x60			; Разрешить прерывания по входам порта B и INT0 
00001c bf0b      	out GIMSK,r16
00001d 0000      	nop
00001e e600      	ldi r16,0x60			; Игнорировать другие прерывания
00001f bf0a      	out GIFR,r16
000020 0000      	nop
000021 9518      	reti
         ; 200 mks
          Delay:
000022 e124      ldi r18,20
000023 e230      	d2: ldi r19,32
000024 0000      		d3: nop
000025 953a      			dec r19
000026 f7e9      		brne d3
000027 0000      		nop
000028 952a      	dec r18
000029 f7c9      	brne d2
00002a 0000      	nop
00002b 9508      ret
         

Assembly complete with no errors.
