bit set yardım

Başlatan oneflyman, 27 Şubat 2006, 14:50:02

oneflyman

ya ben pic basıc kullanmaya yenı basladım da bı sorum olacak


symbol led1=porta.1
symbol led2=porta.2
.
.
..
.
high led1
pause 200
high led2
.
.
.
.
end



1)-simdi bu programda led1 yanar bellı bır sure sonra led 2 mı yanar(ikiside yanıyo)?
2)-yoksa led 1 yanar bellı bır sure sonra led1 sonup led2 mı yanar?
ıkıncısı oluyo..
yani basıt bı cevabı vardır belkı ama yenı basladım ıste
asıl sorum su ben karısık bı programda ıstedıgım bır bıtı 1 yaptıgım zaman
dıgerlerı 0 mı olacak yanı(aynı porta baglı mesela portb)
o kısımları asmdede yazdım sonuc aynı
halalala kafam karıstı
eminim cok basit cvbı vardır dalga gecmeyin nolur  :oops:
bilbikce hicbişey bilmedigini anlıyosun..

mesmert

arkadaşım ben basıc bilmiyorum ama mantık yürütecek olursak ilk önce porta 1 deki led yanar ve 200 us sonra porta 2 deki yanar yanlışım varsa üstadlar düzeltir

kolay gelsin

oneflyman

iyide port1 dekı sönuyo benım problemım o...
illa;
porta=%00000001
porta=%00000011
diye degermı vermemız gerekıyor
karısık bı programda porta dakı butun bıtlerın konumunu bılıp herseferınde degermı vercez boyle tek bıtı set etmek ıcın..
sadece bır bıtı set ettıgım zman dıgerlerı "0" oluyo
high lamb... mesela
bilbikce hicbişey bilmedigini anlıyosun..

seco06

symbol led1=porta.1
symbol led2=porta.2
.
.
..
.
high led1
pause 200
high led2
.
.
.
.
end
Bu durumda mutlaka ikisi de yanar ama şu şekilde yaparsan biri yandığında diğeri söner

