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

   

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 17-06-2018, 09:59 AM المشاركة 25   
افتراضي



والله انا متابع من البدايه وماسك نفسي مش عايز اضف تعليق حتي لا افسد تنسيق الموضوع ...بس الموضوع جميل جدااااا وشيق .. اشكرك مهندسنا القدير بارك الله فيك ..
بعد كل هذه المعلومات عن المتحكم AVR اقتنعت به وان شاء الله سوف ابدأ معك في الإنتقال من برمجه ال PIC الي AVR لأنه كما ذكرت حضرتك يحتوي علي امكانيات كثيره تفوق ال PIC

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

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

اعلانات

ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 17-06-2018, 10:12 AM المشاركة 26   
افتراضي المتغيرات



المتغيرات
نأتى الآن للجزء التالى من التعليقات التى سبق حذفها وهى باسم المتغيرات
كود:
;==================================
; VARIABLES
;==================================
لكونها تتغير بحسب الحاجة إذن يجب أن نعلم مسبقا أو نحدد لها حجم ما مناسب لأننا سنضطر لوضعها فى الذاكرة و من ثم ستأخذ قدر من المتاح، وقد تقول لا بأس فالمتحكم به عدة الآف من الخانات، للأسف يجب أن أذكر هنا أنها من حجم الذاكرة العشوائية وليست ذاكرة البرنامج وهى فى أتميل AT89x51 قدرها 128 خانة فقط و ألباقى AT89x52 فما فوق قدرها 256 خانة وفى AVR تصل 1 ك و أكثر و تصل 368 خانة فى PIC16 أو اقل فى بعض الأرقام. يمكنك أن تخصص لكل متغير من بايت واحدة إلى 4 بايت ولا تزيد عن ذلك إلا فى حالة النصوص.
كن حذرا هنا فما لم تكن تتعامل مع الأسيمبلى فكل تخصيص لمتغير أنه بت واحدة ، سيحجز المترجم مقابلها بايت كاملة !!.
يجب أن تعلن صراحة عن المتغيرات التى ستستخدمها و إلا ستلقى رسالة خطأ و يتوقف عن الترجمة.
فى الأسيمبلى تستخدم كلمه EQU السابقة أيضا، ستقول كيف؟ سأقول كما سبق أن ذكرنا هى تعنى هذا يساوى أو يستبدل بذلك فلو تصف خانة ذاكرة إذن هى متغير لأن محتواها يأخذ أى قيمة من صفر إلى 255 و أذكر أننا قلنا فى ألتعليمه
Mov P0 , #255
ذكرنا أن "#” تضع 255 على المنفذ لكن لو حذفناها سيأخذ محتوى الذاكرة 255 حسبما كان هذا و يضعه على المنفذ ، بهذا لو كتبت ألتعليمه
Days EQU 50
فهذا يعرف المترجم أن عليه استبدال كلمة Days بالقيمة 50 فى الأمرين التاليين
Mov P0 , #Days
Mov P0 , Days
ومن ثم فى السطر الأول سيضع حرفيا على المنفذ صفر قيمة 50 أما فى السطر الثانى سيأخذ محتوى خانة الذاكرة رقم 50 و يضعها على المنفذ. لو تريد تخصيص Word وهى من 2 بايت سيخصص المترجم المكان الأول الذى أشرت إليه فى الأمر و التالى له آليا. لا يوجد فى الأسيمبلى أكبر من 2 بايت إلا بتخليقك أنت لما تحتاج أو تستخدم مكتبة خارجية.

