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

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

أشرف الخطيب
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
الدولة: مصــــــــــــــــــــــــــــــر
المشاركات: 195
نشاط [ أشرف الخطيب ]
قوة السمعة:0
قديم 09-05-2009, 04:41 PM المشاركة 1   
افتراضي شرح بسيط : المتغيرات والثوابت والمؤشرات فى لغة الميكروسى Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته

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

أعتقد أنه لابد من المبرمج بلغة الميكروسى أن يكون له بعض المعرفة بالمتغيرات variables والثوابت constants والمؤشرات pointers والفرق بينهم .


أولا : المتغيرات

تعريف المتغيرات يتم من خلال تلك الكلمات ( char - int - float - double ) وقد تسبق تلك الكلمات بإحدى الكلمات الآتية ( short - long - signed - unsigned ) وبعمل ربط بين كلمات المجموعة الأولى والثانية يكون تعريف المتغير .

انظر الجدول التالى



لكى تقوم بتعريف متغير يعبر عن أرقام صحيحة (0 - 1 - 2 ..........) فاجعل ذلك المتغير من النوع char أو int
ولكى تقوم بتعريف متغير يعبر عن أرقام كسرية (0 - 0.1 - 0.2 .....) فاجعل ذلك المتغير من النوع float او double

ملاحظات هامة

1- إذا تم تعريف متغير على أنه int فقط فإن الكومبايلر يترجم ذلك على أنه signed int ( أى أن الإفتراضى لدى الكومبايلر أنه signed إذا لم يذكر غير ذلك )
أما إن تم تعريف متغير على أنه char فقط فإن الكومبايلر يترجم ذلك على أنه unsigned char ( أى أن الإفتراضى لدى الكومبايلر أنه unsigned إذا لم يذكر غير ذلك )
وعلى ذلك فإن الأمر
كود:
int x ;
هو نفسه الأمر
كود:
signed int x ;
والأمر
كود:
char x ;
هو نفسه الأمر
كود:
unsigned char x ;
2- فى لغة الميكروسى المتغيرات من الأنواع float و double و long double تعامل نفس المعاملة


ثانيا : الثوابت

تستخدم الثوابت عندما نريد أن نعرف قيم ثابتة لاتتغير سواء كانت ارقام أو حروف

وبالطبع من الممكن أن يكون من النوع char أو int أو float................

مثل
كود:
const char x = 10 ; const int y = 77 ; const float z = 12.5 ;
إن كتبت const فقط دون توضيح نوع ذلك الثابت فإن الكومبايلر سوف يحدد نوعه على حسب قيمة ذلك الثابت
مثلا
كود:
const x = 210 ;
لذلك فإن الكومبايلر سوف يترجم ذلك الثابت أنه من النوع unsigned short

انظر الجدول التالى


يتبع..................


التعديل الأخير تم بواسطة : أشرف الخطيب بتاريخ 09-05-2009 الساعة 06:37 PM
اعلانات

أشرف الخطيب
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
الدولة: مصــــــــــــــــــــــــــــــر
المشاركات: 195
نشاط [ أشرف الخطيب ]
قوة السمعة:0
قديم 09-05-2009, 05:35 PM المشاركة 2   
افتراضي


لاحظ أن الجدول السابق يلجأ إليه الكومبايلر عندما يكون الثابت عبارة عن رقم صحيح int ولم يوضح المبرمج صراحة نوع هذا الثابت ماإذا كان signed أو unsigned أو long أو short

وبما أن الأرقام الصحيحة تأخذ القيم بين -2147483648 إلى 4294967295 ( ويمكن استنتاج ذلك من الجدول الأول) فإنه إذا تم تعريف ثابت وإعطاء قيمة له خارج القيمتين فإنه سوف تخرج رسالة خطأ تقول ( out of range )

مثال آخر

كود:
const x = 0xC367 ;
فإن الكومبايلر سوف يترجم ذلك على أنه من النوع unsigned int لماذا ؟؟؟
لأن القيمة 0xC367 تقابل 50023 بالنظام العشرى
وبالنظر إلى الجدول السابق ستجد أنها محصورة فى مابين 32768 , 65535


