pbp'da asm kodlarını kullanma

Başlatan picman, 10 Ocak 2005, 14:25:39

picman

arkadaşlar geçenlerde pbp ile dört led display ile bir digital saat yaptım
fakat şöyle bir sorunla karşılaştım

 isterseniz programı vererek anlatayım daha iyi olur

sadece tarama kısmı

TARA:
    PORTB=%11111110
FOR I=1 TO 2
   PORTA= DAKIKA DIG DIGIT
   PAUSE 5
   DIGIT=DIGIT+1
   ASM
   BSF STATUS,C
   RLF PORTB
   ENDASM
 NEXT I
DIGIT=0

  FOR I=1 TO 2
  PORTA= SAAT DIG DIGIT
   PAUSE 5
   DIGIT=DIGIT+1
   ASM
   BSF STATUS,C
   RLF PORTB
   ENDASM
NEXT I
DIGIT=0
RETURN

kaydırma işlemini pbp ile yapmadım çünki olmadı displayleri sürmek için pnp tipi transistor kullanmıştım tarama işlemini önce

 PORTB=PORTB << 1

şeklinde yapmıştım tabiki daha öncesinde status reg in c flag bitini 1 yaparak ama her kaydırma işlemi sonunda 0 verisi teker teker sola kaymadı peşinden takrar sıfır bilgileri gelmeye başladı zannedersem c flag
biti sıfırlanmadı onuda şu şekilde yapmıştım

  STATUS.0=1  
şu şekilde de denedim
  HIGH STATUS.0
gene olmadı ama yukarıdakı yazdığım tarama alt programı ile şu anda devrem çalışıyor fakat şimdide displayde görünen rakamlar birbirlerine çok az da olsa kar ışıyor daha önce asm kodları ile yaptığım saat devresinde böyle olmamıştı yanı birinci displayde beşrakamı görünüyorsa
ikinci displayde bir rakamı görüküyorsa birinci displaydeki beşrakamı çok hafif olarak ikinci displaydeki görünen bir rakamı üzerinde görünüyor bunun nedenini bulamadım  nerede hata yaptım bilemiyorum yardımcı olursanız sevinirim
not: değişkenlerin hepsi byte tipinde tanıumlı ve
saat=12
dakıka=00

şimdiden teşekkürler :cry:
Bilgi paylaştıkça artar..

baba

pbp da bit kaydırma yaparsan c bayrağı içeri alınmaz onun yerine sıfır gelir.asm yazman doğru olmuş...

segment sızmalarını önlemek için önce segmentleri karart sonra sıradaki display e geç ve segment bilgisini yaz.
sorun kalmaz..
böylece display kayarken segment bilgisi de yan display e geçmez..daha doğrusu geçer de karartma olduğu için rahatsız etmez...


....
...
porta= dakika dig digit
pause 5
porta = (karartma bilgisi)
....
....
@    bsf   status,c
@    rlf    portb,f


next I

Kolay gelsin
ÖĞRENDİKÇE    CAHİLLİĞİM       ARTIYOR.

picman

Dediğin gibi denemeyi düşündüm ama hiç yapmamıştım zannedersem sorunu bu şekilde hallede bilirm yalnız yazdığım program da da hatavar
galiba daha sonradan farkettim tarama ilşlemi için iki tane for next döngüsü kullanmıştım zanne dersen bu döngüyü teke düşürüp dakika ve saat displaylerini aynı döngü içersinde taratsam daha iyi olacak

    Yardımların için teşekkür ederim eğer işe yarar bir projem olursa onu arkadaşlarımla paylaşmayı düşünüyorum mesela eleimde asm kodları ile yazılmış bir kayan yazı reklam panosu programı var ama birazdaha geliştirilmesi gerekiyor çünkü ekranda görünen harfleri program içinde
DT komutu ilr bir tablo yaparak yazdım bu yüzdfen karakterlerin sayısını artırdığımda programın boyutu değiştiği için pclath registerinin içeriğini yazdığım karakter sayısına göre ayarlamam gerekiyor bu devreyi aslında harici bir eprom kullanarak gerçeklerştirmem lazım fakat bu zamana kadar hiç harici eproma pic ile veri yazıp okumadığım için programı bu şekilde yazmak zorunda kaldım eproma veri yazma ve okuma işlemini iyi bilen arkadaşlardan yardım bekliyorum sizlerinde yardımıyla eminimki bu program işe yarar hale gelir

    şimdiden teşekkürler  :lol:
Bilgi paylaştıkça artar..

picman

arkadaşlar sorunu dısplayleri sürmekte kullandığım trassistorlerin tipini npn yaparak çözdüm böylesi daha iyi oldu hemde araya asm kodlarını serpiştirmekten de kurtuldum ama bahsettiğim görüntü çakışması yine  yaşandı bende bir yedekleme registeri kullanarak portb yi yedekledim portb yi her tarama arasında sıfırladım sorun çözüldü

yardımlarınız için teşekkürler

bir alarmlı digital saat projem var bitirince arkadaşlarımın beğenisine sunmak istiyorum yeni başlayan arkadaşlara yardımcı olur herhalde

tekrar teşekkürler
Bilgi paylaştıkça artar..