kesme ile saniye saydırmayı yaptım ama yine saniyeler kayıyor çözüm nedir?

tersoll

Üye
Katılım
25 Nis 2010
Mesajlar
142
Puanları
1
Yaş
39
Kod:
#include "C:\Users\server\Desktop\aaaaa\main.h"

int i=0; // Tamsay? tipinde deg(is,ken tan?mlan?yor
int x=0;

//****************** Timer0 Kesmesi *****************************
#int_timer0  // Timer0 kesmesi

void  timer0_kesme ()
{
    set_timer0(60);   // TMR0 deg(eri belirleniyor
    i++;
if (i==20){
  i=0;
 
  x++;
  if(x==10){
 
 
     x=0;
     output_toggle(pin_b0);
  }
 
  }
 }     

/********* ANA PROGRAM FONKSI.YONU********/


void main ( )
{
 
   setup_timer_1(T1_DISABLED);     // T1 zamanlay?c?s? devre d?s,?
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlay?c?s? devre d?s,?
 
 
   set_tris_b(0x00);   // B portu komple ç?k?s,


   output_b(0x00);     // B portu ç?k?s,? ilk anda s?f?rlan?yor


   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarlar? yap?l?yor
   set_timer0(60);   // TMR0 deg(eri belirleniyor

   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver


   while(1);   // Sonsuz döngü

 }

saniyeler yine kayıyo baska ne yapıcam ben ya
 
Kesme ile yapamazsın, illaki kayacaktır... Rtc kullanmalısın. DS1302 yazmışsın zaten bunu kullanabilirsin...
 
Sizde bir ornek varmi saniye icin
 
1 osilatörün bozuk, düzgün kristal al
2 compiler hatası olabilir yeni versiyonunu bul
3 anlayarak ilerle daldan dala uçuyorsun

fuse ayarların doğru mu bilmiyoruz devreni görmedik #use delay satırın doğru mu. 100nf 22pf kondansatörler yerinde mi. Mclr ayağının durumu ne. Afaki bi durumda hepsi bekliyorsun ki çözüm bulalım
 
Yarin bu bilgilerin hepsini vericem size bazi formlara bakiyorum timer1 kesmesi ile yapilirsa dogru sekilde kayma olmaz diyolar sizce dogrumu?
 
Kayma illa ki uzun vadede olur. Sıfır kayma elde etmek ancak özel yöntemler kullanarak mümkün.
 
Hocam su kodu verin benden kurtulun :)

Timer1 kesmesini denedim 10 dakikadan sonra isiste kaymaya basladi :( siz kaymayan bir saniye kodu verin hocam
 
O kadar zamanlamaya taktıysan 32.768 khz lik saat kristali kullan. Hatta bunu timer osilatöründe kullan sıfır hata ile işi hallet
 
haklısınız silvestir hocam. ancak işlemcinin hızlı çalışması açısından biraz daha yüksek frekans iyi olur sanırım. 4.096mhz kristal ile de bu iş hallolur. timer hesaplaması şu şekilde;
- kristal frekansı 4096000Hz
- işlemcinin içinde bu frekans 4'e bölünür ki frekans değeri 1024000hz olur (yani saniyedeki clock sayısı).
- yazılımdan timer0 bölme oranı 1:32 olarak ayarlanırsa her 32 clock palste bir timer0 değeri bir artar.
- timer0 değeri 256 ya ulaştığında kesme oluşur ki 32x256=8192 palste bir kesme oluşur.
- mevcut kristal ile bir sanıyede 1024000 pals üretildiğine göre 1024000/8192=125 eşitliğinden anlaşılacağı üzere her saniyede toplam 125 kesme oluşur.
- her kesme oluştuğunda kesme alt programında bir sayacın içeriği 1 arttırılır ve ana programda bu sayaç 125 değerine ulaştığında 1 saniyenin tamamlandığını anlaşılır.
 
yav tekosis güzel anlatöışşsın eline sağlık bir kod verirsen
 

Forum istatistikleri

Konular
128,164
Mesajlar
915,596
Kullanıcılar
449,928
Son üye
welat karzan

Yeni konular

Geri
Üst