آیا میدانید نروژ سومين کشور صادر کننده نفت ميباشد
با، رفته گان به جهان ديگر، نتوان همراه شد، که اين کــوشش و هـــمراهي عـــمر را بـه بـاد مــي دهد. از اُرد بزرگ
Logo

حل تمرینات و پروژه های درس میکروکنترلر
آموزش ميكرو كنترلر 8051 قسمت سوم (معرفي دستورات)

دستورات JUMP , LOOP , CALL
دستور LOOP
LOOP به معناي حلقه مي باشد كاربرد آن در 8051 براي تكرار يك رشته دستورات مي باشد به كمك اين دسور مي توان تعداد خيلي زيادي از دستورات را تكرار كرد كه اگر بخواهيم آن دستورات را تك تك بنويسيم هم طول برنامه زياد مي شود و حجم برنامه كه باعث مي شود ROM 8051 به راحتي پر شود.قالب دستور به اين صورت مي باشد: DJNZ   REG,LABEL
از اين دستور بيشتر براي ايجاد حلقه هاي تاخيري و شمارنده بكار مي رود. براي مثال كاربرد آن را در تاخير با يك مثال روشن مي كنيم:


            MOV  R1,#09H
LOOP:   MOV  R2,#05H
MGH1:  DJNZ  R2,MGH1
            DJNZ  R1,LOOP



توضيح برنامه: در خط اول به R1 مقدار  9 داده شده است و در خط سوم به R2 مقدار 5 داده شده است. در خط سوم از دستور حلقه استفاده كرديم و به اين صورت مي باشد كه يك واحد از R2 كم مي كند و اگر صفر نبود به MGH1 پرش مي كند. و دو باره يك واحد از R2 كم مي كند اگر صفر نبود به MGH1 پرش مي كند. و اين كار را همين طور ادامه مي دهد تا R2 صفر شود بعد از صفر شدن R2 ديگر به MGH1 پرش نمي كند و خط چهرم برنامه را اجرا مي كند كه در اين خط گفته شده كه يك واحد از R1 كم كن اگر صفر نشده به LOOP پرش كن كه اگر به R1 يك واحد كم كند مقدار آن 8 مي شود و  به LOOP پرش مي كند كه در آنجا دو باره مقدار 5 به R2 داده مي شود و مراحل بالا تكرار مي شود. پس خط سوم 5 بار خوش را تكرار مي كند و خط چهارم هم 9 بار خط سوم را تكرار مي كند كه در كل 5*9=45 بار اين دستورات تكرار مي شود. البته CPU با كريستال 11.0529MHZ هر دستور را در مدت زمان 1.085Us اجرا مي كند اين زمان خيلي كمي است كه اگر ما ثبات R1=FFH و R2=FFH را بارگذاري كنيم يعني حداكثر عددي كه در يك ثبات 8 بتي مي تواند قرار گيرد. برابر خواهد بود با 256*256=65636 بار اين دستوات تكرار خواهد شد كه تقريبا با محاسبه دستورات سر بار حدود 0.2 ثانيه تاخير براي ما توليد مي كند البته اگر ما تاخير هاي دقيق تري لازم داشته باشيم مثلا براي ساعت بايد از تايمر ميكرو استفاده كنيم.

عدد 2 را روي پورت 1 انتقال بدهSTART:     MOV  P1,#02H  
يك تاخير ايجاد كن                   ACALL  DELAY
عدد 4 را روي پورت 1 انتقال بده                   MOV  P1,#04H
يك تاخير ايجاد كن                   ACALL  DELAY
به اول برنامه بر گردد و مراحل را تكرار كن                   SJMP  START

DELAY:      MOV  R1,#0FFH
LOOP:       MOV   R2,#0FFH
MGH:        DJNZ  R2,MGH
                DJNZ   R1,LOOP
                RET


انواع دستورات CALL
اين دستور به دو صورت و با خصوصيات مختلف مورد استفاده قرار مي گيرد:
دستور ACALL :
اين دستور به فراخواني كوتاه معروف است  كه 2 بايتي مي باشد و مي تواند در محدود 2 كيلو بايتي از حافظه پرش كرده و زير برنامه را بخواند.
دستور LCALL :
اين دستور به فراخواني بلند معروف است  كه3 بايتي مي باشد و مي تواند در محدود 64 كيلو بايتي از حافظه پرش كرده و زير برنامه را بخواند.
بسته به طول برنامه و حجم آن بايد از اين دستورات استفاده كرد. كه البته خود كامپايلر ها هنگامي كه مثلا از دستور ACALL استفاده مي كنيم و آن برنامه اي كه بايد فراخواني شود خارج از محدوده باشد خطا مي گيرند و برنامه نويس را آگاه مي كند.


