PİC 16f914 Eprom okuma ve yazma

Başlatan erdogan2734, 16 Ocak 2012, 11:40:16

erdogan2734

     Sevgili ETE Hocam ve değerli arkadaşlarım. Sorunuma geçmeden önce böyle bir platform oluşturduğu için ETE hocama çok teşekkür ederim. Ete hocam daha önce de söylemişimdir baya bir fırçanı yemiş bir öğrencin olarak basic dilini sizin derslerinizle ve yardımınızla öğrendim. Şimdi ise elektrik-elektronik müh. olarak iş hayatına atıldım çalıştığım şirkette arada program yazıyorum. Genelde 16f628 ve 16f877a kullanıyorduk. Taki amerikadan bir kontrol paneli gelene kadar. Şimdi 16f914 programlama ya çalışıyorum. Ufak defek eksiklikler dışında programladımda sayılır ancak pic'e hafızaya bazı değerler yazıp okumaya çalışıyorum normal WRİTE ve READ komutları hata veriyor. Ben bu komutları daha önce kullandım sıkıntısız çalışıyordu acaba nerede hata yapıyorum?
Programda şu şekilde kullanıyorum.
I var byte
READ 0, I[0]
WRİTE 0, I[0]
Hafızada çok küçük bir değer kaydedip okuyacağım. Sorunum ne olabilir acaba?
Şimdiden yorumlarınız için teşekkür ederim...
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Mucit23

#1
eproma yazma ve okuma komutlarının kullanımı aşağıdaki gibidir.
I var Byte

Read $0,I
Write $0,I

Burada $0 lar eprom Adresdir. Write $0,I komutu Epromun 0. adresine I değişkenini yazar. Read $0,I komutu ise aynı adresteki veriyi okur.
Epromun herhangi bir adresine hiç bir veri yazılmamış ise o adresi okuduğun zaman 255verisi okursun. Bu seni yanıltmasın.
Write komutu 16 bitlik bir datayı yazabilir Fakat datayı HIGH BYTE ve LOW BYTE olmak üzere iki adet parçaya bölüp ard arda yazar.
Örneği I adında word tipi bir değişken olsun.
Write $0,I dediğimiz zaman I değişkeni 0 ve 1 adrese I değişkenini yazar. Okuma yaparken ise iki datayı ayrı ayrı okumak lazım.

READ 0,I.LowByte
READ 1,I.Highbyte

Okuma işlemi yukarıdaki gibi oluyor. Eğer Word tipi bir datayı yapacaksan başlangıç adresinden sonraki adresinde kullanılmamasına dikkat et.

Kolay gelsin
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

erdogan2734

Alıntı yapılan: Mucit23 - 16 Ocak 2012, 11:57:57
eproma yazma ve okuma komutlarının kullanımı aşağıdaki gibidir.
I var Byte

Read $0,I
Write $0,I

Burada $0 lar eprom Adresdir. Write $0,I komutu Epromun 0. adresine I değişkenini yazar. Read $0,I komutu ise aynı adresteki veriyi okur.
Epromun herhangi bir adresine hiç bir veri yazılmamış ise o adresi okuduğun zaman 255verisi okursun. Bu seni yanıltmasın.
Write komutu 16 bitlik bir datayı yazabilir Fakat datayı HIGH BYTE ve LOW BYTE olmak üzere iki adet parçaya bölüp ard arda yazar.
Örneği I adında word tipi bir değişken olsun.
Write $0,I dediğimiz zaman I değişkeni 0 ve 1 adrese I değişkenini yazar. Okuma yaparken ise iki datayı ayrı ayrı okumak lazım.

READ 0,I.LowByte
READ 1,I.Highbyte

Okuma işlemi yukarıdaki gibi oluyor. Eğer Word tipi bir datayı yapacaksan başlangıç adresinden sonraki adresinde kullanılmamasına dikkat et.

Kolay gelsin

Sevgili Mucit öncelikle ilgin için teşekkür ederim. Ben byt değeri yazdıracağım yani burada yazdıracağım değer şu I sayını 9 a kadar saydıracağım örneğin daha sonra programdan çıkmadan önce Osayıyı kaydedip program açıldığında o sayının karşılığındaki moda yönlendirme yapacağım. Bu tip şeyleri 628 de falan yaptım çalışıyordu ancak 16f914 te sembol önceden tanımlanmadı şeklinde bir hata alıyorum.
Dediğiniz gibi yazdım yine değişen bir şey olmadı...
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

