Отговори на тема  [ 5 мнения ] 
Проблем с комбинация от 2 прекъсвания при pic16f 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Проблем с комбинация от 2 прекъсвания при pic16f
Здравейте!
Имам следния странен проблем:
Имплементирал съм софуерно предаване и приемане по RS-232 при pic16f684. Когато е разрешено прекъсването при промяна на PORTA, предаването работи без грешка. Когато обаче разреша и прекъсването при падащ фронт на RA2, предаването не сработва.
Предполагам, че проблема идва от неправилно съвместяване на две прекъсвания на един порт. Не мога да си обяся обаче защо става така, при условие, че прекъсването при промяна на състоянието на RA2 не е разрешено.
Ето откъс от конфигурацията на прекъсванията:
Код:
      BCF   OPTION_REG,6;INTERRUPT ON FALLING EDGE

      BSF   INTCON,7
      BSF   INTCON,6
      BSF   INTCON,4
      BSF   INTCON,3


      BSF   IOCA,0;ON-CHANGE INTERRUPT ENABLED
      BSF IOCA,1

И откъс от програмата за обработка на прекъсвания:
Код:
ORG   H'04'
   BCF   INTCON,7;DISABLE GLOBAL INTERRUPTS
   BCF INTCON,3;DISABLE PORTA ON-CHANGE INTRRUPT
   BCF   INTCON,4;DISABLE RA2/INT INTERRUPT

   BTFSC   INTCON,0;INTERRUPT FROM PORTA CHANGE?
   CALL   DETECT_BUTTON
   
   BTFSC   INTCON,1;INTERRUPT FROM RA2/INT?
   CALL   RECEIVE

   BSF INTCON,3;ENABLE PORTA ON-CHANGE INTRRUPT
   BSF   INTCON,4;ENABLE RA2/INT INTERRUPT
   
   RETFIE

Ще бъда много благодарен на съвет или предположение. :)


Пет Апр 25, 2008 7:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Проблема е решен
Това го пиша за ползата на тези, които някога биха се сблъскали с подобен проблем.
Поиграх си малко и забелязах, че когато сложа реда
Код:
      BSF   INTCON,4
в коментар, другото разрешено прекъсване се обработва. А когато махна коментара, въобще не се стига до функцията за обработка на прекъсванията. Това, което ми оправи проблема беше, че вместо всяко прекъсване да го разрешавам със сетване на съответния бит по отделно, целия INTCON го записвам на веднъж. Ето така:
вместо
Код:
      BSF   INTCON,7
      BSF   INTCON,6
      BSF   INTCON,4
      BSF   INTCON,3
Изполвам:
Код:
      MOVLW B'1001100'
      MOVWF INTCON

Програмката вече си работи идеално. Явно това е някакъв бъг за този процесор.


Чет Май 01, 2008 7:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Окт 10, 2004 9:55 am
Мнения: 1718
Мнение Re: Проблема е решен
dan написа:
Това го пиша за ползата на тези, които някога биха се сблъскали с подобен проблем.
Поиграх си малко и забелязах, че когато сложа реда
Код:
      BSF   INTCON,4
в коментар, другото разрешено прекъсване се обработва. А когато махна коментара, въобще не се стига до функцията за обработка на прекъсванията. Това, което ми оправи проблема беше, че вместо всяко прекъсване да го разрешавам със сетване на съответния бит по отделно, целия INTCON го записвам на веднъж. Ето така:
вместо
Код:
      BSF   INTCON,7
      BSF   INTCON,6
      BSF   INTCON,4
      BSF   INTCON,3
Изполвам:
Код:
      MOVLW B'1001100'
      MOVWF INTCON

Програмката вече си работи идеално. Явно това е някакъв бъг за този процесор.

Защо реши че е бъг?
Не си ли се замислял че може да прекъсне докато го обработваш прекъсването ?

_________________
Избийте баламите и тарикатите сами ще умрат!
Няма невъзможни работи - има много трудни работи!
----------------------------------------------------------------------------------
"Я в Москве с киркой уран найду, при такой повышенной зарплате" !


Пет Май 02, 2008 12:44 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
Ами просто започнах последователно да сетвам един пин на различни места в програмата. И така след няколко опита просто видях, че процесора не продължава нататък след тези команди:
Код:
      BSF   INTCON,7
      BSF   INTCON,6
      BSF   INTCON,4
      BSF   INTCON,3


Пет Май 02, 2008 2:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Ами просто помисли по написаното от plameniv. С какъвто и да е контролер, по твоя начин все може да го има тоя "бъг".
Освен това, ако този откъс от подпрограмата за обработка на прекъсванията не е откъс, то май "Програмката вече си работи идеално" на магия...


Пет Май 02, 2008 5:43 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни