آیا میدانید کد کشور روسيه 007 است
هر كسي به من كلمه اي بياموزد مرا بنده خود كرده است.
Logo

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

جمع و تفريق بي علامت دستور (ADD)
از اين دستور براي جمع دو داده 8 بيتي استفاده مي شود. براي عمل جمع حتما بايد يكي از داده ها در انباره A باشد و ديگري مي تواند در يكي از ثباتها يا داده فوري باشد.
قالب دستور:  ADD  A,SOURCE
مثال عدد 10H را با E5 جمع كنيد؟
ابتدا يك از اعداد را به طور دلخواه در انباره ريخته و سپيس عدد ديگر را با انباره جمع مي كنيم


MOV    A,#10H                  10H
ADD   A,#0E0H                 +E5H  =F5H        A=F5H


نكته: اگر بعد از علامت پوند # عددي در مبناي هگز باشد كه بايت سنگين آن يكي از حروفهاي A تا  F باشد بايد حتما بين اين حروفها و # صفر قرار دهيم تا كامپايلر آن را يك عدد در مبناي هگز بشناسد نه يك حرف انگليسي.
بعد از عمليات جمع نتيجه حاصل جمع در خود انباره قرار مي گيرد.



جمع اعداد 16 بتي دستور ADDC
از اين دستور براي جمع دو داه 16 بيتي استفاده مي شود البته نه اينكه مستقيما داده 16 بيتي را با هم جمع مي كند بلكه ما ابتدا بايد اين داده 16 بتي را به داده 8 بتي تجزيه كردن و با هم جمهع كنيم براي اين كار اگر با 8 بيتي اول عدد اول را با 8 بيت اول عدد دوم جمع كنيم اگر رقم نقلي توليد شود اين دستور به طور اتوماتيك اين رقم نقلي را با بايت دوم عدد اول و دوم جمع مي كند به مثال زير توجه كند!
مثال مي خواهيم عدد 3CE7+3B8D را در مبناي هگز با هم جمع كنيم. براي جمع ابتدا پرچم كري را صفر مي كنيم چون ممكن است از قبل توسط برنامه اي ديگر يك شده باشد. سپس اين داده 16 بيتي را به داده 8 بيتي تجزيه مي كنيم. مي دانيم كه در ميكر همه چيز 8بتي مي باشد پس از جمع دو داده 16 بيتي مطمئنا يك داده 16 بزرگتر توليد مي شود براي همين ما بايت سبك را در R1 قرار مي دهيم و بايت سنگين  را در R2 قرار مي دهيم البته اين يك فرض دلخواه مي باشد شما مي توانيد اين داده را در هر ثباتي قرار دهيد و از حاصل اين جمه در جايي ديگر استفاده كنيد.


CLR   C 
MOV   A,#0E7H
ADD   A,#8DH
MOV   R1,A
MOV   A,#3CH
ADDC   A,#3BH
MOV    R2,A


اصول كار ADDC در اصل اين است كه دو عمل جمع را انجام مي دهد يعني اينكه ابتدا عدد 3C را با عدد 3B جمع كرده و نتيجه اين محاسبه را دوباره با مقدار كري يعني CY=1 جمع مي كند و نتيجه نهايي را در انباره قرار مي دهد.


   1
  3CE7
+3B8D  =   7874H


در اين مثال از جمع E7+8D يك رقم نقلي توليد مي شود كه در نتيجه پرچم كري برابر با 1 خواهد شد كه نشانگر انشار رقم نقلي از بايت پايين به بايت بالا مي باشد كه در خط بعدي برنامه اين رقم نقلي با حاصل جمع بايت هاي سنگين نيز جمع خواهد شد.


