Проблема с прерываниями в AT90S8515
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено просто вопрос 30 августа 2004 г. 16:32

При наличии в программе более двух прерываний (таймер0 и таимер1,таймер0 и UART) зацикливается один из таймеров/счетчиков. Причем флаг переполнения(или совпадения) таймера аппаратно сбрасывается при переходе на вектор прерывания,
однако сразу после выполнения rjmp в регистрах таймера флаг переполнения устанавливается и опять программа выполняет прерывание от таймера.
Привожу маленькую программу, которая корректно работает в симуляторе,однако с эмулятором и на процессоре не работает.

P.S. Plz HELP me, SOS me !!!

.include "AT90S8515_Std.aio"
.include "8515def.inc"

.cseg
.org 0
rjmp start
.org INT0addr
reti
.org INT1addr
reti
.org ICP1addr
reti
.org OC1Aaddr
rjmp On_OC1Aaddr
.org OC1Baddr
reti
.org OVF1addr
reti
.org OVF0addr
rjmp OnTimer0_Ovf
.org SPIaddr
reti
.org URXCaddr
reti
.org UDREaddr
reti
.org UTXCaddr
reti
.org ACIaddr
reti

;SetBitP P,bit
.macro SetBitP
in r16,@0
sbr r16,1<<@1
out @0,r16
.endmacro

start:

ldi r16,high(RAMEND)
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16

ldi r16,$04
out TCCR0,r16
ldi r16,~(32-1)
out TCNT0,r16
SetBitP TIMSK,TOIE0

ldi r16,$0d
out TCCR1B,r16
ldi r16,200
out OCR1AL,r16
ldi r16,2
out OCR1AH,r16
SetBitP TIMSK,OCIE1A
sei

forever:
nop
rjmp forever


OnTimer0_Ovf:
nop
ldi r16,~(32-1)
out TCNT0,r16
reti

On_OC1Aaddr:
nop
reti

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru