0-999 Sayıcı da Word tipi değişkene veri atama ve okuma yardım..

Başlatan eln07, 04 Aralık 2016, 19:30:06

eln07

Selanım aleyküm herkese.
şöyle bir sıkıntım var ; 0 ila 999 arası bir sayıcı program yazmdım programı hafızasız kullanırsam güzel çalışıyor.
Eproma son bilgiler kalsın diye yazdırdığımda bilgiler kalıyor taki sayaca yeni birşeyler eklemek için epromu okutunca bunları word değişkenine sıralı atamıyorum.yani wordun içini aynı dig ile okuduğumuz gibi istediğimiz dijiti değiştirebilirmiyiz.
visual basicte replace gibi bir komut vardı bundada varmı öyle bir komut.
programın sayac kısmını veriyorum diğer yerler standart zaten.
cevaplar için şimdiden çok teşekkürler.
devremde yan yana 3 segment var.

hw var word  'sayac değişkeni
segk1 var byte
segk2 var byte
segk3 var byte

AyarMenu:
while menu=0
segk1=10            ' 10 nun karşılığı bende "- - - " olarak tanmlı
segk2=10
segk3=10
pause 1
gosub display
wend

gosup eepromoku

'BU arada word içine epromun değerlerini atmam lazım
gosup display


if arttir=0 then
        hw=hw+1
if hw=1000 then
        hw=0
endif
endif

if azalt=0 then
       hw=hw-1
if hw=65535 then
       hw=999
endif
endif

şimdi ekrana şu şekilde gönderiyorum

segk1=hw dig 0
segk2=hw dig 1
segk3=hw dig 2

buraya kadar normal


eepromYaz:

write 1,regk1:write 2,regk2:write 3,regk3
pause 10
goto anaprog

eepromoku:
read 1,regk1:read 2,regk2:read 3,regk3
pause 10
return




ta3usl

Merhaba,

programda regkx değişkenleri nereden değer alıyor göremedim. Sanırım segk1 , segk2 değerlerini yazıyorsun. Öyle değilse de regk değişkenlerini segk olarak değiştir :)

read 1,segk1:read 2,segk2:read 3,segk3

microbasic aynı mı bilmiyorum fakat , Proton basic kullanırken

segk1 = eread 1  şeklinde kullanıyorum. Eğer değişkenleri epromdan düzgün bir şekilde okuyorsan ,

hw = (segk3 * 100) + (segk2 * 10) + (segk)  şeklindeki matematik işlemiyle alabileceğin gibi,

hw word değişkenini direkt eproma yazıp , yine epromdan hw değişkenine atayabilirsin.

ewrite 1 , [hw]  şeklinde yazıp ki proton basic word değişkeni için epromda 2 byte otomatik yazıyor.

hw = eread 1  şeklinde de epromdan okuyabiliyorsun.

Kullandığım kodlar proton basic . Kod bakımından aynı mıdır bilmiyorum fakat , umarım algoritma bakımından yardımcı olur.



ete

Kolay işi zor hale getiriyorsun.
Bir word değişkeni eproma 2 byte olarak yazılır.  SAYI bir WORD değişkeni olsun. Eproma,
WRITE 1,SAYI.BYTE1,SAYI.BYTE0 şeklinde yazılır.
READ 1,SAYI.Byte1, SAYI.Byte0 şeklinde okuduğun zaman otomatikman  o sayı word olarak sayı değişkenine yerleşmiş olur.  Bunu formatıda hex sayı formatına göre çalışır. SAYI=900 olsun bunun hex karşılığı $0384 dür.
Bu değişken değeri eproma yazılırken 03, 84 şeklinde iki ayrı adrese yazılır. Burada Byte1=$03 dür Byte0=$84 dür. Bunların desimal karşılıkları Byte1=3 ve Byte0=132 dir. Sen eopromdan okuduğun zaman önce 3 sonra 132 okursun ama bu SAYI=900 olarak o değişkene yerleşmiş olur.

Bu şekilde yap sorunun kalmaz.
Ete


eln07

ilgi ve alakanız için teşekkür ederim öncelikle.
Verdiğiniz yöntemleri denicem.
ama ETE hocnın yöntem daha akla yatkın çünkü diğer yönteme göre eepromda 3 adres işgal ederken ete hocanın yöntemde aynı iş 2 adresle hallolucak deneyip sonucu yazıcam.
teşekkürler.

ete

Asıl avantaj yazarken 2 byte olarak yazılmış bilgi okunurken otomatik word değişkenine yerleşir ayrıca bir formül yada işlem kullanman gerekmez.

Ete

eln07

Selamın aleyküm.
öncelikle çok teşekkürler yardımlarınız için.
Sorunum ete hocanın dediği yöntemle haloldu.

yanlınz şöyle bir şeyle karşılaştım.
veriyi eeproma yazarken

write 1,hw dediğimizde 16 bitlik verinin 8 ini 1.adrese diğer 8 ini de 2. adrese atması gerekirken pbp hata verdi ve yazma işlemini şu şekilde yapmak zorunda kaldım;

write 1,hw.highbyte
write 2,hw.lowbyte

şeklinde yada

write 1,hw.byte0
write 2,hw.byte1

terimlerini kabul edip derledi.
Sorunum halloldu ama bu kısmını merak etmedim değil.

bir kaç sitede de write 0,hw yazarsan önce 0.adrese 8 bit sonra 1.adrese 8 bit yazar demiş ama heralde benim derleyici sıkıntılı olabilir.
çok teşekkürler yardımlarınız için.

Yeri değil ama son bir sorum olucak ;
18f46k22 pbp da derlenmiyor bunu çözümü varmıdır.?
iyi geceler.

ete

Derleyici farkı ile kimisi 16 bitlik veriyi otomatik 2 byte olarak yazar kimisi yazamaz senin bölmeni ister. Proton derleyici bunu yspıyor ama PBP yapmıyor.. Bu nedenle senin yaptığın bölme şekli doğru.

18f46k22 derlemmesi gerekir. Derleme MPLAB seneği işaretlenerek yapılır.
Derleyici  yamalarınınuygulamamış isen belkide çıkmıyordur sende bu işlemci,

Ete

Powered by EzPortal