Например TDA7294

 Форум РадиоКот • Просмотр темы - pic12f675 не работают interrupt-on-change
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Чт авг 17, 2017 18:53:50



Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Сб авг 12, 2017 19:39:49 
Родился

Зарегистрирован: Пн июл 17, 2017 16:51:45
Сообщений: 8
Рейтинг сообщения: 0
Привет!

на вход GP1 МК_2 подаю 0 либо долго (120мк), либо недолго(13мк).
этот ноль до мк доходит и изменяет напряжение на его ноге (запечетлено на рис.1)
Далее по плану срабатывает прерывание по изменению уровня на ноге, в зависимости от фронта в иср коде либо запускается таймер, либо читается с него значение (фронт определяем по рег. START_FLAG)
Далее с этим числом другие плюхи всякие творятся(не об них речь)..

Но прерывание не срабатывает => в иср код не заходит => не знаем сколько натикало => всяких плюх не будет и всё насмарку
Вроде все флаги очистила, разрешения дала.

Подскажите, в чём дело
Изображение
рис.1


Код:
 list   p=12f675
     #include <p12f675.inc>
    __CONFIG _CPD_OFF & _CP_OFF & _BODEN_OFF & _MCLRE_ON & _PWRTE_ON & _WDTE_OFF & _INTRC_OSC_NOCLKOUT
   
W      equ          0
F      equ          1
varT      equ          20h      
varTMR0_1   equ          21h      
W_temp      equ          22h
STATUS_temp   equ          23h
TMR0_time   equ          24h
time_on_TMR0   equ          25h   
START_FLAG   equ          26h
   
   
      org 0x0000
      goto INIT
      
      
;...................................................
;...................................................
      org 0x0004
      
      movwf       W_temp          ;saving key register values
      swapf       STATUS,W
      clrf        STATUS
      movwf       STATUS_temp
                  
                  
      ;interrupt actions
      
      bcf       STATUS,RP0
      btfsc       GPIO,1      ;LOW lvl on GPIO.1
      goto       What_time_on_TMR0   ;NO   => HIGH lvl => it was LOW lvl => end of pressed
                  ;YES  => it was HIGH lvl => START of pressed
      clrf       TMR0
      clrf       START_FLAG
      goto       escape
      
      
What_time_on_TMR0      
      MOVF       TMR0,W
      MOVWF       time_on_TMR0
      clrf       TMR0
      bcf       INTCON,GPIF
      
      MOVWF       START_FLAG
      
      goto       escape
      
               
escape      swapf       STATUS_temp,W 
      movwf       STATUS
      swapf       W_temp,F
      swapf       W_temp,W
      retfie          
         
      
;...................................................
;...................................................   
      
;=====================INIT===========================
INIT   
   
   bsf   STATUS,RP0
   MOVLW   b'11111111'
   MOVWF   TRISIO      ;all ports as inputs
   
   ;==SET GP<5:0> to Digital IO
   bcf   STATUS,RP0;BANK 0
   clrf   GPIO      ;LOW lvl http://avr.ru/beginer/understand/1wire ????????..... so to press data bus DO GPIO.1 as OUTPUT!!!
   MOVLW   H'1f'      ;Set GP<5:0> to
   MOVWF   CMCON          ;digital IO
   bsf   GPIO,0
   
   bsf   STATUS,RP0;BANK 1
   CLRF   ANSEL      ;Digital I/O
   bsf   STATUS,RP0
   MOVLW   b'11111110'
   MOVWF   TRISIO      ;all ports as inputs.  GP0 as output
   bsf   TRISIO,0
   ;==
   
   
   bsf       INTCON,T0IF
   bcf       INTCON,T0IE
   bcf       INTCON,GIE
   
   ;
   banksel   OPTION_REG
   MOVLW   b'11010000'   ; ~, ~, CLKOUT, ~, TMR0, prescaller 2
   MOVWF   OPTION_REG
   
   BCF   STATUS,RP0

   clrf   START_FLAG
   
    ;==Initializing CHANGE INTERRUPT
   ;enable   change interrupt on GPIO.1
   MOVLW       b'00000010'
   bsf       STATUS,RP0
   MOVWF       IOC
   ;==clr   change interrupt flug
   bcf       INTCON,GPIF
   ;==enable Change interrut
   bsf       INTCON,GPIE
   
    ;====Initializing CHANGE INTERRUPT END
   
   
      goto main
