e www.project-esisis.com\AVR_Assembly_دستورات محاسباتی

اسماعیل بخش زاد محمودی

09118315058

09336485452

09373054607

09390617786

http://telegram.me/Electronic_iran

mehrsa_bm

Esmail_bakhshzad@yahoo.com esmail2bakhshzad@gmail.com

*راهنمای سفارش پروژه*




www.doctronics.co.uk

www.powerengineering.blogfa.com

www.Elecdl.com

www.uoguelph.ca

www.doctronics.co.uk

http://www.sardarjangal.ir

وبلاگ مهندسی برق الکترونیک

 

 

 

 

 

 

 

 

 

 

Google

در اين وبلاگ
در كل اينترنت

الکترونیک مقدماتی

مقاومت

سلف

خازن

دیود

دیود زنر

یک سوسازی دیود

ترانزیستور BJT

دیجیتال Digital

الکترونیک صنعتی

تایرستورها Thyristors

ترایاک TRIAC

ماسفت MOSFET

ترانزیستور دوقطبی IGBT

مبدل های DC به DC

اینورترها(DC/AC Inverter)

میکرو الکترونیک AVR

برنامه نویسی Assembl

1. مقدمه

2. دستورات محاسباتی



11.مدارات میکروکنترلر 8051

12.مدارات میکروکنترلر PIC

13.مدارات میکروکنترلر AVR

14.مدارات دیجیتال Digital

15.مدارات آنالوگ Analog

 


 


دانلود نرم افزارهای کاربردی

 


Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

ساعت

دستور ADD :

      دستور ADD دو رجیستر را بدون در نظر گرفتن بیت کری باهم جمع کرده و نتیجه را در رجیستر Rd قرار می دهد.

ADD                Rd,Rr

Rd,Rr یکی از رجیستر های R0 تا R31 می باشند.

نکته: اگر در هنگام جمع از بیت 7 یک پرچم نقلی خارج شود. بیت کری C فعال خواهد شد و همچنین اگر از بیت 3 یک پرچم نقلی خارج شود بیت H نیم کری فعال خواهد شد.
تمام پرچم های بالا در رجیستر وضعیت تراشه وجود دارد:

Microcontroller AVR-2 (01)

مثال: دو عدد 8+8 را باهم جمع کنید؟

Microcontroller AVR-2 (02)

عملکرد بیتهای کری C و سرریز V بطور کلی از پرچم کری برای تشخیص خطای محاسباتی اعداد علامتدار و از پرچم سرریز برای تشخیص خطای محاسباتی اعداد غیر علامتدار استفاده می شود.

دستور ADC :
            این دستور رجیستر Rd را به همراه کری جمع می کند و نتیجه را در رجیستر Rd قرار می دهد تأثیر پرچم ها مثل دستور ADD می باشد.

ADC                Rd,Rr

مثال: اگر رجیستر R1=20 hex , R2=45 hex , C=1 باشد حاصل جمع چه می شود؟

ADC                R1,R2

Microcontroller AVR-2 (03)

دستور ADIW :

این دستور یک مقدار ثابت K بین 0 تا 63 را با زوج رجیستر RD,RD+1 که با هم به صورت یک رجیستر شانزده بیتی عمل می کند، جمع نموده و نتیجه را در همان دو رجیستر قرار می دهد.

ADIW                Rd+1,Rd,K

مثال: اگر رجیستر های R25=A0 hex, R24=D5 hex باشد با اجرای دستور زیر حاصل چه می شود؟

Microcontroller AVR-2 (04)

دستور SUB :

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

SUB                Rd,Rr

Rd,Rr یکی از رجیستر های R0 تا R31 می باشند.
نکته: اگر پس از اجرای دستور SUB بیت کری صفر باشد حاصل تفریق یک مقدار مثبت و اگر بیت کری یک بود. حاصل تفریق یک مقدار منفی و بصورت مکمل 2 است.

Microcontroller AVR-2 (05)

با توجه به اینکه بیت کری صفر می باشد پس حاصل بدست آمده یک مقدار مثبت است.

دستور SBC :
            این دستور جهت تفریق نمودن دو رجیستر همراه با کری استفاده می شود:

SBC                Rd,Rr

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

دستور SUBI :
            این دستور جهت تفریق نمودن یک مقدار ثابت از یک رجیستر استفاده می شود و الگوی آن به شکل زیر است:

SUBI               Rd,K

K یک عدد ثابت بین 0 تا 255  می باشد.
مثال:

Microcontroller AVR-2 (06)

دستور SBCI :
            این دستور جهت تفریق نمودن یک مقدار ثابت از یک رجیستر به همراه پرچم کری استفاده می شود. الگوی آن بصورت زیر است:

SBCI               Rd,K

K یک عدد ثابت بین 0 تا 255  می باشد.

مثال:  با فرض یک بودن کری

Microcontroller AVR-2 (07)

دستورSBIW  :
            این دستور یک مقدار ثابت 0 تا 63 را از یک زوج رجیستر کم نموده و نتیجه را در همان زوج رجیستر قرار می دهد:

SBIW               Rd+1:Rd,K

K یک عدد ثابت بین 0 تا 63  می باشد.

Rd فقط یکی از رجیستر های R24,R26,R28,R30 است.

مثال: اگر محتوای رجیستر های R26=15 hex و R27=3A باشد با اجرای دستور زیر وضعیت پرچمها را بررسی کنید.

Microcontroller AVR-2 (08)

وضعیت پرچم ها: همه پرچم ها صفر هستند

دستورINC  :
            این دستور یک واحد به محتوای رجیستر Rd اضافه می کند. و الگوی آن به صورت زیر است: توجه: از این دستور در برنامه مختلف به تعداد زیاد استفاده می شود برای افزایش پله یا خط برنامه؟

INC              Rd

دستور INC پرچم کری را تحت تأثیر قرار نمی دهد.

مثال:                            

Microcontroller AVR-2 (09)

در برنامه بالا که برای ذخیره کردن یک داده تبدیل شده که پس از هر تبدیل مقدار مورد نظر در رجیستر R0 ذخیره کرده سپس به برچسب Save_Data: هر بار پرش نموده و هر بار مقدار را در رجیستر های R7 تا R10 ذخیره می نماید. با این چند خط برنامه شما می توانید 4 عدد مختلف را در 4 رجیستر ذخیره کنید.

دستورDEC  :
            این دستور یک واحد از محتویات رجیستر Rd کاهش می دهد و الگوی آن به صورت زیر است: توجه: از این دستور در برنامه مختلف به تعداد زیاد استفاده می شود برای کاهش پله یا خط برنامه؟

DEC              Rd

دستورات محاسباتی ویژه

          در سری جدید تراشه AVR خود یک واحد سخت افزاری ضرب کننده به نام واحد MAC به آن اضافه نموده است که با ALU در ارتباط می باشد. با اضافه شدن این واحد سرعت عملیات ضرب تا دوسیکل ساعت کاهش یافته است. از قابلیت های این ضرب کننده می توان به موارد زیر اشاره نمود:
  1. ضرب دوعدد 8 بیتی صحیح و اعشاری به صورت علامت دار و بدون علامت.
  2. ضرب دوعدد 16 بیتی صحیح و اعشاری به صورت علامت دار و بدون علامت.

دستورMUL  :
            این دستور دو عدد هشت بیتی بدون علامت را در هم ضرب نموده و نتیجه را که بصورت شانزده بیتی می باشد درون رجیستر های R0و R1 قرار می دهد. تمام دستورات ضرب روی پرچم های C,Z تأثیر می گذارند.

MUL              Rd,Rr

دستورMULS  :

        این دستور دو عدد علامت دار هشت بیتی را در هم ضرب می کند و نتیجه را بصورت شانزده بیتی در رجیستر های R0,R1 قرار می دهد.

MULS              Rd,Rr

مثال:دو عدد 89 hex و A3 hex را در هم ضرب کنید؟

Microcontroller AVR-2 (10)

دستورFMUL  :

           این دستور همانند دستور MUL عمل می کند، با این تفاوت که پس از عمل ضرب حاصل را یک بیت به سمت چپ شیفت داده و در رجیستر های R0و R1 قرار می دهد.

FMUL              Rd,Rr

این عملکرد برای ضرب دو عدد اعشاری در هم می باشد و حاصل را به صورت اعشاری بازگرداند.

دستورFMULSU  :
            این دستور همانند دستور FMUL است، با این تفاوت که یک عدد اعشاری علامت دار را در یک عدد اعشاری بدون علامت ضرب می کند و الگوی آن به صورت زیر است:

FMULSU              Rd,Rr

دستورات منطقی

دستور منطقی برای انجام عملیاتهای منطقی (AND-OR-XOR) بر روی رجیسترهای عمومی به کار می روند.

دستورAND  :
            این دستور عمل AND منطقی را بین دو رجیستر Rdو Rr انجام داده و حاصل را در رجیستر Rd قرار می دهد.

AND              Rd,Rr

مثال: دو عدد R0=32 و R1=23 پس از اجرای دستور AND پاسخ چیست؟

Microcontroller AVR-2 (11)

دستورANDI  :
            این دستور عمل منطقی AND را بین رجیستر  Rd و یک عدد ثابت انجام داده و حاصل را به رجیستر Rd منتقل می کند.

