eeprom kullanımı

Başlatan uardal, 06 Haziran 2008, 12:30:36

uardal

merhaba

arkadaşlar ben 16f877 nin eepromuna yada gerekirse harici bi eeproma aşağıdaki gibi tarama satırları yazıp pic te çalıştırmak istiyorum ama bi türlü anlayamadım nasıl olacağını, örneklerde sabit değerler atılmış eepromun içine, yardımcı olabilirseniz sevinirim. (bunun gibi yaklaşık 100 satır atmam lazım, o yüzden picin program belleğpine sığmıyor)

TARAMA:
IF BINLER=%10010001 AND YUZLER=%10010001  AND ONLAR=%10010001 AND BIRLER=%10010101 THEN
zaman = 5000
GOTO SINYAL

IF BINLER=%10010001 AND YUZLER=%10010001  AND ONLAR=%10010001 AND BIRLER=%10011001 THEN
zaman = 5000
GOTO SINYAL

IF BINLER=%10010001 AND YUZLER=%10010001  AND ONLAR=%10010001 AND BIRLER=%11010001 THEN
zaman = 5000
GOTO SINYAL

ENDIF

Gurkan-Demirbas

Ne yapmaya çalıştığını söyleyebilirsen yardımcı olmaya çalışırım;
Yazdıklarından pek birşey anlamadım; 100 adet IF bana pek mantıklı gelmedi.
Ne yapmak istediğini biraz daha açarsan, belki daha kolay bir yöntemini bulabiliriz.

Gürkan

uardal

tabiki

telefondan aldığım 4 haneli dtmf sinyallerini elimdeki 100 numaralık kod tablosuyla karşılaştırıp duruma göre çıkışları düzenlemek istiyorum,ben bu kadarını yapabildim ama daha kolay bi yöntemi varsa iyi olur.

teşekkürler

ErsinErce

binler yüzler onlar diye bi tablo oluşturmuşsunuz bunu tek bir Dword(32 bit) yaparsanız yerden baya tasarruf etmiş olursunuz

sayı = (binler * 1000) +(yüzler*100)+(onlar*10)+birler

bundan sonra select case kullanarak hızlıca işlemi gerçekleştirirsiniz

Select sayı
Case 0
........
........
.......
Case 1
.
.
.
EndSelect

Gurkan-Demirbas

Gelen_Kod Var Word
INDEX Var Byte
BIRLER_sayi Var Byte
ONLAR_sayi Var Byte
YUZLER_sayi Var Byte
BINLER_sayi Var Byte

'--------- Gelen DTMF kodları sayıya çeviriyor ----------------
LOOKDOWN2 BIRLER,[ 0,1,2,3,4,5,6,7,8,9],BIRLER_sayi   
LOOKDOWN2 ONLAR,[ 0,1,2,3,4,5,6,7,8,9],ONLAR_sayi 
LOOKDOWN2 YUZLER,[ 0,1,2,3,4,5,6,7,8,9],YUZLER_sayi 
LOOKDOWN2 BINLER,[ 0,1,2,3,4,5,6,7,8,9],BINLER_sayi 
' !!!!!!!!!!!!!!!!!!!!! Burada 0'dan 9'a kadar olan sayıların yerine DTMF kod karşılıklarını girmelisin !!!!!!!!!!!!!!!! ben sayı yazıp bıraktım

'----------- Bulunan sayılar 16 bitlik bir sayıya dönüştürülüyor-------
Gelen_Kod = (BINLER_sayi*1000) + (YUZLER_sayi*100) + (ONLAR_sayi*10) + BIRLER_sayi

INDEX = 0 'INDEX'i arama için sıfırla

'Buraya, numaralarının ilk 50 adetini giriyorsun, ben 6 adet girdim
LOOKDOWN2 Gelen_Kod,[0,9812,1283,1236,5328,2745,2396],INDEX    'Listeye en fazla 85 sayı yazılabiliyor.ama baştaki sıfır ile birlikte toplam enfazla 51 adet yazalım

IF INDEX <> 0 Then GOTO Devam

LOOKDOWN2 Gelen_Kod,[0,3482,9423,1234,5678,6543],INDEX    'Listeye en fazla 85 sayı yazılabiliyor.

IF INDEX = 0 then GOTO Kod_listede_bulunamadı
INDEX = INDEX + 50
Devam :

' Artık INDEX'te gelen numaranın tabloda kaçıncı sırada olduğunu gösteren sayı var, artık işin kolay

Select INDEX
Case1
'..............
'..............
'..............
'Tablonun ilknumarası ile eşleşirse yapılacaklar

Case2
'Tablonun ikinci numarası ile eşleşirse yapılacaklar
'..............
'..............
'..............
Case3
'..............
'..............
'..............
EndSelect
Goto Baslangic


Kod_listede_bulunamadı:
'Eğer kod listede bulunamadıysa yapılacakları buraya giriyoruz
'......................
'......................
'......................
'......................
Goto Baslangic

uardal

