التعامل مع ذاكرة EEPROM الداخلية وأمثلة على البرمجة بالمترجم CCS C :

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

التعامل مع ذاكرة EEPROM الداخلية وأمثلة على البرمجة بالمترجم CCS C :

مُساهمة من طرف Admin في الأربعاء يونيو 10, 2015 1:36 pm

التعامل مع ذاكرة EEPROM الداخلية وأمثلة على البرمجة بالمترجم CCS C :

يمكن للمستخدم الوصول لذاكرة EEPROM من خلال الدوال التالية ، ضمن المترجم CCS C :
دالة القراءة : وتكون بالصيغة التالية :

الكود:

value = read_eeprom (address )

• وظيفة هذه الدالة قراءة read بايت من عنوان address معين بذاكرة EEPROM . يبدأ العنوان من عند الصفر ومداه يعتمد على الميكروكونترولر المستخدم .
• بارامتر "العنوان" address هو عدد صحيح 8 بت أو 16 بت ، يعتمد على الميكروكونترولر المستخدم .
• هذه الدالة عند تنفيذها تعود بعدد صحيح 8 بت (بايت) .
مثال :

الكود:

#define LAST_VOLUME  10
volume = read_EEPROM (LAST_VOLUME); //Read byte from address “10”


دالة الكتابة : وتكون بالصيغة التالية :

الكود:

write_eeprom (address, value)

• وظيفة هذه الدالة كتابة بايت إلى عنوان محدد بذاكرة EEPROM . هذه الدالة قد تأخذ عدة ملى ثوانى للتنفيذ .
• البارامتر "العنوان" address يكون عدد صحيح 8 بت أو 16 بت بناء على الميكروكونترولر المستخدم ، والبارامتر "القيمة" value يكون عدد صحيح 8 بت .
• هذه الدالة لا تعود بأى شىء عند تنفيذها (كتابة) .
مثال :

الكود:

#define LAST_VOLUME  10    // Location in EEPROM
 volume++;
write_eeprom(LAST_VOLUME,volume);
//write the byte value in volume variable to address 10 of EEPROM

تدريب : على التعامل مع الذاكرة EEPROM ، واكتساب بعض مهارات تقنيات البرمجة :

الكود:

#include <16F877A.h>
#use delay(clock=4000000)
#use rs232(baud=2400,xmit=PIN_C6,rcv=PIN_C7)
void main() {
int i = 0, m;
printf("R(ead or W(rite? \n\r"); m = getc();
  //1- Writing
  if ((m==87)||(m==119)) // 87 = w OR 119 = W
  {
      printf("Content? \n\r"); m = getc(); // inter a character , say "A"
      do
      {
        write_EEPROM(i,m);// Write this character to EEPROM locations from address 0 to adress 255 = FF for 16F877A
        printf("Writing %X to addr %X\n\r",m,i);// Writing "the character ASCII value in HEX formte" to addr "i in HEX" 
      } while(++i>0); // Repeat 255 times (end of byte range)
  }
  //2- Reading
  do
  {
      m = read_EEPROM(i);
      printf("Addr = %X Content = %X\n\r",i,m);
  } while(++i>0);
 
  while(TRUE);
}


نتيجة المحاكاة ببرنامج Proteus :

الكود:

#include <16F877A.h>
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)




الكود:

printf("R(ead or W(rite? \n\r"); m = getc();





الكود:

if ((m==87)||(m==119)) // 87 = w OR 119 = W
  {
printf("Content? \n\r"); m = getc();
// Only Press ‘w’ or ‘W’ give :





الكود:

do
      {
        write_EEPROM(i,m);// Write this character to EEPROM locations from address 0 to adress 255 = FF for 16F877A
        printf("Writing %X to addr %X\n\r",m,i);// Writing "the character ASCII value in HEX formte" to addr "i in HEX" 
      } while(++i>0); // Repeat 255 times (end of byte range)
  }



Writing ‘A’ to EEPROM address from 0 to 255 , ‘A’ = 0x41


الكود:

 
//2- Reading
  do
  {
      m = read_EEPROM(i);
      printf("Addr = %X Content = %X\n\r",i,m);
  } while(++i>0);





Admin
Admin

عدد المساهمات : 985
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى