if döngüsü

Başlatan tolgacansabah, 18 Mayıs 2015, 23:45:05

tolgacansabah

merhaba ,

if döngüsü ile 4 buton kullanarak 8 çıkış almam gerekiyor ama sorun nerede bulamadım .


@ __config _XT_OSC & _WDT_ON & _CP_OFF
TRISA=%11111
TRISB=%00000000
PORTA=0
PORTB=0
             

SYMBOL TUS= PORTA.0         
SYMBOL YUZ= PORTB.0         
SYMBOL TUS1= PORTA.1         
SYMBOL ORT= PORTB.1
SYMBOL TUS2= PORTA.2       
SYMBOL ISRT= PORTB.2         
SYMBOL TUS3= PORTA.3
SYMBOL BAS= PORTB.3         
SYMBOL YUZT= PORTB.4
SYMBOL ORTT= PORTB.5
SYMBOL ISRTT= PORTB.6
SYMBOL BAST= PORTB.7

BASLA: 
pause 100
                                 
IF TUS=1 THEN           
HIGH YUZ
PAUSE 1000
LOW YUZ
PAUSE 1000
HIGH YUZT
PAUSE 1000
LOW YUZT
PAUSE 1000
    ENDIF
                       
    IF   TUS1=1 THEN           
    HIGH ORT
    PAUSE 1000
    LOW ORT
    PAUSE 1000           
    HIGH ORTT
    PAUSE 1000
    LOW ORTT
    PAUSE 1000
ENDIF

IF   TUS2=1 THEN           
    HIGH ISRT
    PAUSE 1000
    LOW ISRT
    PAUSE 1000
    HIGH ISRTT
    PAUSE 1000
    LOW ISRTT
    PAUSE 1000
ENDIF

    IF   TUS3=1 THEN           
    HIGH BAS
    PAUSE 1000
    LOW BAS
    PAUSE 1000
    HIGH BAST
    PAUSE 1000
    LOW BAST
    PAUSE 1000
ENDIF

    GOTO BASLA              
    END

burctankal

Sorun ne biz de anlayamadık  ki :) Hakkaten sorun nedir?

tolgacansabah

@ __config _XT_OSC & _WDT_ON & _CP_OFF
TRISA=%11111
TRISB=%00000000
PORTA=0
PORTB=0
             

SYMBOL TUS= PORTA.0         
SYMBOL YUZ= PORTB.0         
SYMBOL TUS1= PORTA.1         
SYMBOL ORT= PORTB.1
SYMBOL TUS2= PORTA.2       
SYMBOL ISRT= PORTB.2         
SYMBOL TUS3= PORTA.3
SYMBOL BAS= PORTB.3         
SYMBOL YUZT= PORTB.4
SYMBOL ORTT= PORTB.5
SYMBOL ISRTT= PORTB.6
SYMBOL BAST= PORTB.7

BASLA: 
pause 100
                                 
IF TUS=1 THEN GOTO YUZUK
    GOTO BASLA                               
    IF   TUS1=1 THEN  GOTO ISARET
    GOTO BASLA         
IF   TUS2=1 THEN GOTO ORTA
    GOTO BASLA         
    IF   TUS3=1 THEN  GOTO BASPARMAK
    GOTO BASLA         
YUZUK:
HIGH YUZ
PAUSE 9000
LOW YUZ
PAUSE 1000
HIGH YUZT
PAUSE 9000
LOW YUZT
PAUSE 1000
GOTO BASLA
ORTA:
    HIGH ORT
    PAUSE 1000
    LOW ORT
    PAUSE 1000           
    HIGH ORTT
    PAUSE 1000
    LOW ORTT
    PAUSE 1000
    GOTO BASLA
    ISARET:
    HIGH ISRT
    PAUSE 1000
    LOW ISRT
    PAUSE 1000
    HIGH ISRTT
    PAUSE 1000
    LOW ISRTT
    PAUSE 1000
    GOTO BASLA
BASPARMAK:
    HIGH BAS
    PAUSE 1000
    LOW BAS
    PAUSE 1000
    HIGH BAST
    PAUSE 1000
    LOW BAST
    PAUSE 1000
   
   
    GOTO BASLA              
    END

bu şekilde çözebildim ama şimdide pic bacağından 4.3 volt alabiliyorum benim tam 5 volta ihtiyacım var

burctankal

Hocalardan azar işitmeden önce devre şemanı paylaşmanı, kullandığın mikro denetleyiciyi belirtmeni ve sorununu daha net şekilde ifade etmeni öneririm.

ete

#4
Ne işlemci belli, ne işlemci frekansı belli hiç bir şey belli değil sonuçta. Çalışması mucize olurdu.
Programa bakılırsa hiç bir özel register kullanılmamış. Yani bu işlemcide muhtemelen analog pin yok. komparatör yok veya diğer özel pinlerin hiç birisi yok. Direk açılışta bütün pinler digital açılıyor demekki.
Buna uyan ve etrafta sıklıkla kullanılan tek işlemci var oda 16F84A ols gerek.

HIGH olmuş bir pinin 4,3V vermesi program yada başka bir şeyin kusuru değil tamamen besleme devresinin kusurudur.
Bir ikinci ihtimal de o çıkışın bir başka elemanı sürüyor olması (mesela bir led) ve arada direnç olmadan bu sürme işlemini yaparak aşırı akım çekmesi nedeni ile port değerini düşük vermesi olabilir. Şema olmayınca ancak fikir üretmekle yetinebiliyoruz maalesef.

Diğer taraftan bu mantıkla program yazmak hiç iyi değil. Kodlara bir bakın, Şayet TUS=1 olursa, Program YUZUK isimli etikete geliyor ve orada programı ;
YUZUK:
    HIGH YUZ
    PAUSE 9000
    LOW YUZ
    PAUSE 1000
    HIGH YUZT
    PAUSE 9000
    LOW YUZT
    PAUSE 1000
    GOTO BASLA
kodları ile tam tamına 20 sn bloke ediyor. Bu arada başka bir işlem yapamazsınız. Y arada başka bir tuşa basılmış ise ne olacak? belli değil. Bu tür sistemlerde programı bir etiket içinde bloke etmek hiçde akıllıca bir yöntem değil.
Zamanı ufak dilimlere bölerek arada diğer tuşlara basılıp basılmadığınıda kontrol etmek basıldı ise boşuna orada beklemeyip geri dönmek en iyisidir.


Ete


Powered by EzPortal