ilginiz için teşekkürler

benim anlamadığım dtmf entegresinden 4 bit sinyal alıyorum, bunları binary olarak yazabilirmiyim?örn:%000010110, yada nasıl sayıya veya a,b,c,d gibi karakterlere çevirebilirim?

LOOKDOWN2 BIRLER,[ 0,1,2,3,4,5,6,7,8,9],BIRLER_sayi    

birde dtmf de abcd sinyalleri var bunlarıda yukardaki lookdown satırına ekleyebilirmiyim?

Gurkan-Demirbas

Evet yazabilirsin;

B0 Var Byte   'Aranacak bilgi
B1 Var byte   'bilginin bulunduğu sıra numarasının kaydedileceği saklayıcı

LOOKDOWN2 B0, [%0000,%0001,%0010,%0011,%0100], B1
Bu komut B0 değişkeninin içindeki bilgiyi parantes içine yazılı olan değerler ile kontrol eder ve kaçıncı sırada olduğunu B1'e yazar; eğer eşleşme bulamaz ise B1'e hiç dokunmaz yani B1 eski değeri ile kalır.

LOOKUP B0, ["P","I","C","P","R","O","J","E"], B1
'mesela bu komutu işletmeden B0=6 ise ==> B1'e J harfinin ASCII karşılığı kaydedilir. Ve B1'i direk Karakter LCD'ye gönderirsen J harfinin ekrana basıldığını görürsün.

Alıntı YapThe LOOKDOWN statement searches a list of 8-bit Constant values for the presence of the Search value
LOOKDOWN B0,["0123456789ABCDEF"],B1 ' Convert hexadecimal character in B0 to decimal value B1

The LOOKDOWN2 statement searches a list of Values for the presence of the Search value
LOOKDOWN2 W0,<[10,100,1000],B0

The LOOKUP statement can be used to retrieve values from a table of 8-bit constants
LOOKUP B0,["Hello!"],B1 ' Get character number B0 from string to variable B1

The LOOKUP2 statement can be used to retrieve entries from a table of Values
LOOKUP2 B0,[256,512,1024],W1

uardal

çok teşekkürler, bu bilgiler baya yardımcı olacak, umarım sonuca ulaşırım

uardal

arkadaşlar dediğiniz gibi yaptım ve  çok güzel oldu fakat tuşların bağlı olduğu porta daki 4 bitlik veriyi değişkenlere atamadım.aşağıdaki gibi yapıyorum ama olmuyor,porta daki ilk 4 bit data biti son bit ise onay biti olacak ht9170 dmtf receiver kullanmayı düşünüyorum, bu konudada yardımcı olursanız sevinirim.

BIRLER = PORTA
ONLAR=PORTA
YUZLER=PORTA
BINLER=PORTA
BASLA:


'--------- Gelen DTMF kodları sayıya çeviriyor ----------------
LOOKDOWN2 BIRLER,[ 0,1,2,3,4,5,6,7,8,9],BIRLER_sayi    
LOOKDOWN2 ONLAR,[ 0,1,2,3,4,5,6,7,8,9],ONLAR_sayi
LOOKDOWN2 YUZLER,[ 0,1,2,3,4,5,6,7,8,9],YUZLER_sayi
LOOKDOWN2 BINLER,[ 0,1,2,3,4,5,6,7,8,9],BINLER_sayi

uardal

çok şükür sorunu giderdim,whıle wend kullanarakta tuşlara uzun süre basılırsa yanlış tekrarları önlemiş olduk. yardımcı olan herkese teşekkürler.

BIRLER = PORTA
ONLAR=PORTA
YUZLER=PORTA
BINLER=PORTA
BASLA:

WHILE PORTB.0 = 0
WEND
BIRLER=PORTA
LOOKDOWN2 BIRLER,[ 0,1,2,3,4,5,6,7,8,9],BIRLER_sayi
LCDOUT $FE,$C0,#BIRLER_sayi,#ONLAR_sayi,#YUZLER_sayi,#BINLER_sayi  
WHILE PORTB.0=1
WEND
WHILE PORTB.0=0
WEND
ONLAR=PORTA
LOOKDOWN2 ONLAR,[ 0,1,2,3,4,5,6,7,8,9],ONLAR_sayi
LCDOUT $FE,$C0,#BIRLER_sayi,#ONLAR_sayi,#YUZLER_sayi,#BINLER_sayi
WHILE PORTB.0=1
WEND
WHILE PORTB.0=0
WEND
YUZLER=PORTA
LOOKDOWN2 YUZLER,[ 0,1,2,3,4,5,6,7,8,9],YUZLER_sayi
LCDOUT $FE,$C0,#BIRLER_sayi,#ONLAR_sayi,#YUZLER_sayi,#BINLER_sayi
WHILE PORTB.0=1
WEND
WHILE PORTB.0=0
WEND
BINLER=PORTA
LOOKDOWN2 BINLER,[ 0,1,2,3,4,5,6,7,8,9],BINLER_sayi