NewSistems Опубликовано 4 апреля, 2018 Жалоба Поделиться Опубликовано 4 апреля, 2018 Добрый день. Пытаюсь сделать прерывания по изменению GP0. Ставлю GP0 на вход, разрешаю прерывания по изменению GPIO, разрешаю глобальные прерывания, ставлю бит IOC0 в 1. Но при изменении GP0 прерывание не срабатывает. Прерывание по переполнению таймера срабатывает отлично. Что я делаю не так? Прикладываю код программы. Если этого недостаточно, чтобы понять проблему, приложил полный код программы файлом. list p=12f683 #include "p12f683.inc" __config 0x3FF4 W_TEMP EQU 0x40 STATUS_TEMP EQU 0x41 flag EQU 0x42 org 0 goto start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0x04 MOVWF W_TEMP SWAPF STATUS,W MOVWF STATUS_TEMP ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;программа обработки прерываний ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SWAPF STATUS_TEMP,W MOVWF STATUS SWAPF W_TEMP,F SWAPF W_TEMP,W retfie ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; start clrf GPIO movlw 0x07 movwf CMCON0 bsf STATUS,RP0 ;1 bank movlw b'00001001' movwf TRISIO movlw b'10000001' movwf OPTION_REG bcf INTCON,T0IF bsf INTCON,T0IE movf GPIO,w bcf INTCON,GPIF bsf INTCON,GPIE bsf INTCON,GIE movlw b'00000001' movwf IOC bcf STATUS,RP0 ;0 bank movlw .0 movwf TMR0 ask btfss flag,4 ;данный бит устанавливается в программе обработки прерываний goto ask bcf flag,4 call indicate ;подпрограмма indicate выводит значение, полученное в результате ;обработки прерывания, на индикаторы goto ask reciever1.asm Читать дальше Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.