AVR ATTiny13. Помогите разобраться с прерываниями

Обсуждаем контроллеры компании Atmel.
Ответить
colonelmarch
Родился
Сообщения: 9
Зарегистрирован: Чт авг 23, 2012 21:15:08

AVR ATTiny13. Помогите разобраться с прерываниями

Сообщение colonelmarch »

Вроде и прочитал то, что нужно, но физически реализовать не могу! Подскажите, как сделать так, что бы МК при включении проходил инициализацию и уходил в сон, а просыпался при нажатии кнопки? Лучше, если с примером на ассемблере.

Помогите, пожалуйста!
Реклама
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

Re: AVR ATTiny13. Помогите разобраться с прерываниями

Сообщение просто КОТ »

Вот тут я разбирался -- может поможет. Почитай, там не много!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Реклама
BVS
Потрогал лапой паяльник
Сообщения: 336
Зарегистрирован: Пн май 23, 2011 18:27:41

Re: AVR ATTiny13. Помогите разобраться с прерываниями

Сообщение BVS »

сидел как раз тоже изучал AVR ATTiny13
наверно как то так, но я могу ошибаться:
Спойлер

Код: Выделить всё

.include "tn13Adef.inc"
;=============
;программа делает важные действия по нажатию кнопки между 6й ногой и землей
;=============
.org 0
rjmp RESET				;External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org	INT0addr		; External Interrupt 0
rjmp EXT_INT0
.org	PCI0addr		; External Interrupt Request 0
reti 
.org	OVF0addr		; Timer/Counter0 Overflow
reti 
.org	ERDYaddr		; EEPROM Ready
reti
.org	ACIaddr			; Analog Comparator
reti
.org	OC0Aaddr		; Timer/Counter Compare Match A
reti
.org	OC0Baddr		; Timer/Counter Compare Match B
reti
.org	WDTaddr			; Watchdog Time-out
reti
.org	ADCCaddr		; ADC Conversion Complete
reti
;=============
EXT_INT0:		;внешнее прерывание 0
		push r16
		in r16,SREG;
		push r16

			ldi r16,(0<<INT0)|(0<<PCIE) ;выключаемегочтобнемешало
			out GIMSK,r16

		pop r16
		out SREG,r16
		pop r16
	reti
;=============
SUPERPUPERZADACHA:		;МЕГАСУПЕРЗАДАЧА
			nop
			nop			;ТУТ важные для всего процесса действия!!!
			nop
			nop
		ret
;=============
RESET:
;=============
;установка указателя стека
;================
			cli
			ldi R16,low(RamEnd)      
			out SPL,R16
;================
; Инициализация периферии
;================
;Порты
;================
;PORTB
			
			ldi r16,0
			out ddrb,r16
			ldi r16,1<<PB1 ;подтяжку на INT0
			out portb,r16
;=============
;=============
MAIN:   	
			ldi r16,(1<<INT0)|(0<<PCIE)   ;включить прерывание
			out GIMSK,r16
			ldi r16,(2<<SM0)|(1<<SE)|(0<<ISC00)   ;включить Power-down и условие низкий уровень
			out MCUCR,r16
			sleep						;спим пока какой нибудь идиот не нажмет кнопку
			ldi r16,0
			out MCUCR,r16
			rcall SUPERPUPERZADACHA		;ЗАПУСТИМ МЕГАСУПЕРЗАДАЧУ
		rjmp MAIN
;=============
Ответить

Вернуться в «AVR»