Merhaba PIC32MX320F128H işlemci ile Ide olarak MPLAB X IDE v3.35 Language Tool v1.00 (WIN) (03/22/12) kulanılmıştır.Saygılar
Timer 3 PR3 = 1 seçilirse 640 nano saniyede interrupt fonksiyonu çalışıyor.
Kodlar: #include <p32xxxx.h>
#include <plib.h>
#define GetSystemClock() (80000000L)
#define GetPeripheralClock() (GetSystemClock()/(1 << OSCCONbits.PBDIV))
#define GetInstructionClock() (GetSystemClock())
// *****************************************************************************
// *****************************************************************************
// Section: Configuration bits
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
// *****************************************************************************
// *****************************************************************************
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1
//80MHZ 1/80 = 12.5 ns 1 cycle 12.5ns
// *****************************************************************************
//Functions and Variables with Global Scope:
// *****************************************************************************
// Timer1 interrupt fonksiyonu
void __ISR(4, ipl2) T1Handler(void)
{
mT1ClearIntFlag(); // kesme bayrağını temizle
LATEbits.LATE0 ^= 1; // RE0 pini 1 ise 0 yap yada 0 ise 1 yap
}
// Timer2 interrupt fonksiyonu
void __ISR(8, ipl2) T2Handler(void)
{
mT2ClearIntFlag();
LATEbits.LATE1 ^= 1;
}
static unsigned int sayac = 0;
// Timer3 interrupt fonksiyonu
void __ISR(12,ipl2)T3Handler(void)
{
sayac++;
switch(sayac)
{
case 16: //
{
LATEbits.LATE2 = 1; //16 us RE2 Pini on
}
break;
case 32:
{
LATEbits.LATE2 = 0; //16 us RE2 Pini off
sayac = 0;
}
break;
default:
mT3ClearIntFlag();
break;
}
}
// Timer45 interrupt fonksiyonu
void __ISR(20, ipl2)T45Handler(void)
{
mT45ClearIntFlag();
LATEbits.LATE3 ^= 1;
}
int main(void)
{
SYSTEMConfigPerformance(8000000);
SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
TRISEbits.TRISE0 = 0; //RE0 pini çıkış
TRISEbits.TRISE1 = 0; //RE1 pini çıkış
TRISEbits.TRISE2 = 0; //RE2 pini çıkış
TRISEbits.TRISE3 = 0; //RE3 pini çıkış
// timer hesabı 12.5ns x 256 prescaler oran x 15624+1 = 50ms yapar.
OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, 15624); //50ms //16 bit modu ***TİMER 1 KURULUMU
OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_256, 31249); //100ms ***TİMER 2 KURULUMU
OpenTimer3(T3_ON | T3_SOURCE_INT | T3_PS_1_1, 78); //1us **** ***TİMER 3 KURULUMU
OpenTimer45(T45_ON | T45_SOURCE_INT | T45_PS_1_256, 312499); //1sec //TİMER 45 32BİT TİMER KURULUMU
ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);
ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_2);
ConfigIntTimer3(T3_INT_ON | T3_INT_PRIOR_2);
ConfigIntTimer45(T45_INT_ON |T45_INT_PRIOR_2);
INTEnableSystemMultiVectoredInt();//KESMELERIN HEPSİ AKTİF
while(1)
{
}
}