تصميم الدوائر الرقمية - ما تحتاج أن تعرفه

[B][FONT=“Times New Roman”][SIZE=“4”]
الذاكرة القابلة للبرمجة PROM:
يتكون هذا النوع كسابقه من محلل للعنوان كما توقعت ليعطى مجموعة من الخطوط تمثل الأماكن المطلوب التعامل معها وهى باللون الأزرق فى الرسم. و أيضا مجموعة من الخطوط الرأسية التى تكون المخارج والتى تمر عبر معزز و مجموعة تحكم ثلاثى الحالة Tri State أو المجمع المفتوح Open Collector/ Open Drain حسب كونها TTL أو CMOS .
على العكس من السابقة، يتوقع أن يكون الخرج على أى خط يساوى “واحد” HI وذلك لاتصال المدخل بالمخرج بواسطة فيوز أى منصهر كما باللون الأخضر.


لكى تبرمج هذه الوحدة، ستحرق بعض من هذه الفيوزات أو المنصهرات و من هنا التصق أسم “الحرق” أو “Burn” بعملية البرمجة حتى بعد تغير المفهوم. لتفعل هذا، تجد خط آخر مكتوب علية كلمة “برمجة” Program و من البيانات Data Sheet تجد كيفية تنفيذ هذه الخطوة، فمثلا بعض المتكاملات تحتاج جهد مخصص للبرمجة ولفترة زمنية قصيرة وله مدخل مخصص والبعض تحتاج فقط لزيادة جهد التغذية من القيمة العادية +5فولت إلى قيمة البرمجة والبعض يكفى تفعيل البرمجة مع خط اختيار المتكاملة. النقطة حيث تمت برمجتها “حرقها” تعطى مستوى “صفر” LO .
لهذا نجد أنها تحتوى مجموعة من المعززات المختصة بالبرمجة. و لبرمجتها تضع أولا العنوان ثم البيانات المطلوبة و أخيرا تفعيل البرمجة التى تقوم بحرق الفيوز أو المنصهر حيثما تريد أن تكون القيمة “صفر”.
لاحظ أن الفيوز أو المنصهر لا يمكن إصلاحه و إذا برمج خطأ لا يمكن معالجة الأمر.
دوما تستطيع حرق مزيد من الفيوزات / ألمنصهرات لكن لا تستطيع إصلاح أحدها.
عديد من التقنيات ابتكرت بعد هذا لكنها تدور حول نفس المفهوم وهو إتلاف مكون ما فى موقع البرمجة، بعض هذه التقنيات سميت Antifuse وهو عكس المنصهر لأن المكون بعد البرمجة يتحول إلى “قصر” بين أطرافه ومن هنا أتت التسمية. جدير بالملاحظة أن الدوائر تعدل أيضا بحيث أصبحت فى غالبة الأحوال تأتى الذاكرة وكل المخارج تعطى مستوى “واحد” HI و عند البرمجة تتحول إلى مستوى “صفر” LO .
هذا أمر طيب، قد حل مشكلة و ترك أخرى. حل مشكلة البرمجة فى الموقع و الكمية الكبيرة لكن ترك مشكلة أكبر وهى احتمال الخطأ.

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
الذاكرة القابلة للبرمجة والمسح EPROM,EEPROM:

الذاكرة القابلة للبرمجة والمسح بالأشعة EPROM,:

اكتشفت هذه الخاصية للذاكرة عند فحص متكاملة تالفة حيث كانت بوابات Gates بعض الترانزستورات قد انفصلت عن الدائرة، شحنه هذه البوابات غيرت خواص وأداء الدائرة.


الخلية الواحدة كما بالصورة تتكون من ترانزيستور واحد MOSFET و بوابته Gate معزولة و ليست متصلة بأى شيء لذا تسمى “عائمة” Floating Gate ثم تعلوها طبقة من أكسيد السليكون ثم البوابة الحاكمة Control Gate .
عادة سيكون الترانزيستور فى حال القطع OFF و بتركيب مجموعة منها على شكل مصفوفة لتكوين ذاكرة عادة بعرض 8 بت × ألاف المواقع و توصيل المصب Drain لكل وحدة بشبكة العنوان، تكون هذه المواقع غير مبرمجة وتعطى أحاد HI و تقرأ FF لكل بايت.
لبرمجة موقع منها يوضع العنوان المناسب و البيانات ثم يسلط جهد كافى لإحداث انهيار Avalanche كما بالثنائى الزينر " يمكن الرجوع لذلك فى السلسلة الخاصة بالإلكترونيات" والذى من شأنه أن يوصل تيار للبوابة العائمة Floating Gate فتسبب تواجد شحنة عليها تسبب فتح هذا الترانزستور ON. نظرا لأن العازل هو أكسيد السيلكون، فليس من المتوقع تفريع هذه الشحنة قبل عدة عقود.

لمحو برمجة هذه الذاكرة نحتاج لأشعة سينية X Ray أو فوق البنفسجية Ultra Violet بطول موجى 253.7 nm بطاقة 15 W-sec/cm2 لمدة 20 إلى 30 دقيقة و المصباح على بعد بوصة أو 2.5 سم. هذه الأشعة تأين العازل و تسبب تسريب لهذه الشحنة، أيضا التعرض لضوء الشمس لمدة أسبوع أو ثلاث سنوات لضوء لمبة فلوريسنت بالغرفة يسبب المحو.


تزود الذاكرة بنافذة لتوجيه أشعة فوق البنفسجية لمحو المحتوى والتى يجب تغطيتها بشريط لاصق معتم لحمايتها كما يمكن تكرار دورة المحو والبرمجة بضع ألاف المرات فبل أن تتلف. يفضل طبعا برمجة الذاكرة قبل الاستخدام مباشرة حيث أن زمن تفريغ الشحنة و بالتالى “المحو الذاتى” لا يتأثر بكونها مستخدمة أو “محفوظة” و عادة تذكر صفحات البيانات شيئا عن ضمان البيانات لمدة بضع سنوات بعد البرمجة بصرف النظر عن الاستخدام.
جدير بالذكر أن التعامل مع العنوان هو تعامل حر بمعنى أنه لا توجد أى قيود على أى المواقع تقرا ولا بأى تتابع كما أنه يمكن البرمجة أيضا بأى تتابع تشاء.

الذاكرة القابلة للبرمجة والمسح الكهربىEEPROM:
هى كسابقتها إلا أن التغيير فى سمك الطبقة العازلة يتيح المحو باستخدام جهد كهربى مما يتيح المحو وإعادة البرمجة دون الحاجة لرفع القطعة من الجهاز لوضعها فى جهاز المحو و من ثم البرمجة.
هذه الذاكرة أيضا تعانى من مشكلة المحو الكلى للذاكرة قبل إمكانية إعادة البرمجة، و قد حاولت تقنية الفلاش Flash التغلب على هذه النقطة بالذات.

ذاكرة الفلاش Flash Memory:


هى أيضا كسابقتها إلا أنها تستطيع حفظ كمية أكبر من المعلومات باستخدام مستويات متعددة Multi Level و باستخدام جهود متعددة تصل لخلايا متعددة و كانت الوحدات الأولى تحتاج محو كلى أيضا بتطبيق جهد عكسى على الخلية، ثم زادت السعة مع التمكن من محو نصف المحتوى ثم الربع وهكذا حتى أصبح الجزء المطلوب محوه صغير نسبيا، وهذا لا يعتبر مشكلة فى عالم الحاسب حيث أنها تقنية متبعة فى القرص الصلب. وحاليا قاربت سعر القرص الصلب و أصبحت منافسة له سعرا و السرعة أيضا و ربما قريبا تحل كليا محل القرص الصلب.

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
وحدة الحساب والمنطق Arithmetic and Logic Unit

يمكننا باستخدام ما سبق أن درسناه أن نكون وحدة تكون هى قلب الحاسب الإلكترونى الحديث وهى وحدة الحساب والمنطق. هذه الوحدة ببساطة عبارة عن مجموعة من البوابات تتلقى عددين من عدة أرقام ثم نجرى عليهما واحدة من مجموعة عمليات. هذه العمليات ببساطة هى الجمع والطرح و المقارنة و الإزاحة لليمين (الضرب × 2) أو الإزاحة لليسار (القسمة على 2) و التكميل أو العكس أى إيجاد الرقم المكمل لأحدهما و كل هذه العمليات سبق شرحها.
الجمع يمكن تحويره ليصبح زيادة واحد أو ما يسمى Increment أو نقصان واحد أى Decrement وهى هامة جدا لأن البرامج تتكون من سلسلة من التعليمات أو الخطوات المتتالية والتى تحتاج غالبا من قراءتها بالتسلسل كما أن البيانات كثيرا ما تخزن بالذاكرة بصورة جدول من خانات متتالية و تحتاج التعامل معها أيضا بنفس الأسلوب.
لدينا عينة مثل 74LS181 وهى تمثل هذه الوظيفة و يمكن قراءة كافة تفاصيلها من صفحة بياناتها. نظرا لأن كل مكوناتها سبق شرحها فلا داعى لتكرار هذا الآن.

يرمز لوحدة الحساب والمنطق بالرسم على هيئة حرف Y اللاتينى حيث يدخل الرقمين من مدخلى A,B بالأعلى و تخرج النتيجة من R بالأسفل و تحدد العملية المطلوب تنفيذها من المجموعة F و نواتج التنفيذ على المجموعة D .

يجب أن نلاحظ هنا أن A,B,R لهما سعة الكلمة المراد معالجتها، فلو كانت مثلا 4 بن تكون كل من A,B,R لها 4 خط ولكن F لها عدد من الخطوط يكفى لعدد الأوامر أو العمليات، فلو تستطيع تنفيذ 16 عملية، تكون F لها 4 خطوط ولو تستطيع 32 عملية تكون F لها خمسة خطوط وهكذا. المجموعة D عادة لها عدد ثابت من الخطوط حيث تعبر عن نتائج العمليات و عن حالة الوحدة مثل ناتج الجمع Carry و ناتج المقارنة مثل تساوى الأرقام أو أيها أكبر الخ.


