Хочу организовать небольшую задержку перед работой основной программы. Решил использовать таймер, настроенный по переполнению. Вот код
Код: Выделить всё
.include "m8def.inc"
.cseg
.org 0
.EQU AD=0
.EQU exINT1=3 //int1
.EQU AIN1=7
.EQU AIN0=6
rjmp start
;====== обработка прерывания ТС1 по переполнению ========
TIM1_OVF:
cli
rjmp main
reti
;======= MACRO =======
.macro outi
ldi R16,@1
out @0,R16
.endm
start:
;======= Разрешение прерывания INT1 ====
outi MCUCR,0b00000100 //по любому изменению сигнала
outi GICR,0b10000000 //разрешает внешнее прерывание с int1
;======= Инициализация стека======
outi SPH,high(RamEnd)
outi SPL,low(RamEnd)
;======= Настойка аналогового компаратора =============
outi ACSR,(0<<ACD)|(1<<ACBG)|(0<<ACIE)|(0<<ACIS1)|(0<<ACIS0)
// включить/ опора/ прерывание/ по любому изм. сигнала
;====== Настройка таймера ТС1 ========
outi SFIOR, (1<<PSR10)
outi TCCR1B, (0<<CS12)|(1<<CS11)|(0<<CS10)
;частота/8
outi TIMSK, (1<<TOIE1) // прерывание по переполнению ТС1
outi TCNT1H,0
outi TCNT1L,0
;======= Порты ==========
cbi DDRD,exINT1 //порт Д на вход для ИНТ1
sbi PORTD,exINT1 //подтяжка инта
outi DDRD,0 ;вход ног компаратора
outi PORTD,0
outi DDRB,255
outi PORTB,0
sei
loop: //цикл для переполнения таймера
rjmp loop
main: //основная программа (моргает диодами)
sbis ACSR,ACO
rjmp danger
rjmp work
rjmp main
work:
sbi PORTB,0
sbi PORTB,1
cbi PORTB,2
rjmp main
danger:
cbi PORTB,0
cbi PORTB,1
sbi PORTB,2
rjmp main
Код: Выделить всё
outi SPL,low(RamEnd) Решил сделать по вумному. Заменил имя обработчика с
ТIM1_OVF на .ORG $010
В студии отлично, стал переходить на обработчик (ШОЗАФИГНЯ АААА), но в шпротеусе стал вылетать Invalid OPCODE на PC=0x0006
Уже моск весь вскипел, помогите люди умные.



