ثباتهای 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
اشتراک گذاری
|