avatar_ete

PIC Basic Ders-13 (Multiplex Çalışma)

Başlatan ete, 28 Ağustos 2011, 16:25:50

elektro77

Sayac degisken adini birde saydır olarak degistir bakalim ne olacak.yada dosya adini sayac degil baska bisey yap bakalım.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

Son hata diye gösterdiğin hatalar MCS nin 64 bit derlemeye ayarlı olduğunu ancak programdaki sigorta ayarlarının 32 bit için verildiğini gösteriyor.

Bu hatalrı şimdilik göz ardı edebilmek adına sigorta ayarlarını kapat yada MCS de View menüsünde Compile and Program Options seçeneğinde yer alan MPASM kutusundaki check (onay) işaretni kaldır. Tabiiki makinen 32 bit ise. Öncelikle bunu anlaman gerek. Makinen zaten 64 bit ise yalnızca sigorta ayarlarını değiştirmen yeterli olacaktır. Bence kapat sigorta ayarlarını derlemeye çalış bakalım eprom komutlarında hata verecekmi.
Ete

Evren Kılıç

#77
Erol Abi dediğiniz gibi ayarları değiştirdim, bu hali ile sıkıntı yok ayarlar ekteki gibi.
Program konusuna gelince aşağıdaki gibi  yazıp derleme yapınca problemsiz çalıştı, sayac değişkeni byte ları iki faklı adrese yazıldı.
Öte yandan ders konusu olan Multiplex çalışma konusunu delik  deşik ettik, konun bu kadar uzayacağını bilseydim ayrı bir konu açardım 3,5 sayfa bu problem ile doldu, bu kısımlar başka bir başlık altına taşınabilir mi bilmiyorum. Bu konuda bir kaç sorum daha olacak gibi artık o soruları ayrı bir başlık altında sorarım, ders konusunu daha fazla dağıtmayayım. Size ve yardımcı olmaya çalışan diğer arkadaşlara çok teşekkür ederim.Kodların son hali aşağıdaki gibi.

BASLA: 
      IF ARTIR=0 THEN
        SAYAC=SAYAC+1
      IF SAYAC=1000 THEN SAYAC=999
     WRITE $01,SAYAC.BYTE0
     WRITE $02,SAYAC.BYTE1
        GOSUB BAK
        WHILE ARTIR=0:WEND
        GOSUB DELAY
      ENDIF
       
      IF AZALT=0 THEN
        SAYAC=SAYAC-1
        IF SAYAC=65535 THEN SAYAC=0
       WRITE $01,SAYAC.BYTE0
     WRITE $02,SAYAC.BYTE1
        GOSUB BAK
        WHILE AZALT=0:WEND
        GOSUB DELAY
      ENDIF
     
      IF RST=0 THEN
        SAYAC=0
         WRITE $01,SAYAC.BYTE0
     WRITE $02,SAYAC.BYTE1
        GOSUB BAK
        WHILE RST=0:WEND
        GOSUB DELAY
      ENDIF
     
      GOSUB BAK           
     
      GOTO BASLA
     
       
AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN
'   AL:   LOOKUP X,[231,36,214,118,53,115,243,38,255,119,99,57],SAYI :RETURN


DELAY: POZ=0
      for I=0 to 1000
'         PAUSEUS 5
      Next
      RETURN
     
   
BAK:
         READ $01,SAYAC.BYTE0
         READ $02,SAYAC.BYTE1

      X=SAYAC DIG 0 :GOSUB AL:BIRLER=SAYI
      X=SAYAC DIG 1 :GOSUB AL:ONLAR=SAYI
      X=SAYAC DIG 2 :GOSUB AL:YUZLER=SAYI
       SHIFTOUT DS,SH_CP,1,[YUZLER,ONLAR,BIRLER]
        PULSOUT ST_CP,1  ' BİLGİYİ ÇIKIŞA GÖNDER
     
      return   
         
END
 

Powered by EzPortal