;============================
   
      
      
;====================MAIN============================      
main       bcf      STATUS,RP0                     
       MOVF   GPIO,w       ;reading GPIO
wait_interrupt
       ;MOVF   GPIO,w
       MOVF   START_FLAG,F
       btfsc   STATUS,3    ;Z=0? flag <> 0 ?
       goto wait_interrupt       ;Z=1, flag   = 0
                ;Z=0, flag   <> 0
      
       MOVF    time_on_TMR0,W
       MOVWF   EEDATA
       MOVLW   00h
       MOVWF   EEADR
      
      
       BSF       STATUS,RP0       ;Bank 1
       BSF       EECON1,WREN       ;Enable write
       BCF       INTCON,GIE       ;Disable INTs
       MOVLW   55h          ;Unlock write
       MOVWF   EECON2       ;
       MOVLW   H'AA'          ;
       MOVWF   EECON2       ;
       BSF       EECON1,WR       ;Start the write
       BSF       INTCON,GIE       ;Enable INTS
      
       goto main
      
      
   end




Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 01:46:39 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт ноя 27, 2015 00:22:35
Сообщений: 41
Рейтинг сообщения: 0
При появлении в main прерывания запрещены (GIE).
Читать gpio в коде не надо, поскольку ожидаете прерывания по изменению на ноге.
Из wait_interrupt выбраться будет не просто, поскольку STATUS,3 всегда будет "1".
Копируете в EEDATA без смены банка.
В прерываниях если GPIO,1=0 выходите без очистки флага источника (GPIF)

И хорошо подумайте над алгоритмом записи в eeprom, с таким подходом износить его можно за пару минут.


Вернуться наверх
 Профиль  
 
От идеи до готового устройства! Нужен только EasyEDA!

Бесплатный инструмент для проектирования печатных плат - нарисуй свою плату прямо сейчас!

JLCPCB for PCB Prototyping, всего $2 за 10 печатных плат 10×10см. Доставка 2-3 дня.

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 11:38:02 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 940
Откуда: Баку
Рейтинг сообщения: 0
И еще один момент:
Цитата:
The user, in the Interrupt Service Routine, can clear the interrupt in the following manner:
a) Any read or write of GPIO. This will end the mismatch condition.
b) Clear the flag bit GPIF.
A mismatch condition will continue to set flag bit GPIF. Reading GPIO will end the mismatch condition and allow flag bit GPIF to be cleared.

Так что просто bcf INTCON, GPIF не пройдет.

_________________
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Просто Жук.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 12:09:08 
Открыл глаза
Аватар пользователя

Зарегистрирован: Пт ноя 27, 2015 00:22:35
Сообщений: 41
Рейтинг сообщения: 0
Zhuk72
Мне кажется этого "btfsc GPIO,1" достаточно, чтобы покончить с мисматч кондишн.

Думаю в данном случае ещё можно напомнить тс про дребезг контактов.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: pic12f675 не работают interrupt-on-change
СообщениеДобавлено: Вс авг 13, 2017 14:29:15 
Держит паяльник хвостом
Аватар пользователя

Карма: 16
Зарегистрирован: Ср янв 29, 2014 09:41:31
Сообщений: 940
Откуда: Баку
Рейтинг сообщения: 0
Это еще под вопросом.
А вот movf GPIO, f и последующий bcf INTCOM, GPIF точно сработают.

_________________
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Просто Жук.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y