ثباتهای AVR
- میکروکنترلرهای ۸ بیتی AVR 32 ثبات ۸ بیتی همه منظوره دارند یعنی r0 تا r31 .
- سه ثبات آدرس شانزده بیتی با نام مستعار X و Y و Z که هر کدام از این سه ثبات دو ثبات از همان ۳۲ ثبات ۸ بیتی هستند یعنی X(r27:r26), Y(r29:r28), Z(r31:r30) .
- یک ثبات ۱۶ بیتی به منظور اشاره گر پشته که در آدرسهای ورودی/خروجی:
0x3e(SPH) و 0x3d(SPL) قرارگرفته اند.همچنین این آدرسها در حافظه داده با آدرسهای ۰x5e و ۰x5d هستند
- یک ثبات ۸بیتی به منظور سنجش وضعیت یا همان ثبات پرچم با نام SREG .
I | T | H | S | V | N | Z | C |
- I : فعال ساز و غیرفعال ساز عمومی وقفه SREG7 یا Global Interrupt Enable/Disable Flag
- T: بیت انتقالی مورد استفاده دستورالعملهای BLD وBST با نام SREG6
- H: Half Carry Flag, SREG5
- S : بیت علامت یا Signed tests Instruction Set, SREG4
- V : سرریزنما برای مکمل دو یا Two’s Complement Overflow Indicator, SREG3
- N : بیت منفی یا Negative Flag, SREG2
- Z : بیت صفر یا Zero Flag, SREG1
- C : Carry Flag, SREG0
بر طبق معماری Harvard همراه با حافظه ی کد فلش و حافظه داده استاتیک یا SRAM که حجم حافظه ی کد آنها از ۱k تا ۱۲۸k بایت و حجم حافظه ی داده ی آنها از ۳۲ بایت تا ۴k بایت متغیر است یاد آورم شویم که این مقادیر حافظه همراه با گذشت زمان پیوسته در حال افزایش است .
حافظه داده و ثباتهای AVR
- ۳۲ آدرس اول حافظه یعنی (۰x0000 تا ۰x001f ) متعلق به ثباتهای r0 تا r31 هستند.البته در برخی MCU (MicroController Unit) ها برای ثباتها از فضای حافظه ی داده استفاده می شود.
- آدرسهای ( ۰x0020 تا ۰x005f ) از حافظه ی داده در دسترس آدرسهای ورودی/خروجی (۰x00 تا ۰x3f ) است.
- از آدرس ۰x0060 حافظه ی داده به بعد فقط شامل حافظه استاتیک است یعنی SRAM .
دو ثبات برای واحد ریاضی منطقی ALU
تعداد زیادی از دستورالعملهای ALU شامل دو ثبات هستند یکی مقصد یا Destination(Rd) و یکی منبع یا Source(Rr) که نحوه کدگشایی دستورالعمل را در زیر می بینید:
i | i | i | i | i | i | r | d | d | d | d | d | r | r | r | r |
بیتهایی که در آن حرف i قرار گرفته دستورالعملند و حرف d بیتهای مقصد هستند و حرف r بیتهای منبع هستند ثبات منبع از بهم پیوستن بیتهای (r9 : r3 : r2 : r1 : r0) و ثبات مقصد از بهم پیوستن بیتهای (d8 : d7 : d6 : d5 : d4)مشخص می شوند همچنین بیتهای باقی مانده
(i15 : i14 : i13 : i12 : i11 : i10) خود دستورالعمل را مشخص می کنند.
به عنوان مثال حاصل جمع r17 و r2 که همان Add r17 , r2 است به صورت زیر کدگشایی یا Encode می شود:
۰ | ۰ | ۰ | ۰ | ۱ | ۱ | ۰ | ۱ | ۰ | ۰ | ۰ | ۱ | ۰ | ۰ | ۱ | ۰ |
که در این صورت خروجی AVR-OBJDUMP از این قرار استHex :
۰: 12 0d add r17, r2
توجه داشته باشید که یک کلمه ی ۱۶ بیتی از هشت بیت کم ارزش آن در حافظه ذخیره می شود.
دستورالعملهای Encode شده با قالب دو ثباتی را در جدول زیر مشاهده می کنید:
۰۰۰۱۱۱rdddddrrrr | adc Rd, Rr |
۰۰۰۱۱۱dddddddddd | rol Rd |
۰۰۰۰۱۱rdddddrrrr | add Rd, Rr |
۰۰۰۰۱۱dddddddddd | lsl Rd |
۰۰۱۰۰۰rdddddrrrr | and Rd, Rr |
۰۰۱۰۰۰dddddddddd | tst Rd |
۰۰۰۱۰۱rdddddrrrr | cp Rd, Rr |
۰۰۰۰۰۱rdddddrrrr | cpc Rd, Rr |
۰۰۰۱۰۰rdddddrrrr | cpse Rd, Rr |
۰۰۱۰۰۱rdddddrrrr | eor Rd, Rr |
۰۰۱۰۰۱dddddddddd | clr Rd |
۰۰۱۰۱۱rdddddrrrr | mov Rd, Rr |
۱۰۰۱۱۱rdddddrrrr | mul Rd, Rr |
۰۰۱۰۱۰rdddddrrrr | or Rd, Rr |
۰۰۰۰۱۰rdddddrrrr | sbc Rd, Rr |
۰۰۰۱۱۰rdddddrrrr | sub Rd, Rr |
توجه: دستور rol Rd همان دستور adc Rd , Rd است و همچنین دستور lsl Rd همان دستورالعمل
add Rd , Rd و همچنین tst Rd معادل با دستور and Rd , Rd و همینطور دستور clr Rd معادل است با دستور
eor Rd , Rd .
دستورالعملهای منطقی و ریاضی
دستورالعمل | عملیات | تاثیر روی ثبات وضعیت |
ADD Rd, Rr | Rd = Rd + Rr | Z,C,N,V,H |
ADC Rd, Rr | Rd = Rd + Rr + C | Z,C,N,V,H |
ADIW Rdl,K | Rdh:Rdl = Rdh:Rdl + K | Z,C,N,V,S |
SUB Rd, Rr | Rd = Rd – Rr | Z,C,N,V,H |
SUBI Rd, K | Rd = Rd – K | Z,C,N,V,H |
SBC Rd, Rr | Rd = Rd – Rr – C | Z,C,N,V,H |
SBCI Rd, K | Rd = Rd – K – C | Z,C,N,V,H |
SBIW Rdl,K | Rdh:Rdl = Rdh:Rdl – K | Z,C,N,V,S |
AND Rd, Rr | Rd = Rd & Rr | Z,N,V |
ANDI Rd, K | Rd = Rd & K | Z,N,V |
OR Rd, Rr | Rd = Rd | Rr | Z,N,V |
ORI Rd, K | Rd = Rd | K | Z,N,V |
EOR Rd, Rr | Rd = Rd ^ Rr | Z,N,V |
COM Rd | Rd = $FF – Rd | Z,C,N,V |
NEG Rd | Rd = $00 – Rd | Z,C,N,V,H |
SBR Rd |