Special Function Registers
SFR
الجدول التالى يوضح موقع كل من الـ accumulator و المخزن المساعد B
الرسم التالى يوضح موقع ال منفذ ( 1 ) ( port 1 ) العنوان من (90H ) الى (97H )
Program Status Word
PSW
يحتوى الـ PSW على التالى :-
Carry flag
CY
يستخدم اثناء عمليات الجمع او الطرح حيث يخزن فيه 1 اذا ما ظهر لدينا قيمة تنتقل الى خانة اعلى او عند الطرح و ظهور رقم اقل من امطروح منه .
الامثلة التالية تحدد وظيفة الـ Carry :-
1-
MOV A, #FFFH
ADD A, #1
ما هى حالة الـ Cary Flag ؟
هنا نجدأن:-
A=#00 , CY = 1
2-
[SIZE=“4”]MOV R5, #55H
MOV A, #0AAH
ADD A, R5
[/SIZE];
ما هى حالة الـ Cary Flag ؟
0AAH+55H = 0FFH
هنا نجد أنه لا يوجد باقى
A=FFH and CY=0 (No Carry)
AC
[SIZE=“4”
]
- عند التعامل مع نظام التكويد العشرى على هيئة ثنائى ( BCD ) و تحديداً عند عمل إضافة فانه عند الانتقال من الخانة الثالثة الى الخانة الرابعة فانه ( AC ) تحمل الرقم 1 .
- مثال لتوضيح استخدام ( AC )
مطلوب معرفة حالة ( AC ) و محتوى المسجل ( Accumulator ) بعد تنفيذ التتابع التالى :-[/size]
MOV R5, #1;
MOV A, #9;
ADD A, R5
;
ا
لاجابة :-
لفهم هذا المثال يلزم مراجعة الانظمة العددية ( ليست مجال الموضوع حالياً )
A=10H (BCD) =1010 = 00010000B , AC=1
RS1 and RS0
كيفية اختيار المخزن داخل كل مصفوفة
يتم ذلك من خلال تحديد قيم ( D3 & D4 ) داخل الـ ( PSW )
و ذلك من خلال عمل تكويد بسيط يحمل اربع قيم ( 0 ، 1 ، 2 ، 3 ) و كل فيمة تعبر عن رقم المصفوفة المستخدمة .
( RS1, RS0 ) à ( 0 , 0 ) à ( Regester Bank 0 is Selected )
( RS1, RS0 ) à ( 0 , 1 ) —> ( Regester Bank 1 is Selected )
( RS1, RS0 ) à ( 1 , 0 ) —> ( Regester Bank 2 is Selected )
( RS1, RS0 ) —> ( 1 , 1 ) à ( Regester Bank 3 is Selected
)
و يتم التحكم فى هذه القيم من خلال الأوامر التالية :-
SETB RS1; CLR RS0
هنا تم ضبط نظام التكويد الى الوضع ( RS1, RS0 ) = ( 1 , 0 ) و من ثم اختيار المصفوفة Regester Bank 2
لاحظ وظيفة الامر SETB و التى يمكن استخدامها مع اسم (( SFR او عنوانها مباشرة
SETB RS1 (= SETB 0D4H)
SETB RS0 (=SETB 0D3H)
بما اننا نعمل على ميكرو 8 بت فمن ثم فاننا محددين بقيم فى المدى ( 127 الى –128 ) حيث ان الاعداد المستخدم كقيمة عظمى هى ( 2^8 = 256 ) و يتم توزيعهم كالتالى
( 1 : 127 & 0 & -1 : -128 )
و من ثم فإن اى عملية حسابية يجب ان يكون الرقم الناتج عنها فى نطاق
(-128 < X < 127 ) و اذا كان خلاف ذلك يحمل المخزن ( OV ) القيمة ( 1 ) .
مثال توضيحى :-
MOV R7, #0FFH;
MOV A, #0FH;
ADD A, R7
مطلوب تحديد حالة الـ OV
R7=11111111
لتحويل هذا الرقم الى النظام العشرى:-
راقب الصورة العامة تجدها ( 1xxxxxxx ) و التى تعنى ان الرقم سالب لذلك نحول كل ( 0 ) الى ( 1 ) و كل ( 1 ) الى ( 0 ) ثم اجمع ( 1 ) على الناتج و اكتب الرقم بالشارة السالبة .
(00000000+1= - 00000001 so (( R7 = -1))
A=00001111 (15)
راقب الصورة العامة تجدها ( 0xxxxxxx ) و التى تعنى ان الرقم موجب اى ان A= 15
A=-1+15=14 =0EH< 127 so OV=0 --No overflow)
الموضوع هنا يحتاج الى وقفة :-
اتفقنا ان الاعداد بين (127 : – 128 ) ، إذن كيف يتم التعبير عنها ؟؟؟؟
الرقم ( 0 ) هو ( 00000000 )
الارقام الموجبة تكتب على الصورة ( 0xxxxxxx ) اى من ( 00000001 ) = ( 1 ) الى ( 01111111) = ( 127 ) .
الارقام السالبة تكتب على الصورة (1xxxxxxx ) اى من (10000000) = ( - 128 ) الى ( 11111111 ) = ( - 1 )
A=-1+15=14 =0EH< 127 ------> OV=0 (No overflow)
P
[SIZE=“4”]هذا العلم يستخدم لعمل فحص لعدد الـ ( 1 ) التى تمر ضمن البيانات الى الـ Accumulator و تتغير قيمة هذا العلم كل دورة Machine Cycle ، و يحمل العدد 0 اذا كانت الـ 1s زوجية و يحمل القيمة 1 اذا كانت الـ 1 s فردية اى انها تعبر عن الـ ( ODD Parity Bit ) كالتالى :-
A=01010101B —> numbers of 1-bit = 4 ----> P=0
[/size]
B register or B accumulator
[SIZE=“4”]يستخدم ال( Accumulator ( B كمساعد الـ ( Accumulator ( A
- فمثلاً عند عملية الضرب ممكن جداً ان يكون الناتج خارج اطال الـ 8 بت و من ثم يتم تقسيم ناتج الضرب الى جزئين ( علوى High و سفلى Low ) بحيث تحمل الـ ( Accumulator ( B القيم العليا بينما يحمل الـ ( Accumulator ( A القسم السفلى
MUL AB
Results of low-byte in A and high-byte in B.
- و كذلك عند عملية القسمة نجد ان خارج القسمة يتجزأ الى جزئين الارقام الصحيحة تخزن فى الـ ( Accumulator ( A … بينما الكسور تخزن فى الــ Accumulator ( B )
[/size]
Stack Pointer
SP
هو مخزن سعته8 بت عند العنوان 81H و يستخدم عند التعامل مع البرامج او البيانات المخزنة على ذاكرة خارجية ملحقة بالميكروكونتروللر 8051 . و لا يمكن التعامل معه على مستوى الـبت
Data pointer (DPTR)
[SIZE=“4”]
عبارة عن مخزن سعته 16 بت (16-bit register) وو يستخدم فى الاحتفاظ بعناويين البيانات و يمكنه الاشارة الى عناوين حتى 64 كيلو و من ثم يستخدم غالباً عند التعامل مع الذاكرة الخارجية و هومنقسم الى جزئين علوى و سفلى :-
DPH: Data Pointer High-byte----> at 83H
DPL: Data Pointer Low-byte-----> at 82H
و له استخدامات هامة للتعامل مع الذاكرة الخارجية حيث انه يشير الى عناوين البيانات و تصل حجم البيانات الى 16 بت ( 2^16 ) == ( 64 كيلوبت ) و المثال التالى يوضح احد استخداماته :-
MOV A, #55H è A=55H
MOV DPTR, #1000H è DPTR=1000H (16-bit)
MOVX @DPTR, A
—> Move the content of A to the external RAM location whose address is in DPTR==1000H
الامر الاخير يقوم بتحويل القيم المخزنة فى ال ( Accumulator ( A الى العنوان المخزن على الـ Data pointer (( لاحظ انه يشير لعنوان خارج نطاق 4 كيلو و من ثم فانه يشير لبيانات مخزنة فى ذاكرة خارجية )) . [/size]
Port Registers
و الان جاء الدور لنتحدث عن المخازن التى تحمل القيم المارة عبر منافذ الادخال و الاخراج ( Port 0 & 1 & 2 & 3 ) .
نلاحظ ان المنافذ (Port 0 & 2 & 3 ) قد لا تكون لاستخدامات الادخال و الاخراج اثناء التعامل مع الذاكرة الخارجية أو فى حالة استخدام بعض الامكانات الخاصة بالميكروكونتروللر 8051 مثل التعامل مع ( interrupt. Serial port ) و بالرغم من ذلك نجد ان المنفذ ( Port 1 ) مستخدم دائماً و ابداً كمنفذ اخال و اخراج و كذلك يمكننا التعامل معه على مستوى البت , و من ثم يمكن ادارة و ايقاف عدد 8 محركات من خلال اشارة خرج على الاطراف الثمانية المتاحة كالتالى :-
[LEFT]
SETB P1.7 (=SETB 97H)—> might turn the motor ON
CLR P1.7 (=CLR 97H)----> might turn the motor OFF.
[/left]
Timer Registers
يحتوى الميكروكونتروللر 8051 على عدد 2 مؤقت بسعة 16 بت يطلق عليهم ( ( TL0 and TL1.
يتم تشغيل المؤقت من خلال ضبط مخازن الحالة (TMOD) و كذلك مخازن التحكم (TCON) .
و من المعروف ان مخازن التحكم (TCON) يتم التعامل معها على مستوى البت
Serial Port Registers
[SIZE=“4”]
مخازن منفذ التوصيل التسلسلى
- من المعروف ان الميكروكونتروللر 8051 له منفذ توصيل تسلسلى للاتصال بالجهزة التى تعمل على ارسال و استقبال البانات التسلسلية مثل ( الفأرة – لوحة المفاتيح – الموديم – او حتى الاتصال باى دائرة متكاملة تعتمد على نقل البيانات المتسلسل مثل محولات الاشارات التماثلية Analog الى رقمية Digital و مخازن الترحيل Shift Register و الذاكرة RAM و … … … الخ ) .
- يتم تخزين البيانات المراد نقلها ( مرسلة او مستقبلة ) داخل مخزن مستقل عند العنوان 99H و يسمى SBUF (serial data buffer) .
- و يوجد كذلك مخزن للتحكم فى عدة لنواع من الاتصال التسلسلى يسمى SCON (serial port control register).
المخزن يمكن التعامل معه على مستوى البت[/size]
Interrupt Registers
[SIZE=“4”]
مسجلات الاعاقة ( الطوارئ )
- هذه المسجلات تكون غير نشطة عقب التشغيل مباشرة و لا تنشط الا من خلال المخزن الخاص بها
interrupt enable register ==IE عند العنوان A8H .
- و لدينا اكثر من نوع من الاعاقات يمكن ان تحدث عبر هذا السجل و تسجل الاولويات عبر مخزن الاولويات priority register ==IP عند العنوان B8H .
- كل من مخزن الاعاقة و مخزن الاولويات يتم التعامل معه على مستوى البت .[/size]
Power Control Register
مخزن التحكم بالطاقة
-يحتوى هذا المخزن على مجموعة من الاعلام الهامة جداً ، نفصلها فيما يلى :-
SMOD
تستخدم لجعل معدل التدفق للبيانات baud rate التسلسلية يتضاعف baud rate is doubled و ذلك فى حالاتها الثلاث serial port modes 1, 2, and 3 و يتم ذلك بجعلها تحمل القيمة ( 1 )
اعلام متعددة الاغراض
PD
تستخدم لتفعيل حالة النوم للميكروكونتروللر حيث يكون كل الوظائف متوقفة و تظل الذاكرة ( RAM ) محتفظة بالبيانات التى عليها و كذلك تظل ارجل المنافذ محتفظة بحالتها بينما يتم اجبار كل من (ALE ) و (PSEN ) على البقاء فى الحالة ( low ) و جهد التغذية (VCC ) المطلوب وقتئذٍ هو ( 2V ) حتى المذبذب ( oscillator ) يتوقف و للخروج من هذه الحالة هو مفتاح reset .
IDL
Idle mode
يستخدم لتنشيط حالة الخمول .
عند تفعيل هذا العلم ، المذبذب الداخلى (internal clock signal ) يحجب عن المعالج ( CPU ) بينما تكون حالة المعالج باقية على حالتها و كذلك كل محتويات المخازن و كذلك تظل اطراف المنافذ محتفظة بحالتها بينما تجبر كل من ( ALE ) و (PSEN ) على البقاء فى الحالة (high ) .
External Memory
- عند استخدام الذاكرة الخارجة يكون المنفذ رقم ( 0 ) (Port 0 ) غير متاح كمنفذ ادخال و اخراج و لكنه يتحول الى مؤشر للعنوان من (A0 ) الى (A7 ) و كذلك حامل للبيانات من (D0 ) الى (D7 ) فيما يعرف بـ
multiplexed address and data
و ذلك بالتعاون مع (ALE ) و التى تعمل على حفظ او تخزين الجزء السفلى من عناوين البيانات (low-byte of the address ) و ذلك فى بداية كل دورة للذاكرة الخارجية بينما يقوم المنفذ رقم ( 2 ) (Port 2 ) محتفظاً بالجزء العلوى من عناوين البيانات (high byte of the address )
Accessing External Code Memory
[SIZE=“4”]
- طبعاً سيتسأل الجميع عن آلية عمل الــ ( multiplexed arrangement ) ؟؟؟؟؟؟؟؟؟
الموضوع بسيط جداً و يتم كما يلى :-
- خلال النصف الاول من دورة الذاكرة ( memory cycle ) القيمة السفلى فى العنوان low-byte تظهر على المنفذ رقم ( 0 ) (Port 0 )و يتم الحتفاظ به بواسطة ( ALE )
و التى ترسلها الى متكاملة التخزين ( 74HC373 ) و التى تحفظها خلال كل الدورة (duration of the memory cycle )
- خلال النصف الثانى من الدورة يستخدم المنفذ رقم ( 0 ) (Port 0 ) كناقل بيانات (( يكتب او يقرأ حسب طبيعة العملية )) .
[/size]