9 Kasım 2024 Cumartesi

Timer0 ile saat yapımı 16f628a

 Timer0 ile saat yapımı, saatın saniyesini timer0 ile hesaplanıp 1 saniye göre ayarlandı Hesaplamaya göre SET_TIMER0(60) olursa 0,050176 saniye 20 kesmeye girdiğinde 1,0034 saniye  oluyor.

SET_TIMER0(61) yapar isek 0,04992 saniye 20 tekrar ile 0,9984 saniye ile hassas ayarlanabilir. Butonlar ile saat ve dakika ileri doğru artırılarak ayarlanır. istediğnizi tercih edebilirsiniz.


#include <16f628a.h>

#fuses NOWDT, INTRC_IO, NOMCLR, NOBROWNOUT

#use delay (clock=4000000)

#include <flex_lcd.c> 

unsigned int saniye=00,dakika=00,saat=00,sayar=0;

#INT_TIMER0

void kesme()

{

SET_TIMER0(60);

sayar++;

if(sayar == 20)

{

sayar=0;

saniye++;

if(saniye > 59)

{

saniye=0;

dakika++;

if(dakika > 59)

{

dakika=0;

saat++;

if(saat > 23)

{

saat=0;

dakika=0;

saniye=0;

}

}

} // dakika sonu

} // saniye sonu

} // kesme sonu


void main ( )

{

     lcd_init(); 

  SETUP_TIMER_0(T0_INTERNAL | T0_DIV_256);

  ENABLE_INTERRUPTS(INT_TIMER0);

  ENABLE_INTERRUPTS(GLOBAL);

  SET_TIMER0(60);

   while(true) 

   {

     if(input(pin_a0)==1)

   {

   delay_ms(5);

   dakika++;

   if(dakika > 59)

   dakika=0;

   }

    if(input(pin_a1)==1)

   {

   delay_ms(5);

   saat++;

   if(saat > 23)

   saat=0;

   }

     printf(lcd_putc,"\fS:%d  D:%d  s:%d\nSifirzero ",saat,dakika,saniye);

     delay_ms(200);

   }

}



Hiç yorum yok:

Yorum Gönder

Her yorum bilgidir. Araştırmaya devam...