port seçimi otomatik nasıl olur

Başlatan blackcat, 04 Mart 2005, 15:11:24

blackcat

AŞAGIDAKİ GİBİ BİR KOD YAZDIM FAKAT SADECE B.0 PORTUNDAN ÇIKIŞ ALABİLİYORUM BENİM İSTEDİGİM İLERİ VE GERİ İLK ÖNCE B0 DAN DAHA SONRA B.1 DEN ÇIKIŞ ALMAK İSTİYORUM B.1 DEN ÇIKIŞ YOK PORTLAR OTOMATİK NASIL DEĞİŞTİRİLEBİLİR YARDIM EDEBİLİRMİSİNİZ :?
arti var portb.0
eksi var portb.1
p var word
a var word
p=eksi
port:
IF p=arti then
p=eksi
GOTO ileri
ENDIF
IF p=eksi then
p=arti
GOTO ileri
ENDIF
ileri:
For a=1 To 9 step 1
high p
pause (a*10)
low p
pause ((10-a)*10)
IF a=9 then
goto geri
ENDIF
next a
geri:
For a=9 To 1 step -1
high p
pause (a*10)
low p
pause ((10-a)*10)
IF a=1 then
goto port
ENDIF
next a

SpeedyX

dostum çok bilmem pbp ama
TRISB = %00000000  

tüm portb yi çıkış yapmak için programın başına bunu yazman lazım.
yada girişler için 1yap oşekilde olması lazım.
iyide sen bukodu yazacak kadar bilgin varda neden tris reg den habersizsin?

ete

@Blackcat,

Yazdığın programda bazı kullanım hataları var. Dolayısıyla isteğine uygun olarak programı aşağıdaki şekilde düzelttim. Yalnızca pause süren çok az olduğu için 10 değerini 100 olarak değiştirdirm.
Bu hali ile program portb.0 dan başlıyarak pals üretiyor. pals süresi a nın değerine bağlı olarak değişiyor. 18 adet palstan sonra çıkış Portb.1'e geçiyor aynı işi tekrarlayıp tekrar PortB.0'a dönüyor. Sanırım istediğin bu idi.
Gelelim Hatalarına,
- Öncelikle Bit cinsinden bir değişkeni Word cinsinden bir değişkene eşitlemek iyi bir yol değil. Değişkenleri iyi tanımanı isterim.
- Sadece Word tipi değişken kullanmışsın. Halbui BYTE sana yetiyor. Özellikle A değişkeni için.
- Döngülerin sonunda son rakama ulaşıldığında komut icra edilir ve döngüden zaten çıkılır. Burada ayrıca ;
IF A=9 ... şeklinde bir komut kullanman gerekmez.
Gördüğün gibi program hem kısaldı hemde istediğini yapıyor.
Şayet ISIS te simule etmek istersen edebilirsin. Ancak daha iyi bir izleme için PortB yerine PortA yı kullan (PortA.0 ve PortA.1) ve A nın aldığı değeri de izleyebilmek için A değerinin B portunda izlenmesine imkan tanıyan şu kodu kullan;

PortB=DCD (A-1)

Tabiiki izlemeyi yapabilmen için PortA.0 ve PotA.1'e birer tane Big Logic Probe tak. Ayrıca PortB pinlerinin hepsine birer Logic Probe tak.
16F84 kullanabilirsin.

Kolay Gelsin

ETE
TrisB=0
CIK var bit
a   var Byte 
CIK=1
port: CIK=1-CIK
      ileri: 
       For a=1 To 9 
       PORTB=PORTB^(CIK+1)
       pause (a*100)
       PORTB=0
       pause ((10-a)*100)
       next a 
geri: 
      For a=9 To 1 step -1 
      PORTB=PORTB^(CIK+1)
      pause (a*100)
      PORTB=0
      pause ((10-a)*100)
      next a
      goto port
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ete

@Blackcat,

Şayet porta ait yalnızca iki çıkış (PORTb.0 VE PORTB.1) değişsin diğer pinler programdan etkilenmesin diyorsan aşağıdaki programı kullanmalısın. Bu programıda A portu üzerinden veriyorum. A değişkeninin değerinide B portundan izleyebiliyorsun (1-8 değerini görüyorsun 9 atlanıyor).

Portb=0
Trisa=0
TrisB=0
CIK var bit
a   var Byte 
CIK=1
port: CIK=1-CIK    'Çıkış değiştirme
ileri: 
       For a=1 To 9
       portb=dcd CIK 
       PORTA=PORTA|(CIK+1) 'Çıkış High Yapıldı
       pause (a*100)
       PORTA=PORTA^(CIK+1)  'Çıkış Low Yapıldı
       pause ((10-a)*100)
       next a 

geri: 
      For a=9 To 1 step -1 
      PORTA=PORTA|(CIK+1)  'Çıkış High Yapıldı
      pause (a*100)
      PORTA=PORTA^(CIK+1)   'Çıkış Low Yapıldı
      pause ((10-a)*100)
      next a
      goto port


ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

blackcat

ete ilgin için teşekkür ederim
ilk mesajındaki ni denedim çıkışlara led bağladım sadece b0 portundan çıkış alabildim ikincisinden hiç çıkış vermedi.
ikinci gönderdiğin mesajdaki kodları deneyeceğim.

ete

@blackcat,

Ne gibi bir hata var bilmiyorum. Ancak muhtemelen zamanı çok kısa tutuyorsun ve çıkışı göremiyorsun. Ben bizzat yaptım aynı kodla her iki çıkış ta çalışıyor. Ancak zamanı senin verdiğin değerler ile alırsam daha led yanarken hemen sön denildiği için sanki çıkış yokmuş gibi görülüyor.
Gerekirse benim 100 yazdığım yere 200 yaz göreceksin.

ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com