pcbway

pic basic\'te yazdığım şu ufacık kod neden çalışmıyor, bilen var mı?

Başlatan stransistors, 11 Mart 2010, 12:23:14

stransistors

arkadaşlar ben hobi olarak elektronikle ilgileniyorum ve bu aralar üzerinde çalıştığım bir proje için pic16f877 programlıyorum. kodları yazmak için microcode studio, derleyici olarak da picbasicpro 2.50c\'yi kullanıyorum. anlayacağınız üzere pic basic dilinde yazıyorum programlarımı. lakin şöyle bir sorunum var ve çözemiyorum:

DBILGI önceden byte olarak tanımladığım bir değişken. programda:

DBILGI=PORTD dediğimde, D portuna bağlı olan butonlardaki bilgiyi okumasını, daha doğrusu hangi butona basıldıysa onun verisini DBILGI\'ye aktarmasını istiyorum ama DBILGI\'ye hiç bir şey aktarılmıyor. belki anlaşılmadıysa şöyle de açıklayayım: örneğin ben portd.0 ve portd.2 pinlerindeki butonlara basarsam bunun karşılığı 8 bitlik %11111010 olacaktır ve ben bunu DBILGI\'ye eşitlediğimde DBILGI\'nin bu değeri alması gerekmez mi?

bir de şöyle bir durum var: ben örneğin kodu DBILGI=PORTD.3 şeklinde yazarsam, portd.3\'teki butona bastığımda bunun verisi DBILGI\'ye aktarılıyor ve DBILGI=%11111110 oluyor...

portd pull up yapılmış, trisd=%11111111 ile input olarak ayarlanmış vaziyette.

nedir benim hatam? biri yardımcı olabilirse çok sevinirim gerçekten. belki de çok basit bir şey ancak dünden beri bununla uğraşıyorum ve halâ çözemedim...


neural

TRISE \'nin durumu nedir. PSP modülünden kaynaklanıyor olabilir.
16F877 \'nin dökümanında TRISE.4 bitininin 0 olması durumunda portd \'nin I/O portu olarak kullanabileceğini söylüyor. TRISE.4 = 0 yaparak tekrar deneyebilir misin?

İyi çalışmalar.

stransistors

Alıntı yapılan: neural - 11 Mart 2010, 13:13:12TRISE \'nin durumu nedir. PSP modülünden kaynaklanıyor olabilir.
16F877 \'nin dökümanında TRISE.4 bitininin 0 olması durumunda portd \'nin I/O portu olarak kullanabileceğini söylüyor. TRISE.4 = 0 yaparak tekrar deneyebilir misin?

İyi çalışmalar.

teşekkür ederim, ancak,
hala durum aynı... bu durum sadece d\'ye özgü de değil... port a ve b\'deki bilgileri de okuyamıyorum bu komutlarla. ama dediğim gibi bit olarak verirsem komutu (örneğin agelen=porta.3 gibi) o zaman problem çıkmıyor...

bir de anlamadığım bir şey oldu: e portu 3 pinden oluşuyor; ancak trise.4 yapınca da derleme hatası fln vermiyor... bu neden böyle ki?


neural

PORTE 3 pin ancak 8 bitlik biz kaydedici kontrol ediyor. İlgili dökümanı incelerseniz üst beş bitin portd ile alakalı olduğunu görürsünüz. Sonuçta 16F877 8 bitlik bir mikrodenetleyicidir. Yani derleyici yazılmış olan kodu 8 biti geçmediğiniz sürece size hata vermez. Derleyici de sonuçta ona öğretilen dili çeviriyor.

Ayrıca sorun ile ilgili söylemek istediğim, dediğiniz gibi garip bir durum picbasic fazla bilmiyorum. Ama pic basicte araya asm komutları girilebildiğini biliyorum.

Şöyle bir kod işinizi çözücektir sanırım.

movf      portd,w
movwf   DBILGI

İyi çalışmalar...

stransistors

gerçekten çok teşekkür ediyorum yardımlarınız için, sayenizde problem çözüldü.

verdiğiniz kodu asm olarak yazdığım programın içine gömdüm ve derleme yapılırken verilen bir hata, problemin çözülmesini sağladı. hatada dbilgi\'nin önceden bir symbol olarak tanımlanmadığını söylüyordu. ben de bunun üzerine SYMBOL BBILGI=PORTB komutunu kullandım ve artık veriyi okuyabiliyorum.

ben SYMBOL komutunun sadece tek bitlere değişken atamak için kullanıldığını biliyordum. dahası incelediğim program örneklerinde DBILGI=PORTD şeklinde PORTD\'ye byte aralığındaki değişkenler atanıyor ve çalışıyordu da... (benim ilk başta yapmaya çalıştığım gibi yani.) belki artık çalışmaması ve SYMBOL komutuyla 8 bitlik bir verinin değişkene atanabilmesi derleyici ya da microcode studio\'nun versiyonlarıyla ilgili bir durumdur diye düşünüyorum...

artık ne olduğunu tam olarak bilmiyorum ama sorunum çözüldü.

son olarak mikroişlemci hakkında verdiğiniz bilgi için de ayrıca teşekkür ederim. bu konularda yeniyim ve bazı temel noktaları dahi yeni yeni öğreniyorum. 8 bitlik bir mikroişlemcinin tüm kaydedicilerinin de 8 bit olması gerektiği hiç aklıma gelmemişti doğrusu. hatta trisa=%111011 gibi bir değer yazarken bile kendi kendime \"bunun baştan 2 tane biti ne oluyor, niye eksik bunlar\" diye düşünüp duruyordum. :)

neural

Sorunun çözülmüş olduğuna çok sevindim. Mikrodenetliyiciler hakkında daha fazla bilgi almak istiyorsan ilgili denetleyicinin teknik dökümanına bakabilirsin. Genelde ingilizce oluyor, ingilizce biliyorsan işin kolay ama bilmiyorsan bile şekillerle genelde ne anlatılmak istendiği anlaşılıyor.

Eğer yardım almak istediğin başka bir konu varsa yardımcı olmaya çalışırım ve eminim diğer arkadaşlarda yardımcı olmak isteyecektir.

İyi çalışmalar.