فى لغة البيزك تستخدم كلمة Dim و هى اختصار Dimension بمعنى "يصنع وفقا لأبعاد محددة" وهى بلغة الحرفيين كلمة "يواصف" أى يعطيه المواصفات و أكثر المترجمات تسمح بتسمية عدد من المتغيرات المتساوية الحجم مثلا
Dim Loop , Cycle , X , T as byte
وهى هنا تقول أصنع متغيرات واحد باسم Loop وآخر باسم Cycle وآخر باسم X وآخر باسم T كل منها بايت واحدة و لتسمى آخر بحجم 2 بايت يجب أن تعلن من جديد باستخدام Dim
فى لغة C تضع النوع أولا هكذا
كود:
Byte  Loop , Cycle , X , T ;
أنواع المتغيرات و أحجامها :
أصغر متغير هو البت الواحدة وفى عائلة C51 يوجد منها 2 بت للمستخدم و للأسف لا يوجد مثلها فى أى من المتحكمات الأخرى.
داخل كل متحكم يوجد ما يسمى مسجل حالة البرنامج أو Program Status Word و اختصارا PSW وهذا اسمه أى لو تريد الكتابة فيه أو القراءة منه تستخدم الاسم PSW.1 مثلا لقراءة البت رقم 1

الصورة لعائلة C51 حيث نجد فيها 2 بت للمستخدم الأولى باللون الأصفر و اسمها F0 أى يمكنك أن تستخدم هذا الاسم مباشرة هكذا
JB F0, Next_Action
أو تعيد تسميتها بالتعريفات السابق شرحها و الثانية باللون البرتقالى وهى بلا اسم لذا يمكنك استخدام PSW.1 أو تعريفها بأي اسم مناسب . باقى الخانات سيلى شرحها لاحتوائه على كثير من الأمور الهامة.
لو اخترت أى بت أخرى سيخصص المترجم بايت كاملة لها.
لو ستستخدم مترجمات ميكرو الكترونيكا تذكر أنها تسمى sbit

الوحدة الثانية من المتغيرات هى البايت وهى 8 بت وهى تعبر عن حرف من كلمة أى حرف هجائى أو عدد من صفر وحتى 255.
بعض المترجمات خاصة فى اللغات العالية مثل ميكرو الكترونيكا تسمى الحرف Chr اختصار Character و تسمى أيضا Short اختصار Short-Integer و من كل تضع بلا إشارة UN-signed Character أو بالإشارة signed Character و تصبح أعلى بت فيها رقم 7 تمثل إشارة الرقم. لو صفر يكون العدد موجبا و لو 1 يصير سالبا و بهذا تعبر عن +127 إلى -128 فقط بدلا من صفر إلى 255 أيضا
Signed short int أو Un-signed short int لنفس المدى
أما مترجم BASCOM فيستخدم Byte من صفر إلى 255

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

ayam
:: مهندس جيد ::
تاريخ التسجيل: Dec 2005
المشاركات: 287
نشاط [ ayam ]
قوة السمعة:
قديم 17-06-2018, 11:36 AM المشاركة 27   
افتراضي


استاذى ماجد الله يجزيك عنا خيرا , وكل عام وانت طيب


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 17-06-2018, 02:52 PM المشاركة 28   
افتراضي


استاذى ماجد الله يجزيك عنا خيرا , وكل عام وانت طيب
وانتم بالصحة والسلامة


أسعدني مروركم الكريم


احمد شهيد جواد
:: مهندس متميز ::
تاريخ التسجيل: Apr 2015
الدولة: العراق
المشاركات: 322
نشاط [ احمد شهيد جواد ]
قوة السمعة:
قديم 17-06-2018, 05:13 PM المشاركة 29   
افتراضي


السلام عليكم استاذ ماجد .. كل عام وانت بألف الف خير

سؤال : بورتات او بنات المتحكم بالحالة الافتراضية ماذا تكون حالتها هل هي خرج ام دخل ؟؟؟
قبل فترة وانا ابحث عن مشاكل الضوضاء رأيت مهندساً صينياً يقول من الافضل ان تجعل الاطراف الغير مستخدمة في التصميم بخرج وخرجها بصفر من اجل استقرار المتحكم ...

ما تفسير هذا ؟؟
هل ممكن ان تكون بعض الاطراف حالتها دخل افتراضيا ؟؟

اتحدث عن متحكم مايكروتشيب


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 18-06-2018, 10:05 AM المشاركة 30   
افتراضي


