السلام عليكم
نكمل مع النوع الثاني من طرق الكتابة وهي :
2 - كتابة عدة بايتات متتالية الى الايبروم (Page Write ) :
لا تختلف عملية كتابة بايت الى الايبروم عن كتابة عدة بايتات متتالية والصورة التالية توضح ذلك :
1 - تبدأ عملية ارسال الداتا بارسال اشارة بدء الارسال ( START ) من قبل الماستر .
2 - يقوم الماستر بارسال البايت الاول BYTE1 والذي يتكون من 7 بتات لتحديد العنوان المميز للخادم ، ففي حال كان البت الثامن يساوي الصفر فان الخادم يفهم بان العملية هي عملية كتابة الى الايبروم ، اما في حال كان البت الثامن يساوي الواحد فان الخادم يفهم بان العملية هي عملية قراءة من الايبروم , بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .
3 - يقوم الماستر بارسال البايت الثاني BYTE2 والذي يحوي العنوان الذي سيتم الكتابة اليه داخل الايبروم ، ويمكن ان نصل الى 256 موقع ذاكرة (256 بايت ) داخل الايبروم (هذا العنوان يتم وضعه في مؤشر الموقع للايبروم ) ، بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .
4 – الان يقوم الماستر بارسال البايت الثالث BYTE3 , والذي يحوي الداتا المطلوب كتابتها وحفظها في المكان الذي يدل عليه مؤشر الموقع للايبروم ، بعدها يرد الخادم باشارة ACK والتي تعني بان عملية الاستقبال قد تمت بنجاح .
ملاحظة مهمة : بعد عملية الكتابة هنا يزداد مؤشر الموقع بمقدار واحد تلقائيا .
5 – بما ان مؤشر الموقع قد ازداد بمقدار 1 تلقائيا ، الان يقوم الماستر بارسال البايت الرابع BYTE4 كما ورد في النقطة السابقة ، وتعاد نفس العملية مادام هناك بايتات اخرى حتى البايت الاخير BYTE N .
6 - تنتهي عملية ارسال الداتا بارسال اشارة نهاية الارسال ( STOP ) من قبل الماستر .
مثال 2 : قم بعمل برنامج باستخدام الميكروسي يقوم بحفظ القيم (0xA0,0xA1,0xA2,0xA3,0xA4,0xA5) بداية من الموقع رقم 10 داخل الايبروم 24C16 وذلك باستخدام بروتوكول النقل I2C .
الجواب :
نقوم بتحديد البايتات اللازمة لعملية الكتابة الى الايبروم .
البايت الاول : لتحديد البايت الاول نحن بحاجة الى العنوان المميز للايبروم وهو (1010) ، والعملية هي كتابة الى الايبروم فآخر بت هو صفر ..يبقى الان الثلاث بتات التي تحدثنا عنها حيث ناخذها من السؤال (الموقع هو 10) :
وهكذا فان البايت الاول هو :
Byte1 = 1010 000 0 = A0
البايت الثاني :هو البايت الذي يحدد باقي مكان مؤشر الموقع (الموقع هو 10 ) :
Byte2 = 0000 1010 = 0A
البايت الثالث : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 10 ) :
Byte3 = 0xA0
البايت الرابع : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 11 ) :
Byte4 = 0xA1
البايت الخامس : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 12 ) :
Byte5 = 0xA2
البايت السادس : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 13 ) :
Byte6 = 0xA3
البايت السابع : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 14 ) :
Byte7 = 0xA4
البايت الثامن : وهو عبارة عن الداتا التي سنحفظها في المكان الذي يدل عليه مؤشر الموقع ( الموقع هو 15 ) :
Byte7 = 0xA5
وهكذا يكون البرنامج كاملا كالتالي:
كود:
void main(){
I2C1_Init(100000);
I2C1_Start();
I2C1_Wr(0xA0);
I2C1_Wr(0x0A);
I2C1_Wr(0xA0);
I2C1_Wr(0xA1);
I2C1_Wr(0xA2);
I2C1_Wr(0xA3);
I2C1_Wr(0xA4);
I2C1_Wr(0xA5);
I2C1_Stop();
}
ملف البروتوس مع الميكروسي برو ( 7.7) موجود على الرابط التالي:
http://www.gulfup.com/X6t7lkp1tec99
يمكن التعديل على ملف الميكروسي ومن ثم رؤية القيمة التي تم ارسالها الى الايبروم بنفس الطريقة السابقة .
تمرين 2 : قم بكتابة برنامج يحفظ الارقام من 1 -10 في الايبروم في الموقع 100 وما بعده .
وآخر دعوانا ان الحمدلله رب العالمين .. وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم.