radim s PIC 16F887, 8 Mhz, na easyPic5. Pokušavam izmjeriti širinu signala na RB.5 pomoću Tajmera0. Osnovni signal ima širinu 19.5ms i interval između dva signala je oko 19.6ms. Osnovna zamisao je da pomoću Inetrrupt izmjerim širinu signala i dalje ju obrađujem, ali zapeo sam na mjerenju (ne radi mi inerrupt rutina). Možete li mi pomoći (guglam već skoro dva mjeseca, a rezultat ništa)?
Code: Select all
dim signal as sbit at RB5_bit
dim counter, cnt, CNT_STARI as word
dim CNT_str, CNT_STARI_STR as string [5]
sub procedure interrupt() ' Interrupt rutine
INTCON.GIE=0
if TestBit (INTCON, RBIF = 1 )then
INTCON.RBIF = 0
If signal=1 then
cnt=0
TMR0=240
INTCON.T0IE=1
else
CNT_STARI=cnt
end if
end if
IF (INTCON.T0IF = 1 ) THEN ' PROVJERA JE LI DOŠLO DO OVERFLOW
INTCON.T0IF = 0
INC (cnt)
end if
end sub
'----------------------------------------------------------------------------
main: ' Main program
ANSEL = 0 ' MCU settings, digital I/O and Comparators off
ANSELH = 0
C1ON_bit = 0
C2ON_bit = 0
TRISB.5=1 'Set PB5 as input
INTCON = 0x90 '1001 0000
WPUB.WPUB5=1 ' Weak Pull-Up on pin B0
IOCB.IOCB5=1
Lcd_Init() Lcd_Cmd(_LCD_CLEAR) Lcd_Cmd(_LCD_CURSOR_OFF)
CNT=0
CNT_STARI=0
'---------------------------------------------
OPTION_REG.T0CS=0
OPTION_REG.PSA=0 ' PRESKALER SE DODJELJUJE TIMER0
OPTION_REG.PS2=0
OPTION_REG.PS1=0
OPTION_REG.PS0=0
TMR0=240
INTCON.T0IE=1
INTCON.T0IF=0
while (True ) ' Unending loop
wordtostr (CNT, CNT_str)
lcd_out (1,1,CNT_str)
wordtostr (CNT_STARI, CNT_STARI_str)
lcd_out (2,1,CNT_STARI_str)
wend
end.