دستور DA  A 
از اين دستور براي جمع BCD استفاده مي شود همانطور كه مي دانيم اعداد ما از 0 تا 9 مي باشد كه در ميكرو بعد از جمع ممكن است اين حاصل جمع BCD نباشد و براي ما قابل فهم نيست يعني اينكه قابل نمايش روي سون سگمنت يا LCD  نيست كه براي حل اين مشكل از دستور DA  A استفاده مي شود قابل ذكر است كه اين دستور تنها بعد از دستور جمع و با انباره مي تواند كار كند يعني اينكه قبل از DA  A بايد از دستور جمع حتما استفاده شود. عددي كه قرار است براي BCD بودن تست شود اول بايد انباره قرار گيرد و سپس از اين دستور استفاده كنيم. اين دستور يك بايت را چك مي كند و در صورت لزوم به نيبل پايين عدد 6 را اضافه مي كند تا اين BCD استاندارد شود و براي نيبل بالا عدد 6 يعني 60 را اضافه مي كند. به مثال هاي زير توجه كنيد!
17H+28H=3FH=00111111B
عدد F يك عدد BCD نمي باشد همانطور كه مي دانيم حداكثر عدد يعني 9 داراي كد 1001 مي باشد كه در نيبل پايين اين عدد 1111 مي باشد براي BCD كردن آن به صورت زير عمل مي كنيم. ابتدا عدد را در انباره قرار داده و سپس از دستور DA  A  استفاده مي كنيم دستور به طور خودكار عدد 6 را به نيبل پايين اضافه مي كند.


MOV   A,#17H     17
ADD   A,#28H    +28
DA     A              3F+06=45H


براي نيبل بالا هم همين مراحل انجام مي گير البته همانطور گفتيم اين دستو خودكار است يعني اينكه اگر خود حاصل جمع BCD بود ديگر عدد 6 را اضافه نمي كند.


تفريق اعداد بي علامت (SUB   SUBB)
البته دستور تفريق دو نوع مي باشد يكي SUB و ديگري SUBB تفريق با قرض. در بسيار از ميكرو پروسسورها اين دو نوع دستور وجود دارد حال در8051 فقط SUBB وجود دارد براي تبديل SUBB به SUB كافي است كه قبل از اجراي اين دستور CY=0 گردد.
SUBB با CY=0
8051 و ديگر  پردازنده هاي مدرن از روش متمم 2 براي تفريق استفاده مي كنند.
براي مثال عدد 3F-23 را انجام م دهيم:


CLR   C                    CY=0
MOV   A,#3FH          A=3F
MOV   R1,#23H        R1=23
SUBB   A,R1             A-R1  =  1C


اگر بعد از اجراي SUBB پرچم CY=1 گردد نتيجه عمليات منفي بوده و اگر CY=0 گردد نتيجه عمليات مثبت بوده. حال اگر نتيجه منفي بود CPU آن را به صورت متمم 2 رها ميكند كه بايد خود برنامه نويس با استفاده از دستوات شرطي نتيجه را به كمك دستور CPL (يعني متمم كردن) و دستور INC (يك واحد اضافه كردن) تغيير دهد.
مثال عدد 6E از 4C كم شود و نتيجه تفريق در ثبات R1 قرا گيرد؟
در اين برنامه اگر نتيجه مثيت باشد كه MGH پرش مي كند و حاصل را د R1 قرار مي هد و اگر نتيجه منفي باشد ابتدا محتوا انباره متمم مي شود و سپس يك واحد به آن اضافه مي شود كه در نهايت نتيجه براير خواهد بود با -22


پرچم كري برابر صفر گردد  CLR   C
عدد 4C در انباه قرار گيرد MOV   A,#4CH
عدد 6E از انباره كم شود  SUBB   A,#6E
اگر پرچم كري صفر است به MGH پرش كن JNC    MGH
محتواي انباره را متمم كن  CPL   A
يك واحد به انباره اضافه كن  INC  A
محتواي انباره را در R1 كپي كن  MGH:   MOV   R1,A
SUBB با CY=1


از اين دستور براي تفريق اعداد 16 بيتي استفاده مي شود كه از قرض عملوند پايين تر مراقبت مي كند. اگر CY=1 باشد بعد از اجراي دستور SUBB عدد 1 از حاصل تفريق كم خواهد شد. به مثال زير توجه كنيد!
مي خواهيم عدد 2762-1296 را از هم كم كنيم؟ بايت سبك در R1و بايت سنگين در R2


كري برابر با صفر شود CLR    C
عدد 62 را در انباره بريز MOV    A,#62H
عدد 96 را از انباره كم كن كه از اين كم كردن پرچم كري 1 خواهد شد SUBB   A,#96H
نتيجه اين دو بايت را در R1 قرار بده MOV    R1,A
عدد 27 را در انباره كپي كن MOV   A,#27H
عدد 12 را از انباره كم كن و اين نتيجه را اگر CY=1 است از 1 هم كم كن SUBB   A,#12H
نتيجه را در R2 قرار بده  MOV    R2,A


