877 de programlama mantığı konusunda yardım.

Başlatan Franisto, 24 Haziran 2010, 14:39:08

Franisto

Merhaba arkadaşlar. Bu konuyu bana fikir Jimlastiği konusunda yardımcı olmanız umudu ile açıyorum. Proje nin amacı pic ile numaratör(pals sayacak ve epromda hafızada tutacak) yapmak.

bildiğim kadarı ile word tipi değişken 3 basamaklı bir sayı saklayabiliyor oysaki ben 9 basamaklı sayılara kadar ulaşmasını istiyorum. örneğin 987,564,321 gibi... (virgüllere takılmayın)

böylesine yüksek bir sayıyı nasıl değişkende toplarız. ve pic in dahili epromuna yazarız?

3 basamaklı bir sayı olsaydı sayac değerini epromdan okuyup +1 gibi bir mantıkla gitmesi kolay benim için ama değer değişkeni aşınca nasıl yapmalı...?

ferit06

Protonda;

Dword ile 4 byte lık bir değişken oluşturabiliyorsunuz ve bu değişkenin her byte na ayrı ayrı ulaşabiliyorsunuz.  Bu byte ları eepromda kaydedip sonra kullanabilirsiniz. Pic Basic pro da da olmalı....


DWORD

Variable type that may hold a value of -2147483648 to +2147483647. Requires 4 bytes of RAM.



JKramer

İşaretsiz Word tipi 16 bit'lik (0-65536) olması gerekiyor. Yüksek bir sayıyı tek bir değişkende tutmak yerine parçalara bölebilirsiniz. Mesela her 10000'de sayacı sıfırlayıp başka bir değişkeni bir arttırırsınız, istediğiniz zaman ufak bir işlemle son miktarı elde edersiniz.

Franisto

Yorumlar  için teşekkür ederim. Pbp de DWORD tipi malesef yok.  Bunun yerine 2 adet word tipi değişken kullanmaya karar verdim.
Değikenlerimiz A ve B olsun. her değişkende 4 basamak rakam tutarak 8 basmaklı bir sayıya ulaşmayı hedefledim. Lcd de bunları yanyana göstermeyi düşündüm. A,B  gibi. B değikeni her 10000 değerine  ulşatığında A değişkeni 1 artacak dı.

Fakat LCD de şöyle bir durum var. sağ tarafta A değişkeni yüzünden 0 görünüyor ve hemen solunda, B değişkeni var başta sıfır ve arttıkça 01 ,02 ...039 ,0695 gibi değerleri ekranda görüyorum. Buraya kadar sorun yok. Sorun şurda;

B değişkeni 9999 olduğunda A değişkeni ni 1 artırıyorum ve B yi sıfırlıyorum.
Ekranda 10001 gibi bir değer okumak gerekirken

11 değerini okuyorum.  bunun nedeni B nin değeri 0001 değilde sadece 1 olmasından kaynaklanıyor. bu sorunu nasıl aşarım. kolay bir yolu varmı yoksa bir sürü IF yazıp basamk analizi mi yaptırmalıyım :o

Franisto

LCDOUT yaparken DEC4 komutu ile sorun halledildi  ;)

sayı1 var word
sayı2 var word
'-------------------
sayi1 = 0
sayi2= 0


'---------------------
anamenu:


if porta.0 = 1 then sayi1 = sayi1 + 1 'porta.0 her 1 olduğu sürece sayi1 bir arttırılıyor.

if sayi1 > 9999 then sayi2 = sayi2 + 1 'sayı1 9999 olduğunda sayi1 sıfırlanıyor, sayi2 bir attırılıyor. Yani 10000 elde ediliyor.

if sayi2 > 65535 then sayi2 = 0 ' sayi1 9999 ve sayi2 ve sayi2 65535 olduğunda buda (maksimum sayın oluyor. 655359999) sayiların ikiside sıfırlanıyor.


Lcdout $fe, 1 : lcdout dec5 sayi2 , dec4 sayi1 'burada da sayiları ekranda yan yana gösteriyoruz.

goto anamenu

END