Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Dyzork
0 / 0 / 0
Регистрация: 09.11.2010
Сообщений: 47
1

Нет срабатывания прерывания

15.05.2014, 16:40. Просмотров 2794. Ответов 9
Метки нет (Все метки)

Доброго времени суток

Бодаюсь с 8-ой мегой. Проблема в том, что ни в какую не хочет срабатывать прерывание по переполнению таймера.
Даже удалил весь код, написал отдельную прогу, который просто по прерыванию должен инвертировать выход порта B
Код
Код
.include "m8def.yms"

.org 0x00         rjmp risit                     ; Сброс
.org 0x01         reti                        ; Внешнее прерывание 0
.org 0x02         reti                        ; Внешнее прерывание 1
.org 0x03         reti                        ; Таймер2 совпадение
.org 0x04         reti                        ; Таймер2 переполнение
.org 0x05         reti                        ; Таймер1 захват
.org 0x06         reti                        ; Таймер1 совпадение А
.org 0x07         reti                        ; Таймер1 совпадение Б
.org 0x08         reti                        ; Таймер1 переполнение
.org 0x09         rjmp dysp                     ; Таймер0 переполнение
.org 0x0a         reti                        ; SPI, передача закончена
.org 0x0b         reti                        ; USORT, прием окончен
.org 0x0c         reti                        ; USORT, регистр данных пуст
.org 0x0d         reti                        ; USORT, передача закончена
.org 0x0e         reti                        ; АЦП завершил конвертацию
.org 0x0f         reti                        ; EEPROM готова
.org 0x10         reti                        ; Аналоговый компаратор
.org 0x11         reti                        ; I2C
.org 0x12         reti                        ; Сохранение в память программ завершено

.def tmp = R16
.def tmp2 = R17

risit:         ldi tmp, High (ROMEND)
out SPH, tmp
ldi tmp, Low (ROMEND)
out SPL, tmp

ldi tmp, 0xff
out DDRB, tmp
ldi tmp, 0x00
out PORTB, tmp

ldi tmp, (1 << CS02) | (1 << CS00)
out TCCR0, tmp

ldi tmp, (1 << TOIE0)
out TIMSK, tmp

sei

rjmp main

main:          nop
rjmp main

dysp:          in tmp, PINB
ldi tmp2, 0xff
eor tmp, tmp2
out PORTB, tmp
reti
В симуляторе все работает на ура.

На будущее:портянки кода убирайте под спойлер. STT.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 16:40
Ответы с готовыми решениями:

Нет прерывания от таймера 1.
Помогите пожалуйста. При совпадении TCNT1 и OCR1A прерывание приходит на вектор...

ATTiny13a нет прерывания с АЦП.
Добрый день! Столкнулся с проблемой, на реальном устройстве не генерируется...

Прерывания. Одновременно или нет?
Я знаю когда выполняется прерывание, то главная функция не выполняется. ...

Вызов прерывания в обработке прерывания
В программе,нажатие кнопки вызывает прерывание,в котором оно...

Скорость срабатывания avr
Допустим, мой микроконтроллер (например, Atmega8, тактирующийся от кварца на 16...

9
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
15.05.2014, 17:22 2
Я бы в прерывание задержку добавил в полсек. А то ведь может и мигает , только не видишь , скорость для глаза не та.
0
Kymo
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 319
15.05.2014, 19:19 3
видно это мигание даже при 16Мгц кварца.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
15.05.2014, 20:53 4
Цитата Сообщение от YTYOUT
Я бы в прерывание задержку добавил в полсек. А то ведь может и мигает , только не видишь , скорость для глаза не та.
Илюх, не учи людей чему попало. В прерывании задержку на полсек... этож надо придумать, лучше сразу научить, чтобы в прерывании никаких долгих задержек.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
15.05.2014, 21:01 5
Я так векторы оформлял, когда на асме писал:
main.yms:
Код
//========================================================================
.nolist
.include   "m8535def.yms"
.list
//========================================================================

bla-bla.........

//========================================================================
.include   "vectors_m8535.yms"

.include   "library.yms"

.include   "proc_errors.yms"

.include   "system_timer.yms"

.include   "proc_1.yms"
//************************************************************************

bla-bla.........
Код
.cseg

.org   0x0000
rjmp   Riset

;====== INTERRUPT VECTORS ================================================
.org   INT0addr            ; External Ymtirrupt 0
reti

.org   INT1addr            ; External Ymtirrupt 1
reti

.org   OC2addr               ; Timer/Counter2 Compare Match
reti // rjmp   Proc_Int_BAM // reti

.org   OVF2addr            ; Timer/Counter2 Overflow
reti

.org   ICP1addr            ; Timer/Counter1 Capture Ivimt
reti

.org   OC1Aaddr            ; Timer/Counter1 Compare Match A
reti

.org   OC1Baddr            ; Timer/Counter1 Compare Match B
reti

.org   OVF1addr            ; Timer/Counter1 Overflow
reti

.org   OVF0addr            ; Timer/Counter0 Overflow
reti

.org   SPIaddr               ; SPI Serial Transfer Complete
reti               ; rjmp   SPI_Transfer_Int

.org   URXCaddr            ; USORT, RX Complete
reti

.org   UDREaddr            ; USORT Data Register Empty
reti

.org   UTXCaddr            ; USORT, TX Complete
reti

.org   ADCCaddr            ; ADC Conversion Complete
reti // rjmp   ADC_Complete

.org   ERDYaddr            ; EEPROM Ready
reti

.org   ACIaddr               ; Analog Comparator
reti

.org   TWIaddr               ; Two-wire Serial Interfosi
reti

.org   INT2addr            ; External Ymtirrupt Request 2
reti

.org   OC0addr               ; TimerCounter0 Compare Match
rjmp   Sys_Timer_Comp

.org   SPMRaddr            ; Store Prokram Memory Read
reti
;-------------------------------------------------------------------------
.org   INT_VECTORS_SIZE      ; size in words
;=========================================================================
Эти определения надерганы из инклюда соответствующего камня.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
15.05.2014, 22:44 6
По коду вроде замечаний нет. Проверьте в студии, те ли вы указываете кристаллы при прошивке.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
15.05.2014, 22:53 7
В симуляторе все работает на ура.
0
Kymo
0 / 0 / 0
Регистрация: 01.04.2012
Сообщений: 319
15.05.2014, 22:55 8
в железе тоже работает.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
15.05.2014, 22:56 9
В симуляторе он мог правильно кристалл указать, а при прошивке нет. Возможно с фьюзами рамс.
0
YTYOUT
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
15.05.2014, 22:57 10
Тогда может у него не MEGA8
0
15.05.2014, 22:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2014, 22:57

Как посчитать частоту срабатывания таймера?
Подскажите, как правильно расчитывается частота срабатывания таймера. Вот...

Изменение порогов срабатывания аквариумного терморегулятора на ATmega8A-AU (Algorithm Builder)
Собрал вот такой терморегулятор http://pakhom.weebly.com/r10-2012.html Всё...

Прерывания
Здравствуйте, такая проблема: Контроллер ATMega32, при нажатии на кнопку,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru