ثباتهای AVR
میکروکنترلرهای 8 بیتی AVR 32 ثبات 8 بیتی همه منظوره دارند یعنی r0 تا r31 .
سه ثبات آدرس شانزده بیتی با نام مستعار X و Y و Z که هر کدام از این سه ثبات دو ثبات از همان 32 ثبات 8 بیتی هستند یعنی X(r27:r26), Y(r29:r28), Z(r31:r30) .
یک ثبات 16 بیتی به منظور اشاره گر پشته که در آدرسهای ورودی/خروجی:
0x3e(SPH) و 0x3d(SPL) قرارگرفته اند.همچنین این آدرسها در حافظه داده با آدرسهای 0x5e و 0x5d هستند
یک ثبات 8بیتی به منظور سنجش وضعیت یا همان ثبات پرچم با نام 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 که حجم حافظۀ کد آنها از 1k تا 128k بایت و حجم حافظۀ دادۀ آنها از 32 بایت تا 4k بایت متغیر است یاد آورم شویم که این مقادیر حافظه همراه با گذشت زمان پیوسته در حال افزایش است . حافظه داده و ثباتهای AVR
32 آدرس اول حافظه یعنی (0x0000 تا 0x001f ) متعلق به ثباتهای r0 تا r31 هستند.البته در برخی MCU (MicroController Unit) ها برای ثباتها از فضای حافظۀ داده استفاده می شود.
آدرسهای ( 0x0020 تا 0x005f ) از حافظۀ داده در دسترس آدرسهای ورودی/خروجی (0x00 تا 0x3f ) است.
از آدرس 0x0060 حافظۀ داده به بعد فقط شامل حافظه استاتیک است یعنی 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 می شود:
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
که در این صورت خروجی AVR-OBJDUMP از این قرار استHex : 0: 12 0d add r17, r2 توجه داشته باشید که یک کلمۀ 16 بیتی از هشت بیت کم ارزش آن در حافظه ذخیره می شود. دستورالعملهای Encode شده با قالب دو ثباتی را در جدول زیر مشاهده می کنید:
000111rdddddrrrr | adc Rd, Rr |
000111dddddddddd | rol Rd |
000011rdddddrrrr | add Rd, Rr |
000011dddddddddd | lsl Rd |
001000rdddddrrrr | and Rd, Rr |
001000dddddddddd | tst Rd |
000101rdddddrrrr | cp Rd, Rr |
000001rdddddrrrr | cpc Rd, Rr |
000100rdddddrrrr | cpse Rd, Rr |
001001rdddddrrrr | eor Rd, Rr |
001001dddddddddd | clr Rd |
001011rdddddrrrr | mov Rd, Rr |
100111rdddddrrrr | mul Rd, Rr |
001010rdddddrrrr | or Rd, Rr |
000010rdddddrrrr | sbc Rd, Rr |
000110rdddddrrrr | 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<> |
برای خرید کتاب میکروکنترلرهای AVR اسمبلی و C اینجا کلیک کنید.