دستورات کنترل برنامه:

اين دستور براي پرش به مكاني از برنامه استفاده مي شود كه اين مكان يك برچسب است كه قبلاً نامگذاري شده است.دقت كنيدكه براي پرش هاي كوتاه مي توان ازدستور sjmpوبراي پرش هاي بلنداز دستور ljmp استفاده كرد.

مثال5:

loop:

.

.

.

jmp loop

 

دستور فوق به مكاني از برنامه به نام  loopپرش مي كند.

loop:jmp loop

 

اين خط برنامه باعث مي شود cpu دريك حلقه گيركند.البته مي توان به جاي برنامه فوق ازدستورjmp$ نيز استفاده كرد.

End

 

اين دستور مربوط به اسمبلر است كه نشان دهنده پايان برنامه وخروج ازآن است.لازم به ذكراست اين دستور مي بايست هميشه آخرين خط برنامه باشد.

نكته:شمابايد به گونه اي برنامه نويسي نماييدكه هيچگاه برنامه به دستور end نرسد.

 

نمونه برنامه (1):

باتركيب دستورات فوق شما مي توانيد يك برنامه ساده بنويسيد:

org 0

mov p1,#55h

loop:jmp loop

end

باپروگرام نمودن ic وقراردادن آن برروي بردآموزشي اين برنامه باعث مي شودكه ledهاي روي برد به صورت يك درميان روشن شوند.چرا؟

 

حال به تحليل برنامه ونحوه كار آن مي پردازيم:

اولين دستور كه نمايانگر خانه شروع برنامه است.همانطوركه درمباحث ميكرو كنترلر 89c51 مطالعه نموده ايد،p1 دقيقاً يك بايت از حافظه ram ميكروكنترلر مي باشد كه به ازاي هربيت خوديك پايهi/o برروي ميكروكنترلر دارد (پايه يك تاهشت).حال اگرهر بيت ازاين حافظه يك شودشما روي پايه نظيرآن  +5vو چنانچه صفر شود شماروي پايه نظير هر بيت مقدارصفريا gnd خواهيدداشت و  بالعكس.

حال عدد55h رابه باينري تبديل نماييد ودربيت هاي نظير حافظه قراردهيد.

55H=010101010B

دقيقاً به ازاي عددباينري بالا پايه هاي ميكرو فعال مي شوند.

نكته :البته توجه نماييد ledهاي روي بردآموزشي به صورت آندمشترك بسته شده اند در نتيجه Active Lowهستند،پس به ازاي هرصفرledروشن مي شود.

 

 

دستورات پرش های شرطی:

میکروکنترولر دارای تعدادی دستورات پرش شرطی است

 که عبارتند از JZ , JNZ , DJNZ , CJNE

 

 

دستور :JZ

JZ آدرس مقصد یا برچسب دستور

این دستور یعنی اگر محتوای آکومولاتور A  برابر 0 است به آدرس مقصد پرش کن در غیر این صورت دستور بعدی را اجرا کن

 

دستور :JNZ

JNZ  آدرس مقصد یا برچسب دستور

یعنی اگر محتوای آکومولاتور A برابر 0 نباشد به آدرس مقصد پرش می کند در غیر این صورت دستور بعدی اجرا می گردد.

 

دستور :CJNE

این دستور برای عملیات حلقه به کار می رود و فرم کلی آن به صورت زیر است:

CJNE اپراند 1 , آدرس نسبی. اپراند 2

این دستور اپراند 1 را با اپراند 2 مقایسه می کند اگر مساوی نباشد به آدرس نسبی مقصد پرش می کند در غیر این صورت دستور بعدی اجرا می شود.