أشكال وطريقة تمثيل الأعداد
المترجم الميكروسى يمكنه التعامل مع البيانات من النوع : العشرى و الثنائى و السداسى عشرى والثمانى . يمكننا تمثيل القيمة العددية بعدة طرق .
للتوضيح , نفترض أننا نريد تحميل القيمة 187 بالسجل PORTB باستخدام الميكروسى :
· التمثيل العشرى Decimal:
لتمثيل عدد عشرى فقط ضع قيمته بدون أى اختصار كما فى السطر التالى :
PORTB = 187;//التمثيل العشرى
كود:
PORTB = 187;//التمثيل العشرى
ملحوظة هامة :
يجب ألا يبدأ العدد العشرى بالصفر على الأطلاق , لأن الميكروسى سوف يفسره على أنه عدد ثمانى .
مثال :
PORTB = 25 تمثل 25 عشرى .
PORTB = 025 تمثل ثمانى .
· التمثيل السداسى عشرى Hexadecimal :
لتمثيل العدد السداسى عشرى يجب أن يبدأ "بالبادئة prefix " 0x (أو 0X ) قبل العدد السداسى عشرى
( من 0 إلى F) .
مثال :
PORTB = 0Xbb; // تمثيل سداسى عشرى للعدد العشرى 187
Or
PORTB = 0XBB; // تمثيل سداسى عشرى للعدد العشرى 187
كود:
PORTB = 0Xbb; // تمثيل سداسى عشرى للعدد العشرى 187
Or
PORTB = 0XBB; // تمثيل سداسى عشرى للعدد العشرى 187
· التمثيل الثنائى Binary :
لتمثيل العدد الثنائى يجب أن يبدأ "بالبادئة prefix " 0b (أو 0B ) قبل العدد الثنائى .
مثال :
PORTB; = 0b10111011; // التمثيل الثنائى للعدد العشرى 187
Or
PORTB; = 0B10111011; // التمثيل الثنائى للعدد العشرى 187
كود:
PORTB; = 0b10111011; // التمثيل الثنائى للعدد العشرى 187
Or
PORTB; = 0B10111011; // التمثيل الثنائى للعدد العشرى 187
ملحوظة :
الخانة ذات الأهمية القصوى (الأعلى) MSB هى أقصى خانة جهة اليسار . أى خطأ فى تمثيل العدد الثنائى يسبب عدم عمل البرنامج بالطريقة الصحيحة .
· التمثيل الثمانى Octal :
النظام الثمانى ليس واسع الانتشار اليوم . على الرغم من ذلك فإن الميكروسى يدعم تمثيل هذا النوع من الأعداد , يجب علينا استخدامها فقط عند الحاجة .
لتمثيل العدد الثمانى يجب أن يبدأ "بالبادئةprefix "0 (zero) قبل العدد الثمانى .
مثال :
PORTD = 0273; // التمثيل الثمانى للعدد العشرى 187
كود:
PORTD = 0273; // التمثيل الثمانى للعدد العشرى 187
تحذير :
ينبغى عدم الخلط مع الأعداد الثمانية . الأعداد الثمانية يسبقها بادئة هو الصفر مثل 0140 هو عدد ثمانى . الأعداد العشرية لا يسبقها بادئة مثل 140 هو عدد عشرى .
مثال 1 :
نريد إرسال الحالات التالية لأطراف المنفذ PORTB :
RB0 = 0
RB1 = 1
BR2 = 1
RB3 = 0
RB4 = 0
RB5 = 1
RB6 = 0
RB7 = 0
ما هى القيمة العددية التى نضعها فى التعليمة لتمثيل حالات أطراف المنفذ PORTB .
الحل :
التمثيل العشرى :
PORTB=38;
التمثيل الثنائى :
PORTB = 0b00100110;
التمثيل السداسى عشرى :
PORTB = 0x26;
النظام الثمانى :
PORTB = 046;
ثانيا : الحساسية لنوع الحرف فى الميكروسى :
فى الميكروسى (على خلاف لغة السى القياسية) يمكننا استخدام الحروف الصغيرة (السفلية) lowercase والكبيرة (العلوية) uppercaseفى البرنامج أى لا توجد حساسية لنوع الحرف فى الحالة الافتراضية .
ثالثا : الوصول إلى البتات المفردة للمتغيرات والسجلات 8-bit فى المترجم mikroC PRO
يسمح لك المترجم mikroC PRO بالوصول إلى البتات الفردية للمتغيرات ذات الثمانى خانات . كما أنه يعتمد البيانات من النوع sbit و bit .
الوصول إلى بت فردية فى المتغير : - إذا كنت معتاد على الميكروكونترولر فيمكنك الوصول إلى الخانات بإسمها مباشرة كما يلى :
GIE_bit = 0 ; //Clear Global Interupt Bit (GIE)
كود:
GIE_bit = 0 ; //Clear Global Interupt Bit (GIE)
- كما يمكنك ببساطة استخدام رمز إنتقاء (اختيار) الرقم وهو النقطة (.) مع المتغير متبوعا بواحد من المعرفات : B0 , B1 , ……, B7 أو F1 , F2 , ……F7
حيث F7 هى البت ذات القيمة القصوى MSB :
أمثلة :
PORTA.F5 = 0; // refers to the PIC pin RA5.
PORTD.F7 = 1; // refers to the PIC pin RD7.
TRISB.RB0 = 1; // makes reference to the bit 0 of register TRISB
INTCON . B0 = 0 ; // Clear bit 0 in INTCON register
كود:
PORTA.F5 = 0; // refers to the PIC pin RA5.
PORTD.F7 = 1; // refers to the PIC pin RD7.
TRISB.RB0 = 1; // makes reference to the bit 0 of register TRISB
INTCON . B0 = 0 ; // Clear bit 0 in INTCON register
- لا توجد حاجة لإى إعلانات خاصة .هذا النوع من الوصول الانتقائى هو خاصية جوهرية فى المترجم mikroC PRO ويمكن استخدامه فى أى مكان فى الكود .
- المعرفات B0-B7 ليست حساسة لنوع الحرف كبير أم صغير .
الخانات نوع sbit :
يمتلك المترجم mikroC PRO نوع من بيانات الخانات يسمى sbit والذى يوفر الوصول لخانة بسجلات الوظائف الخاصة SFR .
يمكن تعريفها والوصول اليها بالطريقة التالية :
sbit LEDA at PORTA.B0 ;
sbit bit_name at sfr-name.B <bit-position> ;
sbit LEDB at PORTB.F0 ;
sbit bit_name at sfr-name.F <bit-position> ;
كود:
sbit LEDA at PORTA.B0 ;
sbit bit_name at sfr-name.B <bit-position> ;
sbit LEDB at PORTB.F0 ;
sbit bit_name at sfr-name.F <bit-position> ;
بيانات البتات من النوع bit :
يوفر المترجم mikroC PRO بيانات بتات من نوع bit والتى يمكن استخدامها فى الإعلان عن المتغير.
bit bf ; // bit variable
كود:
bit bf ; // bit variable