أود أن أنوه أن فائدة استخدام الثوابت هى عدم شغل الرام حيث أن الثوابت تحفظ فى الروم(الفلاش ميمورى) للمتحكم وهو ميزة هامة خاصة عندما نحتاج إلى تعريف الكثير من المتغيرات وكلها تحفظ فى الرام وقد تظهر رسالة خطأ ( not enough ram ) لذلك نلجأ إلى الثوابت لحل تلك المشكلة والتى تواجه الكثير منا .


يتبع.................


التعديل الأخير تم بواسطة : أشرف الخطيب بتاريخ 09-05-2009 الساعة 05:40 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

أشرف الخطيب
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
الدولة: مصــــــــــــــــــــــــــــــر
المشاركات: 195
نشاط [ أشرف الخطيب ]
قوة السمعة:0
قديم 09-05-2009, 06:35 PM المشاركة 3   
افتراضي


ثالثا : المؤشرات

المؤشر يحوى عنوان متغير ما ويتم تعريف المؤشر بنفس طريقة تعريف المتغير ولكن يسبق اسم المؤشر العلامة(*)

مثال
كود:
unsigned char*pnt ;
هنا تم تعريف مؤشر من النوع unsigned char ويأخذ الاسم pnt

أما الأمر
كود:
pnt = &x ;
فإنه يعنى أن عنوان المتغير x فى الذاكرة موجود الآن فى pnt
أى أن pnt يشير الآن إلى عنوان المتغير x

أما الأمر
كود:
*pnt = 10 ;
فيعنى أن يضع القيمة 10 فى العنوان الذى يوجد فى pnt ( الذى هو عنوان المتغير x) أى أنه سيضع 10 فى المتغير x
وبالتالى فإن الأمر السابق هو نفسه
كود:
x = 10 ;
أما الأمر
كود:
y = *pnt ;
فيعنى أن يضع مايشير إليه pnt ( وهو المتغير x ) فى المتغير y
أى أنه هو نفسه الأمر
كود:
y = x ;
كانت هذه نبذة مختصرة عن المتغيرات والثوابت والمؤشرات أعتقد أن المبرمج بلغة الميكروسى لابد أن يكون على دراية بها .
أخيرا أتمنى أن أكون قد وفقت فى هذا الشرح وإن كان هناك ملاحظات أرجو تفاعلكم حتى تعم الفائدة على الجميع

والله الموفق إلى مايحب ويرضى..............


geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:106
قديم 09-05-2009, 07:31 PM المشاركة 4   
افتراضي


السلام عليكم اخي اشرف

جزاك الله كل خير وبارك فيك على مجهودك الرائع ونفع بك الاسلام واعز المسلمين..ربنا يزيدك من فضله..

واخر دعوانا ان الحمدلله رب العالمين..وصلى الله على سيدنا محمد وعلى اله وصحبه وسلم..


الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 729
نشاط [ ahmad72 ]
قوة السمعة:109
قديم 09-05-2009, 08:10 PM المشاركة 5   
sun


السلام عليكم ورحمه الله وبركاته
جزاك الله خيرا اخى اشرف على هذا المجهود الرائع

وجعله الله فى ميزان حسناتك


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:395
قديم 09-05-2009, 08:26 PM المشاركة 6   
افتراضي


بارك الله فيك اخي اشرف ولك جزيل الشكر
وانا اطمع بشيء من كرمك لو دعمت كل حالة مما ذكرتها بمثال بسيط لتبين لنا متى نستخدم هذا النوع ومتى ذاك وتحياتي لمجهودك الرائع وشكرا لك .

حيدر علاج حسن

حمودي1010
:: مهندس جيد ::
تاريخ التسجيل: Apr 2007
المشاركات: 237
نشاط [ حمودي1010 ]
قوة السمعة:0
قديم 10-05-2009, 10:42 AM المشاركة 7   
ha


بارك الله فيك

نفعت الامة بعلمك شكرا شكرا ولو باليسير

إضافة رد

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

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

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


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

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