قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
نشاط [ F.Abdelaziz ]
قوة السمعة:328
قديم 10-06-2015, 01:39 PM المشاركة 1   
افتراضي التعامل مع ذاكرة EEPROM الداخلية وأمثلة على البرمجة بالمترجم CCS C : Twitter FaceBook Google+



التعامل مع ذاكرة 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);



اعلانات
إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 05:12 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2024