Arkadaşlar Selam ,16f628A kullanıyorum internal epromuna 255 kadar yazıyorum fakat 300 yazdığımda okudediğimde 45 okuyor yani 255 kadar yazıyor.Ben gereğinde 100.000 yazı okumam lazım konu hakkında yardımcı olursanız sevinirim.
#if defined(__PCM__)
#include <16F628A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#define use_portb_lcd TRUE
#define totalcounter 50
#define counter 20
#include <LCD.C>
int32 toplam;
int32 kalip;
toplam = read_EEPROM (totalcounter);
kalip = read_EEPROM (counter);
lcd_init();
printf(lcd_putc,"Toplam %Lu\n",toplam);
printf(lcd_putc,"Kalip %Lu",kalip);
if (!input(PIN_A0)) {
toplam++;
kalip++;
lcd_init();
printf(lcd_putc,"Toplam %Lu\n",toplam);
printf(lcd_putc,"Kalip %Lu",kalip);
while(!input(PIN_A0));
write_eeprom(totalcounter,toplam);
write_eeprom(counter,kalip);
}
if (!input(PIN_A1)) {
kalip=0;
write_eeprom(counter,kalip);
lcd_init();
printf(lcd_putc,"Toplam %Lu\n",toplam);
printf(lcd_putc,"Kalip %Lu",kalip);
while(!input(PIN_A1));
write_eeprom(totalcounter,toplam);
write_eeprom(counter,kalip);
}
EEPROM 1 byte'lık alanlardan oluşur ve 255'ten büyük bir değer kaydedilememesi normal. Bildiğim kadarıyla EEPROM'a kayıt yapan fonksiyonlar adres ve kayıt edilecek değeri alıp ona göre işlem yapıyorlar. Derleyicinin fonksiyonlarını bir araştır, belki daha büyük sayıları kaydetmek için özel fonksiyonları vardır. Eğer yoksa bu 32 bitlik sayıyı senin 4 byte'a bölüp ayrı ayrı kaydetmen gerekecek.
Make ( ) komutunu incelemelisin.
y1=make8(x,0) x sayısının ilk 8 bitlik kısmını alır.
Bu şekilde sayıyı bölüp eeproma kaydedebilirsin.
Sonra geri çağırıp : make16 veya 32 ile sayıyı yeniden oluşturursun.
x=make32(y4,y3,y2,y1) gibi...
ufak bir örnek verseniz çünkü ben daha acemiyim.
Ben çok ustayım da... :oops:
Eski bir çalışmadan :
unsigned int16 alt,ust,alt1,ust1,x,y,puls,basinc;
int altH,altL,ustH,ustL;
.
.
altH=read_eeprom(10),altL=read_eeprom(11);
ustH=read_eeprom(20),ustL=read_eeprom(21);
alt=make16(altH,altL),ust=make16(ustH,ustL);
while(true){
.
.
if((input(pin_B0))&(input(pin_B5))) {
altH=make8(alt,1),altL=make8(alt,0);
ustH=make8(ust,1),ustL=make8(ust,0);
write_eeprom(10,altH),write_eeprom(11,altL);
write_eeprom(20,ustH),write_eeprom(21,ustL); }
}}
Baştan alakanız ve ilginiz için çok teşekkür ederim kendi uygulamda denedim fakat farklı rakkamlar çıkıyor aşağıda kodlar var anlatarak yazıyorum hata neredeyse yardımcı olursanız sevinirim.
Not:32 Bit 8 bite ayırmaya çalışıyorum
////////////////////////////////////////////////////////////////////////////////////
#if defined(__PCM__)
#include <16F628A.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT
#define use_portb_lcd TRUE
#define totalcounter1 21
#define totalcounter2 22
#define totalcounter3 23
#define totalcounter4 24
#define counter1 1
#define counter2 2
#define counter3 3
#define counter4 4
///////////////////////////////////////////////////////////////////////////////
//HAFIZA AYARLARI//////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
#include <LCD.C>
int32 toplam;
int32 kalip;
int toplam1;
int toplam2;
int toplam3;
int toplam4;
int kalip1;
int kalip2;
int kalip3;
int kalip4;
///////////////////////////////////////////////////////////////////////////
////////////////DEĞİŞKENLER/////////////////////////////////////////
toplam1 = read_EEPROM (totalcounter1);
toplam2 = read_EEPROM (totalcounter2);
toplam3 = read_EEPROM (totalcounter3);
toplam4 = read_EEPROM (totalcounter4);
kalip1 = read_EEPROM (counter1);
kalip2 = read_EEPROM (counter2);
kalip3 = read_EEPROM (counter3);
kalip4 = read_EEPROM (counter4);
toplam=make32(toplam1,toplam2,toplam3,toplam4);
kalip=make32(kalip1,kalip2,kalip3,kalip4);
//////////////////////////////////////////////////////////////////
/////////İlk açıldığında okuma yapıyorum
///////////////////////////////////////////////////
lcd_init();
printf(lcd_putc,"Toplam %Lu\n",toplam);
printf(lcd_putc,"Kalip %Lu",kalip);
//////////////////////////////////////////////////////////////
////////////Lcd 'ye yazdırıyorum (Fakat saçma sapan şeyler çıkıyor)
//////////////////////////////////////////////////////////////
if (!input(PIN_A0)) {
toplam++;
kalip++;
lcd_init();
printf(lcd_putc,"Toplam %Lu\n",toplam);
printf(lcd_putc,"Kalip %Lu",kalip);
toplam1=make8(toplam,0);
toplam2=make8(toplam,1);
toplam3=make8(toplam,2);
toplam4=make8(toplam,3);
kalip1=make8(kalip,0);
kalip2=make8(kalip,1);
kalip3=make8(kalip,2);
kalip4=make8(kalip,3);
write_eeprom(totalcounter1,toplam1);
write_eeprom(totalcounter2,toplam2);
write_eeprom(totalcounter3,toplam3);
write_eeprom(totalcounter4,toplam4);
write_eeprom(counter1,kalip1);
write_eeprom(counter2,kalip2);
write_eeprom(counter3,kalip3);
write_eeprom(counter4,kalip4);
while(!input(PIN_A0));
//////////////////////////////////////////////
Butonada basıldığı zaman 32 bit 8 dönüştürüyorum sonra eproma yazdırıyorum fakat olmuyor şimdidden yardımların için sağol
CCS ile devam edeceksen Serdar Çiçek - CCS C ile pic programlama kitabını al.
Aşağıdaki gibi olabilir...
int32 toplam;
int32 kalip;
int toplam1,toplam2,toplam3,toplam4;
int kalip1, kalip2,kalip3,kalip4;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
lcd_init();
toplam1 = read_EEPROM (11);
toplam2 = read_EEPROM (12);
toplam3 = read_EEPROM (13);
toplam4 = read_EEPROM (14);
kalip1 = read_EEPROM (21);
kalip2 = read_EEPROM (22);
kalip3 = read_EEPROM (23);
kalip4 = read_EEPROM (24);
toplam=make32(toplam4,toplam3,toplam2,toplam1);
kalip=make32(kalip4,kalip3,kalip2,kalip1);
//toplam=0; //bir seferlik yazabilirsin
//kalip =0; //eepromda sayı kalmış olabilir
while(true)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"TOPLAM %08lu",toplam);
lcd_gotoxy(1,2);
printf(lcd_putc,"KALIP %06lu",kalip);
if (!input(PIN_A0))
{
toplam++;
kalip++;
}
if (!input(PIN_A2)) //her seferinde make olmasın
{
toplam1=make8(toplam,0);
toplam2=make8(toplam,1);
toplam3=make8(toplam,2);
toplam4=make8(toplam,3);
kalip1=make8(kalip,0);
kalip2=make8(kalip,1);
kalip3=make8(kalip,2);
kalip4=make8(kalip,3);
}
if (!input(PIN_A1)) // her seferinde eeproma yazmasın
{
write_eeprom(11,toplam1);
write_eeprom(12,toplam2);
write_eeprom(13,toplam3);
write_eeprom(14,toplam4);
write_eeprom(21,kalip1);
write_eeprom(22,kalip2);
write_eeprom(23,kalip3);
write_eeprom(24,kalip4);
}
}}
Mesaja kod ekleyeceğinde # butonuna iki kere tıkla ve arasına kodu ekle güzel olurrr.