توضيح برنامه: ما در اول برنامه پرچم كري را به كمك دستور CLR صفر كرديم حال براي تفريق اين عدد 16 بتي را به دو عدد 8 بتي تجزيه كرده و از هم كم مي كنيم از تفريق عدد 96 از 62 پرچم كري ما يك مي شود و اين نشان دهنده منفي بودن عمليات است و در تفريق دو بايت بعدي ميكرو دو بايت سنگين را از هم كم مي كند و سيپس نتيجه هر چه بود به پرچ كري نگاه مي كند مي بيتد كه CY=1 شده بود از قيل، پس اين نتيجه را از 1 كم مي كند و نتيجه را در R2 قرار مي دهد.


قضيه اعدا مثبت و منفي در ديجيتال
در ديجيتال ما بيت آخر را به عنوان علامت مثبت و منفي اعدد استفاده مي كنيم به اين صورت كه اگر بيت آخر كه با رنگ قرمز نشان داده شده صفر بود نشانگر مثبت بودن عدد مي باشد و اگر يك بود يعني اينكه عدد منفي مي باشد پس ما تنها از 7 بيت براي مقدار عدد مي توانيم استفاده كنيم. به محاسبه عدد زير توجه كنيد؟

0
1
0
0
0
1
1
0
=
62H
0
1
1
0
1
0
0
1
=
-96H


در ميكرو CPU عمل جمع را جمع مي كند و عمل تفريق را هم جمع مي كند چون طراحي مدار تفريق گر در CPU مشكل است از همان جمع كننده استفاده كرده اند اما براي تفريق CPU مراحل زير را انجام مي دهد.
1) ابتدا عدد منفي را متمم كرده (مكمل 1)
2) سپس يك واحد به آن اضافه مي نمايد (مكمل 2)
CPU دو عدد بالا را براي تفريق به صورت زير انجام مي دهد:
با عدد 62 كه خودش مثبت مي باشد كاري ندار و فقط روي عدد منفي به صورت زير كار مي كند.

0
1
0
0
0
1
1
0
=
62H
ثابت مي ماند
0
1
1
0
1
0
0
1
=
-96H
معادل باينري اين عدد
1
0
0
1
0
1
1
0
 
 
متمم كردن فقط عدد 96
1
 
 
 
 
 
 
 
 
+
با عدد 1 جمع مي شود
0
1
0
1
0
1
1
0
=
6AH
نتيجه بعد از جمع با عدد 1
0
1
0
0
0
1
1
0
=
62H
 
0
1
0
1
0
1
1
0
=
6AH
حال اين نتيجه را با عدد 62 جمع مي كنيم
0
0
1
1
0
0
1
1
=
CCH
نتيجه نهايي پايان كار CPU
براي اينكه نتيجه را به دسيمال تبديل كه بفهميم نتيجه عمليات چند بوده به شكل زير عمل مي كنيم
0
0
1
1
0
0
1
1
=
CCH
نتيجه نهايي را دوباره متمم مي كنيم
1
1
0
0
1
1
0
1
 
 
البته در ابن مرحله بيت علامت را متمم نمي كنيم
1
 
 
 
 
 
 
 
+
 
0
0
1
0
1
1
0
1
=
 
دسيمال عدد همرا با بيت علامت آن
4
3
-
=
-34H
كه -34H معادل -52 دسيمال مي باشد

با توجه به جدول بالا كه به وضوحنشان داده شده كه چطوري اعدا منفي از هم تفريق مي شود فهميديم كه اگر عدد ما علامت دار باشد در نتيجه 7 بيت اول مقدار عدد مي شود و بيت آخر علامت عدد مي شود كه اين بيت آخر روي پرچم كري تاثير دارد يعني اينكه اگر اين بيت 1 شود در اصل پرچم كري يك شده و وقتي كري 1 شود CPU متوجه مي شود كه نتجه محاسبه منفي بود.
حال به ادامه حل مثال بر مي گرديم:
عدد 96 از 62 كم شد و پرچم كري هم به علت منفي بودن عمليات 1 شد حال در مرحله بعد CPU عدد 12 را از 27 كم مي كند و نتيجه هر چه CPU به كري نگاه مي كند و متوجه مي شود كه در محاسبه قبلي كري يك شده و الان بايد اين نتيجه (يعني دو عدد آخري) را از يك كم كند و اين كار را انجام مي دهد و در نهايت اين محاسبه را به صوت دقيق انجام داده و نتايج را در ثبات هاي مربوطه قرار مي دهد.
پس 62-96=CCH=R1 و 27-12-1=14H=R2 كه كل نتيجه برابر با 14CCH


