ايجاد حلقه در برنامه نويسي ميكروكنترلر
دستورات کنترل برنامه:
اين دستور براي پرش به مكاني از برنامه استفاده مي شود كه اين مكان يك برچسب است كه قبلاً نامگذاري شده است.دقت كنيدكه براي پرش هاي كوتاه مي توان ازدستور 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 مقایسه می کند اگر مساوی نباشد به آدرس نسبی مقصد پرش می کند در غیر این صورت دستور بعدی اجرا می شود.