شكرا على هذا السؤال فقد ذكرنى بجزء نسيته و أضفته فى المشاركة 13 وهو
"
فى عائلة PIC16 الحالة الافتراضية لمنفذ A هو تماثلى لذا يجب تهيئته لو يستخدم كأطراف رقمية فيما عدا ذلك ففى العائلة 16 و العائلة 18 كل المنافذ ستكون دخول ما عدا بعض الأطراف لذا يجب الرجوع للداتاشيت لمعرفة أى الأطراف مرتبطة بأى الوظائف حتى تعيد تهيئتها كمداخل / مخارج أو تستخدمها كما هى فقط اعرف ماذا تفعل
السلام عليكم استاذ ماجد .. كل عام وانت بألف الف خير

و انتم بالصحة و السلامة
سؤال : بورتات او بنات المتحكم بالحالة الافتراضية ماذا تكون حالتها هل هي خرج ام دخل ؟؟؟
هى دخل منطقى Logic Input ما لم تكن مرتبطة بخاصية تجعله دخل لشيئ آخر كمحول تماثلى رقمى و السبب ذكرته فى السلسلة أنه عند البدء لا يعلم ماذا على أى طرف لذا لو كان مفتاح و متصل بالأرضى لظروف العمل سيكون من الخطر البدء بالطرف "خرج" و يكون عليه واحد فهذا يسبب قصر و خطر على الطرف و الميكرو و ربما لو متصل بحساس لا يتحمل 5 فولت مثلا
قبل فترة وانا ابحث عن مشاكل الضوضاء رأيت مهندساً صينياً يقول من الافضل ان تجعل الاطراف الغير مستخدمة في التصميم بخرج وخرجها بصفر من اجل استقرار المتحكم ...
ما تفسير هذا ؟؟
هل ممكن ان تكون بعض الاطراف حالتها دخل افتراضيا ؟؟

اتحدث عن متحكم مايكروتشيب
بحثت فى الطرازين المستخدمين فى هذا الشرح PIC16F877A,PIC18F4550 فلم أجد لهذا أى ذكر أما فى أتميل ATmega16A فيقول أن الأطراف الغير مستخدمة يفضل أن تتصل إما Pullup Pulldown لمنع الإصطراب فى أثناء التشغيل و إن كنت فى استخداماتى لم الحظ هذا
أما C51 فلا قيود


ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 18-06-2018, 10:16 AM المشاركة 31   
افتراضي المقاطعة و البدء



الثالث هو 2 بايت أى 16 بن و يسمى فى ميكرو الكترونيكا Int اختصار Integer و منهsigned Integer
من -32768 إلى +32767 ومنه Un-signed Integer من صفر و حتى 65535
أما مترجم BASCOM فيستخدم Integer من -32768 إلى +32767 و Word من صفر و حتى 65535 وهذه من التعبيرات المستخدمة فى الميكرو بروسيسور وقبلها عند أول تطبيقات الحاسبات

الرابع من 4 بايت و يسمى فى ميكرو الكترونيكا Long وهو من -2147483648 إلى +2147483647 و أيضا Un-signed Long وهو من صفر إلى 4294967295
أما مترجم BASCOM فيستخدم Long وهو من -2147483648 إلى +2147483647 و أضاف لنسخة AVR الكلمة DWORD وهو من صفر إلى 4294967295

الخامس الأرقام العشرية و يسمى فى ميكرو الكترونيكا Float أو Double أو Long Double و كلهم ذات الشيء من 4 بايت للمدى من 1.5x10^–45 إلى 3.4x10^38
أما مترجم BASCOM فيستخدم Single من 4 بايت أو 32 بت للمدى من 1.5x10^–45 إلى 3.4x10^38 و أضاف لنسخة AVR الكلمة Double من 8 بايت أو 64 بت للمدى 5.0x10^–324 إلى 1.7x10^308

وسادسا النصوص وهى حتى 254 حرف باسم String

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

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

كود:
;==================================
; RESET and INTERRUPT VECTORS
;==================================
فى أتميل نجد فى C51 ما يلى و فى AVR أضيف لها أكثر من ذلك

كود:
; Interrupt vectors:
 (0000H):		;  Reset system