ete

Anlamadığım bir sebepten dolayı eproma yazma işinde dizi degişkeni kullanmak hataya sebep olmaktadır. Dizi değerini once bir temp değişkenine aktar sonra temp i yaz. Okurkende temp olarak oku onu diziye aktar.
Ete

erdogan2734

Alıntı yapılan: ete - 16 Ocak 2012, 12:21:00
Anlamadığım bir sebepten dolayı eproma yazma işinde dizi degişkeni kullanmak hataya sebep olmaktadır. Dizi değerini once bir temp değişkenine aktar sonra temp i yaz. Okurkende temp olarak oku onu diziye aktar.
Ete
Ete hocam byte kullanacağım için yani en fazla I değişkeni 9 olacak bunu tempe çevirmem gerekirmi? Hemen deniyorum sonuç değişir işallah.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

erdogan2734

Sevgili ETE Hocam Dediğiniz gibi TEMP yaptım. Ancak yine şu hatayı aldım.
''Symbol not previously defined.(EEADR)''
''Symbol not previously defined.(EEDATA)'' Birde ek olarak yazdığım programı ekliyorum bir bakkarsanız sevinirim.

'****************************************************************
TRISA=0
TRISB=%00000010
TRISC=0
TRISD=0
TRISE=0
I VAR BYTE
'****************************************************************
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0


'****************************************************************
KONTROL:
READ 0,I[0]  'Modlara yönlendirme yapan kısım
IF I=0 THEN GOTO MOD1
IF I=1 THEN GOTO MOD2
IF I=2 THEN GOTO MOD3

'****************************************************************
MOD1:
PORTB=%00001100
PORTD=%10110000
PORTC=%00001000
PORTE=%00000111
PORTA=%00010000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
PAUSE 60
IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00001100
PORTD=%10110000
PORTC=%00001000
PORTE=%00000111
PORTA=%00010000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00001100
PORTD=%10110000
PORTC=%00001000
PORTE=%00000111
PORTA=%00010000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00001100
PORTD=%10110000
PORTC=%00001000
PORTE=%00000111
PORTA=%00010000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00001100
PORTD=%10110000
PORTC=%00001000
PORTE=%00000111
PORTA=%00010000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00001111
PORTC=%00010000
PORTA=%00001111
PORTB=%01000000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00001111
PORTC=%00010000
PORTA=%00001111
PORTB=%01000000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00001111
PORTC=%00010000
PORTA=%00001111
PORTB=%01000000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00001111
PORTC=%00010000
PORTA=%00001111
PORTB=%01000000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00001111
PORTC=%00010000
PORTA=%00001111
PORTB=%01000000
PAUSE 40
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PAUSE 60
  IF PORTB.1=1 THEN goto ARTTIR
 
GOTO MOD1
'****************************************************************
MOD2: 
PORTB=%00001000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00000100
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00000000
PORTD=%10000000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00100000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00010000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00000000
PORTB=%01000000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00000000
PORTA=%00000001
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000010
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000100
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00001000
PAUSE 100
PORTA=%00010000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000000
PORTE=%00000001
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTE=%00000010
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTE=%00000100
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTE=%00000000
PORTC=%00001000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTC=%00000000
PORTD=%00000001
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00000010
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00000100
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00001000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%00000000
PORTC=%00010000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTC=%00000000
write  0,I[0]
GOTO MOD2

MOD3:
PORTB=%00001000
PORTC=%00010000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%00001100
PORTD=%00001000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%10001100
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%10101110
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTD=%10111111
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTB=%01001100
PORTC=%00011000
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000001
PORTE=%00000100
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000011
PORTE=%00000110
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000111
PORTE=%00000111
PAUSE 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00011111
pause 100
  IF PORTB.1=1 THEN goto ARTTIR
PORTA=%00000000
PORTB=%00000000
PORTC=%00000000
PORTD=%00000000
PORTE=%00000000
pause 100
  IF PORTB.1=1 THEN goto ARTTIR
  write  0,I[0]
goto mod3
  '****************************************************************
ARTTIR:     'modlar arası geçişi sağlayan kısım
I=I+1
IF I=3 THEN
I=0
ENDIF
PAUSE 50
write  0,I[0]
GOTO KONTROL

END



Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Powered by EzPortal