للتوضيح تم تلوين المدخل A بالأحمر و B بالسماوى و المخرج هنا F وهو باللون الأصفر و مجموعة ألتحكم من جزأين ، الأوامر باللون الأخضر و حالة Carry و نظام العمل M لتحديد أى نوع من Carry هو باللون البرتقالى. مجموعة المخارج بالأرجوانى و تحدد Carry و نتائج المقارنة وهى تهدف لإمكانية التوسع من 4 بت لأكثر من ذلك حتى تكون القيمة المطلوب التعامل معها.

مما سبق نجد أن الحاسب يبنى حول وحدة الحساب والمنطق لكن استخدامها صعبا إلى حد ما، لذا مع تطور التقنيات، تم جمع هذه الوحدة مع كثير من المكونات الأخرى لتكوين المرحلة الأكثر تطورا وهى الميكرو بروسيسور

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
الميكرو بروسيسور :Micro- Processor

حاولت عديد من الشركات تطوير وحدات الحساب والمنطق و إنتاج مايكرو بروسيسور ناجح وهى شركات إنتل INTEL و موتورولا Motorola و روكويل Rockwell و زيلوج Zilog وبالطبع تكساس انسترومنتس TI و كلها أنتجت وحدات ناجحة إلا أن لكل منها سمات خاصة جعلت نجاح بعضها أكثر فى مجالات معينة بينما نجاح الأخريات فى مجالات أخرى و كانت أشهرها الأربع الأول و انضمت لهم شركة AMD لذا سنشرح هنا الأساس ثم الاختلاف و من ثم التطبيقات و سنبدأ بالأشهر وهى 8 بت ثم التطور حتى 64 بت.

للتخلص من تعقيدات الاستخدام كان لابد من تبنى وحدة الحساب والمنطق مع ما يلزم، إذن ما هو ذلك الذى يلزمنا لنستخدمه؟

أولا مجموعة البيانات Data Buss أى تكون واحدة تقبل المدخلات و تخرج النتائج حتى لا نتوه فى أين نذهب بها، إذن ليكن لدينا داخلها مجموعتين من المسجلات Registers الأولى للرقم الأول و الثانية للرقم الثانى. وكلها 8 خط أى 8 بت.
و ماذا عن النتيجة، حسنا إما نضيف ثالث يعقد لنا الأمور عندما نريد استمرار العمليات أو نجعل النتيجة تذهب لأحد المسجلين السابقين فما عدنا نحتاج محتوياتهما على أى حال. حسنا أيهما؟
لا فرق، فقط سنسميه “مراكم” Accumulator لأن النتائج “تتراكم فيه” و بهذا يكون هو الأساس وهو نخصه بأى وظائف لا نحتاج تكرارها فى كل مسجل. كما أنه الأساس فى عملية الطرح أى نطرح منه.

حسنا من أين سنأتى بالبيانات، غالبا إما فى الذاكرة أو خارج الجهاز لكن فى النهاية كلها تمثل “عنوان”، إذن
ثانيا مجموعة العنوان Address Buss و يمكننا فرض الرقم الذى نحتاجه و كان وقتها الحل الأمثل 16 خط أى 65535 خانة و كانت وقتها تبدو كثيرة و تكفى عديد من الاحتياجات. تضع مجموعة العنوان Address Buss العنوان المطلوب على BUSS و تقرأ البيانات من خطوط البيانات.
هل نضع العنوان ثم ننتظر قبل أن نحسب العنوان التالى؟
للأسف لا نستطيع وهذا ببساطة لأن الأمر قد يحتاج حساب عنوان آخر لهذا يجب أن يكون لدينا عداد للبرنامج Program Counter و مسجل للعنوان Address Register للإمساك بالعنوان الحالى ريثما يتم حساب التالى.

ماذا عن الأوامر؟ حسنا 16 أمر ليست بالعدد الوافى، هل من الممكن أن تزيد؟

طبعا يجب أن نزيد الأوامر كما أن مصادر البيانات يجب أيضا أن تزيد، و نواتج الطرح يجب تصحيحها لأن الطرح بالجمع مع العدد المكمل يحتاج إضافة واحد للناتج، أيضا إتاحة إمكانية الانتقال من جزء من البرنامج لجزء آخر عند الضرورة، لهذا يجب أن يكون لدينا وحدة تحكم Control Unit هذه الوحدة تتولى توجيه هذه المكونات بين الوحدات وبعضها كما تتعامل مع العالم الخارجى


من النقاش السابق نضع تصور للشكل النهائى لهذه الوحدة حيث نجد أقصى اليمين مستطيل أخضر “مساكة البيانات” تتولى إدخال البيانات إلى الوحدة أو إخراجها و إمساكها طوال الأمر الخاص بذلك ليتمكن العالم الخارجى من التعامل معها، كما يوجد المراكم Accumulator و المسجل Register و كل منهما يمسك بيان لحين تنفيذ الأمر وتوجه النتيجة إلى المراكم Accumulator و وحدة الحساب والمنطق ALU و أهم هذه الأشياء وحدة التحكم.

بقى مسجل أخير لم نتحدث عنه صراحة ولكن تكلمنا عنه ضمنا، هو فى الواقع مجموعة من المذبذبات الثنائية FF موزعة حيث يجب أن تكون وهى خمسة أو أكثر حسب تصميم الوحدة فمنها مثلا
1- C الزائد أو المحمول Carry وهو يسجل إن كانت عملية الجمع ينتج عنها Carryو الطرح تحتاج اقتراض Borrow واحد أم لا.
2- H نصف زائد Half Carry وهو بين البت 3،4 حيث وهو يسجل إن كانت عملية الجمع ينتج عنها Carryو الطرح تحتاج اقتراض Borrow واحد أم لا و ذلك بين الرقمين المكونان للعدد. فمثلا لو جمعنا 59 + 46 هل نتيجة جمع 9+6 تنتج Carry للعددين 45 أم لا وهذه لاحقا تستخدم فى تصحيح الناتج فى حال كان الرقمين الأصليين أرقام عشرية وليست ثنائية و أمر الجمع أو الطرح خاص بالأرقام العشرية وليست الثنائية.
3- N سالب وهو نسخة من البت رقم 7 وهو يوضح ما إن كان محتوى المراكم Accumulator أو المسجل Register يحتوى رقم سالب أم لا.
4- الزيادة OV وهى اختصار Over Flow وهى هل حدث Carry من بت 6 إلى 7 أم لا أو بعبارة أخرى، هل تغيرت إشارة الرقم نتيجة عملية ما فتحولت بت 7 من واحد لصفر أو العكس؟
5- “صفر” أو Z اختصارا لكلمة Zero وهى يعطى هل نتيجة عملية ما صفر أم لا.
6- “I” وهى رمز Interrupt أو المقاطعة وهى تصبح “واحد” عندما يستجيب المعالج Processor لمقاطعة لمنع المزيد من المقاطعات.
بعض الأوامر تتيح التحكم فى هذه المذبذبات FF و تختلف من تصميم معالج لآخر

كيف يعمل الميكرو؟

توجد بلورة متصلة به وتشغل مذبذب داخلى، هذا المذبذب يولد نبضات مستديمة تتولى تنسيق العمل فى دورة متغيرة فى عدد هذه النبضات حسب نوع الميكرو و لكنها ثابته لكل عائلة، و مع تطور التقنية أصبحت تنفذ تعليمة لكل نبضة.
كيف يعلم ما يحتاج؟ كل شيء مدون فى الذاكرة ROM المسماة ذاكرة الأوامر و تبدأ القصة بوضع الخط على اليسار المسمى “البدء” RESET فى القيمة صفر لفترة زمنية تكفى لأن يستقر جهد التغذية 5 فولت و عندها تعلم وحدة التحكم أن طالما هذا الخط = صفر أن توقف نشاط الوحدة تماما و تضع كل أطرافها الأخرى فى وضع “مقاومة عالية” HI-Z فكل هذه الأطراف ثلاثية الحالة TRI-State.
عند رفع خط “البدء” RESET إلى واحد مرة أخرى، تقرأ من الذاكرة ROM كيف تتعرف على نقطة البدء أو أين أول البرنامج، و قد اختارت شركة إنتل أن تبدأ دوما فى مكان ثابت فى الذاكرة الخارجية لذا يجب أن نضع فيه أمر بالانتقال حيث يوجد البرنامج فعلا أما شركة موتورولا فاختارت أن يقرأ عنوان البدء من مكان ثابت فى الذاكرة الخارجية. لهذا يبدأ بوضع العنوان الثابت فى مسجل العنوان ثم يجعله متاحا لكى يضع ما به على الخط Address Buss أى يخرج من المعاوقة العالية.
عند تنفيذ أمر يتطلب بيان من الخارج، لابد أن تعلم هذه الأشياء سواء كانت ذاكرة أو غيرها، متى ترد، لذا يوجد خط بالغ الأهمية يسمى “تزامن” و يرمز له بالرمز اللاتينى  وهو يقول للعالم الخارجى أنا مستعد الآن. ثم تراقب وحدة التحكم خط "انتظار HOLD " والذى تتحكم فيه وحدات الذاكرة و العالم الخارجى، و عندما تتاح بيانات الذاكرة على خط البيانات (ربما كانت أقل سرعة من البروسيسور) بأن ينزل خط "انتظار HOLD " إلى صفر، توجه وحدة التحكم البيان من خط البيانات Data Buss إلى محلل الأوامر ثم ترفع الخط مشغول Busyحتى لا تتفاعل معها أشياء أخرى ثم يجد محلل الأوامر هذا الأمر فى ذاكرة الأوامر والتى تدله ماذا يفعل لاحقا خطوة بخطوة حتى ينتهى من تنفيذ الأمر.

