منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

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

اذهب الى الأسفل

التعامل مع ذاكرة EEPROM الداخلية وأمثلة على البرمجة بالمترجم CCS C  :  Empty التعامل مع ذاكرة 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)


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

الكود:

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


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


الكود:

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


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


الكود:

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)
  }

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

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);


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


Admin
Admin

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

https://fathallaabdelaziz.forumarabia.com

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

الرجوع الى أعلى الصفحة


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