Пример из книги

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
RAIDER
Открыл глаза
Сообщения: 49
Зарегистрирован: Вт дек 28, 2010 22:24:32

Пример из книги

Сообщение RAIDER »

Тут решил поизучать прерывания и почитал книгу Ревича Практическое применение микроконтроллеров AVR пример на 111 странице. Че то я по примеру сделал и не заработало. Точнее в AVR Studio на порту б что то происходит, появляется единица. А в протеусе ничего не показывает.

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

.device AT90S2313
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\2313def.inc"


.def temp=r16    ;рабочая переменная
.def Count_time=r17   ;счетчик задержки   
.def Counter=r18      ;счетчик нажатий
.def Flag=r19         ;регистр флагов: если бит 0 установлен
;то обнаружили нажатие и переходим к отпусканию


;=====прерывания=====
rjmp RESET
rjmp INT0_1
reti
reti
reti
reti
rjmp TIM0
reti
reti
reti
reti

;=====программа=====
INT0_1: ;внешнее прерывание по кнопке
   ;запрещаем прерывание
   clr temp
   out GIMSK,temp
   ldi temp,$FF
   out GIFR,temp
   sbrs Flag,0
   rjmp Push_pin
   cbr Flag,1
   inc Counter
   out PortB,Counter
   ldi Count_time,50
   rjmp ent_int

Push_pin:
   sbr Flag,1
   ldi Count_time,128
ent_int:
   ldi temp,0b00000011
   out TCCR0,temp
   reti

TIM0:
   dec Count_time
   breq end_timer
   reti
end_timer:
   clr temp
   out TCCR0,temp
   sbrc Flag,0
   rjmp Push_tim
   ldi temp,(1<<ISC01)
   out MCUCR,temp
   rjmp end_tim
Push_tim:
   ldi temp,(1<<ISC01|1<<ISC11)
   out MCUCR,temp
end_tim:
   ldi temp,(1<INT0)
   out GIMSK,temp
   reti

RESET:
   ldi temp,low(RAMEND)
   out SPL,temp
   ldi temp,0b00000100
   out portd,temp
   ldi temp,0b11111111
   out DDRB,temp
   clr Counter
   clr Flag
   ldi temp,(1<<TOIE0)
   out TIMSK,temp
   ldi temp,(1<<ISC01)
   out MCUCR,temp
   ldi temp,(1<<INT0)
   out GIMSK,temp
   sei

Gcykle:

rjmp Gcykle
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»