الرقم بين قوسين هو بديل للتعليمه السابق شرحها Org (0000) H أوتعنى ضع الكود التالى فى هذا العنوان وهو صفر و حرف H يعنى أنه هيكسا ولو لم يذكر سيترجم عشرى. لو لم تستخدم أى من المقاطعات التالية فيمكنك وضع أول كود برنامجك هنا (فى خانة الصفر) لكن لو ستستخدم أى من المقاطعات التالية يستحسن وضع أمر انتقال لبداية البرنامج مثل Ljmp Start غنى عن التعريف أن Start هو عنوان لاحق فى البرنامج
أول مقاطعة من الطرف الخارجى INT0 بعد 3 خانات من الريسيت وهى كافية لأمر القفز لكن كل عنوان مقاطعة بعد ذلك يبعد 8 خانات عن السابق له ، لذلك لو ما تحتاجه لخدمة المقاطعة يمكن أن تكفيه 8 خانات مثل قراءة منفذ تسلسلى أو إعادة تحميل عداد الخ ،يمكنك الاكتفاء بهذه الخانات و إلا ستحتاج لأمر القفز لعنوان آخر.

كود:
(0003h) :		; Adress of INT0 (IE0)
	Ljmp Int0Code
 (000Bh):		; Adress of Interrupt Timer 0 (TF0)
	Ljmp T0Code
 (0013H)		; External 1 (IE1)
	Ljmp Ext1Code
 (001BH)		; Timer 1  (TF1)
	Ljmp T1Code
 (0023h):  		; Serial Interrupt
	Ljmp SiCode
 (002Bh):		; Timer2 (TF2 or EXF2)
	;Timer2 code if used......     يمكنك وضع كود تايمر2 هنا مباشرة ولا حاجة لأمر انتقال إلا للضرورة
.
.
Start:
.
.
T0Code:
.
.
Int0Code:
.
.
SiCode:
.
.
T1Code:
لاحظ أنك تمتلك الحرية فى ترتيب العناوين التى تنتقل إليها كيف شئت كما أن عنوان البدء Start يمكن أن تكون أيضا فى أى ترتيب
عندما تحدث مقاطعة يحفظ المتحكم عنوان الخطوة التالية فى الرصة Stack ثم ينتقل للعنوان المذكور و ينفذ ما به و إن وجد به أمر قفز للعنوان الخاص بهذا الطالب للخدمة و هناك ، أنت تعلم ما ستستخدم من مسجلات ، لذا لو تريد فى برنامج المقاطعة استخدام أى من المسجلات فمن الحكمة أن تحفظها أيضا خاصة مسجل حالة البرنامج PSW لأنه يحتوى مؤشرات ناتج الحسابات و تحفظ هذه المسجلات فى الذاكرة لكن الأسلم و الأسرع بأمر "دفع فى الرصة" Push و عكسه استرداد من الرصة POP فهو يحفظ الترتيب خاصة مع المسجلات 16 بت

كود:
	Push	direct	; direct is any register or memory
	POP	direct	;	''	''
و سبب أن هذا الأمر أفضل أنك تحفظ أى مسجل دون أن تهتم كثيرا أين فمؤشر الرصة يتولى ذلك عنك، كل ما تحتاجه أن تسترد عكس ما تدفع فإن دفعت مثلا A ثم B ثم المسجل R4 تسترد R4 أولا ثم B ثم A. المزيد عن المقاطعة فى التطبيق التالى للتوضيح بالمثال.
فى ميكرو تشيب الأمر أكثر تعقيدا لأن لديك مكان واحد تنتقل إليه و هناك عليك أن تبحث أى المصادر سبب هذه المقاطعة و مما يزيد الأمور سوءاً أن البت الخاصة بالمقاطعة ستكون 1 بصرف النظر عن أن هذه المقاطعة متاحة أصلا أم لا ولا أن المقاطعة كلها أصلا متاحة أم لا لذلك من الأفضل تركها للغات العالية حيث تولد الكود اللازم للتحقق.

الآن بعد أن عرفنا التعريفات و الثوابت و المتغيرات يمكننا أن نعيد صياغة برنامجنا السابق باللغات العالية، بالبيزك مرة و C مرة وهذا موضوعنا القادم بإذن الله.