symbol led1=porta.1
symbol led2=porta.2
.
.
..
basla:
high led1
pause 200
low led1
pause 200
high led2
pause 200
low led2
pause 200
goto basla
.
.
.
end
şimdi gelelim 2. soruna
portları giriş veya çıkış yapmak için birçok komut var.
porta=%00000001 (porta.0 giriş diğerleri çıkış
porta=%00000011 (porta.0 porta.1 giriş diğerleri çıkış
başlangıçta bu şekilde tanımlaman da olur high low ve başka komutlarla da portları program içersindede ayarlayabilirsin.Karışık bir programda ise bu işler düşündüğün gibi zor değil bu işi öğrendikçe anlayacaksın.
son olarak demişsinki "sadece bır bıtı set ettıgım zman dıgerlerı "0" oluyo
high lamb... mesela" hayır böyle değil . high ve low komutları bütün bir porta hükmetmez sadece o portun tek çıkışını etkiler. mesala low porta.0
Birde bit diye ifade kullanmışsın oanlara bit değil de o portun I/O çıkışı diyelim .Çünkü tek bir çıkıştanda birden çok Seri yolla bit göderebiliriz.Başarılar

OG

Alıntı Yapporta=%00000001 (porta.0 giriş diğerleri çıkış
porta=%00000011 (porta.0 porta.1 giriş diğerleri çıkış
değil tabi, arkadaş dalgınlıkla yazmış olmalı

trisa=%00000001 'porta.0 giriş diğerleri çıkış
trisa=%00000011 'porta.0 porta.1 giriş diğerleri çıkış

olacak
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

seco06

tabiki tris olacak ben sadece örnek olsun diye hızlıca yazmıştım Yinede sağol  yanlış örnek dahi vermeyelim [/color] ;)

oneflyman

Alıntı yapılan: "seco06"tabiki tris olacak ben sadece örnek olsun diye hızlıca yazmıştım Yinede sağol  yanlış örnek dahi vermeyelim [/color] ;)
bende acık acık yazmak ıstemedım mesela
dahaonce symbol lamb=porta.0 yapmısım dıelım
gırıs cıkıs ayarlarınıda cok guzel yapmısım dıleım
aslında bu ıse yenı baslamadım :)
ama lambalardan ılkının sonmesı bna cok sacma geldı
ortalıkta bılıyoruz dıye gezıyorum ama buna bır turlu mantık erdıremedım
tek korkum benımle dalga gecmenızdı oyuzden yenı basladım dedım
ama ınannın bana ılk lamba sonuyor
ya benım complr da hata var yada ben ufak bı hata yapıyorum ınanın hala bulamadım
bilbikce hicbişey bilmedigini anlıyosun..

oneflyman

aslında tez olarak asansor kartı tasarlamayı aldım bunuda pıcbasıcle yapıcam
fakat o kadar karıstıkı ortalık (guzel bır algorıtma hazırlamama ragmen)
dusundugumden daha zor cıktı
soracagım bır suru soru var ama bu basıt (buyuk ıhtımalle cevabıda basıt olan) problemı cozmem lazım
kafayı yıcem yaaa
bilbikce hicbişey bilmedigini anlıyosun..

oneflyman

ornegın sız asansore bındınız bellı bır kata gıtmek ıcın butona bastınız pekı aynı anda baska katlardanda
cagıranlar oldu o sırada dıyelımkı sız 2 den 7 ye cıkacaksınız ama o basanlardan bırı 5. katta ıkılı buton sıstemıne gore
yukarı cıkmak ısteyen bırı ıcın asansor duracak
ama asagı ınecekse 5. kattakı ksıı
durmayacak
veyahut ıkı kısı bınmıstınız bırı altıda duracak
bunlar nasıl olaak ben hafıza ısımlı bır dızı olusturdum
ama bu hafızaya baılan
butonlar bellı bır sırada konacak
dedıgım ıbı 5. katta bınecek olan bırısının bılgısını hafıoza sırasında ortalar bı yere koyduıysanız ne oalack
asansor o katta durdu dıyelım onuda hafıza dızınsınden cıkardınız o boslugu onun arkas sırsındakılerın doldurması lazım
ya o sırada bır butona daha basılmıs olursa
yanı hafıza kaydırma ıslemını gerceklestırırken o anda gelıcek olanbı bılgı hafızada nereye yerlestırılecek
sona olamaz cunku daha son bellı degıl
falan fısman
ugrasıyoz bakalım ama
su basıt problemın cevabı nedır allahım kafayı yıcem yaa..
bilbikce hicbişey bilmedigini anlıyosun..

oneflyman

bu arada hepınıze cok teşekkür ederım arkadaslar
sağol un varolun
:roll:
bilbikce hicbişey bilmedigini anlıyosun..

ete

@oneflyman,

Israrla Port1 deki sönüyor şeklinde tanımlamandan ortada bir yanlışlık olduğunu anlıyorum. Aslında soruna daha iyi çözüm bulabilmek için yazdığın programın baş kısmınıda görmek isterdim.
Ama yinede port tanımlamalarında bir hata yapıyorsun gibi geldi bana. Sanki port pinlerini 1 den başlatıp 8 de bitiriyorsun gibi geliyor. Yanılıyor olabilirim.
Bu yüzden şu port tanımlamalarını bir tazeleyelim istersen;
PortA=%00000001 şeklinde bir ifade PortA.0 pinini Set eder. Yani PortA.0'a bir led bağlamış isen bu led yanar.
PortA=%00000010 demekle PortA.1 bitini set etmiş olursun ve PortA.1'e bağlı led var ise yanar. Dolayısıyla Port bitleri sıfırdan başlayıp 7 de biter.
Şimdi kullandığın Pic hangisi bilmiyorum. Şayet 16F628 veya 16F87x serisi bir şey kullanıyor isen A portunun digital olarak ayarlanması gerekir. Default olarak bu port 16F628 de Comparatör girişlerine, 16F87X serisinde ise analog olarak ayarlanmıştır. Acaba böyle bir hatamı var yazdığın programda.
Kısaca programın ya tamamı yada bu konuyla alakalı tamamını görebilirsem ancak yardımcı olabilirm.

Asansörün katlarda durdurulması olayına gelince burada akıllıca bir mantık kullanabilirsin. Bina şayet Giriş+7 kat ise ;
-INIS ve CIKIS isimli iki değişken tanımla BYTE cinsinden.
Çıkış için basılan tuşların hangi katta basıldığına bak ve o kata ait biti set et.
Diyelimki asansör Giriş katına indi. Burada CIKIS=0 diyorsun. ve sonra tuşlara bakıyorsun. Diyelimki 2 katta tusa basılmıs. O halde Cıkıs.2=1 diyorsun. Dİyelimki 6 katta da tusa basılmış o halde CIKIS.6=1 diyorsun.
Sonunda Cıkıs değişkenin şöyle olacaktır CıkıS=%01000100
Şimdi bunu değerlendirelim,
Cıkıs=Cıkıs>>1
bak:
if cıkıc.0=1 then asansör bu katta duracak.
tekrar Cıkıs=Cıkıs>>1
goto bak
şeklinde denetleme yapabilirsin. Çok kabaca yazdım yalnızca fikir vermek açısından.
Aynı mantığı iniş içinde kullanabilirsin.
Kat sayısı 7 den fazla ise word tipi değişkenle halledebilirsin.

Soru soramaktan çekinmememn lazım. Kimse seni garip sorular soruyorsun diye ayıplamaz. Ben şahsen bu tip soru soranları bilmiyar diye niteliyorum. Bu yüzden daima sor ve doğrusunu öğren. Öğrendikçe soruların azalacaktır zaten.

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

oneflyman

haklısın aportunu ayarlamamısım(877)  :roll:
ayrıca bu "cıkıs ınıs" olayı cok guzel
tek byte ta veya word olayı halletmıssın hıc aklıma bıle gelmemıstı
onlarca byte ı  bu ıs ıcın heba edecektım  :?
ayrıca benım ıcın bu kadar zahmet etmen gercekten ılgınc
nasıl teşekkür edecegımı bılemıyorum.
gercekten teşekkür edrım ;)
bilbikce hicbişey bilmedigini anlıyosun..