دستور JUMP
اين دستور به معناي پرش مي باشد و به چندين دستور ديگر تجزيه مي شود. از اين دستورات براي منتقل كردن CPU به مكاني ديگر از برنامه مي باشد به عبارت ديگر از اين دستورات كه به پرش هاي شرطي و غير شرطي تقسم مي شوند براي فراهم شدنيك شرط استفاده شده تا بعد از ايجاد آن شرط CPU كار ديگري انجام دهد. كه با يك مثال اين قضيه را روشن مي كنيم. ابتدا دستورات شرطي:


پرش هاي شرطي
توضيح عمكرد دستور

توضيح
عمكرد
دستور
 
اگر A=0 است به LABEL پرش كن
JZ A,LABEL
 
اگر A≠0 است به LABEL پرش كن
JNZ A,LABEL
REG=R0-R7/A/B
يك واحد از REG كم كن به LABEL پرش كن
DJNZ  ERG,LABEL
 
مقايسه و اگر A≠BYTE است به LABEL پرش كن
CJNE  A,BYTE,LABEL
مثلا مقايسه انباه با عدد 60
CJNE A,#60H,LABEL
مقايسه REG با يك عدد و اگر نابرابر بود به LABEL پرش كن
CJNE REG,#DATA,LABEL
 
اگر پرچم كري برابر با 1 است پرش كن
JC,LABEL
 
اگر پرچم كري برابر با 0 است پرش كن
JNC,LABEL
مثلا بيت 1 از پورتيك
JB P1.1 ,LABEL
اگر بيت يك است به LABEL پرش كن
JB BIT,LABEL
 
اگر بيت صفر است به LABEL پرش كن
JNB BIT,LABEL
 
اگر بيت 1 است پرش كن و آن بيت را هم صفر كن
JBC BIT,LABEL

مثال برنامه اي بنويسيد كه اگر بيت P1.5=0 صفر شد عدد 50 را روي پورت 2 بريزد و در غير اين صورت عدد 80 را روي پورت 2 بريزد؟


START:      JB   P1.5,OUT_80
                JNB  P1.5,OUT_50
               SJMP  START
OUT_80:    MOV  P2,#80H
                 SJMP  START
OUT_50:    MOV  P2,#50H
                 SJMP  START


در خط اول اگر بيت يك باشد عدد 80 را روي پورت 2 مي ريزد و در خط دوم اگر بيت صفر باشد عدد 50 را روي پورت 2 مي ريزد.
پرش هاي غير شرطي
دستورات غير شرطي عبارت اند از:
SJMP پرش كوتاه
اين دستور دو بايتي بوده و قادر است در محدوه +128 تا -128 بايت پرش كند. يعني از 00-FF .
LJMP پرش بلند
اين دستور سه بايتي بوده و قادر است در محدوه 0000-FFFF هگز پرش كند.

 


دستور  CALL
CALL به معناي فراخواني يا صدا زدن يعني اينكه يك زير برنامه (برنامه فرعي) را فراخواني كنيم به عنوان مثال در يك برنامه ما يك تاخير لازم داريم و در چند مورد هم لازم داريم براي كاهش طول برنامه اين برنامه تاخيري را در محلي نوشته و به كمك دستور CALL در هر جايي كه لازم باشد آن را فراخواني مي كنيم. نكته اي مهم در مورد فراخواني اين است كه در پايان هر زير برنامه بايد دستور RET را نوشت تا CPU به برنامه اصلي برگرد و ادامه كار را نجام دهد.
برنامه يك چشمك زدن كه قبلا در قسمت دوم بحث شده حال به صورت كامل آن را مي نويسيم:
مثال : برنامه يك چشمك زن بنويسيد با دو تا LED كه روي بيت هاي P1.1  , P1.2 وصل شده اند؟
ابتدا بيتهاي پورت يك را به صورت زير مي نويسيم و كد هگز آن را بدست مي آوريم توجه شود كه بايد حتما بعد از كد H بنويسيم.

P1
D0
D1
D2
D3
D4
D5
D6
D7
02
0
1
0
0
0
0
0
0
04
0
0
1
0
0
0
0
0

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.


لینک ثابت این صفحه:   


© کپی برداری از مطالب این سایت تنها با ذکر منبع مجاز می باشد