ANDI             Rd,K

دستورOR  :

این دستور عمل منطقی OR را بین دو رجیستر  Rd و Rr انجام داده و حاصل را درون رجیستر Rd منتقل می کند.

OR               Rd,Rr

مثال: دو عدد R0=2A و R1=35 پس از اجرای دستور OR پاسخ چیست؟

Microcontroller AVR-2 (12)

دستورORI  :
            این دستور عمل منطقی OR را بین دو رجیستر  Rd و یک عدد ثابت انجام داده و حاصل را درون رجیستر Rd منتقل می کند.

ORI               Rd,K

دستورEOR  :
            این دستور عمل منطقی XOR را بین دو رجیستر  Rd و Rr انجام داده و حاصل را درون رجیستر Rd منتقل می کند.

EOR               Rd,Rr

مثال: دو عدد R0=36 و R1=4A پس از اجرای دستور EOR پاسخ چیست؟

Microcontroller AVR-2 (13)

دستورCOM  :
            این دستور باعث معکوس شدن محتویات رجیستر Rd مکمل یک می شود.

COM               Rd

Rd یکی از رجیستر های R0 تا R31 می باشند.
مثال: با اجرای برنامه زیر محتوای R2 چقدر خواهد شد؟

LDI                R16,$55
MOV              R2,R16                 ;R2=0101,0101
COM              R2                       ;R2=1010,1010

دستورNEG  :
            این دستور محتوای رجیستر Rdرا مکمل دو (متمم) می کند.

NEG               Rd

Rd یکی از رجیستر های R0 تا R31 می باشند.    نکته: هنگامیکه محتوای Rd=80 باشد دستور NEG تغییری روی Rd نمی دهد و همان 80 باقی می ماند. این دستور بر روی همه پرچم ها اثر می گذارد.

LDI               R16,$69                 ;R16=0110,1001
NEG              R16                       ;R16=1001,0111

دستورSBR  :
            این دستور بیتهای تعیین شده در رجیستر Rd را یک می کند.

SBR               Rd,K

مثال: برنامه زیر بیت پنجم رجیستر R20 را یک می کند؟

LDI               R20,0x00               ;R20=0000,0000
SBR              R20,5                    ;R20=0000,0101

دستورCBR  :
            این دستور بیتهای تعیین شده در رجیستر Rd را صفر می کند.

CBR               Rd,K

برنامه زیر بیتهای 4 و 7 از رجیستر R17   را صفر می کند.

LDI               R21,0xFF               ;R21=1111,1111
SBR              R21,$6F                 ;R21=0110,1111

دستورTST  :
            این دستور تعیین می کند که محتوای رجیستر Rdیک مقدار صفر یا منفی است. این عمل با انجام AND منطقی بین Rd با خودش انجام می شود.

TST               Rd

پس از اجرای این دستور فوق پرچم N  اگر یک شود نشان دهنده منفی بودن محتوای R15 است.

دستورCLR  :
            این دستور محتوای رجیستر Rd را پاک می نماید. این حالت با اجرای دستور XOR بین خودش انجام می شود:                                                                                                 CLR               Rd

دستورSER  :
            این دستور تمام بیتهای رجیستر Rd را یک می کند.

SER               Rd

Rd یکی از رجیستر های R0 تا R31 می باشند.

دستورLSL  :
            این دستور تمام بیتهای رجیستر Rd را یک مکان به چپ شیفت می دهد. هنگام شیفت از سمت راست عدد صفر وارد شده و بیت هفتم وارد پرچم C می شود. این عمل برای ضرب مقادیر بدون علامت و علامت دار در عدد 2 مفید است.

LSL               Rd

دستورLSR  :
            این دستور تمام بیتهای رجیستر Rd را یک مکان به راست شیفت می دهد. هنگام شیفت از سمت چپ عدد صفر وارد شده و بیت LSB وارد پرچم C می شود. این عمل برای تقسیم مقادیر بدون علامت و علامت دار بر عدد 2 مفید است.

LSR               Rd

دستورROL  :
            این دستور تمام بیتهای رجیستر Rd را یک مکان به سمت چپ انتقال می دهد.

ROL               Rd

دستورROR  :
            این دستور تمام بیتهای رجیستر Rd را یک مکان به سمت راست انتقال می دهد.

ROR               Rd

دستورSWAP  :

            این دستور محل نیم بایتهای نیبل بالا و پایین رجیستر Rd را باهم عوض می کند.

SWAP               Rd

Rd یکی از رجیستر های R0 تا R31 می باشند.

مثال:

LDI               R16,0x71               ;R16=0111,0001  >>> 71
SWAP            R16                      ;R16=0001,0111  >>> 17