ماجد عباس محمد
:: نائب المشرف العام
::
تاريخ التسجيل: Jun 2009
الدولة: القاهرة - مصر
المشاركات: 11,652
نشاط [ ماجد عباس محمد ]
قوة السمعة:
قديم 19-06-2018, 10:40 AM المشاركة 32   
افتراضي اللغات العالية



اللغات العالية :
ربما نسينا برنامجنا السابق لذا ها هو مجددا و بعد إضافة المسميات

كود:
Switches	EQU P0
LEDs		EQU P3
SW1		EQU P3.0
SW2		EQU P0.1
SW3		EQU P0.2

Start:
      Mov	Switches , #255
      Mov	LEDs , #255
Loop:	
      jb		SW1 ,  SW2test
      mov	LEDs , #11111110b		;  = 254
      sjmp	Loop
SW2Test:     
     jb		SW2 , SW3Test
     mov		LEDs , #11111100b		; = 252
     sjmp	LOOP
SW3Test:
      jb		SW3 , start
      mov	LEDs , #11111000b		; = 248
      jmp 	Loop
و أظن أنه أصبح مفهوما بصورة أوضح. هل يمكننا وضعه فى كلمات لشرح خطواته؟
نعطى منفذ الليدات اسم LEDs ونعطى السويتشات اسم Switches و السويتش الأول اسم SW1 وهكذا
ضع على منفذ السويتشات 255 و على منفذ الليدات 255
العنوان دورة:
لو المفتاح Sw1 =1 عندها انتقل للعنوان SW2test
و إلا ضع على الليدات 254 ثم عد للدورة
العنوان SW2test:
لو المفتاح Sw2 =1 عندها انتقل للعنوان SW3test
و إلا ضع على الليدات 252 ثم عد للدورة
العنوان SW3test:
لو المفتاح Sw3 =1 عندها انتقل للعنوان start
و إلا ضع على الليدات 248 ثم عد للدورة

هل نترجمه للإنجليزية؟؟
لو = IF ، و إلا = Else و عندها = Then و إعطاء اسم هى Dimension لآنها تعنى اسم و حجم معا أو حيز أو صنع شيء طبقا لمواصفة محددة أما استخدام اسم بديل فهو Alias . كثير من المترجمات تفضل البدء بكلمة Main بمعنى أساسى ، لا بأس فهى تعرفك أنت أين يبدأ البرنامج و دوما ما تحتاج عنوان فى بداية البرنامج لتكراره.

كود:
Main:
Switches = 255
LEDs = 255
Loop:
If Sw1 = 1  then
	Goto SW2test
Else
	LEDs = 254
	Goto loop
End If
حيثما تريد كتابة أكثر من تعليمه فى أى من الجزأين فإما تكتب كل منهما فى سطر مستقل كما سبق أو تفصل بينهما بالحرف ": “ كما فى المثال التالى أو ربما المترجم يتبنى حرف آخر، فلنستخدمه إذن.
طبعا هنا ستقول أن كلمة "عندها أو Then “ زائدة لكن ستجد ضرورتها لو كتبتها فى سطر واحد هكذا
If Sw1 = 1 then Goto SW2test Else LEDs = 254 : Goto loop
فهى تفصل بين كود الشرط و ألذى قد يكون معادلة طويلة و بين الأوامر الواجب تنفيذها عند تحقق الشرط كما Else تفصل بين كود التحقق و كود عدم التحقق – كل كلمة لها مكانها و ضرورتها و مفهومة إن نسيت بمقدورك أن تستنتجها و تركز فى البرنامج بدلا من التركيز على ما لا جدوى منه من أقواس و فواصل منقوطة وهل الفاصلة قبل القوس أم بعده..
وفى نمط السطر الواحد سنستغنى عن حد الختام وهو End If لأنها تفصل بين كود Else و باقى البرنامج.
هكذا يمكننا أن نكتب باقى البرنامج بالسطر الواحد هكذا