إذا كانت الوحدة متصلة بأدوات خارجية مثل لوحة مفاتيح أو شاشة أو قرص مغناطيسى الخ فيجب أن تعلم هذه الوحدات متى يطلب منها أن تجيب أو تتعامل مع البيانات، لهذا يوجد خط يسمى “ذاكرة / وسائط” Memory / I/O و كلمة منها عليها خط المكاملة أو “العكس” Complement فمثلا هنا الخط “فوق” كلمة I/O أى أن الخط يكون واحد طالما تتعامل الوحدة مع البرنامج (لاحظ أننى قلت البرنامج ولم أقل الذاكرة) لأنه بالرغم من أن الكلمة تقول “ذاكرة” إلا أنه لو كان ينفذ عمليات حسابية داخلية لا علاقة لها بالذاكرة إلا أنه سيبقى الخط كما هو و عندما يبدأ تنفيذ أمر متعلق بالوسائط المحيطة، يضع العنوان ويضع البيان و أخيرا يخفض خط “ذاكرة / وسائط” Memory / I/O قبل نبضة التزامن  مباشرة حتى لا تتعامل الذاكرة و تنفذ الوسائط ما هو مطلوب منها.

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
المقاطعة Interrupt :

ماذا يحدث عندما يطلب جهاز ما التعامل مع الميكرو ؟ كأن يكون لديه معلومة أو يحتاج معلومة مثلا عندما يضغط المستخدم على لوحة المفاتيح أو يريد كارت الفاكس المعلومات لكى يرسلها؟ لابد من إيجاد وسيلة تعارف وتخاطب بينهما.
الحل الأول أن يقوم الميكرو بكل العمل. عندما يجد الوقت، “يتحسس” الوحدات باحثا عمن يطلب خدمة فيؤديها له. هذه الطريقة تسمى “الاستجواب” Polling. كما وجدنا دوما لكل حل ميزة حسنة و أخرى سيئة. فالحسنة هنا قلة المكونات و بساطة الدائرة. ما على البروسيسور (المعالج) سوى وضع عنوان الجهاز و قراءة خط البيانات سيعلم إن كان يطلب خدمة أم لا ، ثم التالى فالتالى الخ.
أما العيب الأول فهو انعدام العدالة فى الخدمة مما يشترط حسن توزيع الأجهزة، فلو تطلب الجهاز الأول خدمة طويلة نتيجة بطء ما فى الاستجابة أو غيره من الأسباب، سيتعطل البرنامج الأساسى بالتبعية و تتعطل خدمة باقى الأجهزة.
العيب الثانى هو الأولوية المطلقة للجهاز التالى، كثير من المراجع تفترض للبساطة أن الأولوية المطلقة للجهاز الأول ولكن ما أن تنتهى خدمته و يبدأ فى التعامل مع التالى ينعدم الإحساس بالأول و من ثم الاستجابة له.

كثير من الحالات تتطلب حفظ بيانات محددة فى ذاكرة مدعومة بحيث لا تفقد بياناتها عند انقطاع التيار ولهذا فعند انقطاع التيار يجب على البروسيسور (المعالج) أن يترك ما يقوم به و يحفظ تلك البيانات فورا قبل التوقف التام، وهذا ببساطة مستحيل فى النظام السابق.

لعلاج هذه العيوب، ابتكر نظام المقاطعة Interrupt و الذى أصبح تقليدا قياسيا قى كل ميكرو. ببساطة يخصص طرف دخول أو أكثر يكون عادة على مستوى “واحد” (HI) و عندما يصبح صفرا (LO) ينتبه المعالج أو البروسيسور لهذا التغيير و يستجيب له ، وقد يستجيب لتغير المستوى و يسمى Level Trigger حيث يجب أن يظل فى هذا المستوى حتى يستجاب له أو يستجيب للإنتقال و يسمى Edge Trigger و يستجيب حتى لو عاد للمستوى الأول قبل الإستجابة له.
بديهيا أنه قبل الاستجابة كان ينفذ جزء ما فى البرنامج الأصلى، و عندما ينتهى من خدمة المقاطعة يجب أن يعود حيثما كان ليستأنف العمل، ليست هذه رفاهية ولكنها ضرورة لأنه لا يمكن بدء البرنامج من أوله إلا عند البدء فقط و مع الوقت تتغير نتائج وتعدل حالات فلا يصح أن نلغى كل ما سبق. تخيل مثلا أنك تكتب وثيقة ما وفى منتصفها تريد فتح مشغل الأقراص أو توصل ذاكرة فلاش فيتوقف الحاسب و يبدأ من جديد فى تحميل الويندوز!!
لهذا يجب أن يحفظ المعالج محتوياته فى مكان ما بالذاكرة، ثم يحمل عنوان خدمة الجهاز مسبب المقاطعة و يبدأ هناك. سيكون من الصعب معرفة أين وضعنا عنوان و محتويات العمل السابق لذلك فأسهل طريقة هى تخصيص مسجل يسمى مسجل “الرصة” Stack Pointer/ Stack Register حيث يكون له أمر برمجى خاص بتحميله بالجزء الذى نود حفظ هذه البيانات به، و يقوم المعالج آليا بإدارة آلياته، فعند حدوث مقاطعة، يبدأ المعالج فى حفظ البيانات.
مهلا وماذا لو فى منتصف الحفظ أتى أمر مقاطعة ثانى؟!! ألن ترتبك الأمور و نحفظ بيانات فى قلب بيانات أخرى؟!!
بالتأكيد هذا عين الصواب، لذا يجب أن يحتوى أيضا على مذبذب متعدد يسمى “علم أو راية” Flag وهو إما واحد SET أو صفر RESET و عندما يأتى أمر المقاطعة، يصبح واحد SET وهو يمنع أى استجابة لاحقة و يدخل المعالجة فى دورة مغلقة يحفظ فيها بيانات كل المسجلات و الرايات بالترتيب التنازلى حيث يضع بيان ثم ينقص واحد ثم البيان التالى و ينقص واحد وهكذا و عندما يتم الحفظ وهو ما يسمى عملية الدفع فى الرصة PUSH into Stack يبدأ فى قراءة العنوان وهو مختلف حسب الطراز و سنتعرض له لاحقا إن شاء الله.
ينتقل التنفيذ لخدمة الجهاز المقاطع و للمبرمج كافة الحرية فى أن يتيح مزيدا من المقاطعة أثناء خدمة هذا الجهاز أو يبقيها مقفلة لحين انتهاء الخدمة. لهذا فبرنامج الخدمة يجب أن ينتهى بأمر يسمى “العودة من المقاطعة” RTI, Return from Interrupt وهذا الأمر يجعل المعالج يقرأ ما سبق كتابته فى الرصة بالترتيب العكسى “تذكر الذاكرة Last In First Out آخر الداخلين أول الخارجين”؟ و هذا يعيد المعالج لسابق حالته قبل المقاطعة مباشرة و معظم طرز الميكرو تعيد هنا إتاحة المقاطعة آليا.
لكى يحدد المعالج أين يذهب لخدمة الجهاز المقاطع هناك عدة طرق و منها خصصت شركة إنتل 256 مكان للقراءة فى الصفحة الأولى من الذاكرة و كل منها يعطى عنوان.
أما شركة موتورولا فتبنت نظاما مختلفا يسمى “خريطة الذاكرة” Memory Mapped I/O حيث تكون أماكن بعينها تتعامل مع الأجهزة بدلا من الذاكرة أى أن الذاكرة تمتد لنطاق ما والباقى للأجهزة، هذا جعل التعامل مع الأجهزة أسهل فضلا عن عدم تقيده بالعدد 256 جهاز مما جعل عائلة MC6800 منتشرة فى التحكم الصناعى بينما عائلة إنتل فى الحاسبات الشخصية.

بديهى أننا افتقدنا المقاطعة ذات الأولوية المطلقة مثل حالة انقطاع التيار أو مثيلاتها، لذا أضيف خط آخر يسمى NMI اختصارا لكلمات Non Maskable Interrupt أو المقاطعة الغير قابلة للحجب وهو خط يسبب مقاطعة للمعالج Processor مهما كانت الظروف. هذه المقاطعة يستجاب لها فور الإنتهاء من الخطوة الحالية .
دوما تكون الاستجابة للمؤثرات الخارجية مثل المقاطعة بعد الانتهاء من الأمر قيد التنفيذ حاليا أى فى خلال بضع نبضات فقط.

سبق أن ذكرنا أن المعالج سيتفحص الأجهزة بالتتابع، ليس هذا هو الوقت الوحيد الذى يخضع فيه المعالج لسمة التتابع، فكثيرا من الحالات تجد نفسك كمبرمج تريد فحص بيانات متتابعة، كل جدول عبارة عن بيانات متتابعة، لذا يجب أن نجد حلا يسهل تتابع القراءة والكتابة، تخيل أنك فى مكان ما فى وسط الذاكرة و تريد أن تقرأ سبعة خانات متتالية لأن بها الثوانى والدقائق والساعات و يوم الأسبوع و يوم الشهر و العام، و تريد تحديث هذا كل ثانية ستبنى عداد من 1 إلى 7 ثم تحفظ أين أنت الآن ثم تحدد بداية الجدول ثم تضيف له واحد و تخصم واحد من السبعة ثم تتأكد أن العملية لم تنتهى (السبعة لم تصل للصفر بعد) ثم تبدأ القراءة ولا تنسى أن تأخذ الأمر من حيث كنت بعيدا عن الجدول… قبل أن تبحث عن أسبرين لتعيد قراءة السطور السابقة، هناك حل بسيط وسهل.
تم وضع مسجل آخر سمى مسجل الدليل أو المؤشر Index Register وهو بديل لمسجل العنوان. ببساطة نضع به بداية الجدول بأمر واحد ثم نشير إليه بالأوامر اقرأ "دليل ، 1 فى المسجل الأساسى " MOV X,1 A حيث يتولى المعالج إضافة واحد لمحتوى المسجل و النتيجة فقط تذهب لخط العنوان بينما يظل المسجل لا يتغير و محتوى الذاكرة المطلوب سيوضع آليا فى المراكم A و تكرر الأمر 7 مرات. و هذا أيضا يتيح لك نقل مجموعات كبيرة من البيانات من مكان ما بالذاكرة لآخر ما فى حالة العرض بالشاشة أو إرسال فاكس الخ.

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
مقارنة بين أشهر ثلاث وحدات:

أشهر ثلاث وحدات هى إنتل 8080 و منافستها الشهيرة من زيلوج Zilog Z80 و وحدة موتورولا MC6800 ووحدة روكويل MC6502 حيث كل منها احتكرت قطاع كبير من السوق.

تبنت إنتل بنية تحتوى مجوعة من المسجلات العاملة ذات 8 خانات و التى يمكن جمع أغلبها فى صورة زوج من 16 بت إلا أن الأوامر الخاصة بالتعامل مع 16 بت كانت قاصرة وذلك للتقنية المتاحة فى ذلك الوقت، واحتوت على أوامر حسابية للأرقام العشرية.
تعامل هذا المعالج مع المقاطعة و الأجهزة المحيطة جعلها فى إطار محدد، فكانت تستغل كل الجزء الأساسى من الذاكرة و المسمى الصفحة “صفر” لأنها تحتاج عنوان من 8 خطوط فقط للتعامل معها مما يجعلها أسرع.
قدمت شركة زيلوج Z80 وهى عبارة عن طاقمين من المسجلات مماثل لما تحتويه 8080 و أضافت أمرين الأول لتفعيل A,H والثانى لباقى المسجلات. فيما عدا ذلك كانت نفس البنية و أضافت تحسينات منها التخلص من تعقيدات الساعة Clock و توليد خط التزامن  اللازم لتزامن الذاكرة وباقى المعدات، مما جعلها الاختيار الأمثل للحاسب الشخصى الذى يستخدم التلفاز كشاشة فى أول أجهزة للمستخدم تحت 100 دولار أمريكى، وأصبحت Z80 هى محور كل الحاسبات الشخصية حتى طورت إنتل منتجاتها و اعتمدت IBM منتجها فى أول حاسب لها، ولكن لم ينتشر كلاهما كثيرا فى الصناعة

تبنت شركة موتورولا خطا آخر حيث اكتفت بزوج من المراكمات A,B وكان A هو الأساسى و استخدمت الذاكرة الخارجية للتعامل مع البيانات. أحسنت استغلال الصفحة “صفر” ووظفت عديد من الأوامر للتعامل مع هذا الجزء الهام من الذاكرة.
نظرت الشركة للأجهزة كبديل للذاكرة مما يسَّر التعامل معها و أتاح التعامل مع أى عدد يريد المصمم التعامل معه بافتراض أن السرعة ليست عائقا، فكثير من الأجهزة قد تحتاج لثوانى أو دقائق لتغير من حالتها، لذا اشتهرت فى المجال الصناعى بكثرة.

حاول مصمم بشركة موتورولا إنتاج معالج أقل كلفة ولم يجد ترحيبا من الشركة فاستقل و أنتج 6500 والتى كانت أسرع و أقل كلفة وعالجت بعض مشاكل 6800 مما جعلها أنسب لتطبيقات كثيرة و اعتمدتها شركة أبل فى حاسبها الشهير وكذا العديد من شركات الألعاب مثل أتارى و TurboGrafx-16

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
الحافلات و التحكم فيها Busses , drivers and transceivers :

يطلق إسم حافلة من معناه وهى تحتوي كثير من الأفراد المتماثلة – يتشاركون بعض أو كل المسار و كل منهم له مهمة مختلفة. لذا فالحافلة البشرية بها بشر متماثلون و مشتركون فى جزء من المسار أو كله و لكل منهم مهمة ما أو عمل ما وهى تنقلهم عبر هذا المسار.
يطلق نفس التعبير على خطوط التغذية فتسمى Buss Bar لكونها من شرائط نحاسية Bars أو قضبان تنقل التيار الكهربى و كل بار منها له وجه من الثلاث أوجه الناقلة للتيار.
من دراستنا للميكرو السابق ثبت أن لدينا ثلاث مجموعات رئيسية
مجموعة العنوان Address Buss , و مجموعة البيانات Data Buss و مجموعة التحكم Control Buss وهذه المجموعات تذهب لكل الأجهزة المحيطة Peripheral devices و الذواكر و خلافه سواء للتعامل فيما بينها أو للتوافق مع متطلبات الأجهزة خارج الحاسب ، و الأوامر تحدد من منهم يعطى بيانات و من يأخذ ومتى وقد يبدأ أحدهم مقاطعة لطلب الخدمه الخ.
كما درسنا أول المنهج أن كل متكاملة مقيدة بما يعرف بالتشعب Fan Out أى كل مخرج يستطيع أن يغذى كذا مدخل ، فإن كثر العدد سواء عدد فعلى أو وحدات تتطلب تيار غير قياسى، نحتاج معززات Drivers كما سبق الشرح.
ليس منطقيا أن نأتى بثمانى وحدات أى 2 متكاملة لفعل هذا، لهذا صممت الشركات المتكاملات 74xx240 74xx241 وهما زوجين من أربع معززات لتكوين إما ثمانية خطوط لحافلة من 8 لجهة واحدة يمكن تفعيلها أو إيقافها أو جمع الزوجين معا لتكوين أربعة مسارات مزدوجة الإتجاه

لتسهيل عمل هذا نلاحظ أن مخرج كل واحدة بجوار مدخل المعاكسة فى الإتجاه ليسهل وصل طرفى 2،3 معا و 4،5 معا الخ حتى 15،16 معا و 17،18 معا و بالتالى يكون طرفى 1،19 هما لإتاحة انتقال البيانات من هذه الجهة لتلك أو العكس.
إن لم تكن الخيارات مطلوبة فلدينا 74xx242 74xx243 حيث بها التوصيلات داخلية و من ثم تقلل من عدد الأطراف و توفر فى مساحة البوردة – 14 طرف بدلا من 20

أما لو كان المطلوب هو التحكم فى 8 بت معا فيمكن استخدام DM74LS245 فتجد لها 8 خطوط و 2 تحكم. طرف رقم 1 مسمى Dir اختصارا لكلمة Direction حيث بها تتحكم فى اتجاه البيانات، لو لوجيك1 أى+5فولت يكون الإتجاه من A1:A8 إلى B1:B8 ولو كان صفر يكون الإتجاه بالعكس من B1:B8 إلى A1:A8
أما الطرف 19 فيسمى Enable أى يجب أن يكون صفرا ليتحقق ما سبق أما لو كان 1 فتتوقف تماما و تصير معزولة أى Tri-State أو كأنها مرفوعة من مكانها لتتيح لغيرها أن تتعامل مع الباص

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]الحاسب الآلى :

تطورت تقنيات صناعة المعالجات فمما سبق ذو سرعة 2 مليون نبضة و تنفيذ نصف مليون أمر إلى عدة مليارات الآن، كما تطورت التركيبات الداخلية مما أتاح لها سرعات أعلى بكثير فى التنفيذ.

تتركب الحاسبات أساسا من وحدة معالجة مركزية CPU وهى قد تكون ميكرو بروسيسور أو من أى تقنية أعلى سرعة حينما يتاح ذلك، فقد أنتجت العديد من الشركات وحدات مختصرة بهدف السرعة القصوى و إمكانية زيادة عرض الكلمة للحدود الغير تقليدية فقد كانت الحاسبات 64 بت معروفة منذ زمن بعيد فى المعاهد العلمية والجهات الحكومية قبل ظهورها فى نطاق المستخدم المنزلى ، و يجب أن نتأكد دوما أن هناك على الأقل فارق ×10 بين أفضل و أسرع حاسب منزلى و تلك الحاسبات العلمية الفائقة السرعة وكثير منها يعتمد تقنية المعالجات المتعددة والتى تتيح التعامل الأسرع و تناول مصادر معلوماتية متعددة آنيا فمازالت الأجهزة المنزلية تتعامل مع مستخدم واحد من مصدر معلوماتى واحد حتى و إن بدا لنا خلاف ذلك، فهذه الخدعة تتم بمبدأ الشرائح الزمنية حيث يتعامل مع كل مستخدم فى شريحة زمنية مختلفة و كل مصدر معلوماتى فى شريحة زمنية أيضا مختلفة.

تحتاج الحاسبات لكى تعمل أن تتعرف على المكونات المتاحة لها مثل لوحة مفاتيح وشاشة و قرص صلب الخ. كيفية أداء هذا البحث توجد فى ذاكرة قراءة فقط ROM ولكن مع التطور استخدمت ذاكرة فلاش قابلة لإعادة البرمجة لتحديث هذا البرنامج والذى يسمى BIOS وهو اختصار Basic Input Output System أى نظام المداخل والمخارج الأساسية .

نتيجة هذا التعرف و العناصر اللازمة لاستكماله من عناوين و قيم و أيضا الوقت والتاريخ يتم حفظها فى ذاكرة Static RAM من نوع خاص مدعومة ببطارية لتحفظها عند انقطاع التيار تسمى CMOS وهى اسم التقنية المستخدمة.
من هذه الأشياء التى يحملها كيف وأين تبدأ، فإن كانت إشارة لنظام التشغيل ويندوز مثلا تبدأ فى البحث عن ملف نصى على القرص الصلب به أين يجدها و اسم الملف الذى تبدأ به. تقوم بالتحميل فى الذاكرة الأساسية و تشغيل وسائل التعامل مع الأجهزة الموجودة.

نظام التشغيل هو ما يقوم بالعمل كله من فتح ملفات و محو غيرها ورسم واجهات البرامج و التأكد من سلامتها وعدم تعارض البرامج مع الموجودات الخ أما البرامج التى يقوم المستخدم بتشغيلها فعليها فقط أن تقوم بما صنعت من أجله بينما رسم واجهة البرنامج و عرض النتائج الخ من مهام نظام التشغيل.
أشهر نظم التشغيل هى دوس ويندوز و العائلة (يونكس – لينكس – زينكس) وهى عائلة متقاربة جدا بعضها مجانى و الآخر مدفوع. بعضها مستخدم وحيد و الآخر متعدد. وهذا يعنى أن المستخدم الوحيد أن يعمل برنامج ما ولا يمكن أن نبدأ غيره قبل غلق الأول. أما المتعدد فيقوم نظام التشغيل بمنح كل برنامج شريحة زمنية ليمارس فيها مهامه ثم يوقفة ليعطى الثانى فالثالث وهكذا ثم تكرر الدورة. و هناك بعض الحيل تجعل برنامج ما لا يسمح للويندوز أن يبدل لغيره فيبدو كأن النظام توقف.
نظام دوس مريح فى كونه يسمح للمبرمج أن يتعامل مع الآلة مباشرة لذلك كثيرا ما يفضل فى التعامل مع الماكينات ولذا قد طور من قبل بعض الشركات و تخلصوا من أكبر مشاكلة وهى الحجم المقيد بذاكرة 64 ك و الإسم القصير من 8 حرف و 3 إمتداد و مازالت بعض الشركات تطور نظام دوس متقدم إلى جانب مترجم لويندوز 7
http://powerbasic.com