در صورت داشتن هر گونه سوال، نظر و پیشنهاد راجب این مطلب می‌توانید در قسمت نظرات همین صفحه مطرح نمائید. همچنین با شرکت در نظر سنجی های سایت، ما را در بهبود بخشیدن به مطالب یاری کنید.


مثال اسمبلی آموزش اسمبلی برنامه های اسمبلی پروژه های اسمبلی مثال assembly آموزش assembly برنامه های assembly پروژه های assembly برنامه نویسی اسمبلی آموزش برنامه نویسی اسمبلی آموزش 8051 آموزش 8051 به زبان اسمبلی دستور JUMP پرش هاي غير شرطي LJMP پرش بلند SJMP پرش كوتاه پرش هاي شرطي دستور LCALL دستور ACALL انواع دستورات CALL دستور LOOP

ارسال شده در مورخه : پنجشنبه، 1 بهمن ماه، 1388 توسط مدیریت بازدید [4323]   پرینت

مرتبط باموضوع :

 شمارنده 3رقمي به زبان اسمبلي COUNTER  [ سه شنبه، 20 بهمن ماه، 1388 ] 2105 مشاهده
 شمارنده 4 رقمي به زبان اسمبلی با 8051  [ پنجشنبه، 6 خرداد ماه، 1389 ] 3594 مشاهده
 آموزش ميكرو كنترلر 8051 قسمت پنجم (معرفي دستورات)  [ يكشنبه، 4 بهمن ماه، 1388 ] 2527 مشاهده
 پروژه ولت متر دیجیتال با 8051 به زبان اسمبلی  [ چهارشنبه، 21 بهمن ماه، 1388 ] 4965 مشاهده
 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]
  • امتیاز بدهید
  • انتخاب ها
  • اشترک گذاری
آیا این مطالب مورد رضایت شما واقع گردید؟ لطفا با رای دادن به این مطلب ما را در بهبود بخشیدن به مطالب کمک کنید. با اینکار به سایر دوستان‌تان نیز کمک خواهید کرد.


 فایل پی دی اف فایل پی دی اف

 گرفتن پرينت از اين مطلب گرفتن پرينت از اين مطلب

 ارسال به دوستان ارسال به دوستان

 گزارش این پست به مدیر سایت گزارش این پست به مدیر سایت

پروژه های آماده
پروژه تایپ حروف و اعداد با کیبورد 3×4 به زبان سی

با استفاده از میکروکنترلر ATMEGA8 و کیبورد 3×4 می توان حروف و اعداد را تایپ کرد و درون یک متغییر ذخیره نمود و محتوای این متغییر بر روی نمایشگر LCD نمایش داده می شود. در صورتی که فضای LCD پر شود کاراکترها به سمت چپ شیفت داده می شوند. تمامی حروف و اعداد کوچک و بزرگ انگلیسی قابل تایپ می باشند. جزئیات...


عناوین مطالب
عناوین مطالب را در موضوعات مربوطه جستجو کنید!
یک موضوع انتخاب کنید:



لینک باکس مهم‌ترین‌ ها
  • پروژه‌ها
  • برترین‌ها
  • پر بازدید
  • بیشترین نظرات
cash10-H9

سالنامه فارسی
ش ی د س چ پ ج
  12345
6789101112
13141516171819
20212223242526
2728293031

دوشنبه

1

1 خرداد ماه، 1391
21/05/2012


رویداد ها:
روز بزرگداشت ملاصدرا - روز بهره وری و بهینه سازی مصرف

جستجو در تقویم ...
cash40-D1

آمار کاربران

نظرسنجی
نظر شما در مورد کیفیت سایت چیست؟

خیلی عالیه
میتونه بهتر باشه
جای کار داره
خوب نیست
نظری ندارم!



شما میتوانید در این مورد نظر مکتوب خود را بنویسید: مشاهد نتایج و ثبت نظر

نظرسنجی ها

تعداد آراء: 679    نظرات: 42

تبادل لینک
PicPars با تمامی وب سایتها و وبلاگها تبادل لینک میکند. ابتدا لینک ما در وب خود ثبت کنید و سپس لینک خود را از اینجا برای ما ارسال کنید. در اولین فرصت لینک شما در سایت ثبت می شود.

پیشنهاد ما

سفارش طراحی پروژه
مرورگر پیشنهادی ما
نرم افزار دانلود فایلها
برنامه فشرده سازی







امتیاز به سایت
امتیاز به این صفحه
با یک امتیاز مثبت از طریق Gmail تان از سایت حمایت کنید