Форум по микроконтроллерам: Как Контролировать Прерывания - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Как Контролировать Прерывания

#1 Пользователь офлайн   skrvad 

  • Активный участник
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 48
  • Регистрация: 05 Февраль 10

Отправлено 20 Март 2010 - 19:53

Помогите, кто может. PIC 16f 628 контроллер, задействован 1-й таймер TMR1, разрешаю прерывания INTCON(GIE), устанавливаю прерывания по переполнению PIE1(TMR1IE), отслеживаю флаг PIR1(TMR1IF), рабочая точка программы уходит и возвращается обратно.

В подпрограмме обработки
запрещаю прерывания,
прибавляю 1 к переменной количества прерываний,
сбрасываю флаг переполнения,
разрешаю прерывания,
возврат в основной блок программы.

Проблема в том, что рабочая точка уходит по прерыванию 2 раза, на третий раз не реагирует.
Максимальное число получается 196607 hex 2 FF FF, то же не понимаю, получается 2 раза переполняется, а на 3 обнуляется.
Накопительная переменная 4-х байтная, кол-во прерываний 1 или 2-х байтная, без разницы.
С 98г. электроника как хобби, но сейчас пдумываю заниматься ею плотнее.
0

#2 Пользователь офлайн   Alex 

  • Активный участник
  • PipPipPip
  • Группа: Администратор
  • Сообщений: 320
  • Регистрация: 08 Август 08
  • Пол:Мужчина
  • Город:http://forum.eldigi.ru/

Отправлено 20 Март 2010 - 20:59

Цитата

рабочая точка программы уходит и возвращается обратно.
Это как понять ?
Объясните проблему попонятнее и желательно с приведённым кодом.

Я гдето тут выкладывал пример работы с таймером, поищите, может поможет.
0

#3 Пользователь офлайн   skrvad 

  • Активный участник
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 48
  • Регистрация: 05 Февраль 10

Отправлено 20 Март 2010 - 23:58

Про рабочую точку, это я вычитал где-то, у зарубежных авторов. Я имел ввиду программа выполняется контроллером, последовательно, тот адрес, который исполняется в данный момент времени назван рабочей точкой. Это мне так понятнее.))

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

Прикрепленные файлы

  • Прикрепленный файл  21.rar (12,72К)
    Количество загрузок:: 157

С 98г. электроника как хобби, но сейчас пдумываю заниматься ею плотнее.
0

#4 Пользователь офлайн   Alexeyslav 

  • Новичок
  • Pip
  • Группа: Пользователи
  • Сообщений: 7
  • Регистрация: 05 Ноябрь 11

Отправлено 06 Ноябрь 2011 - 01:32

Непонятный код. Но я не вижу нигде сохранения контекста в прерывании... хотя бейсик вродебы должен делать это автоматически?
И что тогда значит "рабочая точка уходит" в небытиё? Прерывание надо разрешить непосредственно перед возвратом, иначе много плохих вещей может происходить.
Флаг прерывания нужно смотреть только в самом прерывании. В основной программе установленный флаг ты увидишь только когда прерывания запрещены.
0

#5 Пользователь офлайн   Broka 

  • Активный участник
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 33
  • Регистрация: 02 Сентябрь 09
  • Пол:Мужчина
  • Город:Волгоград

Отправлено 13 Январь 2012 - 22:46

Флаг прерывания нужно смотреть только в самом прерывании.
Вот это правильно подмечено....... вот имено после команды RESUME и надо поставить Флаг запрета прерывания.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей