öncelikle herkese merhaba, pic basic ile yeni uğraşmaya başladım sayılır. Pic in dahili epromuna write komutu ile yazdırıp read ile okuyup epromdaki değere göre istenilen adrese gitmeyi hedefleyen bir programcık yazmak istedim ama bir türlü olmadı derlediğim hex i isiste simüle ettiğimde çalışmadığını gördüm, hatam nerde olabilir acaba ? yapmak istediğim 3 tane konum var bu daha fazlada olabilir, butona her bastığında diğer konuma geçmesi o konumda iken konumu kaydetmesi, elektrik kesilip geldiğinde hengi konumda ise o konumdan başlaması
TRISA=00000111
TRISB=00000000
BUTON VAR PORTB.0
POZ VAR BYTE
READ 20,POZ
IF POZ=1 THEN GOTO KONUM1
IF POZ=2 THEN GOTO KONUM2
IF POZ=3 THEN GOTO KONUM3
KONUM1:
poz=1
WRITE 20,poz
PAUSE 10
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
PAUSE 100
IF BUTON=1 THEN GOTO KONUM1
PAUSE 100
KONUM2:
poz=2
WRITE 20,poz
PAUSE 10
LOW PORTA.0
LOW PORTA.1
LOW PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM3
PAUSE 100
IF BUTON=1 THEN GOTO KONUM2
PAUSE 100
KONUM3:
POZ=3
WRITE 20,poz
PAUSE 10
PORTA=00000100
PAUSE 200
PORTA=00000010
PAUSE 200
PORTA=00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
PAUSE 100
IF BUTON=1 THEN GOTO KONUM3
PAUSE 100
END
Alıntı Yapelektrik kesilip geldiğinde hengi konumda ise o konumdan başlaması
Koda bakmadım ama isis de enerjiyi nasıl kesiyorsun?
KONUM1:
poz=1
WRITE 20,poz
PAUSE 10
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
PAUSE 100
IF BUTON=1 THEN GOTO KONUM1
PAUSE 100
Kayıt yapmaktan entegrenin ömrünü yersin. her döngüde kayıt var.
Şöyle olmalı,
IF POZ=1 THEN GOTO KONUM11 '' değiştirildi
IF POZ=2 THEN GOTO KONUM21 '' değiştirildi
IF POZ=3 THEN GOTO KONUM31 '' değiştirildi
KONUM1:
poz=1
WRITE 20,poz
PAUSE 10
KONUM11: ' eklendi
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
PAUSE 100
IF BUTON=1 THEN GOTO KONUM11 '' değiştirildi
PAUSE 100
diğerleri de aynı değişiklik ister
stop tuşuna basarak, daha önce yapılmış bazı devrelerde bu şekilde çalıştığını görmüştüm
enerjiyi kesmek diilde reset atmak olur sanirim isiste...
eepromun icini gozlemliyosundegilmi simule ederken...
KOdda sadece EEPROM A yazma ve okuma rutinlerini bırakırsan
EEPROM işlemlerinde hata olup olmadığını test edebilirsin.
EEPROM düzgün çalışıyorsa ondan sonra diğer kısımlara geçebilirsin.
Tabi ISIS ile Gerçek ortamda bazı farklılıklar olacaktır.
isiste epromun içini nasıl gözlemleyebilirim, yani eproma yazılıp yazılmadığı isiste anlaşılabilirmi
tabiki isiste debug menusun de pic eeprom memory var ilk once play tusuna basicaksin program calisinca ilerleme tusuna basicaksin yoksa o menu aktif olmaz...
bende sen stop butonuna basinca o eepromda bilgi kalmaz sonucta gercek bi pic yok bu yuzden EEPROM da yok bence durdurup calistirmak ise yaramaz pice reset atip denermisiniz bide...
Buton PORTB.0 giriş yapılmamış. Ve pull up yapmalısın.
TRISA=00000111
TRISB=00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
x VAR BYTE
READ 20,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
KONUM1:
gosub buton_birak
poz=1
WRITE 20,poz
PAUSE 10
KONUM11:
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
goto KONUM11
KONUM2:
gosub buton_birak
poz=2
WRITE 20,poz
PAUSE 10
KONUM21:
LOW PORTA.0
LOW PORTA.1
LOW PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM3
goto KONUM21
KONUM3:
gosub buton_birak
POZ=3
WRITE 20,poz
PAUSE 10
KONUM31:
PORTA=00000100
PAUSE 200
PORTA=00000010
PAUSE 200
PORTA=00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
goto KONUM31
END
''''
buton_birak:
for x = 1 to 100 ''' buton rutini
pause 1
IF BUTON=0 THEN GOTO buton_birak
next
return
TRISA=00000111
TRISB=00000000
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
READ 20,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
KONUM1:
poz=1
WRITE 20,poz
PAUSE 10
KONUM11:
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
GOTO KONUM11
KONUM2:
poz=2
WRITE 20,poz
PAUSE 10
KONUM21:
LOW PORTA.0
LOW PORTA.1
LOW PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM3
GOTO KONUM21
KONUM3:
POZ=3
WRITE 20,poz
PAUSE 10
KONUM31:
PORTA=00000100
PAUSE 200
PORTA=00000010
PAUSE 200
PORTA=00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
GOTO KONUM31
END
Bu şekilde derledim ama yine olmadı isis dosyasını buraya eklemem gerekirmi ? buton içinde pullup direnci eklemiştim devrede konumu değiştiriyor bir problem yok sadece eproma kaydedip doğru konuma göndermeyi beceremedim
peki dedigim eeprom memory den data kaydediliyomu die baktin mi arkadasim...
ona nasıl bakacağımı bulamadım şu an onu inceliyorum ama anlamış değilim
ama eproma bişeyler kaydediyor sanırım, stop yaptıktan sonra bir daha play yapınca butona bassamda uzun süre konumlara geçmiyor uzun süre bekledikten sonra geçiyor
http://img9.imageshack.us/img9/5995/adszxiks.jpg
bu resme bak
Kaydeder merak etme, son verdiğim kodu kullan.
dosyaları buraya yükledim
http://www.upload.gen.tr/d.php/s16/2pa9vhil/16f628_eprom.rar.html (http://www.upload.gen.tr/d.php/s16/2pa9vhil/16f628_eprom.rar.html)
debug kısmına girdiğimde memory kısmı dektif görünüyor, aktif gözükmesi için bişey yapmam gerekiyormu
ben calistirdim arkadasim eeproma yaziyo 20. adrese...
yukardada soyledigim gibi direct olarak play tusuna basarsaniz menu pasif gorunur..
program calismaya basladiktan sonra media da bisonraki tus anlamina gelen butona basin o zaman adim adim calisir program ve menu aktif olur...
ama programi bastan calistirinca okuyunca bise yapmiyo yani kaldigi konumdan devam etmiyo...
OG usta programı alta sizin dediğiniz gibi copy pass yaptım sonuç aynı
TRISA=00000111
TRISB=00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
READ 20,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
KONUM1:
gosub buton_birak
poz=1
WRITE 20,poz
PAUSE 10
KONUM11:
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
goto KONUM11
KONUM2:
gosub buton_birak
poz=2
WRITE 20,poz
PAUSE 10
KONUM21:
LOW PORTA.0
LOW PORTA.1
LOW PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM3
goto KONUM21
KONUM3:
gosub buton_birak
POZ=3
WRITE 20,poz
PAUSE 10
KONUM31:
PORTA=00000100
PAUSE 200
PORTA=00000010
PAUSE 200
PORTA=00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
goto KONUM31
END
buton_birak:
for x = 1 to 100
''' buton rutinipause 1
IF BUTON=0 THEN GOTO buton_birak
next
return
justice_for_all usta dediğin gibi yapıp cpu eprom bilgisine baktım il başlangıçta 03 01 02 03 ff ff ff ...diye devam ediyo, konum değişsede bu sayılar değişmiyor
ustalar şimdi anca görebildim debug kısmında PIC CPU EPROM memory e baktığımda 10 le başlaya satırda FF FF FF FF ortada bolünmüş çizgiden sonra 03 FF FF FF var, konum deiştiğinde 01, 02 ve 03 oluyor burası, bu olduğuna göre çalışmasımı gerekiyor acaba
isiste bu şekilde görünüyor
http://i1011.hizliresim.com/2010/11/8/134.jpg
arkadasim ust satirda yazdigimi okumadin mi?
o gordugun 10 demek 10luk sistemde 16 dir degisen kisim ise 20. adresdir.yani programin calisiyo ama okumada bi sorun sikartiyo...
okumada bi yanlışlık var derken bulduğum örneklerde READ komutu aynı şekilde kullanılmış gördüğüm kadarıyla nasıl bir hata olabilir acaba ?
Bir hata daha var,
TRISA=00000111
olmaz çünkü binary sayı öyle yazılmaz, aksi halde o değer 111 olur, aşağıdaki gibi olmalı
TRISA=%00000111
Aynı şekilde
PORTA=00000100 değil
PORTA=%00000100
Bahane ile Proton'a geçersin
Device 16F628A
Config INTRC_OSC_NOCLKOUT , WDT_OFF , PWRTE_ON , CP_ON, DATA_CP_OFF, MCLRE_OFF , LVP_OFF , BODEN_OFF
Declare Xtal 4
CMCON=7
TRISA=%00000000
TRISB=%11111111
OPTION_REG=%00001111
Dim BUTON As PORTB.0
Dim POZ As Byte
Dim x As Byte
Dim w_1 As Word
Dim w_2 As Word
Dim buton_basildi As Bit
EData 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0
'''''''''''''''''
POZ = ERead 20
If POZ = 1 Then KONUM11
If POZ = 2 Then KONUM21
If POZ = 3 Then KONUM31
'''''''''''''''''''''''''''''''''
KONUM1:
GoSub buton_birak '' buton sıçramaları için
POZ=1
EWrite 20, [POZ]
DelayMS 10
KONUM11:
PORTA = 7
w_2 = 100 : GoSub buton_bak '' 100ms bekle bu arada butonu gözle
If buton_basildi = 1 Then KONUM2 '' buton basıldı ise diğer konuma git
GoTo KONUM11
''''''''''''''''''''''''''
KONUM2:
GoSub buton_birak
POZ=2
EWrite 20, [POZ]
DelayMS 10
KONUM21:
PORTA = 0
w_2 = 100 : GoSub buton_bak '' 100ms bekle bu arada butonu gözle
If buton_basildi = 1 Then KONUM3
GoTo KONUM21
''''''''''''''''''''''''''''
KONUM3:
GoSub buton_birak
POZ=3
EWrite 20, [POZ]
DelayMS 10
KONUM31:
PORTA=%00000100
w_2 = 200 : GoSub buton_bak '' 200ms bekle bu arada butonu gözle
If buton_basildi = 1 Then KONUM1
PORTA=%00000010
w_2 = 200 : GoSub buton_bak '' 200ms bekle bu arada butonu gözle
If buton_basildi = 1 Then KONUM1
PORTA=%00000001
w_2 = 200 : GoSub buton_bak '' 200ms bekle bu arada butonu gözle
If buton_basildi = 1 Then KONUM1
GoTo KONUM31
''''
buton_birak:
For x = 1 To 100 ''' buton kontak rutini
DelayMS 1
If BUTON = 0 Then buton_birak
Next
Return
''''''''''''' butona bu dongu içinde bakar ki basıldığını çabuk anlasın
buton_bak:
buton_basildi = 0
For w_1 = 1 To w_2
DelayMS 1
If BUTON = 0 Then
buton_basildi = 1
Return
EndIf
Next
Return
:100000003B2883169B0083161C141A089B0A37286A
:1000100083169A001C1555309D00AA309D009C1433
:100020009C1810281C119B0A3728A301A200FF303E
:10003000A207031CA307031C37280330A100DF30ED
:1000400023201728A101E83EA000A109FC30031CD1
:100050002C28A00703182928A0070000A10F292891
:1000600020183228A01C36280000362808008313E8
:1000700083120313080007309F0083168501FF30A9
:1000800086000F308100143083120120A40001305B
:100090002402031D4C28612802302402031D51282C
:1000A000762803302402031D56288A28A620013012
:1000B000A400143083169B008312240808200A3001
:1000C0001520073085006430A800A901B5202A1C3E
:1000D0006A286B286128A6200230A40014308316F9
:1000E0009B008312240808200A3015208501643003
:1000F000A800A901B5202A1C7E287F287628A620E2
:100100000330A400143083169B00831224080820B7
:100110000A30152004308500C830A800A901B52098
:100120002A1C9328562802308500C830A800A9014F
:10013000B5202A1C9C28562801308500C830A8000C
:10014000A901B5202A1CA52856288A280130A50017
:10015000653025020318B428013015200618B1288F
:10016000A628A50A031DA82808002A100130A60009
:10017000A70127082902031CCD28031DC328260830
:100180002802031CCD28013015200618C9282A147E
:0E0190000800A60A0319A70FB9280800CE28F8
:02400E00101F81
:1042000000000000000000000000000000000000AE
:10421000000000000000000000000000000000009E
:10422000000000000000000002000000000000008C
:0242300000008C
:00000001FF
Tüm dosyalar http://www.upload.gen.tr/d.php/s16/lknzmkwb/16f628_eprom.rar.html
size birinci sormam gereken A PORTu cikis olarak kullaniliyosa TRISA registerine neden TRISA=00000111 neden boyle bir deger atanmis.
ikincisi ledlerin yanma mantigi neye gore belirleniyo
ucuncusu butonun gorevi nedir...
Alıntı yapılan: bytex - 08 Kasım 2010, 00:27:29
okumada bi yanlışlık var derken bulduğum örneklerde READ komutu aynı şekilde kullanılmış gördüğüm kadarıyla nasıl bir hata olabilir acaba ?
derledigin koda baktim TRISB=%00000000 hepsi cikis olmus en sondaki biti 1 olmasi gerekiyo duzeltip tekrar deneyiniz lutfen...
aksi takdirde butonu algilamaz...
Alıntı yapılan: justice_for_all - 08 Kasım 2010, 00:37:30
size birinci sormam gereken A PORTu cikis olarak kullaniliyosa TRISA registerine neden TRISA=00000111 neden boyle bir deger atanmis.
ikincisi ledlerin yanma mantigi neye gore belirleniyo
ucuncusu butonun gorevi nedir...
TRISA=00000111 yapmamın nedeni porta.1 porta.2 ve port.a3 ü çıkış yapıp led bağlamak, ledler birinci konumda hepsi yanık ikinci konumda hepsi sönük 3. konumda sırayla yanıyor, buton ise konumları değiştirmeye yarıyor, ben konum değiştiğinde bunu eproma kaydedip pice tekrar enerji verdiğimde hangi konumda ise o konumda başlatmak istiyorum, ama tabi bi türlü beceremedim, ama isiste debug yaparken eproma kayıt edilen verileri görmeyi öğrendim bu arada usta saol, OG usta pic basic öğrenmeye çalışırken protana geçmek çok zor olur heralde benim için daha çok basit şeyleri bile picbasicte aşamıyorum :( ama biraz yol aldıktan sonra inaşllah.....
"TRISA=00000111
olmaz çünkü binary sayı öyle yazılmaz, aksi halde o değer 111 olur, aşağıdaki gibi olmalı
TRISA=%00000111
Aynı şekilde
PORTA=00000100 değil
PORTA=%00000100
"
burada dediğiniz hataları düzelttim hala aynı sonuç, yazmada bi problem yok anladığım kadarıyla ama niye okuyamadığımı hala anlıyamadım
ama sunu soylemeliyim bi pini cikis yapmak istiyosaniz opinin tris registerini sifirlamalisiniz giris yapmak istiyosanizda o zaman o pini high yapmalisiniz..bunlari duzeltip tekrar derlermisiniz ve yukarida sayin OG nin dediklerinide goz onunde bulundurun...
TRISByide duzeltin lutfen...
proton'dan çekinme, pbp ile temelde aynıdır.
Hangi konumda başlayacağını yazmayı da unutmuşsun,
DATA @20,1
veya
DATA @20,2
veya
DATA @20,3
gibi. Bu komut eeprom programlanırken 20 nolu adrese 1 veya 2 veya 3 yazar. Açılışta 20 noyu okuyor ya.
OG ustanın dediği gibi düzelttim son hal alttaki gibi
TRISA=%00000111
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
buton_kontrol:
READ 0,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
goto buton_kontrol
KONUM1:
gosub buton_birak
poz=1
WRITE 0,poz
PAUSE 10
KONUM11:
HIGH PORTA.0
HIGH PORTA.1
HIGH PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM2
goto KONUM11
KONUM2:
gosub buton_birak
poz=2
WRITE 0,poz
PAUSE 10
KONUM21:
LOW PORTA.0
LOW PORTA.1
LOW PORTA.2
PAUSE 100
IF BUTON=0 THEN GOTO KONUM3
goto KONUM21
KONUM3:
gosub buton_birak
POZ=3
WRITE 0,poz
PAUSE 10
KONUM31:
PORTA=%00000100
PAUSE 200
PORTA=%00000010
PAUSE 200
PORTA=%00000001
PAUSE 200
IF BUTON=0 THEN GOTO KONUM1
goto KONUM31
END
buton_birak:
for x = 1 to 100
''' buton rutinipause 1
IF BUTON=0 THEN GOTO buton_birak
next
return
ama gördüğüm kadarıyla eproma peş peşe kaydediyor 03 01 02 03 gibi, stop yaptıktan sonra play yapıyorum pause yapıp debuga girince epromda böyle bilgi görüyorum konumlarda eproma yazmadan önce epromu silmekmi gerekiyor acaba ?
DATA @20,1
bunu nasıl kullanabilirm programda
yani write komutundan önce bunumu yazmam gerekir usta
Bunu derle ve proton ile kodları karşılaştır.
@ device pic16F628A, intrc_osc_noclkout, wdt_on, pwrt_on, protect_on, mclr_off, lvp_off
TRISA=%00000000
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
w_1 var word
w_2 var word
buton_basildi var bit
DATA @0,1
buton_kontrol:
READ 0,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
''''''''''''''''''''''''''''''
KONUM1:
gosub buton_birak
poz=1
WRITE 0,poz
PAUSE 10
KONUM11:
PORTA=%00000111
w_2 = 100 : gosub buton_bak
if buton_basildi = 1 then KONUM2
goto KONUM11
''''''''''''''''''''''''''''''
KONUM2:
gosub buton_birak
poz=2
WRITE 0,poz
PAUSE 10
KONUM21:
PORTA=%00000000
w_2 = 100 : gosub buton_bak
if buton_basildi = 1 then KONUM3
goto KONUM21
'''''''''''''''''''''''''
KONUM3:
gosub buton_birak
POZ=3
WRITE 0,poz
PAUSE 10
KONUM31:
PORTA=%00000100
w_2 = 200 : gosub buton_bak
if buton_basildi = 1 then KONUM1
PORTA=%00000010
w_2 = 200 : gosub buton_bak
if buton_basildi = 1 then KONUM1
PORTA=%00000001
w_2 = 200 : gosub buton_bak
if buton_basildi = 1 then KONUM1
goto KONUM31
''''''''''''''''''''
buton_birak:
for x = 1 to 100
pause 1
IF BUTON=0 THEN GOTO buton_birak
next
return
'''''''''''''''''''''
buton_bak:
buton_basildi = 0
for w_1 = 1 to w_2
pause 1
IF BUTON = 0 THEN
buton_basildi = 1
return
endif
next
return
ustam derlerken buton_basildi için hata veriyor
Özür, buton_basildi değişkenini atamamışız düzelttim.
özür ne demek usta, hakkını hellal et gecenin bi yarısı yardımınızı esirgemediniz. Son gönderdiğiniz şekli şöyle derledim
@ device pic16F628A, intrc_osc_noclkout, wdt_on, pwrt_on, protect_on, mclr_off, lvp_off
TRISA=%00000000
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
w_1 var word
w_2 var word
buton_basildi var bit
'DATA @0,1
buton_kontrol:
READ 0,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
''''''''''''''''''''''''''''''
KONUM1:
gosub buton_birak
poz=1
WRITE 0,poz
PAUSE 10
KONUM11:
PORTA=%00000111
w_2 = 100 : gosub buton_bak
if buton_basildi = 1 then KONUM2
goto KONUM11
''''''''''''''''''''''''''''''
KONUM2:
gosub buton_birak
poz=2
WRITE 0,poz
PAUSE 10
KONUM21:
PORTA=%00000000
w_2 = 100 : gosub buton_bak
if buton_basildi = 1 then KONUM3
goto KONUM21
'''''''''''''''''''''''''
KONUM3:
gosub buton_birak
POZ=3
WRITE 0,poz
PAUSE 10
KONUM31:
PORTA=%00000100
w_2 = 200 : gosub buton_bak
if buton_basildi = 1 then KONUM1
PORTA=%00000010
w_2 = 200 : gosub buton_bak
if buton_basildi = 1 then KONUM1
PORTA=%00000001
w_2 = 200 : gosub buton_bak
if buton_basildi = 1 then KONUM1
goto KONUM31
''''''''''''''''''''
buton_birak:
for x = 1 to 100
pause 1
IF BUTON=0 THEN GOTO buton_birak
next
return
'''''''''''''''''''''
buton_bak:
buton_basildi = 0
for w_1 = 1 to w_2
pause 1
IF BUTON = 0 THEN
buton_basildi = 1
return
endif
next
return
'DATA @0,1 bu komut aktifken hep 1.konum da başlıyordu bunu çıkarınca konumları kaydedip tekrar başlattığımda keydeilmiş konumdan başlamaya başladı...program biraz kalabalıklaştı burada sanırım siz buton okumayı daha iyi hale getirdiniz ama ama konum okuma nasıl düzeldi onu anlamaya çalışacağım şimdi..
DATA @0,1
Eeproma 0 adresine 1 yazmak anlamına gelir ve entegre yazılırken, yani 1 kere yüklenir. Açılışta program READ 0,POZ ile bunu okur ve ilgili yere gider.
Sonra her butona basışta zaten bu değer değişir. Onu çıkarma. İstiyorsan başka değer ata.
DATA @0,2 veya
DATA @0,3 gibi.
sayin OG ama elektrik gitmeden once 0. adrese data atadik diyelim mesela 3.konum...
elektrik gitti ve devre tekrar calisti program osatira gelince 0.adrese 1 bilgisi yuklenir eski konum bilgimiz silinmezmi..
yani elektrik gitmeden 3.konumdu ama elektrik gelince 1.konum oldu bilgiler karismazmi...
DATA @0,1 ( Proton karşılığı Edata)
komutu 1 defa çalışır, o da pic programlar iken ilgili adrese ilgili data. Yani programlama cihazı ile program yapmak dışında bu komut çalışmaz. Bir dahaki yazma işlemi ancak write ile (çalışma anında) gerçekleşir.
Yani Data ile Write farkı budur.
anladim yani okuma icin bu komut kullanilmaz dogrumudur...
Hayır, pic enerjilendiğinde eeprom okunmak istenirse READ komutunu görmesi gerekir. DATA ile hiç ilgilenmez.
peki o komut satirini kullanmamizin amaci nedir...
Burada pek anlamı olmayabilir, ama değişik durumlarda değişik işler yapacağı malum. Sonuçta EEPROM'a birşeyler kaydediyorsunuz. Mesela ben ünite adresi kaydediyorum ve program içinde write komutu kullanmıyorum. Ünitenin adresine göre iş yapıyor.
Program şöyle olsa idi,
@ device pic16F628A, intrc_osc_noclkout, wdt_on, pwrt_on, protect_on, mclr_off, lvp_off
TRISA=%00000000
TRISB=%00000001
OPTION_REG=%00001111
BUTON VAR PORTB.0
POZ VAR BYTE
X VAR BYTE
w_1 var word
w_2 var word
buton_basildi var bit
DATA @0,1
Goto Basla
Aradaki kodlar
.
.
.
.
.
.
.
Basla:
READ 0,POZ
IF POZ=1 THEN GOTO KONUM11
IF POZ=2 THEN GOTO KONUM21
IF POZ=3 THEN GOTO KONUM31
DATA @0,1 yukarıda olmasa idi burası dipsiz kuyu olurdu.
simdi anladim saol OG hocam..