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
Yorum Gönder