تكملة لـ المعالجات والمتحكمات المصغرة الجزء الأول (01-19)
التصميم الداخلي للمعالج
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
20 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
.1 تصميم Von Neumann :
يقوم بجلب التعليمات والبيانات من مكان ذاكري وحيد.
يحد من عرض حزمة التنفيذ.
.2 تصميم Harvard :
يستخدم حي زين ذاكريين منفصلين عن بعضهما أحدهما خاص بتعليمات البرنامج
والآخر بالمعطيات.
أداء أفضل لعرض الحزمة.
يسمح باستخدام Bus ات بأحجام مختلفة.
تصميم ال AVR
21 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
نظرة عامة على التصميم
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
22 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
– تصميم Harvard الذي يعتمد على المسجلات مع تعليمات
ال RISC ، يسمح بتنفيذ سريع وجيد للبرنامج.
– قبل بدء العملية، يقوم المعالج بتحميل جميع البيانات اللازمة
إلى ال CPU ويتم تخزين النتائج في المسجلات.
– خلال عملية تنفيذ البرنامج، تتعامل ال CPU مع المسجلات،
وذلك للتقليل من حالة بطء الدخول إلى الذاكرة.
نظرة عامة على التصميم
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
23 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
– يتم بناء تعليمات أكثر تعقيدا انطلاقا من هذه التعليمات الأساسية.
– 131 تعليمة RISC ، يتم تنفيذ معظمها خلال دورة ساعة واحدة.
– يتم استخدام حزم نقل وذواكر منفصلة لكل من البرنامج والبيانات.
– يسمح العتاد الصلب بتنفيذ عملية الضرب خلال دورتي ساعة.
أَمْ Assembly C ؟
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
24 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
من أجل التنفيذ الجيد والسريع لأوامر المايكرو:
يجب استخدام لغة ال Assembly .
من أجل الاستخدام المفيد للغة ال Assembly :
يجب على المبرمج أن يكون م طلعا على تفاصيل المرحلة المنخفضة في تصميم
المعالج.
منحني التعلم في للغة ال Assembly يتصف بانحدار شديد نوعا ما،
والدروس المُتَعلمة لا تنطبق دائما على مايكرو آخر.
أَمْ Assembly C ؟
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
25 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
تسمح لغة ال C بتحكم مباشر بالعتاد الصلب للمايكرو من رتبة المسجل.
مع المحافظة على قدرة استخدامها مع نوع آخر من المايكرو الذي تصنعه خطوط
انتاج AVR .
البرمجة بلغة C ليست أفضل من البرمجة بلغة Assembly ، كما أن العكس
ليس صحيحا.
كلا اللغتان لها فوائدها المتوارثة كما أن لها مساوئها.
سنقوم باستخدام برنامج C for AVR Studio للأسباب المذكورة سابقا.
المخطط الصندوقي ل
Atmega16 .
26
ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
المخطط الصندوقي ل Atmega16 .
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
27 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
.1 توصيلات خارجية من أجل التغذية الكهربائية ) VCC ، GND ، AVCC ،
و AREF .)
.2 منافذ خارجية لقاعدة الوقت ) XTAL1 و XTAL2 ( بحيث توفر إمكانية قيادة
ساعة الشريحة.
. 3 أربع منافذ بعرض 8 بت ) PA0 حتى PA7 ، PC0 حتى PC7 ، PB0 حتى
PB7 ، و PD0 حتى PD7 (، تستخدم ك GPIO أو لأغراض أخرى.
.4 مؤقت، ADC )مبدل تشابهي رقمي(، مقاطعات، ذاكرة، واجهة اتصال،
وإعادة ضبط المعالج.
الذواكر في Atmega16 .
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
28 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
. 1 ذاكرة فلاش للشيفرة ) ISP 🙂
تخزن شيفرة البرنامج.
ثوابت الجداول الكبيرة.
. 2 ذاكرة بايت قابلة للعنونة من
النوع EEPROM
تخزين البيانات.
.3 بِّتات قفل قابلة للبرمجة
ست بتات ذاكرة للقفل.
تتم برمجتها باستخدام المبرمج
« STK 500 .»
. 4 ذاكرة البيانات ) SRAM .)
تخزين المتحولات الشاملة.
يستخدمه المعالج كمكد س.
1. ذاكرة فلاش للشيفرة ) ISP )
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
29 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
16 كيلو بايت من ذاكرة فلاش EEPROM المنظمة ك:
8 كيلو بايت كحجرات ذاكرية، تحتوي كل منها على 16 بِّت.
يتم محوها وبرمجتها كوحدة كاملة،
إما تكون داخل الدارة وتتم برمجتها عن طريق وصل كابل مع
الحاسب المضيف، وذلك لتثبيت البرنامج على المايكرو.
أو تكون خارج موقعها في الدارة، فتتم برمجتها باستخدام الشرائح
المبرمجة للفلاش، مثل Atmel STK500 .
2. ذاكرة بايت قابلة للعنونة من النوع EEPROM .
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
30 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
512 بايت من ذاكرة EEPROM تستخدم في تخزين وجلب
المتحولات أثناء تنفيذ البرنامج.
من أجل تسجيل أعطال النظام وأخطاء البيانات أثناء تنفيذ البرنامج.
من أجل تخزين البيانات التي يجب أن يتم استردادها عند حصول خطأ
كهربائي ما.
لكن قد نحتاج إلى تغييرها من فترة لأخرى.
لتخزين بارامترات النظام، مثل:
تراكيب القفل الالكتروني.
تسلسل فك القفل الالكتروني لباب الكراج الآلي.
3. بِتات القفل القابلة للبرمجة.
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
31 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
قد يتم تصميمها من أجل الخيارات التالية:
عدم استخدام خاصية قفل الذاكرة.
عدم السماح بإجراء أي تعديل آخر على الذاكرة، باستخدام
تقنيات تسلسلية أو تفرعية.
عدم السماح بأي برمجة أو تحقق قد يتم على الذاكرة،
باستخدام تقنيات تفرعية أو تسلسلية.
ذاكرة الوصول العشوائي الساكنة SRAM .
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
32 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
ذاكرة قابلة للتطاير تستخدم للقراءة والكتابة أثناء تنفيذ البرنامج.
1120 بايت من SRAM
32GP بمسجلات تعمل بطول 8 بِّت.
تستخدم من أجل المتحولات المحلية، البيانات المؤقتة، وحتى المتحولات العامة.
يتبعها 64 مسجل دخل/خرج بطول 8 بت.
تستخدم كواجهة لأدوات الدخل/خرج والطرفيات الموصولة مع المايكرو.
يتبعها ذاكرة SRAM داخلية.
تستخدم كمساحة لتخزين المتحولات العادية وتستخدم أيضا كمكد س للمعالج.
المسجلات
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
33 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
تقوم بتخزين النتائج المؤقتة أو الوسيطية.
تستخدم أحيانا في تخزين المتحولات المحلية.
تستخدم أحيانا في تخزين المتحولات الشائعة، وأحيانا في تخزين
مؤشرات لمواقع الذاكرة، التي يستخدمها المعالج.
يتم التحكم بها عن طريق مترجم لغة ال C وعادة ما يكون
خارج سيطرة المبرمجين، إلا في حالة استخدام لغة ال
Assembly .
مسجلات الدخل/خرج ) I/O .)
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
34 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
ثلاثة مسجلات بطول 8 بت من النوع GPIO لكل بوابة )البوابة A ،
البوابة B، البوابة C، البوابة D .)
مسجل مسار البيانات ) DDRx ( يستخدم لضبط بتات البوابات لتكون إما
مخارج ) 1 ( أو مداخل ) 0 .)
مسجل قيادة البوابة ) PORTx ( يستخدم للكتابة على بتات الخرج للبوابة x .
مسجل منفذ البوابة ) PINx ( يستخدم لقراءة دخل بتات البوابة x .
ومسجلات الحالة ) SREG .)
مسجلات الدخل/خرج ) I/O .)
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
35 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
لكل مسجل دخل/خرج:
اسم.
عنوان ال دخل/خرج.
عنوان SRAM .
تقوم لغة C باستخدام اسم مسجل ال دخل/خرج فقط.
تقوم البادئة ) #include ( بتحديد:
الأسماء وعنواين ال دخل/خرج المستخدمة من أجل مترجم ال C .
مسجل إعداد البوابة
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
36 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
مسجل إعداد البوابة
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
37 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
DDxn
PORTxn
I/O
ملاحظات
0
0
دخل
ثلاثي الحالة )ممانعة عالية(
0
1
دخل
منبع تيار إذا كان الخرج موصول
بمقاومة إلى الأرض
1
0
خرج
خرج منخفض )مصرف(
1
1
خرج
خرج مرتفع )منبع(
x : دليل البوابة ) A ، B ، C ، D )
n : دليل المنفذ ) 0 – 7 )
تشغيل البوابة باستخدام أسماء المسجلات
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
38 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
#include <mega.h>
Main () {
DDRA = 0xFF; /*جميع بتات هذه البوابة هي مخارج */
DDRB = 0x00; /*جميع بتات هذه البوابة هي مداخل */
While (1) {/* ‘for ever’ (Super Loop) حلقة لانهائية */
PORTA = PINB; /* » ايي « واكتب على البوابة » بي « اقرأ من البوابة */
}
}
لماذا نستخدم مقاومات الرفع؟
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
39 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
منافذ بوابات الدخل تكون عائمة،
◦ يغذي المايكرو مقاومات الرفع، عن طريق كتابة 1 على منفذ الدخل.
◦ المنفذ قادر على تصريف تيار حتى 20 ميللي أمبير، لكنه قادر على التغذية بتيار
أقل بكثير من ذلك.
◦ المنفذ قادر على قيادة ال LEDs ، بشرط أن يكون عمله كمصرف للتيار.
DDRA = 0xF0; /*تحدد الخانات الأقل أهمية لتكون مداخل */
PORTA = 0x03; /*تصل أول مدخلين إلى مقاومة رفع */
PORTA = (PINA<<4); /* تقرأ قيمة البوابة وتزيحها أربع خانات */
الإعدادات الأولية لبوابات الدخل/خرج
ترجمة أحمد رامي قباني || RamiKabbani.wordpress.com
40 ترجمة وتنسيق: رامي قباني. إلقاء الدكتور: عبد الغني البكار.
Void initialize_ports(void){
DDRA=0xFC; //PORTA [7:2] مخارج , PORTA [1:0]
مداخل
PORTA = 0x03; //PORTA [7:2] صفر منطقي , PORTA [1:0] منبع للتيار
DDRB = 0xa0; //PORTB [7:4] مخارج , PORTB [3:0]
مداخل
PORTB = 0x00; // إلغاء تفعيل مقاومات الرفع في هذه
البوابة
DDRC = 0xFF; // PORTC مخارج
PORTC = 0x00; // فعلها على أنها منطق منخفض
DDRD = 0xFF; // PORTD مخارج
PORTD = 0x00; // فعلها على أنها منطق منخفض
}
◦ لقراءة قيمة ما من منفذ بوابة محددة على أنها دخل،
unsigned char new_PORTB; // » بي « القيم الجديدة للبوابة
New_PORTB= PINB; // » بي « اقرأ قيمة البوابة