на вход 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 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


