IfoR, очень благодарна Вам за подробные рекомендации!
С макросами я просто еще как-то не успела познакомиться, как их делают и с чем едят =) Буду знать.
Проблема с прерыванием заключалась в том,что в таблице векторов у меня неправильно прописаны адреса, 000 -> 002 -> 004, я читала пример ШИМа на другой Атмеге и на автомате написала адреса как в том примере, а не как в даташите на 8 атмегу
.ORG $000
rjmp RESET ; Reset Handler
.ORG $001 ;rjmp EXT_INT0 ; IRQ0 Handler
reti
.ORG $002 ;rjmp EXT_INT1 ; IRQ1 Handler
reti
.ORG $003 ;rjmp TIM2_COMP ; Timer2 Compare Handler
reti
.ORG $004
rjmp TIM2_OVF ; Timer2 Overflow Handler
(и прочие вектора)
Теперь обработчик прерывания работает, на него стрелка прыгает, действие выполняется. АВР студия не виновата =)
А вот по команде (напишу ее пока так,как писала я) ничего не происходит:
ldi R16, 0b11111111 ; ПОЛОЖИТЬ В OCR 0*FF ; на выходе будет лог. 1
out OCR2, R16 ;
Но в общем-то программа может работать и без этого) Возможно, OCR нельзя обновить в то время, когда считает таймер-счетчик, и можно обновить только в момент переполнения , к началу нового периода.. ?
Теперь остался какой-то странный глюк, что значение в ОСR из АЦП кладется с отставанием .
Т.е кладу в АЦП 0200 (нужен старший байт,т.е в ОСR будет 02) . таймер переполнился, в обработчике прерывания кладем значение АЦП в OCR, но ничего не происходит, там ноль как и был.
Меняю значение в АЦП (пусть 03) в обработчике прерывания по переполнению таймера в OCR кладется... прежнее значение - 02.
По следующему переполнению в OCR положится 03 и т.д., т.е кладется не текущее значение, а предыдущее!
Буду искать причины, но если кто-то знает, в чем дело, поделитесь мнением =)