STM32F0 İnterrup MikroC kodları

57 Kişi Okudu

Aşağıda yazmış olduğumuz programda kesme birimi kullanmaktadır C2 pinine bağlı ledimizi 400ms de bir C8 pinine bağlı ledi 100ms de bir yakıp söndürecektir.Bu işlemi belirli aralıklarla ana programı durdurarak yapacaktır.Kesmeye uğradığı zaman ana programda çalışan 100ms lik yanıp sönen led duracak C8 pinine bağlı olan led 5 sefer yanıp sönecektir

#define button GPIOf_IDR.B5
int a;

void Timer2_interrupt() iv IVT_INT_TIM2 {

TIM2_SR.UIF = 0; // Toggle PORTC led on
   if ( button == 1 ){
    a=0;
    do {
    GPIOC_ODR.B2 = 1 ;
    delay_ms(400);
    GPIOC_ODR.B2 = 0 ;
    delay_ms(400);
    a++;
    }while(a!=5) ;
  }

}

void main() {
 GPIO_Digital_Output(&GPIOC_BASE, _GPIO_PINMASK_8 | _GPIO_PINMASK_2 );
 GPIO_Digital_Input (&GPIOf_BASE, _GPIO_PINMASK_5) ;
 GPIO_Digital_Input (&GPIOa_BASE, _GPIO_PINMASK_0) ;

//GPIOC_ODR.B8 = 0;

 RCC_APB1ENR.TIM2EN = 1;     // Enable clock gating for timer module 2
 TIM2_CR1.CEN = 0;           // Disable timer
 TIM2_PSC = 10;              // set timer prescaler
 TIM2_ARR = 10;
 NVIC_IntEnable(IVT_INT_TIM2); // Enable timer interrupt
 TIM2_DIER.UIE = 1;          // Update interrupt enable
 TIM2_CR1.CEN = 1;          // Enable timer

while (1) {
  GPIOC_ODR.B8 = 1;
  delay_ms(100);
  GPIOC_ODR.B8 = 0;
  delay_ms(100) ;
 }
}

Yayınlayan

Ahmet Yasin CİVAN

Mekatronik Mühendisi, Gömülü Yazılım Geliştiricisi.