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

ثباتهای 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 .
 


ثباتهای 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