geri sayım ikili geliyor yardım

Başlatan a.f.1999@outlook.com, 19 Mart 2018, 11:21:17

a.f.1999@outlook.com

Hocamlar bi bakarsanız çok sevinirim.Şimdi porta.0=0 olduğunda dakika artacak,porta.1=0 olduğunda dakika azalacak aynı şekilde saniyede var.ancak proteusta bastığım zaman 1-2 şeklinde ikişer ikişer azalıp artıyorlar.sebebi nedir acaba.birde süre bitene kadar her dakikanın ilk 10 snyesi bir röle açmak istiyorum bunu nasıl ekleyebilirim? şimdiden teşekkürler




PORTA=0:PORTB=0
TRISB=%00011111  
TRISA=%11111111 
DEFINE OSC 4


ON INTERRUPT GoTo KESME
OPTION_REG=%10000101  
INTCON=%10100000 
TMR0=0
CMCON=7   
INTCON.5=0
'----------------------------------------------------------------------------
SAYAC   VAR   BYTE
SN      VAR   BYTE
DAK     VAR   BYTE
AL      VAR   BYTE
VER     VAR   BYTE
TYEDEK  VAR   BYTE
BAYRAK  VAR   BIT
DURBIT  VAR   BIT
DAKKA VAR byte
SANIYE VAR BYTE



symbol DTA=PORTB.5
SYMBOL CLK=PORTB.6
SYMBOL ENB=PORTB.7
SYMBOL BEKLE=PORTA.5
'-----------------------------------------------------------------------------
CLEAR 
PAUSE 250
'-----------------------------------------------------------------------------

BASLA:
GoSub GOSTER
    
IF PORTA.0 =0 then
IF DAKKA=61 THEN
DAKKA=0
ELSE
DAKKA = DAKKA + 1 
PAUSE 150
ENDIF
ENDIF

IF PORTA.1=0 THEN
IF DAKKA=0 THEN
ELSE
DAKKA=DAKKA-1
PAUSE 150
ENDIF
ENDIF


IF PORTA.2=0 then
IF SANIYE=61 THEN
SANIYE=0
ELSE
SANIYE = SANIYE+1
PAUSE 150
ENDIF
ENDIF

IF PORTA.3=0 THEN
IF SANIYE=0 THEN
ELSE
SANIYE=SANIYE-1
PAUSE 150
ENDIF
ENDIF




    
IF PORTB.4=0 THEN
GOTO TEST1  
    
  ENDIF
  GOTO BASLA  
    
TEST1:
     DAK=DAKKA
     SN=SANIYE
   
     BAYRAK=1
     TMR0=0
     INTCON.5=1
      WHILE PORTB.4=0
      GoSub GOSTER
      WEND
     

GOTO BASLA

GOSTER:
     IF BAYRAK=0 THEN
      INTCON.5=0
      SN=SANIYE
      DAK=DAKKA
      TMR0=0
     ENDIF
    VER=SN DIG 0
    GoSub YAZ
    VER=SN DIG 1
    GoSub YAZ   
    VER=DAK DIG 0
    GoSub YAZ
    VER=DAK DIG 1
    GoSub YAZ
    ENB=1:PAUSEUS 10:ENB=0
   
    
      
RETURN

YAZ:
LookUp VER,[63,6,91,79,102,109,125,7,127,111,99],AL
'          [0 ,1,2 ,3 , 4 , 5 , 6 ,7, 8 , 9 ,o ]
SHIFTOUT DTA,CLK,1,[AL]
Return

DISABLE
KESME:
    IF BAYRAK=1 THEN
      SAYAC=SAYAC+1     
      IF SAYAC=61 then     
         SAYAC=0          
         SN=SN-1          
            IF SN=255 THEN
             SN=59
             DAK=DAK-1
              IF DAK=255 THEN
               DAK=0
               SN=0
               BAYRAK=0
              ENDIF
            ENDIF            
      ENDIF
     ENDIF     
         INTCON.2=0       
         RESUME
         ENABLE

Elektronikprojem


if porta.0=0 then
while porta.0=0 :wend
dakika=dakika+1
if dakika=61 then dakika=0
endif

while wend komutunu kullanmayı denedinmi.
bu şekilde olursa butonu bırakmanı bekler işlemci.

ete

#2
Bir iş için iki ayrı pin kullanılması mantıklı değil.
Şimdi porta.0=0 olduğunda dakika artacak,porta.1=0 olduğunda dakika azalacak
Her ikiside basılı olursa ne yapacak program.
Bu durumda PORTA.0 basılı olursa dakika azalır PORTA.0 basılı olmaz ise Dakika artar şeklinde yapsan daha uygun olurdu.
Programda bir sürü pause komutu var Bunların hepsinin silinmesi gerekir. Pause ler saat palslarının üretilmesini gecikmeye uğratır.
GÖSTER kısmı hariç bütün program Kesme içinde halledilebilir.
DAK ve DAKKA ne işe yarıyor brisni anldık diğeri ne işe yarıyor. Karma karışık bir şey olmuş anlaşılmıyor mantık. Üstelik açıklamadığın baı başka özellikler var programda ISIS simulasyonuda olmalıki deneme yapılabilisin.
Ben olsam Kesme içinde şöyle yapardım;
IF SAYAC=61 then          '61 adet kesme olunca 1 sn. süre geçiyor.(999424 us)
    SAYAC=0               'sayaç sıfırlanıyor
    SN=SN+1
    IF SN=60 THEN
       SN=0
       IF PORTA.0=0 THEN
          DAK=DAK+1
          IF DAK=60 THEN DAK=0
       ENDIF

       IF PORTA.1=0 THEN
           DAK=DAK-1
           IF DAK=255 THEN DAK=59
        ENDIF
   ENDIF
   INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
   RESUME
   ENABLE


Her dakikanın ilk 10 sn sinde röle çalıştırmak için;
IF SN<10 then
    ROLE=1
ELSE
    ROLE=0
ENDIF şeklinde bir komut dizisi kullanabilirsin. ROLE burada röleninbağlı olduğu pin'i gösterecektir.

Ete
 
NOT:
PORTA.0 veya PORTA.1 pinlerine her basmada bir artması yada eksilmesimi gerek yoka basılı tutunca artma yada eksilmeye devam etmesi mi gerekir.

           

Powered by EzPortal