كود:
SW2test:
If Sw2 = 1  then  Goto SW3test  Else  	LEDs = 252  : Goto loop  
SW3test:
If Sw3 = 1  then  Goto Start  Else  LEDs = 248 : Goto loop
طبعا لو عكسنا المنطق سنوفر قفزة من الاثنتين (الأولى) بحكم أنها للمكان التالى مباشرة فيمكننا القول

كود:
If Sw1 = 0  then  LEDs = 254  : Goto loop 
If Sw2 = 0 then  LEDs = 252  : Goto loop  
If Sw3 = 0  then  LEDs = 248  : Goto loop  
Goto Main

لاحظ أن البرنامج الأفضل هو ألذى يقوم بمهام أكثر بكود أقل فى زمن أسرع.
هكذا أصبح البرنامج بالبيزك لكن الكثير لا يحب البيزك لأن كلمة بيزك فى مفهومهم تعنى "أساسى" أو قليل الشأن لكن من ابتكروها كانوا يقصدوا Beginner All-purpose Scientific Instruction Code أى علمية متعددة المهام.

و لنكتبه بلغة C أولا يجب أن تلتزم بالأحرف المكتوبة بمعنى لو كتبت Loop ثم لاحقا goto loop سيعترض أن العنوان غير موجود. هذا من بقايا نشأة اللغة فالفرق بين الحرف الكبير و الصغير هو البت رقم 5 فمثلا
حرف A = 0100 0001 بينما حرف a=0110 0001 وهكذا فى باقى الأحرف و لتوحيد المقاس يلزم تنفيذ أمر على كل الحروف مثل OR x,#0010 0000 لجعل الحروف صغيرة أو AND x,1101 1111 لجعلها كبيرة وهذا كان رفاهية و إسراف عندما كانت ذاكرة الحاسبات تحسب بالبايت و تشترى بالبت و حتى لاحقا عندما حسبت بالكيلو بايت. أيضا كل الأوامر تكتب بالأحرف الصغيرة ولو كتبت أى حرف كبير لن يتعرف عليها المترجم. هذا قد يوقعك فى مشكلة لو أخطأت فى حجم حرف فى اسم متغير فى برنامج من عدة صفحات حسب المترجم المستخدم.
سنجد أن البداية بالتعريفات كما سبق الشرح ثم بكلمة Void وهى تعنى "خلاء" أو فراغ أو مساحة و كلمة main ضرورية للبدء ثم قوسين لتحديد أنك لا تضع بينهما أى بيانات مطلوب معالجتها ثم القوس المعوج ألذى يحدد البداية و مثله للنهاية

كود:
void main() 
{
TRISA  = 0xFF;                   // PORTA is input
TRISC  = 0;                          // PORTC is output
Loop:
if (Sw1=1) {
	Goto SW2test ;
		}
else {
	LEDs = 254 ; 
	Goto loop ;
}
الشرط يجب أن تضعه بين قوسين (لماذا ؟ لا تسألنى فلم يجيبنى أحد ولا أرى سببا غير ما شرحت سابقا) لو أردت أن تضع بعد ذلك أكثر من سطر فيجب أن تبدأ بالقوس المعوج } و تنتهى بآخر { و كل سطر منتهى بالمقدسة ";" من غير ليه و الصورة المختصرة تصبح

كود:
SW2test:
if (Sw1 = 0 ) 
	{ LEDs = 254  ;
	 Goto loop ;
}
if (Sw2 = 0) {
	 LEDs = 252  ;
	 Goto loop  ; }
if (Sw3 = 0)  {
  	LEDs = 248 ;
	 Goto loop  ;
Goto Start  ;
}
هكذا حولنا البرنامج الصغير إلى كافة اللغات المعنية. هل نطوره؟ حسنا المرة القادمة إن شاء الله نبدأ فى معرفة المزيد من تفاصيل المعالج و المزيد من الأوامر لنصنع كارت تحكم فى غسالة كهربية مثلا ثم فرن ميكرو ويف .
أيضا التعليمات بالبيزك و السى أعطت ذات الكود أى لا توجد لغة أقرب للمكونات من الأخرى.



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