نظام ويندوز حتى ويندوز 95 كان أيضا يتيح بعض التحكم ولذا نجده فى بعض الألات لكن النظم التالية فرضت وجود برنامج قيادة Driver ليتيح التعامل مع الأجهزة لذا مالم تكن شركة كبيرة متخصصة فلن يتيسر لها ذلك و يجب أن يتعامل المبرمج مع الأجهزة المتاحة مثل منفذ الطابعة و التسلسلى بأنواعة. يعيب هذا النظام السرعة فى تطويره و إصدار إصدارات جديدة دون التحقق من جودة النظام الحالى فمثلا بعد 3.11 ظهر ويندوز 92 والذى لم يكن جيدا جدا ثم صدر ويندوز 95 و بعده الإصدار الثانى ثم صدر الميلينيوم والذى تعددت الشكاوى منه ثم XP و بعده تكررت القصة كثيرا

نظام يونكس هو نظام متخصص و أكثر صلابة و تحمل من الويندوز لعدم التسرع فى اصدار ترقيات بلا داعى و التحقق من اختبار اصداراته قبل طرحه وهو المفضل فى البنوك و المؤسسات و غيرها خاصة وأن هذا النظام نشأ منذ البداية داعما للشبكات و الحاسبات “الخادم” Server
بدات بعض التقنيات الخاصة بالحاسبات العملاقة فى “التسرب” للحاسبات الشخصية فوضع أكثر من ALU أو بروسيسور إن شئت داخل ذات المتكاملة وسميت Core2 الخ و اكثر وهذا يوفر إمكانية زيادة السرعة لأن التوجه لسرعات أكبر من 3 جيجا لم يعد حاليا مجديا فمازال الباص 800 ميجا و من الصعب زيادة سرعته و كذلك الذاكرة.
جدير بالذكر أن هذا الإزدواج لا يتشارك الأوامر ولكنه يتشارك المهام فلو كان الأمر الأول ضع الرقم “ب” فى الأكيوميلاتور و الأمر الثانى أضف عليه الرقم"ج" فلن نحصل على نتيجة لو الأول ذهب لوحدة و الثانى لأخرى لكن لو اختص كل منهما ببرنامج تحت التنفيذ و ما أكثر المهام التى تنفذ فى خلفية نظم التشغيل، سنجد أن فعالية التنفيذ ستكون أكبر.
[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
الفرق بين بين الميكروبروسيسور و الميكرو كونتروللر و PLC

لاحظت فى الكثير من الحالات أن البعض لا يفرق بين الميكروبروسيسور و الميكرو كونتروللر و الجهاز المسمى PLC و ربما يكون من المفيد توضيح هذه الفروق الآن
الأول ميكروبروسيسور up وهو الجزء الأساسى فى الحاسبات و لا يقوم بشيء بدون أجزاء أخرى مساعدة ولا يحتوى غالبا على ذاكرة للمستخدم و تكون الذاكرة داخله فقط لاستخدامه الذاتى فمثلا لا نستطيع أن نستخدم أمرا لحفظ بيانات داخل ألكاش فى البينتيوم وهو يحتوى على وحدة تحكم تنفذ أوامر البرنامج ووحدة حساب و منطق لتنفيذ العمليات الحسابية و العمليات المنطقية (التى ينتج عنها إما صح أو خطأ مثل هل س اكبر من ص ؟ - كما يحتوى على مجموعة من المسجلات Registers و المراكمات Accumulators و الفرق بينهما أن نتيجة عملية حسابية أو منطقية يمكن أن تذهب للأخير فقط مثلا نجمع محتوى مسجل “أ” مع مسجل “ب” يجب أن تذهب النتيجة لمراكم و ليس إلى أى منها
بالمناسبة ليس هناك سبب أو فرق فقط لو وصل بحيث يقبل نتائج من وحدة الحساب سمى Accumulators
استخدام الميكروبروسيسور يتطلب دوائر تحليل شفرات Decoders حتى تتمكن من التعامل مع أى شيء خارجى فضلا عن أن سرعته الفائقة تجعل تصميم بوردات له ليست ميسرة لغير المحترف، لذا فهو صعب فى استخدامه لكن طاقاته هائلة مثل المستخدم فى حاسبك الحالى .
كم منا يمكنه أن يصنع Mother Board مثلا .

الثانى وهو الميكرو كونتروللر نشأ عندما تطور الميكروبروسيسور من 8 بت إلى 16 وبدأت السرعة فى التزايد وبدا البعض يتساءل أنا لا احتاج كل هذه القدرة و أفضل البساطة والسرعة المحدودة كما فى الماكينات أو التخصص كما فى كارت الشاشة أو الكى بورد و غيره، لذا تحور إلى ميكروبروسيسور مضاف إليه ذاكرة للبرنامج و أخرى للبيانات و بعضها قد يحتفظ بالبيانات عند انقطاع التيار عنه كما يحتوى على دوائر لتوفير أطراف يستخدمها المبرمج للتعامل المباشر مع العالم الخارجى مثلا باستخدام ترانزيستور و ريلاى لتشغيل أشياء مباشرة وهو لذلك أسهل كثيرا جدا فى الاستخدام ولكن طاقته أقل كثيرا من الأول من حيث السرعة والإمكانات والهدف السهولة و قضاء المصالح المحدودة فمثلا سرعته تصل إلى 40 ميجا فقط بدلا من 3 جيجا و هذا يعطى ميزة كبيرة حيث يمكن أن نجرب مشاريع على بوردة تجميع Bread Board و تنفيذها بسهولة بعد ذلك.

يجب أن نؤكد هنا على حقيقة أن أطراف الميكرو كونتروللر المعدة للتعامل مع العالم الخارجى يمكن تغييرها من إدخال (أى تقرأ الجهد الموجود عليها أو السويتش مفتوح أو مغلق) إلى إخراج أى تعطى جهد إما صفر أو 5 فولت بأمر برمجى بسيط
أيضا تقليل عدد الأوامر المستخدمة يجعل من السهل على الجميع برمجته على خلاف الميكروبروسيسور وهذا لا يعد نقصا أو عيبا فهو غير مصمم لمعالجة الرسومات والصور والألعاب فقط التحكم فى الآلات و خلافه.

يجب أيضا أن نؤكد أن بعض خواص الميكرو بروسيسور قد لا تتوافر للميكرو كونتروللر بعضها أو كلها مثل NMI أو المقاطعة الغير محجوبة و بعضها فى الميكرو كونتروللر قد لا تتواجد فى الميكرو بروسيسور مثل المؤقتات Timers بأنواعها و منها “كلب الحراسة” Watch Dog و تعديل عرض النبضة PWM و المنافذ التسلسلية و المحول تماثلى رقمى.
أيضا حجم الذاكرة المتاحة للميكرو بروسيسور لا نهائى لكن للميكرو كونتروللر فالداخلية منها محدودة و الخارجية ليست متاحة لكافة الطرازات.

أيضا فارق هام جدا أن برنامج الميكرو كونترولللر يمكن حمايته باستخدام أوامر برمجية معينه أثناء نقل البرنامج إليه و بعدها لا يمكن قراءته ولا تعديله – فقط استخدامه كما هو أو محوه كاملا لإعادة البرمجة و فارق آخر أنك لو تريد بضع مئات الآلاف منه يمكنك توفير زمن البرمجة و ارسال نموذج مع البرنامج للشركة المنتجة فتعطى لك وحدات مبرمجة على ذاكرة ROM بدلا من EEPROM وهى أرخص بكثير ولكن بالطبع غير قابلة للمحو و إعادة البرمجة.

الثالث PLC وهى اختصار Programmable Logic Controller عبارة عن ميكرو كونتروللر مضافا إليه ما يلزم من ترانزستورات و ريلاى أو ثايرستورات الخ للتحكم فى الأجهزة المحيطة و قراءة بيانات رقمية أو تناظرية و تحويلها لرقمية.
نظرا لأن الأخير عبارة عن ميكرو كونتروللر بكامل دوائره لذا يجب أن نحدد مسبقا كم طرف تحول إلى مداخل للقياس و كم يبقى مخارج للتحكم فمثلا لو استخدمنا الوحدة 89C52 فهى تحتوى 32 طرف دخول / خروج
هل نستخدم أطراف الاتصال التسلسلى RS232 ؟ هل نستخدم طرف المقاطعة لهذا الهدف ؟ هل نستخدم العدادات الداخلية ؟ ثم كم من الباقى نجعله دخول و كم نجعله تحكم (خروج)
هنا ليس من الضرورى أن أقسم الكل (32) بين دخول وخروج – اللعبة هنا اقتصاد
إذن يمكن عمل وحدة 2 دخول و 5 خروج قليلة التكلفة و نتدرج فى الطرازات حسب الحاجة و التكلفة .
لهذا يكون من الصعب على المستخدم أن يبرمج هذه الوحدة خاصة لا يتوقع منه أن يكون مبرمجا من الأصل - لذا تصنع الشركات التى تنتج وحدات PLC برنامجا ذو طبيعة رسومية بها أشكال للمفاتيح و الحساسات و الخريطة التى يريد المستخدم أن تكون خطوات التنفيذ عليها و به أشكال لوضع سؤال مثل هل السويتش مفتوح؟ والإجابة نعم/لا - و هذا البرنامج يولد الشفرات الخاصة لبرمجة وحدة PLC و يقوم ببرمجتها أيضا من خلال كابل و بناء على طراز الوحدة PLC يحذرك إن حاولت استخدام عدد أكبر من المخصص كمدخل أو مخرج فى هذا الطراز
مثلا يمكن أن استخدم الوحدة 89C52 لعمل عدة موديلات من خمسة مداخل و خمسة مخارج ألى 15 من كل و تتراوح فى السعر حسب تجهيز كل منها.
الآن بعد أن عرفنا الميكرو بروسيسور و منه الحاسب الآلى و الميكرو كونتروللر لنأخذ فكرة عن البرمجة ولو مختصرة و سريعة.

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
البنيات

مما سبق نجد أن القلب هو وحدة المعالجة المركزية ALU وهى منسق الحركة للميكرو لذا يجب أن يتلقى على مداخلة مجموعة من الإشارات “احاد و أصفار” لتقوم بما يقابلها من أمر.
الآن لدى برنامج و لدى أيضا بيانات يجب معالجتها، أين نحتفظ بكل منها؟ مهلا لا تتسرع بذكر الذواكر السابقة فقد بدأ الحاسب قبل اختراعها جميعا لذا كانت البنية الأولية معروفة باسم :
هارفارد Harvard architecture
وفيها يتم الفصل بين ما يستخدم للبرنامج و ما يستخدم للبيانات شكلا و موضوعا حيث بدأت بكون البرنامج فى شريط مثقب بينما البيانات فى ريلايات داخل الوحدة ثم تطورت و بقى النظام و من أشهر هذه الطرق الآن كل الميكرو كونتروللر الآن حيث البرنامج يحفظ فى ذاكرة EEPROM بينما البيانات فى رام وهذا يجعل الميكرو غير قادر على أن يبرمج نفسه بمعنى القراءة من قرص مدمج و الحفظ فى الذاكرة EEPROM و للتغلب على ذلك اضطرت الشركات لتخصيص برنامج خاص فى جزء ما يسمى Boot Loader ليمكن من البرمجة التسلسلية.
إلا أن هذا النسق يتيح سرعة أعلى لكون الميكرو قادر على قراءة كود و بيان فى نفس الوقت.

النسق الآخر يعرف باسم :
فون نيومان Von Neumann architecture :

يتميز هذا النسق بأن البرنامج و الداتا فى نفس الذاكرة لذا يمكن للبرنامج أن يعدل البيانات كما يمكنه أن يعدل الأوامر وهذا يجعل التحميل الذاتى من قرص مدمج أو غيره للذاكرة ممكننا إلا أنه يتيح تعديل البرنامج الأصلى وهو ما أتاح انتاج الفيروسات و البرامج المشابهة.

الكاش:
ما معنى كلمة "كاش"
هى ببساطة شيء متوفر “تحت اليد” للإستخدام الفورى السريع و أوضع معنى لها المال الكاش.
عندما تطور البروسيسور ، زادت سرعته و مازالت أسرع من الذاكرة ولا ننسى مما سبق أن الذاكرة الأسرع أغلى ثمنا.
أيضا هنا خطر آخر وهو أن الإشارة تخرج من البروسيسور إلى الباص الناقل ثم الذاكرة و بالعكس وهذا معضلة تقنية خاصة فى الوصول لسرعات عالية مثل 3 جيجا حيث طول الموجة 10 سم أى أن كل 2.5 سم من طول التراك تمثل هوائى ربع طول الموجة لذا فرق صغير فى أطوال المسارات يجعل بت تصل قبل الأخرى مما يسبب خطأ قراءة. لذا لا يخفى أن سرعة الباص أقل من البروسيسور.
لذا لا يمكن أن نجعل الذاكرة كلها أسرع ما يكون ، فطور الخبراء اسلوب وضع ذاكرة سريعة جدا تقارب سرعة البروسيسور بجواره داخل المتكاملة كجزء من بنيته عندما يكون هناك متسع من الوقت يملأها من الذاكرة الخارجية ثم يعود ليعمل منها أسرع .
مما سبق علمنا أن نظام التشغيل يكون مهيمنا على كل التصرفات لذلك لو أردت أن تحتفظ ببيانات كثيرة متعددة ستضطر للطلب من نظام التشغيل كل مرة فتح الملف و اعطائك منه كذا و إبقاؤه أو غلقة لذا تلجأ بعض البرامج لتخصيص جزء من الذاكرة العامة للجهاز لإستخدامها ككاش محلى أو جزء من الهارد.
لو أغلق هذا البرنامج دون أن يحرر هذا الكاش لن يتحرر هذا الكاش إلا عند بدء التشغيل التالى ولو كانت على الهارد سيتآكل ما به من مساحة خالية دون استخدام لذا صممت بعض البرامج تسمى كاش كلينر للتخلص من هذا الموقف
الملفات موضوعنا القادم إن شاء الله

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
أنواع الملفات فى الحاسب:

تتوقف أنواع الملفات على نوع نظام التشغيل و على البرنامج الذى يقوم بتشغيله ما عدا الملف النصى و الذى سنتحدث عنه إن شاء الله المرة القادمة.
أنظمة التشغيل تتولى تقسيم وسائط التخزين كالهارد ديسك أو الإسطوانات أو الفلاشات الخارجية الخ إلى أجزاء ليتمكن من أن يعطى لكل جزء رقم أو عنوان أو كود تعريفى خاص به. تماما كالكتاب لا نستطيع الكتابة فيه و استخدامه بدون فهرست وهو ببساطة جدول يقول الموضوع الفلانى فى صفحة كذا إلى صفحة كذا.
لكن الحاسب رقمى ولا يهمه موضوع كذا فهو لا “يقرأ” بمعنى الفهم البشرى، هو فقط يستدعى المعلومة من مكانها لذا فالفهرست مقسم بالعكس ، نقسم مثلا هذا الشيء (هارد أو فلوبى أو سى دى أو فلاش) إلى كذا مليون قسم ، وقبل أن تقول لماذا ليس أكثر هو العدد الأقصى الذى يستطيع النظام التعامل معه.
لذا لو استخدمت هارد 240 جيجا مثلا و عملت له فورمات ستجد أن القطعة Sector مثلا 128ك ثم قسمته إلى جزأين C,D و عملت فورمات مرة أخرى ستجد القسم أصبح النصف.
هذا يعنى أن القسم أصبح 64ك وهذا يعنى أن النظام لا يستطيع التعامل بأقل من 64ك، فهذه هى القطعة التى يستطيع أن يضع لها عنوان ومن ثم يتعرف عليها. إن فتحت ملف و أعطيته إسم و لم تكتب فيه حرفا واحدا سيشغل من وحدة التخزين 64ك و سيظل هكذا حتى تضيف له بيانات تساوى 64ك (بالضبط 65536 بايت) و بعدها لو أضفت حرف سيصبح الضعف أى 128ك.
قبل أن تعترض فهناك شيء إسمه حجم الملف و شيء آخر إسمه ما يشغله من الهارد ولو أردت الإضطلاع على هذه المعلومات انقر يالزر الأيمن على ملف و اختار خواصة مثلا هذا الملف 1.3ك و يشغل 32ك على الهارد

إن لم تسعفك الويندوز استخدم البرنامج الرائع توتال كوماندر.
http://www.ghisler.com
أيضا بعض أنظمة التشغيل مثل زينكس تستطيع استغلال هذا الفراغ و كان هذا مجديا وقت أن كانت وسائط التخزين مكلفة و سعاتها محدودة أما الآن …
هذه البيانات مع بيانات أخرى مثل اسم الملف و تاريخ إنشاؤه و تاريخ تعديله و آخر تاريخ فتج فيه و خواصه إن كان يمكن تعديله أم للقراءة فقط وهل مخفى أم متاح و كم قطاع يأخذ و ما القطاع السابق و التالى وغيرها من السمات تحفظ فى جدول يسمى FAT اختصار File Allocation Table أو جدول تموضع الملفات، و عندما تلغى ملف فحقيقة لا تفعل سوى الغاء أول حرف من اسمه لتخبر النظام أن هذا المكان متاح ولن يلغى فعليا إلا لو استخدم النظام مساحته لملف آخر لذلك يسهل إعادة الغاء الملفات أحيانا بعد أسابيع من الغاؤها. تنسيق هذا الجدول و وضع الملف فى الأقسام مسؤولية نظام التشغيل فقط لذا هذه الشكليات تعتمد على نظام التشغيل أساسا مثل كم حرف يتكون منها الإسم و كم حرف للإمتداد الخ

تنقسم الملفات عموما إلى ملفات تشغيل و ملفات بيانات. تتوقف الأولى على نظام التشغيل ففى الويندوز يكون لها إمتداد EXE أى أن هذا البرنامج عند النقر على إسمه سيبدلأ العمل.
ملفات DLL وهى ملفات خدميه Library files تحتوى برامج لكن لا تعمل مستقلة ولابد لبرنامج EXE آخر أن يطلب من نظام التشغيل أن يشغلها و يفتحها و يطلب منها الوظيفة كذا و يمد الويندوز بالبيانات اللازمة لهذه الوظيفة إن كانت مطلوبة فمثلا وظيفة إطلاق صافرة الحاسب لا تحتاج بيانات بينما رسم خط يلزم تحديد من أين لأين و بأى لون و سمك الخ. هذه الوظائف تعيد رقما ما فإن كانت وظيفة حسابية تعيد رقمين النتيجة و رقم كود العملية . رقم كود العملية = صفرا إن كانت ناجحة أو أى رقم آخر لو حدث خلل ما لتحديد نوع الخطأ Error الذى حدث.

سميت اختصارا للإسم Dynamic Link Library أى المكتبة ذات الرابط المتحرك لأنها مكتبة تحتوى بعض الوظائف من البرنامج الأصلى لكن غير مرتبطة به.
يعمل البرنامج “م” و يحتاج منها وظيفة فيطلب من الويندوز اسم DLL و الوظيفة فتحمل الويندوز هذا الملف DLL و تربطه بهذا البرنامج و تطلب من DLL الوظيفة و تعطي الجواب للبرنامج “م” و تدون فى عداد 1
بعدها يبدأ برنامج آخر “ص” و يطلب وظيفة أخرى منها - الملف مفتوح - فقط نطلب منه الرد و نزود فى العداد 1 وهكذا.
عندما يغلق أى من البرامج مثلا البرنامج “م” تنقص من العداد 1 و هكذا حتى يصل العداد صفر هنا فقط تلغى تحميل ملف DLL من الذاكرة و تحررها.

نظرا لكونها ذات بنية خاصة تتيح ما سبق لذا فعظم المترجمات و منها http://powerbasic.com
السابق ذكرها تترجم أو تنتج هذا النوع من الملفات فقط يجب أن تحدد ما إن كان الكود الناتج هو EXE أم DLL

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

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
الملف النصى Text File :
قبل أن نناقش اللغات يجب أن نعلم ما هو الملف النصى Text File فلا يوجد نوع أهم من الملف النصى فى عالم الحاسبات و الصناعة.
قد يظن البعض أنه مجرد ملف به كتابة لكن الحقيقة أعمق من ذلك فهو بشروطه الملف الوحيد القابل للتداول بين الأشياء. و أقول هنا الأشياء للتعميم مثلا بين الماكينات و بعضها ، بين الحاسبات و الماكينات و بين الحاسبت على اختلاف انظمة تشغيلها الخ.
نشأت الحاجة لكود نصى عندما ظهرت الحاجة لتطوير ارسال البرقيات من إشارة مورس لإشارة أخرى يمكن ميكنتها فتسهل ارسالها من مصدر لهدف و بدوره قد يكتبها أو يوجهها لمسار آخر كالمكالمات الهاتفية، لذا ابتكر نظام بشريط ورقى مثقب به 5 ثقوب و “شرشرة” ثقوب رفيعة لتسحبه تروس التزامن ووضعت بين الثقب الثالث و الرابع لعدم عكس وضعه بالماكينة و تمر هذه الثقوب بين لمبات و حساسات ضوئية ، الثقب يعنى صفر و عدم وجوده يعنى 1 و الماكينات وقتها كانت تعمل بجهد 48 فولت القياسى.

خمسة ثقوب تعنى مجمل 32 خيار الآن لدينا 26 حرف و عشرة أرقام لذا لا يمكن ارسالها فاتبعت بعض النظم المحدودة للنقل بين “عالى” و “منخفض” للنقل بين مجموعة 32 للأحرف و أخرى للأرقام و العلامات ثم سريعا ما استبدل بنظام ذو 7 ثقوب وهو يوفر 128 خيار. الحروف و الأرقام 26 و يضاف إليها 26 حرف آخر للحرف الصغير و الكبير فالمجموع 62 و لدينا أوامر يجب تنفيذها مثل الرجوع لأول السطر، الإنتقال لسطر جديد الانتقال لعمود معين “Tab” للجدوله إضافة للعشرة أحرف التى تجدها على أزرار الأرقام على لوحة مفاتيحك وهى علامات النقود $,#,&,% والأقواس الخ و أيضا إطلاق جرس Bell كرسالة للمتلقى بالتنبه و الإنتقال لصفحة جديدة و الرجوع للخلف لإتاحة كتابة فوق كتابة (تحته خط أو مشطوب لسبب ما) الخ
الآن بقيت نقطة هامة جدا ، انت ترسل شريطا مثقبا و تنفق بالدقيقة ثمنا للخدمة ولو حرف زاد عن المطلوب قد يكلفك دقيقة بلا داعى، لذا كيف نلغى حرف أو جملة أو فقرة كتبت بالخطأ؟
الحل الوحيد هو ابتكار الخاصية No-Op أى No operation و المستخدمة كتأخير فى كل الميكرو الآن، تتم هذه الخاصية بتثقيب كل الثقوب السبعة و هكذا أى حرف آخر بالطبع سيكون أقل من 7 ثقوب و إلا لو 7 ثقوب سيلغى.
الآن ما أهمية ذلك؟
ماكينة الإرسال تعمل Off line اى محليا فبعد الغاء هذه الفقرة بالرجوع للخلف ثم الضغط على Del فيتم تثقيب كل الأخطاء المراد الغاؤها ، يعاد تمرير الشريط المثقوب فى القارئ و القارى متصل بالثاقب فيثقب كل حرف يمر عليه حتى إذا قرأ صفر صفر وهى NOP لا يفعل شيئا فقط ينتقل للحرف التالى و هكذا لا يحدث تثقيب للشريط الجديد فيكون الشريط الناتج أقصر من الاصلى المحتوى أجزاء ملغية.
اتفقت الهيئة العالمية الأمريكية ASCII على الأرقام المقابلة لكل حرف و رقم و عملية تحكم و اصبحت قياسا عالميا يستخدمه الجميع. و من أهم ميزاته أن الفرق بين الرقم و الكود هو إضافة 30 بالهكس و أيضا بت واحدة تحول بين الحرف الصغير و الكبير لذا التحويل من نوع لآخر أصبح سهلا.
الآن عندما نقول ملف نصى فالأساس أنه لا يحتوى على أحرف للتنسيق سوى “TAB” ولا أى فونت ولا أى صور فقط أعداد و أحرف و التحكمات القياسية ولو احتوى أعداد غيرها يسمى ملف ثنائى أو Binary .
اعتمد هذا الملف فى الحاسبات و عندما اعتمد عرض الحرف 8 بت أصبحت البايت تتحمل إضافة لغة ثانية فى 128 موقع التالية و طبعا هى إمتداد لبعض اللغات اللاتينية .
اللغات الأخرى مثل العربية و الصينية لا تعد ملفات نصية قياسية لحاجتها لتحديد اتجاه الحروف من اليمين و الأحرف الجديدة أصبحت تشغل 2 بايت .

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
اللغات:

مما سبق نلاحظ أن كل شيئ هنا ارقام وهى أرقام ثنائية أى مجموعة من الآحاد و الأصفار فلتحميل رقم ما للمراكم الرئيسى سيكون هناك تركيبة خاصة لكل شركة حسب ما صمم المهندسون وحدتهم، لذا سيكون مستحيل حفظ أكثر من مئة تعليمة و أكثر (للوحدات 8 بت و التى اصبحت الآف فى 64 بت) بهذه الصورة.
أول خطوة، أن نعبر عنها بالأرقام الستة عشرية “هيكسا” و هذا أسهل كثيرا، البرنامج الذى يكتب بهذه الطريقة بالأرقام الهكسا يسمى لغة الآله machine code وهى صيغة معتمدة.
لكن من يتذكر هذا الكم من الأرقام و يستطيع الترجمة من الأرقام إلى معانيها و بالعكس، فضلا عن وجود مشكلة خطيرة هى أنك لو لم تسير بالترتيب المتسلسل و اردت الإنتقال لنقطة وسطية، مالم تكن شديد الحرص قد تأخذ بالخطأ رقم سابق أو لاحق لتترجمة، لاحظ أنك لا تأخذ أمر سابق أو لاحق بل العكس تأخذ ما يفترض كونه بيان و تحلله كأمر للتنفيذ!!
لذلك وضعت لغة تسمى التجميع Assembly Language وهى اعطاء اسم مختصر لكل تعليمة لكى تكون مفهومة
مثل وضع رقم فى مكان سميت Load و اختصارا LD وشركات أخرى استخدمت التعبير MOVE و اختصارا Mov و على الرغم من عدم نقل البيان بل هو فقط نسخه إلا أن البعض يروق لهم ما يروق لهم.
الأسيمبلر Assembler هو برنامج يقوم بالكتابة لك بلغة الأسيمبلى ولا يعطى شيئا ، فقط يحفظ ما تكتب فى صورة ملف نصى صرف Text File ولكن الإمتداد يختلف.
إذن لماذا لا نستخدم مثلا محرر النصوص فى الوندوز؟ لعدة أسباب
أولا يقوم بعرض الكتابة بالألوان فمثلا يجعل الأوامر بالنص الغليظ و الأرقام باللون الأحمر و التعليقت باللون الأخضر و العناوين باللون الأزرق ألخ مما يسهل عليك جدا معرفة ما تكتب و تكتشف بعض الأخطاء بالنظر.
ثانيا يطابق الأقواس لك فكل قوس تفتحة يربطه آليا بقوس تغلقه من الداخل للخارج فإن نسيت أحدها ستجد على الفور ماذا يخص ماذا و ما ترك بدون قوس – وهذا طبعا من وجهة نظرة هو فالبرنامج لا يعلم النوايا ولكنه يعد الموجود لذا لو نسيت قوسا فى الوسط ستجد التالى كله فى غير ما تتوقع له و هكذا تحدد الخطأ

أيضا هناك خط رأسى منقط يبين كل وظيفة بداية و نهاية مثلا بين For-Next فلو نسيت ان تغلق الوظيفة التى بداخلها ستجد الخط يذهب لمكان بعيد أو يختفى كليا.
أيضا الوظائف التى تتأكد من سلامتها ، يمكنك طيها كالمشار إليها بالصورة حتى لا تأخذ حيز من الشاشة و تركز تفكيرك على ما تريد وهذا بدأ من وظيفة داخلية صغيرة كالسابقة حتى Subroutine / Function كامل.
أعلم انك ستقول هذا برنامج بيزك الخ لكن هذا المحرر NotePad++ يمكنه التعامل مع عدد لا نهائى من اللغات فبالإضافة لعدد 48 لغة من اسيمبلى للغات متخصصة أو عالية مثل C ، يمكنك تعريف لغة ما لتستخدمها وهو مجانى
https://notepad-plus-plus.org
و أخيرا و ليس آخرا يوضح على الجانب رقم السطر
ولكن عند الحفظ، يحفظ فقط فى نسق نصى Textبدون أى تنسيق.

يأتى بعد ذلك دور المترجم Compiler وهو يترجم هذه الأوامر للأرقام المناظرة و تعرف بلغة الآلة .
بالتأكيد ستعترض أنك تستخدم برنامج واحد يقوم بالمهمتين معا، سأقول لك هما برنامجان مرتبطان معا بحيث تتناقل البيانات بينهما ولا يبدو الإنفصال واضحا. و البعض أيضا يطلب منك تحديد مسار المترجم يدويا ليستخدمه بعد ذلك.
دور المترجم موضوعنا القادم إن شاء الله

[/size][/font][/b]

[B][FONT=“Times New Roman”][SIZE=“4”]
المترجم Compiler
المترجم يقرأ ملفات نصية فقط بأى امتداد و لكن غالبا ما يكون asm لكنه ليس شرطا لدى كثير من البرامج.
يقوم المترجم بفحص الملف فإن وجد أخطاء هجائية فى مسميات الأوامر يعطى رسائل خطأ و يتوقف، وبعد الإنتهاء من التصحيحات الهجائية ، يطابق الأسماء بالتعريفات فكل اسم مستخدم فى البرنامج يجب أن يكون سبق تعريفه (ما عدا لغات قليلة تقوم بتعريف الجديد رغم خطورة هذا المبدأ) و تحديد كونه أى نوع من الأرقام هل هو ثابت أم متغير و كم بت أيضا الخ فإن لم يجد تعريف يتوقف و يعطى رسالة خطأ.
بعد ذلك يطابق الإنتقالات وهل هى فى المدى المسموح؟ و إلا يتوقف أيضا.
و رغم كل الإحتياطات هناك أخطاء لا يمكن اكتشافها إلا بالبحث و التدقيق كالخطأ فى الأرقام أو عمل دورة لا نهائية.

يعطى المترجم الناتج فى صورة ملف إما ثنائى بلغة الآلة لإستخدامه مباشرة ولذا فهو صغير وله إمتداد .BIN وهذا الملف لا يقرأ بواسطة محرر النصوص فكثير منها أرقام لا معنى لها، لكن يمكن مشاهدة محتواه بمحرر هيكس Hex editor و من أفضلها Hex Editor Neo
http://www.hhdsoftware.com/free-hex-editor

أو يحفظ فى صورة ملف هيكس Hex File بامتداد .Hex وهو ملف نصى يفتح بمحرر النصوص و يمكن التعديل عليه و حفظه لو تعلم ما تفعله لكنها عملية بالغة الصعوبة فكل سطر يبدأ بالحرف “:” ثم عنوان و عدد البايت ثم البايتات ذاتها ثم CRC للتأكد من صحة ما فى هذا السطر و نظرا لإستخدام حروف نصية تجد حجم الملف كبيرا ، مثال هذه السطور

:1000000075813075A0007580FF8017758C3C758AEE
:10001000ACD28CD5120575120A118175A88275892A
:100020000132C28C751000751160758C3C758AACFC

لمزيد من التفاصيل خاصة وأن هناك أكثر من نسق لهذه الملفات قم بالبحث عن Hex file format

اللغات العالية Hi level languages

لغة الأسيمبلى رائعة و تقوم بكل المهام لكن ستكون صعبة للمهام المعقدة ، لذا تنافس الكثير لتطوير لغات برمجية أقرب للإنجليزية و تقوم بكثير من المهام الصعبة ذاتيا مثل التعامل مع الأرقام العشرية و الضرب و القسمة و الجذور و العلاقات الهندسية و المثلثية الخ كدوال مبنية داخل اللغة ذاتها و إضافة كثير من الدوال المتخصصة فمثلا لغات المحاسبة تضيف دوال محاسبية و الإحصائية كذلك وهكذا وأعمها الهندسية.
لغة البيزك نشأت أصلا لتسهيل البرمجة للمتلقى العادى فهى اختصار للكلمات Beginner All-purpose Scientific Instruction Code أى هى علمية و لكل الأغراض و للمبتدئ لكونها أقرب للإنجليزية. وهذا لا يعنى إطلاقا أنها قليلة الشأن فقد برمجت إحدى كبار الشركات العالمية الأمريكية رادارها المدنى باستخدام VB6 الشهير.
أعلم أن هواة لغة السى و مشتقاتها سيقولون أنها أقرب للماكينة الخ و هذا و إن كان صحيحا إلا أنه خطر لمن ليست لديه الخبرة الكافية فقد يسبب تعطل كامل “Crash” للويندوز و لكنى أراها معقدة لضرورة استخدام كثير من الأقواس و الكلمات التى لا لزوم لها فببساطة فيجيوال بيزك يقوم بنفس العمل بدونها.
أيضا يجب الالتزام بالتعبيرات الدقيقة فهذا التعبير أنها أقرب للماكينة الخ يخص ميكروسوفت فيجيوال بيزك 6 لكن شركة Power Basic السابق التنويه عنها تصنع مترجم للويندوز بلغة البيزك المفهومة و كافة ميزات السى بما فيها إضافة اسيمبلى الخ الخ
حقا اللغات العالية التى تتيح أسيمبلى أقرب للماكينة من التى لا تتيح مثل بعض أنواع البيزك لكن هذا صحيح فقط فى الحاسبات لأنك تتخطى نظام التشغيل و العطله التى يسببها و تتعامل مباشرة مع المكونات لكن فى الميكرو كونتروللر فالأمر مختلف – لا يوجد نظام تشغيل لتتخطاه و على سبيل المثال دورة For-Next ستترجم لنفس الكود بأى لغة ولو زادت عدد الخطوات فهذا عيب فى المترجم أنه قليل الكفاءة لذلك فالحاجة للغة عالية لميكرو هى أساسا لتستطيع التعامل مع الأرقام الطبيعية ذات الكسور العشرية و الدوال الهندسية و المثلثية و اللوغاريتمات الخ و فيما عدا ذلك ، فالكل فى نظرى واحد.

[/size][/font][/b]


اللغات الأخرى:
حسنا الآن هل اللغات العالية هى أقصى ما نحلم به؟
عندما حاول أحد العلماء ارسال ملف من حاسب الجامعة لزميل له فى ولاية أخرى نشأت الحاجة للربط التسلسلى عبر الهاتف و ما كان متيسرا هو أن نستخدم دائرة تضمين Modulator فى المرسل و فك التضمين Demodulator فى المستقبل. نظرا لأن الحوار من طرفين أى ارسال و استقبال فكل طرف يحتويهما معا فيما سمى Modulator Demodulator و إختصارا سمى MODEM و كان بطيئا يضع مئات من البت فى الثانية لكون خط الهاتف ذو سعة ترددية لا تزيد عن 6000 ذ/ث.
ما أن ظهرت هذه الحاجة و الضرورة ، زاد الإستخدام و زاد الطلب حتى تطورت لما عرف باسم الإنترنت حاليا.
ظهرت الحاجة لنقل الصور و صفحات المعلومات من أجل الدعاية للمنتجات و التجارة ، لكن هنا مشكلة بالغة الصعوبة، وهى:
من الذى يطلبنى؟ و كيف أرسل له معلوماتى.
قد تراها تافهة لكن عفوا فمن يطلبك قد يكون شخص يدير أول حاسب IBM شخصى يعمل بالميكرو 8080 مع نظام دوس و قد يكون حاسب كبير فى مؤسسة تعمل بنظام مثل SUN micro system أو يونكس أو غيره و لاحقا أضيف ويندوز التى تغير معالمها كل بضع سنوات. و أيضا نفس المشكلة تكون عندما أضع معلوماتى على حاسبى و الذى قد يكون أى من السابق ذكرهم و اللاحق تطورهم.
الحل: نرجع بضع صفحات لأعلى لنقدر حقا أهمية الملف النصى فهو الوحيد لكونه خالى من التنسيق الخاص مثل الفونت و الألوان الخ يمكن استخدامه بين جميع هذه الأنظمة.
لكن الصفحة النصية ليست براقة، لذا ابتكرت طريقة HTML وهى اختصار كلمات Hyper Text Markup Language وهى تعنى أن النص سنحمله فوق عادته و تم ذلك بإعتبار ما بين قوسين هو أمر من الأوامر <أمر> وهى لا تعرض ولكن تنفذ و تسرى حتى تجد امر الإقفال وهو بادئ بشرطة مائلة مثل </أمر> فيمكنك تغليظ النص أو تكبيره الخ و ابتكرت أنواع من الصور مثل GIF PNG JPG للإستخدام على النت و كل هذا مهمة المتصفح و تطورت لتشمل جداول ووسائل تنسيق أخرى كثيرة لكن كل هذه الأوامر و التعليمات تنقل فى صورة ملف نصى بحث و إن كان بامتداد مختلف.
لم تكتفى الشركات بهذا التطور و لكن ابتكرت وسائط أخرى و لغات أخرى مثل PHP و أيضا لغة JAVA وهى قابلة لتنفيذ أى برنامج كما تبرمجه بأى لغة أخرى و ميزته أنك فى لغات أخرى مثل C,C++ يجب أن توفر نسخ لويندوز كذا و ويندوز كذا و لينكس كذا و كذا و باقى أنظمة التشغيل هذه

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

[B][FONT=“Times New Roman”][SIZE=“4”]
الكومبيوتر المصغر:

أنشأت بعض الشركات طفرات فى عالمى الميكرو كونتروللر و الحاسبات ، فأنتجت شركات مثل اردوينو سلسلة من الوحدات حول ميكرو كونتروللر أتميل AVR وهو طراز متقدم من العائلة و أضافت له مداخل تسلسلية و يو اس بى و مداخل تماثلية الخ و وضعت له أطراف قياسية تتيح للمستخدم أن يضيف إليه عديد من البوردات الأخرى لتعدد المهام وقدمت له مترجم مجانى اعتمادا على أنك لا تستخدمه سوى مع اردوينو فستشترى منتجهم على أى حال و تلتها شركات أخرى فى هذا المجال .

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


و يتيح استخدام هذه الوحدات عمل روبوتات متقدمة جدا و أجهزة ذاتية التوجيه كالطائرات و الصواريخ الخ الخ

العالم الرقمى أصبح كالملح فى كل شيء وله تطبيقات و فوائد لاتعد ولا تحصى.
أرجو أن يكون هذا الشرح قد أفاد من بذل الوقت لقراءته و شكرا لكم…

[/size][/font][/b]