INTCON=0b11001000;
IOCB=0b00000100; //PORTB2- PIN CHANGE INTERRUP
//MOTOR SENS INTERRUPLI //em sens iptal edildi
T1CON=0b00110001;
TMR1H=0;
TMR1IE=1;
bu yukarda yazanlar portb change interrup ile ilgili,yani port b de hangi pinlerin change olayında interrupa girecegini ayarlamada kullanılıyor.sen üç pin olacak şekilde degişiklik yapacan.
//******************
#include <stdint.h>
#include <xc.h>
#include "usart_pic16.h"
#include "PORTLAR.c"
#include "DEGISKENLER.c"
#define _XTAL_FREQ 18432000
void interrupt ISR(void)
{
if (RCIE && RCIF) {
USARTHandleRxInt();
return;
}
if (TMR1IF)
{
TMR1IF=0;
TMR1_COUNT++;
TMR2_COUNT++;
TMR3_COUNT++;
TMR4_COUNT++;
if(TMR1_COUNT>=6) {TMR1_COUNT=1;}
if(MOTOR==1 && TMR2_COUNT>=5)
{
MOTOR=0;FREN=0;HATAKODU=1;CALISTI=44;EL_EMNIYET_PISTON=0;
}
FLAG.bits.HMI=1;
return;
}
if (RBIF) { //PORTB CHANGE INTERRUP
char temp=PORTB;
MOTOR=0; //SENSORU GORDUMU MOTOR DURDURULUYOR
FREN=0; //FREN SIKILIYOR
RBIF=0;
EL_EMNIYET_PISTON=0;
return;
}
}
bu yukarda yazanlarda ise timer ve portb change interrupına girdigi zaman ne yapacagı yazıyor.
senin yapman gereken portb change interrupını üfazın sinyal girişleri ile tetiklemek ve fazbirde zaman sayaclarının üçünüde sıfırlayacan,ikinci ve üçüncü zaman sayaclarının süreleri, eger üçüncü zaman ikinciden büyükse faz sırası dogru, yok ikinci sayac üçüncüden büyükse faz sırası yanlış demektir.
Kusura bakma yukardaki programları hale hazırda bir makinada kullandıgım yazılımdan kesip yapıştırdım.üzerinde degişiklikler yapman gerek.Kolay gelsin.