Professional Documents
Culture Documents
Chapter 6 (Non-Volatile Memory)
Chapter 6 (Non-Volatile Memory)
Chapter 6 (Non-Volatile Memory)
Hesham Gad
D
Non-Volatile Memories
A
عرفنا فى الباب األول أن الـ PIC18F452 Microcontrollerيوجد بداخلها نواعان من
الذاكرة وهم :الذاكرة المتطايرة Volatile memoryوالتى تمحى محتوياتها بفصل الكهرباء عن
G
الـميكروكنترولر مثل الـ ،RAMحيث تستخدم هذه الذاكرة لتخزين البيانات Dataأو المتغيرات
.Variablesوالذاكرة الدائمة Non-volatileويوجد منها نوعين وهم الـ Flash memory
M
وتستخدم لتخزين البرنامج والـ EEPROMييستخدم لتخزين فى الـ Dataالمهمة التى ال تريد مسحها
عن فصل الكهرباء من الـ Microcontrollerمثل الـ .Passwordولكن يجب أن تعرف أن الـ
A
Flash memoryيمكن أن يستخدم لتخزين البيانات المهمة عن طريق البرنامج ولكن هذه الجزئية
خارج نطاق هذا الباب .لذلك فى هذا الباب سوف نتعلم كيفية تخزين البيانات التى نريد الحفاظ عليها
H
فى الـ .EEPROM
S
Memory
.H
الغالبية العظمى من عائلة الـ PIC18تحتوى على .EEPROMوحجم هذه الذاكرة يتراوح من 256
bytesإلى أكثر من .1KBوحيث أننا سوف نتعامل مع الـ ،PIC18F452فإننا يجب أن تعرف أن
حجم الـ EEPROMالموجودة 256 bytesكما هو موضح فى شكل )( .وبسبب أن الـ EEPROM
R
أبطأ بكثير من الـ ،RAMفإن الـ CPUال يستطيع التعامل معه بشكل مباشر إال عن طريق مجموعة
من الـ Registersوهم:
D
:EEADR register .1وهو الـ Registerالمسئول عن تحديد المكان الذى نريد أن نقرأ أو
نسجل عليه فى الـ .EERPOM
-1-
DR. Hesham Gad
:EEDATA register .2وهو الـ Registerالذى سوف يحتوى على الـ Dataالتى تريد
تخزينها أو التى تم قرائتها من الـ .EEPROM
:EECON1 register .3يستخدم هذا الـ Registerللتحكم بالـ EEPROMوالـ Flash
memoryأيضا.
:EECON2 register .4هذا الـ Registerوهمى (أى أنه ال يوجد فى األساس) ولكن يتم
D
إستخدامه عند التعامل مع كال الذاكرتين ).(Flash and EEPROM
A
قبل أن يتم البدء فى التعامل مع الـ EEPROMيجب أن نتعرف على أوال الـ EECON1 register
وهو المسئول عن التحكم فى القراءة والكتابة على الـ EEPROMوالـ .Flash memoryوفيما يلى
G
شرح الـ .EECON1 register
M
A
H
S
E
.H
-2-
DR. Hesham Gad
EECON1 Register
D
EEPGD (Flash program or Data EERPOM memory select) bit:
يستخدم هذا الـ Bitإلختيار هل نريد التعامل مع الـ Flash memoryأو ،EEPROMفإذا كانت
A
EEPGD=1فهذا يعنى أننا نريد التعامل مع الـ Flash memoryوإذا كانت قيمة الـ EEPGD=0
G
فهذا يعنى أننا نريد التعامل مع الـ .EEPROMوحيت أننا نريد التعامل فى هذه الجزئية مع الـ
،EEPROMفإننا سوف نجعل .EEPGD=0
M
CFGS (Flash Program/Data EE or Configuration Select) bit:
يستخدم هذا الـ Bitإلختيار هل نريد الدخول على الـ Configuration Registersالمسئولة عن
A
التحكم فى الـ Microcontrollerبشكل عام أو الدخول على كال الذاكرتين (Flash and
) .EEPROMفإذا كانت قيمة CFGS=1فهذا يعنى أننا سوف نتعامل مع الـ Configuration
H
،registersوإذا كانت الـ CFGS=0فهذا يعنى أننا سوف نتعامل مع الـ Flashأو .EEPROM
S
يستخدم هذا الـ Bitلمسح أجزاء من الـ ( Flash memoryلذلك هذا خارج نطاق الشرح هنا).
.H
يستخدم هذا الـ Bitللتعرف على حدوث خطا أثناء عملية الكتابة على كال الذاكرتين .فإذا كانت قيمة
R
هذا WRERR=1فهذا يعنى أن عملية الكتابة Writingعلى أحدى الذاكرتين لم تتم بشكل جيد (قد
يحدث نتيجة عمل Resetأو فصل الكهرباء عن الـ Microcontrollerأثناء عملية الـ .)Writing
D
وإذا كانت قيمة الـ WRERR=0فهذا يعنى أن عملية الكتابة تمت بشكل جيد.
-3-
DR. Hesham Gad
يستخدم هذا الـ Bitللسماح بإمكانية الكتابة على كال الذاكرتين ،فإذا كانت قيمة WREN=1فهذا يعنى
السماح بإمكانية الكتابة على كال الذاكرتين .وإذا كانت قيمة الـ WREN=0فهذا يعنى عدم السماح
بالكتابة على كال الذاكرتين.
D
WR (Write control) bit:
يستخدم هذا الـ Bitلبدء عملية الـ Writingعلى كال الذاكرتين .لذلك عندما يتم جعل WR=1فهذا
A
يعنى أننا نريد بدء عملية الكتابة Writingعلى إحدى الذاكرتين .وعند إنتهاء عملية الـ ،Writing
G
فإن هذا الـ Bitيتحول بشكل ألى إلى صفر.
M
يستخدم هذا الـ Bitلبدء عملية الـ Readingمن كال الذاكرتين .لذلك عندما يتم جعل RD=1فهذا
يعنى أننا نريد بدء عملية الـ Readingمن إحدى الذاكرتين .وعند إنتهاء عملية الـ ،Readingفإن
A هذا الـ Bitيتحول بشكل ألى إلى صفر.
Write a microcontroller program to store the value (44) in location (0) in the
E
EERPROM memory.
.H
Solution:
فى هذا المثال يريد تسجيل قيمة 44فى المكان 0بداخل الـ EEPROMلذلك يجب أن يتم عمل
الخطوات اآلتية:
R
-4-
DR. Hesham Gad
D
.6يتم بدأ الـ Writingعلى الـ EEPROMعن طريق جعل WR bit=1والموجود بداخل
الـ .EECON1
A
G
.7يتم اإلنتظار حتى تصبح قيمة WR=0وهذا يعنى إنتهاء عملية الكتابة على الـ .EEPROM
M
A
H
S
E
.H
R
D
-5-
DR. Hesham Gad
Program:
void main()
{
EEADR=0; وضع العنوان المطلوب.1
D
EECON1 ضبط الـ.1
EECON1=0x04;
A
EECON2 فى الـ0X55 وضع.2
EECON2=0X55;
EECON2=0XAA; EECON2 فى الـ0XAA وضع.3
G
EECON1=0X06; .writing بدء عملية الـ.4
.5
while (EECON1.b1==1); .Writing اإلنتظار حتى تنتهى عنلية الـ
M
while(1)
{
A
}
H
}
Example (6.2)
S
Write a microcontroller program to store the values (56, 77, 49, 66, 105) in
E
Solution:
R
D
-6-
DR. Hesham Gad
D
A
G
M
A
H
Program:
S
void main()
E
{
char i; . إنشاء مخزن للعد.1
.H
char x[]={56, 77, 49, 66, 105 }; . تخزين القيم المطلوبة فى عداد.2
for(i=0;i<=4;i++)
{
R
-7- .10
DR. Hesham Gad
)while(1
D
{
A
}
}
G
6.1.2-Reading Data From EEPROM
)Example (6.3
M
Write a microcontroller program to read from the location (0x04) in the
EEPROM memory and put the result on the LEDs connected to PORTB pins.
A
Solution:
H
فى هذا المثال يريد قراءة القيمة المخزنة فى المخزن الذى عنوانة 0x04فى الـ EEPROMوإخراجها
على الـ LEDsلذلك يجب أن يتم أن يتم عمل الخطوات اآلتية:
S
.3يتم بدء عملية القراءة عن طريق جعل ) (RD=1والموجودة بداخل الـ EECON1 register
R
.4يتم اإلنتظار حتى تصبح قيمة الـ RD=0وهذا يعنى أنه تم اإلنتهاء من عملية القراءة.
-8-
DR. Hesham Gad
D
A
G
M
A
Program:
H
)(void main
{
S
;TRISB=0
E
;PORTB=0
.H
)while(1
{
R
;EECON1=0x01
.1ضبط الـ EECON1مع بدء عملية القراءة.
;)while(EECON1.RD==1 .2يتم اإلنتظار حتى تنتهى عملية القراءة.
D
}
}
-9-