Şifrem

Başlatan Şahin35, 19 Mart 2014, 17:19:56

Şahin35

Ete hocam . biliyom rahatsız edıyorum sizi .. :( hocam sizin pic basic pro ders 9 rar dosyasını actım okudum. sıfreyı kaydetme ıle ılglı bılgıler vardı. hocam bende o bılgıler dahılınde program ılaveler yaptım .. programı derledıgımde hata vermedı. pıc yukledım . sıfre:1234# tusladıgımda role cektı. ama degıstırmeye kalktıgımda hata verdı. programa sıfre kayıt dongusu de ekledım. once eeproma okudm sonra yazdım. ama gene hata verdı hocam. nerde yanlıslık yapmıs olabılırım. size zahmet olmassa programa bı bakarmısınız hocam .cızdıgım devrede rar dosyasında mevcuttur. hocam nerede yanlıs yapıyorum.. nerede hatam var cözemedim...

  Program :
PortA=0
TrisA=%10000000
PortB=0
TrisB=%00111001
CMCON=7
OPTION_REG.7=0
SYMBOL BUZZER =PORTA.4
SYMBOL BUTON =PORTB.5
SYMBOL ROLE =PORTB.6
SYMBOL KAYIT1=PORTB.1
  SYMBOL YATAY_A =PORTA.0
  SYMBOL YATAY_B =PORTA.1
  SYMBOL YATAY_C =PORTA.2
  SYMBOL YATAY_D =PORTA.3
  SYMBOL DIKEY_1=PORTB.0
  SYMBOL DIKEY_2=PORTB.3
  SYMBOL DIKEY_3=PORTB.4
    SAY VAR BYTE
    HANE VAR BYTE
    CEVRIM VAR BYTE
    OKU1 VAR BYTE
    C VAR BYTE
    D VAR BYTE
    TUS1 VAR BYTE
    SIFRE1 VAR BYTE
    SIFRE2 VAR BYTE
    A3 VAR BYTE
    A4 VAR BYTE
    Dongu VAR BYTE
RAKAM VAR BYTE
OKU VAR BYTE
SIFRE VAR WORD
TUS VAR BYTE
ANA_MENU:
CEVRIM=0
SIFRE1=0
SIFRE2=0
A3=0
A4=0
OKU1=0
OKU=0
C=0
D=0
DONGU=0

SIFRE=0
TUS=0
ROLE=0
BUZZER=1
BUTON =0
PAUSE 300
         LOW buzzer
         pause 2000
         HIGH buzzer
   
   
BASLA:       
             FOR DONGU=8 TO 11
               HIGH DONGU
               GOSUB TUSOKU
               LOW DONGU
             NEXT DONGU
                  GOTO BASLA
                          END
         TUSOKU:
        tus=255
       YATAY_A=0
       IF DIKEY_1=0 THEN
         TUS=1
        LOW buzzer
         pause 750
         HIGH buzzer
         WHILE DIKEY_1=0:WEND
       ENDIF
       
         IF DIKEY_2=0 THEN
           TUS=2
          low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_2=0:WEND
         ENDIF
         
       IF DIKEY_3=0 THEN
         TUS=3
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_3=0:WEND
       ENDIF
       
       HIGH YATAY_A
       
       YATAY_B=0
       IF DIKEY_1=0 THEN
         TUS=4
        low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_1=0:WEND
       ENDIF
       
       IF DIKEY_2=0 THEN
         TUS=5
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_2=0:WEND
       ENDIF
       IF DIKEY_3=0 THEN
           TUS=6
           low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_3=0:WEND
       ENDIF
       
        HIGH YATAY_B
       
        YATAY_C=0
        IF DIKEY_1=0 THEN
          low buzzer
         pause 750
         high buzzer
          TUS=7
          low buzzer
         pause 750
         high buzzer
          WHILE DIKEY_1=0:WEND
        ENDIF
       
          IF DIKEY_2=0 THEN
            TUS=8
            low buzzer
         pause 750
         high buzzer
            WHILE DIKEY_2=0:WEND
          ENDIF
            IF DIKEY_3=0 THEN
              TUS=9
              low buzzer
         pause 750
         high buzzer
              WHILE DIKEY_3=0:WEND
            ENDIF
           
            HIGH YATAY_C
       
         YATAY_D=0
         IF DIKEY_1=0 THEN
           TUS=11
           low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_1=0:WEND
         ENDIF
         
           IF DIKEY_2=0 THEN
             TUS=0
             low buzzer
         pause 750
         high buzzer
             WHILE DIKEY_2=0:WEND
           ENDIF
           IF DIKEY_3=0 THEN
             TUS=12
             low buzzer
         pause 750
         high buzzer
             WHILE DIKEY_3=0:WEND
           ENDIF
            HIGH YATAY_D
            PAUSE 30
            IF TUS=10 THEN TUS=0
            IF TUS<13 THEN
              SIFRE=SIFRE*10+TUS
            ENDIF
            IF SIFRE=12352 THEN
              GOSUB ROLEAC
              SIFRE=0
            ENDIF
            IF SIFRE>10000 THEN SIFRE=0
           
            GOTO BASLA 
         

           READ 10,SIFRE1
          PAUSE 10
           READ 14,SIFRE2       
           
         IF OKU=C AND OKU1=D THEN   
         GOSUB BASLA2
       
       ENDIF 
       roleac:
          IF OKU =C AND OKU1=D THEN
      HIGH ROLE
      PAUSE 5000
      LOW ROLE
      PAUSE 5000
      GOTO ANA_MENU
          ENDIF 
          BASLA2:
           FOR CEVRIM=8 TO 11
           HIGH CEVRIM
           GOSUB DEGER2
           LOW CEVRIM
           NEXT CEVRIM
           GOTO BASLA2
                END
             DEGER2:   
                   YATAY_A=0
       IF DIKEY_1=0 THEN
         TUS1=1
         LOW buzzer
         pause 750
         HIGH buzzer
         WHILE DIKEY_1=0:WEND
         GOSUB SIFREKAYIT
       ENDIF
       
         IF DIKEY_2=0 THEN
           TUS1=2
           low buzzer
           pause 750
           high buzzer
           WHILE DIKEY_2=0:WEND
           GOSUB SIFREKAYIT
         ENDIF
         
       IF DIKEY_3=0 THEN
         TUS1=3
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_3=0:WEND
         GOSUB SIFREKAYIT
       ENDIF
       
       HIGH YATAY_A
       
          YATAY_B=0
       IF DIKEY_1=0 THEN
         TUS1=4
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_1=0:WEND
         GOSUB SIFREKAYIT
       ENDIF
       
       IF DIKEY_2=0 THEN
         TUS1=5
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_2=0:WEND
         GOSUB SIFREKAYIT
       ENDIF
       IF DIKEY_3=0 THEN
           TUS1=6
           low buzzer
           pause 750
           high buzzer
           WHILE DIKEY_3=0:WEND
           GOSUB SIFREKAYIT
       ENDIF
       
              HIGH YATAY_B
       
           YATAY_C=0
        IF DIKEY_1=0 THEN
          low buzzer
          pause 750
          high buzzer
          TUS1=7
          WHILE DIKEY_1=0:WEND
          GOSUB SIFREKAYIT
        ENDIF
       
          IF DIKEY_2=0 THEN
            TUS1=8
            low buzzer
            pause 750
            high buzzer
            WHILE DIKEY_2=0:WEND
            GOSUB SIFREKAYIT
          ENDIF
            IF DIKEY_3=0 THEN
              TUS1=9
              low buzzer
              pause 750
              high buzzer
              WHILE DIKEY_3=0:WEND
              GOSUB SIFREKAYIT
            ENDIF
           
            HIGH YATAY_C
       
              YATAY_D=0
         IF DIKEY_1=0 THEN
           TUS1=11
           low buzzer
           pause 750
           high buzzer
           WHILE DIKEY_1=0:WEND
           GOSUB SIFREKAYIT
         ENDIF
         
           IF DIKEY_2=0 THEN
             TUS1=0
             low buzzer
             pause 750
             high buzzer
             WHILE DIKEY_2=0:WEND
             GOSUB SIFREKAYIT
           ENDIF
           
           IF DIKEY_3=0 THEN
             TUS1=12
             low buzzer
             pause 750
             high buzzer
             WHILE DIKEY_3=0:WEND
             GOSUB SIFREKAYIT
           ENDIF
            HIGH YATAY_D
            PAUSE 30
            IF TUS1=10 THEN TUS=0
            IF TUS1<13 THEN
              ENDIF
               
               
                SIFREKAYIT:
     IF HANE=0 THEN
       PAUSE 50
       SIFRE1=(0*10)+tus1
       A3=SIFRE1 
          ENDIF
     IF HANE=1 THEN
       PAUSE 50
       SIFRE1=(A3*10)+TUS1
          ENDIF
     IF HANE=2 THEN
        PAUSE 50
        SIFRE2=(0*10)+TUS1
        A4=SIFRE2
           ENDIF
     IF HANE=3 THEN
         PAUSE 50
         SIFRE2=(A4*10)+TUS1   
           ENDIF
         PAUSE 300
     HANE=HANE+1
     IF HANE=4 THEN
GOSUB KAYIT
else
goto BASLA2
ENDIF
          KAYIT:
           IF SAY= 255 THEN
        GOTO ANA_MENU
        SAY=SAY+1
        ENDIF
         WRITE 10,SIFRE1
          PAUSE 10
        WRITE 14,SIFRE2
          PAUSE 10
       
          GOTO KAYIT
             END

ete

Bir önceki mesajını sildim yeniden yazdın. Sürekli söylüyorum. Kod verirken kod tag kullanın diye. Son kez uyarıyorum yoksa bütün konularını sileceğim.

Başından beri takip ediyorum. Aslına bakarsan sen bir şey yapmadın daha. Yapılanların hepsini ben yaptım zaten.
Yolunu açtım ama gerisini bir türlü getiremiyorsun. Ne yapman gerektiğinide açıklamıştım. Ama bilgi seviyen sıfır. Bütün sene oturmuşsun hiç bir şeyi merak edip çalışmamışsın şimdi de yumurta kapıya dayanmış proje yapmaya çalışıyorsun. Olmaz bu bilgi ile bir yere varamazsın. Yazdım dediklerine bakıyorum abuk subuk şeylerle dolu. Bundan bir şey çıkmaz ve bir sonuç alınamaz. Bu yazılanların düzeltilecek bir eyride yok.
Mantığın çalışıyorsa yazdıklarının (aslında yazma değilde diğerlerini aynen kopyalamışsın) çalışmayacağını görmen gerekir.
Bak programın başına ne koymuşsun;
             FOR DONGU=8 TO 11
               HIGH DONGU
               GOSUB TUSOKU
               LOW DONGU
             NEXT DONGU
                  GOTO BASLA
                          END

Program bu döngüden kurtulamaz. Ne amaçla koyduğun belli değil. Bilerek hiç bir şey yapmıyorsun.
Hadi burayı aştık diyelim, programcılık mantığında tuş takımı genelde alt program şeklinde çalışır.
Lazım olunca programı oraya yönlendirirsin. Ama sen lazım oldukça tuş takımı kontrolünü yeniden yazıyorsun.
Programa bir bak bakalım hiç bir yerde epromdan şifre değeri okuma kısmına , yeniden şifre girme kısmına şifre değiştirme kısmına bir yönlendirme varmı?. Ben olmadığını görebiliyorumda sen neden görmüyorsun. Birde ben yzadım diyorsun bunları. Peki yazdın da oralaral neden gidemiyor program.  Program oralara gidemiyor ise nasıl şifre değiştireceksin ki?
Anlayacağın program baştan sona yanlış. Bu programın düzeltilmeside mümkün değil çünki böyle program çalışmaz.
Ya adam gibi bu iş nasıl yapılır öğren yada bırak bu işi birisine yaptır kurtul. Başka çaresi yok.

Ete

Şahin35

pek hocam sizin dediğiniz gibi öğrenicem. ama suan zamanım yok . kime yaptırabılırım pekı hocam..

ete

Ben hariç bir çok kişi bunu yapabilir.  Buradan yaptırmak üzere yardım iste  bir işstekli çıkar her halde.

Ete

Şahin35

Hocam bişsey sorcam.ısısde buton led baglıyorum. programı yazıorum. devre calısıyor. butona bastıgımda led yanıyor . ama sıfrelı kılıt  programında butona bastıgımda ledı yaksın dıyorm. olmuyor. aynı kodları yazıyorum gene olmuyor. sorun nerde hocam cozemedım. program aynı devre baglantısı aynı ama sıfrelı kılıt de calsımıyor ??

ete

Program yazma tamamen bir mantık silsilesini çalıştırmak demektir. Yapılması gerekeni bir mantık çerçevesinde düşünür ve tatbik edersin.
Bir tuşa basılınca ledin yanması dünyanın en kolay mantıklarından birisidir.
IF TUS=0 THEN LED=1 gördüğün gibi bir satırla hallediliyor.
AMa bu satırın çalışması için programın o satıra ulaşabilmesi gerekir.
Bu satırı şöyle yazarsam,

GOTO LEDBAK
IF TUS=1 THEN LED=1
GOTO BASLA

göreceği,n gibi bizim ledi yakan satırdan evvel GOTO LEDBAK isimli bir satır var ve bu satır programı alıp LEDBAK isimli etikete yönlendirir ve program hiç bir zaman ledi yaktıran satıra ulaşamaz. Ulaşmayınca senin led de hiç bir zaman yanmaz.
Senin yazdıklarında da böyle şeyler var. Anlamsız şekilde bir yerlere gitmeler gelmeler var. Kısaca led yakmayı kontrol eden satıra ulaşamadığı için programın ledin yanmıyor yada buna benzer bir şeyler vardır.

Ete


Şahin35

hocam yazdım gene aynı .. butona  bastıgımda led yanmıyor. ??

ete

Geleyim yakayım istersen. Yanmıyor diyorsunda ne yaptığını görebiliyorum nede bilebiliyorum ne yapabilirimki sanki ben mani oluyorum . Bir şeyleri yanlış yapıyorsun mutlaka. Ama yaptıklarını görmez isem nereden anlayacağım neyi yanlış yaptığını? hala anlayamadın değilmi, sorunun bulunmasının bize ip ucu vermene bağlı olduğunu. İp ucu denilen şeyde kod + şema dır. Bunu öğrenin artık.

Senin yazdıklarına şöyle cevap vermem lazım 10. satırda hata var onu düzelt. !!!!!

Ete

Şahin35


BASLA:
READ 02,SIFRE.BYTE0
READ 03,SIFRE.BYTE1
IF SIFRE=>65000 THEN
SIFRE=12352
ADR=02
DEG:
WRITE ADR,SIFRE.BYTE0
ADR=ADR+1
WRITE ADR,SIFRE.BYTE1
ADR=ADR+1
IF ADR=>20 THEN BASLA1
GOTO DEG
BASLA1:
BU KISIMDA TUS TAKIMI OLUCAK DEME HOCAM ...
ENDIF

Şahin35

yanı sıfremı eeprom yazdım dogru mu hocam .
basla 1: kısmına da tus takımı kodunu yazıcam ..
BASLA1:       

        tus=255
       YATAY_A=0
       IF DIKEY_1=0 THEN
         TUS=1
        LOW buzzer
         pause 750
         HIGH buzzer
         WHILE DIKEY_1=0:WEND
       ENDIF
       
         IF DIKEY_2=0 THEN
           TUS=2
          low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_2=0:WEND
         ENDIF
         
       IF DIKEY_3=0 THEN
         TUS=3
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_3=0:WEND
       ENDIF
       
       HIGH YATAY_A
       
       YATAY_B=0
       IF DIKEY_1=0 THEN
         TUS=4
        low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_1=0:WEND
       ENDIF
       
       IF DIKEY_2=0 THEN
         TUS=5
         low buzzer
         pause 750
         high buzzer
         WHILE DIKEY_2=0:WEND
       ENDIF
       IF DIKEY_3=0 THEN
           TUS=6
           low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_3=0:WEND
       ENDIF
       
        HIGH YATAY_B
       
        YATAY_C=0
        IF DIKEY_1=0 THEN
          low buzzer
         pause 750
         high buzzer
          TUS=7
          low buzzer
         pause 750
         high buzzer
          WHILE DIKEY_1=0:WEND
        ENDIF
       
          IF DIKEY_2=0 THEN
            TUS=8
            low buzzer
         pause 750
         high buzzer
            WHILE DIKEY_2=0:WEND
          ENDIF
            IF DIKEY_3=0 THEN
              TUS=9
              low buzzer
         pause 750
         high buzzer
              WHILE DIKEY_3=0:WEND
            ENDIF
           
            HIGH YATAY_C
       
         YATAY_D=0
         IF DIKEY_1=0 THEN
           TUS=11
           low buzzer
         pause 750
         high buzzer
           WHILE DIKEY_1=0:WEND
         ENDIF
         
           IF DIKEY_2=0 THEN
             TUS=0
             low buzzer
         pause 750
         high buzzer
             WHILE DIKEY_2=0:WEND
           ENDIF
           IF DIKEY_3=0 THEN
             TUS=12
             low buzzer
         pause 750
         high buzzer
             WHILE DIKEY_3=0:WEND
           ENDIF
            HIGH YATAY_D
            PAUSE 30
            IF TUS=10 THEN TUS=0
            IF TUS<13 THEN
              SIFRE=SIFRE*10+TUS
            ENDIF
            IF SIFRE=12352 THEN
              GOSUB ROLEAC
              SIFRE=0
            ENDIF
            IF SIFRE>10000 THEN SIFRE=0
           
            GOTO BASLA1
         

ete

#10
ELinde tek şifre var iken bunu kaç kere kayıt etmeyi planlıyorsun? yada neden 20 adrese kadar kayıt yapmayı planlıyorsun.
Mesajlarında bundan hiç bahsetmemişsin.
IF SIFRE=>65000 THEN
SIFRE=12352
ADR=02
DEG:
WRITE ADR,SIFRE.BYTE0
ADR=ADR+1
WRITE ADR,SIFRE.BYTE1
ADR=ADR+1
IF ADR=>20 THEN BASLA1
GOTO DEG
BASLA1:
BU KISIMDA TUS TAKIMI OLUCAK DEME HOCAM ...

kodlarına bir bak istersen.
ADR=02 (2 desen daha uygun olurdu nedir 02 ?)
Bu komut ile kayıt adresini 2 yaptın diyelim.
DEG:
WRITE ADR,SIFRE.BYTE0
ADR=ADR+1
WRITE ADR,SIFRE.BYTE1
satırları ile 2 nolu adrese şifre değerinin Low byt'ını ve 3 nolu adrese ise şifre değerinin High byte'ını kayıt ettin.
Şimdi şu satırlara bak bakalım nedenbu satırları oraya yazdın açıkla,
ADR=ADR+1  'adres değerini bir artırdık . En son değer 3 idi şimdi 4 oldu
IF ADR=>20 THEN BASLA1 'Adres değeri 20 veya 20 den büyük ise BASLA1 satırına git değilse? bir alt satıra geç demektir bu
Orada da Goto DEG var. O halde program sürekli olarak adr=20 oluncaya kadar aynı şifre değerini kayıt edecek NEDEN??????
Yada ne gereği var?????.

Üstelik konumuz butona basınca yanmayan Led meselesi nerede o? göremedim!!!!!
Ete


Şahin35

sifremiz wor ddegıskenlı ya hocm buyuk oldugu ıcın parcaladım. ıkıye boldum. dusuk bıtını 02 nolu adrese buyuk bıtını 03 adresıne attım..o yuzden ole yazdım..

Şahin35

buton ıcınde bu yazdım
   
             IF BUTON=1 THEN
             LOW BUZZER
                  else
                  HIGH BUZZER
                  PAUSE 2000
                  ENDIF

hemen tus takımının altına hocam..

ete

#13
Hala anlamıyorsun. Ne yazdığını gördüm üstelik sana tekardan yorumlayarak yazdım. Ama ne yazdığının farkında değilsin yada bir başkasının yazdıklarını ben yazdım diye buraya koyuyorsun. İşte sorun burada bu yüzden bu konuda yeterli değilsin bu programı bitirecek kapasitede değilsin. Üstelik bunu yardımım ile bile bitirecek seviyede değilsin diyorum ama anlamıyorsun.

Tekrar yazıp soruyorum.
1. Yanmayan led programı nerede ? yanmıyor deyip konu açtın ama yeniden şifre işine atladın.

2. Elindeki şifren 12352 ise bu word aralığında değere sahiptir. O halde 2 byte olarak eproma kayıt edilmesigerekir.
    WRITE 2,SIFRE.Byte0
    WRITE 3,SIFRE.Byte1
    PAUSE 10
şeklindeki komut dizisi bunu yapmak içinyeterlidir. Bu komutlar onu 2 ve 3 nolu adreslere kayıt eder. Sen ise 20 nolu adrese kadar sürekli kayıt yapıyorsun neden diye bunu soruyorum!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Bak daha açık anlatayım ne yaptıklarını,
ADR=02 , burada adres=2 dedin bu tamam.
DEG:
WRITE ADR,SIFRE.BYTE0   'burada 2 nolu adrese Sifre.byte0 değerini kayıt ettin buda tamam.
ADR=ADR+1  'adres=3 oldu buda gereksiz ama tamam diyelim
WRITE ADR,SIFRE.BYTE1 'burada Sifre.Byte1 değerini 3 nolu adrese kayıt etmiş oldun buda tamam
ADR=ADR+1  'burada Adres=4 oldu   işte bu tamam değil neden adres değerini 4 yaptın???? soruyorum cevapla!!!!!!!!!
IF ADR=>20 THEN BASLA1  'burada Adres=20 veya 20 den büyük ise BASLA1 etiketine git demişsin. Adres=4 olduğuna göre gitmeyecek ve program bir sonraki satıra geçecek. Orada ne var GOTO DEG ile yeniden DEG isimli etikete gidecek.
DEG etiketine geldi ne var orada  WRITE ADR,SIFRE.BYTE0   '  o halde 4 nolu adrese yeniden Sifre.Byte0 değerini yazacak
sonra alt satırlara devam edip Adres=6 olacak ve 6 değeri 20 den küçük olduğu için yeniden DEG isimli etikete gelip aynı şifreleri bu sefer 6 ve 7 nolu adreslere kayıt edecek sonra ADres=8 olacak yeniden DEG isimli etikete gelecek sifreleri bu sefer 8 ve 9 nolu adreslere kayıt edecek bu iş Adres=20 oluncaya kadar devam edecek.
Bunlara ne gerek var diye onu sorunyorum ve cevabnı bekliyorum.

Bak led içinbunu yazdım demişsin. Ama ben nereden bileceğim
- BUTON isimli bir tanımlama yaptınmı?
- Tus takımının altında GOTO BASLA diye komut var.
O komuttan öncemi yazdın sonramı yazdın nerden bileceğim???????????????????????

Ete


Şahin35

   
             IF BUTON=1 THEN
             LOW BUZZER
                  else
                  HIGH BUZZER
                  PAUSE 2000
                  ENDIF


Yanmayan lede yazdıgım program budur. ben ilerlyen zamnlarda yedekleme amacında dusundum.bırtane bneım sıfrem var onu kaydettım. daha sonra sıfremı unuttum yedek sıfrem mı devreye sokmak ıcın dusundum hanı elımdekı gıderse onu gıreyım. oda klaan adreslere yazsın dıye hocam ..

READ 02,SIFRE.BYTE0
READ 03,SIFRE.BYTE1
IF SIFRE=>65000 THEN
SIFRE=12352
DEG:
WRITE 02,SIFRE.BYTE0
WRITE 03,SIFRE.BYTE1
GOTO DEG
ENDIF
   
...

Powered by EzPortal