دستورات منطقی روی بیت

دستوراتی که روی بیتها تأثیر دارند بیش از چند ده دستور می باشد که در این بخش آنهای که استفاده بیشتری در برنامه نویسی دارند ذکر می شود.

دستورSBI  :

            این دستور بیت مشخص شده در یکی از رجیستر های I/O را یک می کند. و الگوی ان بصورت زیر است.

SBI               A,b

A آدرس یا نام رجیستر I/O می باشد.
b - عددی بین 0 تا 7 می باشد.
مثال: بیت دوم رجیستر DDRB را یک نمایید.

SBI              DDRB,2

دستورCBI  :
            این دستور بیت مشخص شده در یکی از رجیستر های I/O را صفر می کند. و الگوی ان بصورت زیر است.

CBI               A,b

دستورSEC  :
            این دستور پرچم کری C در رجیستر SREG را  یک می کند، و الگوی آن به صورت زیر است:  

SEC

دستورCLC  :

            این دستور پرچم کری C در رجیستر SREG را  صفر می کند، و الگوی آن به صورت زیر است:

CLC

برای بهتر فهمیدن توضیحات بالا مثال زیر در نرم افزار Proteus 7 و نرم افزار AVR Studio 4 طراحی شده پس از دانلود فایل ها را اجرا کنید:

آن را از لینک زیر دانلود نمائید:

http://s3.picofile.com/file/7421814729/Circuit_2_ADD_AVR.zip.html

توضیح مثال1:
در این مثال ابتدا اطلاعات از پورت A و B خوانده شده و با هم توسط دستور ADD جمع شده و  بر روی پورت C نمایش داده خواهد شد:

Microcontroller AVR-2 (14)

Microcontroller AVR-2 (15)

توضیح مثال 2:
در این مثال ابتدا اطلاعات از پورت A و B خوانده شده و با هم توسط دستور SUB تفریق شده و  بر روی پورت C نمایش داده خواهد شد:
آن را از لینک زیر دانلود نمائید:

http://s3.picofile.com/file/7421815157/Circuit_3_SUB_AVR.zip.html

Microcontroller AVR-2 (16)

Microcontroller AVR-2 (17)

توضیح مثال 3:
در این مثال ابتدا اطلاعات از پورت A و B خوانده شده و با هم ضرب شده و بر روی پورت C نمایش داده خواهد شد در این برنامه با استفاده از دستورات آموزش داده شده این ضرب ساده انجام می شود:
آن را از لینک زیر دانلود نمائید:

http://s3.picofile.com/file/7421816127/Circuit_4_Multiplication_AVR.zip.html

Microcontroller AVR-2 (18)

Microcontroller AVR-2 (19)

توضیح مثال 4:
در این مثال ابتدا اطلاعات از پورت A و B خوانده شده و با هم ضرب شده و بر روی پورتهای C وD نمایش داده خواهد شد در این برنامه با استفاده از دستور MULاین کار انجام می شود: توجه داشته باشید که همه مثال ها حاصل اعداد بصورت Hex می باشد:
آن را از لینک زیر دانلود نمائید:

http://s3.picofile.com/file/7421816983/Circuit_5_MUL_AVR.zip.html

Microcontroller AVR-2 (20)

Microcontroller AVR-2 (21)

توضیح مثال 5:
در این مثال ابتدا اطلاعات از پورت A خوانده شده و توسط دستور COM این دستور باعث معکوس شدن محتویات رجیستر Rd مکمل یک می شود و حاصل در پورت B نمایش داده می شود.

آن را از لینک زیر دانلود نمائید:

http://s3.picofile.com/file/7421817846/Circuit_6_COM_AVR.zip.html

Microcontroller AVR-2 (22)

Microcontroller AVR-2 (23)

توضیح مثال 6:
در این مثال یک برنامه چرخش بیتی توسط دستور  ROLانجام می شود، شما می توانید جهت چرخش را با دستور ROR   عوض کنید.
آن را از لینک زیر دانلود نمائید:

http://s3.picofile.com/file/7421818602/Circuit_7_Rotate_AVR.zip.html

Microcontroller AVR-2 (24)

Microcontroller AVR-2 (25)


نسخه ی pdf قابل دانلود این صفحه:

لینک دانلود:

http://s3.picofile.com/file/7422391498/AVR_Assembly_Computation.zip.html

رمز فایل: www.Project-esisis.com

راھنمای دانلودگزارش خرابی لینک

صفحه نخست  

این وب سایت را در گوگل محبوب کنید:

تشکر از حمایت شما
<img src="Background/Signbot LED (1).gif" width="249" height="49" alt="Signbot LED (1)" />
فروشگاه موبایل تبلت لپتاپ
کانال تلگرام