دستوررات ضرب و تقسيم
دستور MUL  AB 
اين دستور كه قالب آن به صورت بالا مي باشد دستور ضرب مي باشد اين دستور تنها با ثبات هاي A,B كار مي كند يعني اينكه ما بايد ابتدا دو داده اي قرار است در هم ضرب شوند را در ثبات هاي A و B قرار داده و سپس از اين دستور استفاده كنيم.
مثال دو عدد 40 و 20 را در هم ضرب كنيد؟


MOV   A,#40H
MOV   B,#20H
MUL   AB      
دستور DIV  AB 


اين دستور كه قالب آن به صورت بالا مي باشد دستور تقسيم مي باشد اين دستور تنها با ثبات هاي A,B كار مي كند يعني اينكه ما بايد ابتدا دو داده اي قرار است بر هم تقسيم شوند را در ثبات هاي A و B قرار داده و سپس از اين دستور استفاده كنيم.
مثال عدد 40 را بر 20 تقسيم كنيد؟


MOV   A,#40H
MOV   B,#20H
DIV    AB


كاربرد دستور تقسيم در مبدل هاي آنالوگ به ديجيتال است كه با تقسيم كردن بر 10 مقدار آنالوگ به دهدهي تبديل مي شود. و موارد ديگر...

  منبع: www.picpars.com

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


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


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

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


مثال اسمبلی آموزش اسمبلی برنامه های اسمبلی پروژه های اسمبلی مثال assembly آموزش assembly برنامه های assembly پروژه های assembly برنامه نویسی اسمبلی آموزش برنامه نویسی اسمبلی آموزش 8051 آموزش 8051 به زبان اسمبلی جمع اعداد 16 بتي دستور ADDC تفريق اعداد بي علامت SUB SUBB دستوررات ضرب و تقسيم دستور MUL AB جمع و تفريق بي علامت دستور ADD

ارسال شده در مورخه : يكشنبه، 4 بهمن ماه، 1388 توسط مدیریت بازدید [2864]   پرینت

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

 شمارنده سه رقمی همراه با بوق  [ پنجشنبه، 6 خرداد ماه، 1389 ] 2214 مشاهده
 آموزش ميكرو كنترلر 8051 قسمت پنجم (معرفي دستورات)  [ يكشنبه، 4 بهمن ماه، 1388 ] 2527 مشاهده
 شمارنده 3رقمي به زبان اسمبلي COUNTER  [ چهارشنبه، 21 بهمن ماه، 1388 ] 1683 مشاهده
 راه اندازي استپ موتور با 8051 (STEPER MOTOR)  [ چهارشنبه، 21 بهمن ماه، 1388 ] 3886 مشاهده
 شمارنده دو رقمی با 8051 و به زبان اسمبلی  [ چهارشنبه، 29 ارديبهشت ماه، 1389 ] 3205 مشاهده
نام شما: جدیدی
ایمیل شما:

در مورخه : سه شنبه، 29 فروردين ماه، 1391 (IP آدرس : )

با سلام وتشکر از شما

میشه لطفا برنامه یک ماشین حساب ساده با چهارعمل اصلی با 8051 برامون بگذلرید؟

اگه برنامه های با AVRرا دانلود کنیم حتما باید AVRرو کامپیوترمان نصب باشه تا بشه دیدشون؟؟؟

 

ارسال جوابیه ]

 
نام شما: [ کاربر جدید ]

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

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


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

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

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

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

پروژه های آماده
پروژه کنترل سروو موتور از 0 تا 180 درجه

کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها. جزئیات...


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



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

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

دوشنبه

1

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


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

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

آمار کاربران

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

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



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

نظرسنجی ها

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

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

پیشنهاد ما

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







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