Страница 1 из 1
незапустить таймер2 на мега16
Добавлено: Пт дек 04, 2009 23:04:13
Александр Гончаров
Перевожу программу с меги8 на мегу16 так вот возникла проблема, никак немогу запустить таймер tim2_comp на меге16. подскажите где я ошибся. сил уже нету

Добавлено: Сб дек 05, 2009 01:38:39
Александр Гончаров
оказалось векторы прерываний надо было описать так....
тема закрыта
.CSEG
.ORG $0000
rjmp RESET
nop
rjmp EXT_INT0
nop
rjmp EXT_INT1
nop
rjmp TIM2_COMP
nop
rjmp TIM2_OVF
nop
rjmp TIM1_CAPT
nop
rjmp TIM1_COMPA
nop
rjmp TIM1_COMPB
nop
rjmp TIM1_OVF
nop
rjmp TIM0_OVF
nop
rjmp SPI_STC
nop
rjmp USART_RXC
nop
rjmp USART_UDRE
nop
rjmp USART_TXC
nop
rjmp ANALOG
nop
rjmp EE_RDY
nop
rjmp ANA_COMP
nop
rjmp TWI
nop
rjmp SPM_RDY
nop
Добавлено: Сб дек 05, 2009 23:31:21
Петро
можно проще - не писать столько ненужных nop'ов и переходов на обработчики прерываний, а написать:
Код: Выделить всё
. org OC2addr ;переход на адрес вектора прерываний по равенстве TCNT2 i OCR2
rjmp TIM2_COMP ;за тем адресом переход на обработчик
OC2addr - константа, как раз и есть адрес вектора прерывания по равенстве TCNT2 i OCR2 таймера 2, по крайней мере в АТmega8 она так имеет такое имя.
И текст программы станет намного короче
Добавлено: Сб дек 05, 2009 23:40:27
GP1
...и если ваш обработчик будет отстоять от rjmp-а дальше чем 2048 слов, получите ошибку и опять - "здравствуй форум, дядечки поможите!"