18-Pic -Bellek Kullanımı

 Bellek Kulanımı

Bellek pic içerisinde farklı amaçlar için birden fazla bulunmaktadır. Bu bellekler harward mimarisinden dolayı bizim pek alışık olmadığımız bir mantıkta dizayn edilmiştir. Normal bir bilgisayarda( vonneuman) hdd, ram bulunur. Kalıcı veriler hdd’de saklanır. Fakat harward mimarisinde işlemler böyle olmaz. Temel üç adet hafıza bulunur.

 Bunlar;

  • Program hafızası

  • Özel amaçlı yarı static(kalıcı) ram

  • Tasarımcının kullanacağı özel eeprom

Biz özel amaçlı verileri kaydetmek için eeprom yapıdaki ram kullanacağız. CCs’de okuma ve yazma komutları şunlardır;

write_eeprom(adres,k);🡪 istenilen adrese bilgi yazmak için kullanılır.

k= read_eeprom(adres);🡪 istenilen adresten bilgi okumak içim kullanılır.

Aşağıda bilgi yazma, okuma karşılaştırma yapan fonksiyonlar bulunmaktadır.




#include<main.h>

#include<string.h>

#defineuse_portb_lcd TRUE

#define LCD_TYPE 1

#include<lcd.c>

char klavye[15];

char bellek[15];

/*************** klavye oku ***********/

voidklavyeoku()

         {

int adres=0;

char k;

printf("<");

do

         {

         k=getch();

printf("%c",k);

         klavye[adres]=k;

         adres++;

         } while(k!=0x0d);

printf(">");

         }  

/***************** bellek yaz ********/

voidbellekyaz()

         {

int adres=0;

char k;

printf("<");

do

         {

         k=getch();

printf("%c",k);

write_eeprom(adres,k);

         adres++;

         } while(k!=0x0d);

printf(">");

         }  

/************ bellek oku ************/

voidbellekoku()

         {

int adres=0;

char k;

printf("<");

do

         {

         k= read_eeprom(adres);

printf("%c",k);

        bellek[adres]=k;

         adres++;

         } while(k!=0x0d);

printf(">");

         }  

/********** karşılaştır ************/

voidkarsilastir()

         {

//printf("%s\n",klavye);

//printf("%s\n",bellek); 

if(!strcmp(klavye,bellek))

         {

printf("şifre Doğru");

         }

else

         {

printf("şifre Yanlış");

         }


         }


/***************** ana program ************/

void main()

{

lcd_init();

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);

setup_comparator(NC_NC_NC_NC);

setup_vref(FALSE);

//  ana program bloğu

while(true)

   {

if(input(PIN_D0))   {   while(input(PIN_D0));   bellekyaz();   }

if(input(PIN_D1))   {   while(input(PIN_D1));   bellekoku();   }

if(input(PIN_D2))   {   while(input(PIN_D2));   klavyeoku();   }

if(input(PIN_D3))   {   while(input(PIN_D3));    karsilastir(); }

   }


}


Bu programın aşağıda çalışır halini görmekteyiz. 


Yorumlar