Timer1 deki kayma neden yapıyor çözemedim

Başlatan Proteus, 09 Haziran 2015, 23:43:35

Proteus

void Interrupt()                                              {
  if (TMR1IF_bit) 
         x++;
          if(x==120)//60 sn oldugunda
              dak++;
               if(n-dak==0 ) // BEKLEME SÜRESİNE ULAŞTIĞINDA
                                   {
                MOTOR=1;
                 dak=0;
                  a=1;
                  x=0;
              TMR1IE_bit = 0;
                                   }

    TMR1H = 0x0B;      //500ms ok!
    TMR1L = 0xDC;
    TMR1IF_bit = 0;

    
                                                               }

herkese kolay gelsin 500ms kurulu timerımı x ile 120 kere saydırıyorum ve 1 dak elde ediyorum n değişkenim ise kaç dakika portu aktif edeceğimi belirliyor 1  ve 2 dakikaya kurunca gayet güzel çalışıyor fakat 3 ten sonra sapıtmaya başlıyor sorunu bir türlü bulamadım değişkenlerim ise unsigned int türünde

baran123

3 dakika için 120 x 3 = 360 yapıyor.Eğer n 8 bitlik ise 255 üstüne çıkamaz bundan olabilir mi ?

Proteus


vitruvius

Ben şöyle düşünüyorum.

x'i bir tek (n-dak) sıfır olduğunda sıfırlıyorsun. Birinci dakikadan sonra x 121 diye devam edecek.Bu saatten sonra da "dak" değişkeni bir daha artmaz.  if(x==120)'in altında da x'i sıfırlaman gerekli.

Proteus

#4
aynen hocam gözden kaçırmışım şimdi ekleyip deniyorum bakalım ne yapıcak büyük ihtimal olur gibi

mesaj birleştirme:: 10 Haziran 2015, 00:20:01

tamamdır sorun çözüldü çok sağolun farklı gözün bakması ayrı birşey iyi geceler herkese :)