2
8051סט פקודות של
מבוא
ארכיטקטורה וארגון זיכרון שלCIP-51.
אפשרויות גישה.
➢Register addressingגישה דרך אוגרים.
➢Direct addressingגישה ישירה.
➢Indirect addressingגישה לא ישירה.
➢Immediate constant addressingגישה בעזרת קבועים מיידיים .
➢Relative addressingגישה לפי כתובת יחסית.
➢Absolute addressingגישה לפי כתובת מוחלטת .
➢Long addressingגישה לפי כתובת ארוכה.
➢Indexed addressing ממוספרת"גישה."
סוגי פקודות.
. פקודות אריתמטיות➢
.פקודות לוגיות➢
.פקודות להעברת נתונים➢
.פקודות משתנים בוליאניים➢
.פקודות קפיצה➢
www.elecstudy.orgטסליצקי מרק [email protected]
3
מבוא
פקודת מחשב בנויה מקוד הפעלה(op-code) , או לא )ואחריו באים
.אופרנדים לפי סוג הפקודה( באים
לפיop-codeכמה אופרנדים באים ולפי , ניתן לדעת מהו סוג הפקודה
. אופרנדים יודעים מה הוא מקור ומה הוא היעד
אופרנדים יכולים להיות:
.ערכים עצמם➢
.אוגרים➢
.זיכרון➢
.פורטים➢
במידה ופקודה באה עם יותר מאופרנד בודד פורמט שלה תמיד יהיה
:בצורה הבאה
Instruction Destination, Source
www.elecstudy.orgטסליצקי מרק [email protected]
5
ארגון הזיכרון
ארגון הזיכרון של
C8051F020
דומה לארגון
8051הזיכרון של
. סטנדרטי
קוד ונתונים
נמצאים באותו
אך , מרחב זיכרון
צורת הגישה היא
. שונה
www.elecstudy.orgטסליצקי מרק [email protected]
7
. SFRאוגרים מיוחדים
F8 SPI0CN PCA0H PCA0CPH0 PCA0CPH1 PCA0CPH2 PCA0CPH3 PCA0CPH4 WDTCN
F0 B SCON1 SBUF1 SADDR1 TL4 TH4 EIP1 EIP2
E8 ADC0CN PCA0L PCA0CPL0 PCA0CPL1 PCA0CPL2 PCA0CPL3 PCA0CPL4 RSTSRC
E0 ACC XBR0 XBR1 XBR2 RCAP4L RCAP4H EIE1 EIE2
D8 PCA0CN PCA0MD PCA0M0 PCA0CPM1 PCA0CPM2PCA0CPM
3
PCA0CPM
4
D0 PSW REF0CN DAC0L DAC0H DAC0CN DAC1L DAC1H DAC1CN
C8 T2CON T4CON RCAP2L RCAP2H TL2 TH2 SMB0CR
C0SMB0CN
SMB0ST
ASMB0DAT SMB0ADR ADC0GTL ADC0GTH ADC0LTL ADC0LTH
B8 IP SADEN0 AMX0CF AMX0SL ADC0CF P1MDIN ADC0L ADC0H
B0 P3 OSCXCN OSCICN P74OUT FLSCL FLACL
A8 IE SADDR0 ADC1CN ADC1CF AMX1SL P3IF SADEN1 EMI0CN
A0 P2 EMI0TC EMI0CF P0MDOUT P1MDOUT P2MDOUT P3MDOUT
98 SCON0 SBUF0 SPI0CFG SPIODAT ADC1 SPI0CKR CPT0CN CPT1CN
90 P1 TMR3CN TMR3RLL TMR3RLH TMR3L TMR3H P7
88 TCON TMOD TL0 TL1 TH0 TH1 CKCON PSCTL
80 P0 SP DPL DPH P4 P5 P6 PCON
0(8)
Bit
addressable
1(9) 2(A) 3(B) 4(C) 5(D) 6(E) 7(F)
www.elecstudy.orgטסליצקי מרק [email protected]
8
.אפשרויות גישה
במיקרו בקרC8051F020 אפשרויות גישה8ישנם.
.אפשרויות גישה דוגמא
Register MOV A, B
Direct MOV 30H,A
Indirect ADD A,@R0
Immediate Constant ADD A,#80H
Relative* SJMP AHEAD
Absolute* AJMP BACK
Long* LJMP FAR_AHEAD
Indexed MOVC A,@A+PC
* Related to program branching instructions
www.elecstudy.orgטסליצקי מרק [email protected]
9
Register Addressingגישה דרך אוגרים
גישה דרך אוגרים מאפשרת העברת מידע בין אוגר לאוגר .
לדוגמא
MOV R0, A
0הפקודה מעבירה תוכן המצבר לתוך אוגרR .בחירת בנק
(Bank 0, 1, 2 or 3)נעשה לפני פקודה הזאת .
www.elecstudy.orgטסליצקי מרק [email protected]
10
Direct Addressingגישה ישירה
כינוי"י כתובת של זיכרון או שם "צורה הזאת מאפשרת עברת נתונים ע "
. ”C8051F020.inc“רשומים בתוך קובץ " כינויים. "של פורטים
דוגמא:
MOV A, P3
למצבר3מעבירים תוכן של פורט
MOV A, 020H
לתוך מצברRAMשל זיכרון הקסה20מעבירים תוכן של תא מספר
www.elecstudy.orgטסליצקי מרק [email protected]
11
Indirect Addressing (עקיפה)גישה לא ישירה
גישה הזאת משתמשת במצביע כדי לשמור כתובת אפקטיבית של.אופרנד
רק אוגריםR0, R1 ואוגרDPTRמיועדים לצורת העבודה הזאת .
אוגריםR0, R1 סיביות ואוגר 8יכולים להצביע על כתובתDPTR יכול. סיביות16להצביע על כתובת
דוגמא:
MOV @R0,A
(60Hלדוגמא )מצביע עליו 0Rהתוכן של המצבר מועבר לתוכן שאוגר
MOVX A,@DPTR
.מועבר למצבר( 1234Hלדוגמא )מצביע עליו DPTRתוכן של תא שאוגר
www.elecstudy.orgטסליצקי מרק [email protected]
12
Immediate Constant Addressingגישה בעזרת קבועים מיידיים
וזה תלוי בסוג , סיביות16או 8ניתן להשתמש בקבועים באורך. אופרנדים
אוגר היעד צריך להיות באותו גודל כמו הקבוע שמעתיקים עליו .
דוגמא:
ADD A,#030H
(.סיביות8שהוא גם )לאוגר ( סיביות8)30Hהוספת ערך
MOV DPTR,#0FE00H
(. סיביות16שהוא גם )DPTRלמצביע ( סיביות16)FE00Hהעברת ערך
www.elecstudy.orgטסליצקי מרק [email protected]
13
Relative Addressingגישה לפי כתובת יחסית
צורה הזאת שימושית בפקודות מסוג קפיצות במרחקים קצרים .
SJMP (short jump) ,JNZ
בעזרת פקודות האלה ניתן להגיע מצד אחד של התוכנה לצד אחר.
בית קדימה או לא 127-כתובת ביעד צריכה להיות במרחק לא יותר מ
של הפקודה שאסתעקב כך , אחרוה מהפקודה הנוכחית128-יותר מ
228הוא = 256.
במידת הצורך אפשר להשתמש בקפיצות כפולות כדי להגיע לנקודה
.רחוקה יותר
דוגמא:
GoBack: DEC A ;Decrement A
JNZ GoBack ;If A is not zero, loop back
www.elecstudy.orgטסליצקי מרק [email protected]
14
Absolute Addressingי כתובת מוחלטת"גישה ע .
פקודות שעובדות לפי צורה הזאת2ישנם :ACALLו-AJMP .
בית כל אחד ומצביעות על כתובת מוחלטת 2פקודות האלה תופסות
. סיביות בתור אופרנד11באורך
5 הן –סיביות לא ניתנות לגישה או לשינוי 16סיביות עליונות מתוך
( . K2. )תאים2048עקב כך שזיכרון מוגבל ל, תמיד אפסים
דוגמא:
ACALL PORT_INIT
PORT_INIT צריכה להיות במרחק שלK2
PORT_INIT: MOV P0, #0FH
PORT_INITקפיצה לתת שגרה
www.elecstudy.orgטסליצקי מרק [email protected]
15
Long Addressing גישה לכתובת ארוכה
י פקודות "צורה הזאת ממומשת עLCALLו-LJMP .
בית אחרונים מכילים כתובת היעד 2-בית ו3פקודות האלה הן באורך
.סיביות16לקפיצה של
64זה מאפשר עבודה עם אזור זיכרון של K.
תוכנה תמיד תקפוץ למיקום שצוין באופן מוחלט ולא משנה באיזה מקום
. היא הייתה
דוגמא:
LCALL TIMER_INIT
\\;()Timer_Init: נראת כךCפקודה שבשפת
TIMER_INIT: ORL TMOD,#01H ;TIMER_INIT תת שגרה
www.elecstudy.orgטסליצקי מרק [email protected]
16
Indexed Addressing" ממוספרת"גישה
(. רצף" )טבלה"כאשר מדובר בנתונים סדרתיים שנמצאים ב, משתמשים בגישה הזאת
סיביות מצביע על כתובת הבסיסי של הטבלה ומצבר מכיל כתובת יחסית של 16אוגר.כל נתון
סכום של שני נתונים האלה נותן כתובת אפקטיבית לפקודותJMPו-MOVC .
דוגמא:MOV A,#08H כתובת של נתון מתחילת הטבלה;
MOV DPTR,#01F00H כתובת של הטבלה;
MOVC A,@A+DPTR מצבר מקבל נתון ששני אוגרים מצביעים עליו;
1לאחר הפעלת הקוד שכתוב כאן נתון שנמצא בכתובתF08H (1F00H+08H) יועבר. למצבר
www.elecstudy.orgטסליצקי מרק [email protected]
17
:סוגי פקודות
במיקרו בקרC8051F020 סוגי פקודות5ישנם:
Arithmetic operationsפעולות אריתמטיות ➢
Logical operationsפעולות לוגיות ➢
Data transfer operationsפעולות עברת נתונים ➢
Boolean variable operationsפעולות עם משתנים בוליאניים ➢
Program branching operationsפעולות קפיצה בתוכנה ➢
www.elecstudy.orgטסליצקי מרק [email protected]
18
:פעולות אריתמטיות
בהתאם לתוצאת הפקודה
דגלים מסוימים בתוך אוגר
יכולים PSWדגלים
, לדוגמא דגל נשא: להשתנות
. 'דגל אפס וכו
כאשר כתוב@Ri– מדובר עלמצביע על אזור הזיכרון
0Rשמבצעים בעזרת אוגרים .1R-ו
כאשר כתובRn מדובר עלשנמצאים R0-R7האוגרים
בתוך בנק האוגרים הנבחר .מראש
www.elecstudy.orgטסליצקי מרק [email protected]
19
.פעולות לוגיות
פעולות מבצעות פעולותבוליאניות סיבית על
,AND, OR). סיביתXOR, and NOT)
דוגמאות:
ANL A, #02H
במצבר כל 1משירים סיבית היתר מאפסים
ORL TCON, A
TCONלוגי בין ORפעולות
ומצבר עם הכנסת תוצאה .TCONלתוך
www.elecstudy.orgטסליצקי מרק [email protected]
20
פקודות להעברת נתונים Data Transfer Instructions
העברת נתונים מתבצעת כדי להעביר
פנימי לאוגרים מיוחדים ללא RAMנתונים מ
.שימוש במצבר
בנוסף יש אפשרות להעביר נתונים בין
RAMפנימי ל-RAM חיצוני בעזרת גישה
. עקיפה
128 בית עליונים שלRAM ניתנים לגישה
אך ורק בגישה אקיפה וגישה לאוגרים
שנמצאים באזור הזה ניתנים SFRמיוחדים
. לגישה רק דרך גישה ישירה
Mnemonic Description
MOV @Ri, direct [@Ri] = [direct]
MOV @Ri, #data [@Ri] = immediate data
MOV DPTR, #data 16 [DPTR] = immediate data
MOVC A,@A+DPTR A = Code byte from [@A+DPTR]
MOVC A,@A+PC A = Code byte from [@A+PC]
MOVX A,@Ri A = Data byte from external ram [@Ri]
MOVX A,@DPTR A = Data byte from external ram [@DPTR]
MOVX @Ri, A External[@Ri] = A
MOVX @DPTR,A External[@DPTR] = A
PUSH direct Push into stack
POP direct Pop from stack
XCH A,Rn A = [Rn], [Rn] = A
XCH A, direct A = [direct], [direct] = A
XCH A, @Ri A = [@Rn], [@Rn] = A
XCHD A,@Ri Exchange low order digits
www.elecstudy.orgטסליצקי מרק [email protected]
21
Boolean Variable Instructionsפקודות בוליאניות
מיקרו בקרC8051F020 יכול לבצע. פעולות עם סיביות בודדות
וגם, או, לאתחל, לאפס: פקודות האלה הן ,. הפיכה לוגית
בנוסף ישנה אפשרות להעברת סיביות.וקפיצות שונות בהתאם למצב סיביות
כל פעולות עם סיביות דורשות גישה ישירה .
דוגמאות:
SETB TR0 ; 0לאתחל טיימר .
POLL: JNB TR0, POLL
; 0-שווה ל0להיות בלולאה כל עוד טיימר
Mnemonic Description
CLR C Clear C
CLR bit Clear direct bit
SETB C Set C
SETB bit Set direct bit
CPL C Complement c
CPL bit Complement direct bit
ANL C,bit AND bit with C
ANL C,/bit AND NOT bit with C
ORL C,bit OR bit with C
ORL C,/bit OR NOT bit with C
MOV C,bit MOV bit to C
MOV bit,C MOV C to bit
JC rel Jump if C set
JNC rel Jump if C not set
JB bit,rel Jump if specified bit set
JNB bit,rel Jump if specified bit not set
JBC bit,relif specified bit set then clear it and
jump
www.elecstudy.orgטסליצקי מרק [email protected]
22
Program Branching Instructionsפקודות קפיצה
פקודות קפיצה מבצעים העברה
למקום מסוים של קוד עם או ללא
. תנאי מסוים
ישנם פקודות להפעלת שגרות ,
, חזרות משגרות או פסיקות
קפיצות לפי כתובת יחסית או לפי
קפיצות בהתאם , כתובת מוחלטת
.לתנאי בדיקה
Mnemonic Description
ACALL addr11 Absolute subroutine call
LCALL addr16 Long subroutine call
RET Return from subroutine
RETI Return from interrupt
AJMP addr11 Absolute jump
LJMP addr16 Long jump
SJMP rel Short jump
JMP @A+DPTR Jump indirect
JZ rel Jump if A=0
JNZ rel Jump if A NOT=0
CJNE A,direct,rel
Compare and Jump if Not EqualCJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
DJNZ Rn,relDecrement and Jump if Not Zero
DJNZ direct,rel
NOP No Operation
www.elecstudy.orgטסליצקי מרק [email protected]
24
Arithmetic Operationsפקודות אריתמטיות
במידה וכתוב
[@Ri] מדובר על
0Rתוכן שאוגרים
מצביעים 1Rאו
. עליו
במידה וכתובRn
מדובר על אוגרים
R0-R7 מהבנק
.שנבחר מראש
www.elecstudy.orgטסליצקי מרק [email protected]
25
ADD A,<בית מקור> ADDC A,<בית מקור>
פקודהADD מוסיפה תוכן של בית מקור למצבר ומשנה תוכן של
. בית מקור נשאר ללא שינוי. המצבר
פקודהADDC מוסיפה תוכן של בית מקור לערך של סיבית נשאC וכל
. בית מקור נשאר ללא שינוי. זה למצבר ומשנה תוכן של המצבר
דגל נשא : תוצאת הפעולות האלה יכולות לשנות אוגרים הבאים(CY) ,
דגלים האלה נמצאים . (OV)ודגל מילוי יתר (AC)דגל נשא נוסף
PSW( .Program Status Word .)באוגר
➢CY=1 אחרת מתאפס1-דגל נשא עולה ל7אם הייה מילוי יתר מסיבית.
➢AC =1 זאת אומרת )סיביות נמוכות של בית של מצבר 4אם הייה מילוי יתר מ
. אחרת מתאפס, 1-דגל נשא עזר עולה ל( 3מסיבית
➢OV=1 אם תוצאה מסומנת לא יכולה להיכנס לאופרנד היעד דגל מילוי יתר
. אחרת הוא מתאפס1-עולה ל
www.elecstudy.orgטסליצקי מרק [email protected]
26
SUBB A,< בית מקור >
פקודהSUBB בדומה לפקודהADDC מחסירה ערך של בית מקור וערך של נשא
. מהתוכן של מצבר ומכניסה ערך חדש לתוך המצבר ומשנה דגלים הרלוונטייםCY=1 אחרת מתאפס1-דגל זה עולה ל7במידה ויש צורך בנשא לסיבית מספר.
AC =1 אחרת מתאפס1-דגל זה עולה ל3במידה ויש צורך בנשא לסיבית מספר.
OV=1 או לסיבית , 6אבל לא לסיבית מספר 7במידה ויש צורך בנשא לסיבית מספר
.אחרת מתאפס1-דגל זה עולה ל, 7ולא לסיבית מספר 6מספר
דוגמא:
(. CY=1)1-ודגל נשא שווה ל40Hמכיל ערך 1Rאוגר , 0C1Hמצבר מכיל ערך
: לאחר פקודה
SUBB A, R1
: ומצב הדגלים יהיה70H-ערך של מצבר ישתנה ל, לא ישתנה1Rערך של
CY=0 AC=0 OV=1
www.elecstudy.orgטסליצקי מרק [email protected]
27
INC <יעד >
אוגר או אוגר שמצביע על תא של זיכרון, תוכן של תא1-מעלה ב.
:דוגמא
INC 6FH
הערך של תא לאחר ביצוע פקודה ישתנה 30Hמכיל ערך 6FHבמידה ותא בכתובת
.31Hלערך
Example:
MOV R1, #5E
INC R1
INC @R1
1התוכן שלR יהיהE5 ,לערך 1-לאחר פקודה שנייה התוכן של אוגר יעלה בF5 .
. 1-מצביע עליו יעלה ב1Rהפנימי שאוגר RAM-תוכן של תא ב, לאחר פקודה שלישית
www.elecstudy.orgטסליצקי מרק [email protected]
28
DEC <יעד>
מהערך שיש ביעד1פעולה מורידה .
אוגר או אוגר שמצביע על תא של זיכרון, מהתוכן של תא1מורידה.
הערך החדש יהיה 0מהתא שמכיל 1במידה ומורידיםFFH0 .
דגלים לא משתנים.
www.elecstudy.orgטסליצקי מרק [email protected]
29
INC DPTR
סיביות16מצביע באורך 1-פקודה מעלה ב .
DPTR סיביות16זה האוגר היחיד שמכיל.
www.elecstudy.orgטסליצקי מרק [email protected]
30
MUL AB
פקודה מכפילה תוכן של מצברA בתוכן של אוגרB ותוצאה נכנסת בחזרה לשני
. Bוחלק העליון נכנס לאוגר Aחלק התחתון נכנס למצבר : אוגרים האלה
מספריםAו-Bהם מספרים לא מסומנים!!!!
255-במידה ותוצאה גדולה מ(FFH) דגל מילוי יתר(OV )אחרת הוא , 1-עולה ל
. דגל נשא תמיד מתאפס ללא תלות בתוצאת הכפל. מתאפס
לדוגמא אם מצבר מכיל ערךACC=85 (55H) ואוגרB מכילB=23 (17H) , אז
A3Hואז מצבר מכיל ערך , (07A3H) 1955: לאחר ביצוע פקודה נקבל תוצאה
. מתאפסCודגל 1-יעלה לOVדגל . 07Hמכיל Bואוגר
www.elecstudy.orgטסליצקי מרק [email protected]
31
DIV ABפעולת חילוק.
מחלק תוכן של אוגרA בתוכן של אוגרB .
חלק שלם של תוצאה נכנס לתוך אוגרA ושארית נכנס לתוך אוגרB .
91לדוגמא מצבר מכיל ערךACC=91 (5BH) ואוגרB 5מכיל ערךB=05(05H) , 18מצבר יכיל ערך, 18 = 91/5לאחר פעולת חילוק
(12H) יעובר לאוגר 1ושאריתB .
לאחר סיום הפקודה גם דגל נשא וגם דגל מילוי יתר יתאפסו .
במידה ואוגרB לאחר פעולת חילוק תוכן של , לפני פעולת חילוק0יכילA ותוכן שלBודגל מילוי יתר יעלה , דגל נשא יתאפס, יהיו לא מוגדרים. 1-ל
www.elecstudy.orgטסליצקי מרק [email protected]
32
BCD .DA Aפעולה להמרה מהקסה דצימלי לקוד
פעולה מיועדת להכנת מספר לפורמטBCD .
פעולה הזאת עובדת רק על המצבר ורק לאחר פעולתADD אוADC
(. 99עד 0-מ)BCDספרות בפורמט 2ובונה מספר שמורכב מ
00פקודה מוסיפה ערכיםH, 06H, 60H or 66H בהתאם למצב של
. PSW-מצבר ו
במידה וערך בסיביותA3-09גדול יותר מ(xxxx1010-xxxx1111) , או
כדי ליצור ערך נכון 6אז פקודה מוסיפה למצבר ערך 1-שווה לACדגל
. ברביעה תחתונה של המצבר
אם דגלCY=1 ,9-עקב כך שמספר ברביעה עליונה גדול מ
(1010xxxx-1111xxxx) לחלק העליון כדי ליצור מספר 6אז מוסיפים
BCDאבל דגל , נכוןCYלא מתאפס .
www.elecstudy.orgטסליצקי מרק [email protected]
33
.פעולות לוגיות Logical Operations
פעולות לוגיות :AND ,OR ,XOR ,NOT
מבצעים בדרך כלל עם ופעולות עובדות Aאוגר
.סיבית מול סיבית
www.elecstudy.orgטסליצקי מרק [email protected]
34
ANL <dest-byte>,<source-byte> פעולת וגם
פעולה מבצעת פעולתAND לוגי סיבית מול סיבית בין מקור ליעד. ומעדכנת תוכן של אוגר היעד
אף דגל לא משתנה
דוגמא:
ANL A,R2
75Hמכיל 2Rואוגר D3H (11010011) מכיל ערך ACCבמידה ו ACC=51H (01010001)אז תוצאת הפעולה היא , (01110101)
פעולתANDמממשת פעולת בדיקת סיביות מסוימות או כיבוי מנורות .:לדוגמא
ANL P1,#10111001B
www.elecstudy.orgטסליצקי מרק [email protected]
35
ORL <dest-byte>,<source-byte> פעולת או לוגי
פעולה מבצעת פעולתOR לוגי סיבית מול סיבית בין מקור ליעד. ומעדכנת תוכן של אוגר היעד
אף דגל לא משתנה
דוגמא:ORL A,R2
אז R2=75H (01110101)ואוגר ACC=D3H (11010011)אם אוגר .ORACC=F7H (11110111)לאחר פעולת
עוד דוגמא:ORL P1,#11000010B
.ללא שינוי של רגליים אחרות, 1Pשל 1,6,7הוראה זאת מעלה סיביות
www.elecstudy.orgטסליצקי מרק [email protected]
36
XRL <dest-byte>,<source-byte> XORפעולת לוגי
פעולה מבצעת פעולתXOR לוגי סיבית מול סיבית בין מקור ליעד. ומעדכנת תוכן של אוגר היעד
אף דגל לא משתנה
דוגמא:XRL A,R0
אז R0=AAH (10101010)ואוגר ACC=C3H (11000011)אם אוגר ACC=69H (01101001)שנכנסת לאוגר XORתוצאת פעולת
דוגמא:XRL P1,#00110001
1P(0← 1 ,1← 0.)של 0,4,5פקודה הזאת הופכת סיביות
www.elecstudy.orgטסליצקי מרק [email protected]
37
CLR A and CPL A
CLR A פקודה הזאת מנקה את התוכן של אוגרA .
דגלים לא משתנים .
CPL A
פקודה מבצעת היפוך לוגי של אוגרA(סיביות משנה ערך 8כל אחד מ
(one’s complement)-שלו מ
דגלים לא משתנים.
אם תוכן אוגרACC=C3H (11000011) , אז לאחר פעולתCPL ערך
.ACC=3CH (00111100)החדש יהיה
www.elecstudy.orgטסליצקי מרק [email protected]
38
RL A
8 0מוזז למקום 7סיביות של המצבר מוזזים שמאלה כל אחד וסיבית .
דגלים לא משתנים.
לדוגמא אם מצברACC=C3H (11000011) , לאחר פעולת הזזה ערך
.נשאר ללא שינויCYודגל ACC=87H (10000111)שלו
www.elecstudy.orgטסליצקי מרק [email protected]
39
RLC A
זזות 6עד 0-זאת אומרת סיביות מ. מצבר מוזז שמאלה דרך דגל נשא
.0נכנס לתוך דגל נשא ודגל נשא נכנס לתוך ביט 7שמאלה סיבית
כל היתר דגלים לא משתנים.
לדוגמא נתוןACC=C3H (11000011)התוצאה . 1-ודגל נשא שווה ל
. 1ודגל נשא יהיה גם ACC=87H (10000111)תהיה
www.elecstudy.orgטסליצקי מרק [email protected]
40
RR A
8 0מוזז למקום 7סיביות של המצבר מוזזים ימינה כל אחד וסיבית .
דגלים לא משתנים.
לדוגמא אם מצברACC=C3H (11000011) , לאחר פעולת הזזה ערך
.נשאר ללא שינויCYודגל ACC=E1H (11100001)שלו
www.elecstudy.orgטסליצקי מרק [email protected]
41
RRC A
זזות 7עד 1-זאת אומרת סיביות מ. מצבר מוזז ימינה דרך דגל נשא
.7נכנס לתוך דגל נשא ודגל נשא נכנס לתוך ביט 0ימינה סיבית
כל היתר דגלים לא משתנים.
לדוגמא נתוןACC=C3H (11000011)התוצאה . 0-ודגל נשא שווה ל
. 1ודגל נשא יהיה ACC= 61H (01100001)תהיה
www.elecstudy.orgטסליצקי מרק [email protected]
42
SWAP A
סיביות עליונות4סיביות נמוכות של מצבר עם 4פקודה הזאת מחליפה .
י פעול "פעולה הזאת יכולה להתבצע עRR אוRL4פעמים .
דגלים לא משתנים.
במידה ותוכן מצברACC=C3H (11000011) , אז אחרי פעולת
SWAP תוכן של מצבר יהיהACC=3CH (00111100).
www.elecstudy.orgטסליצקי מרק [email protected]
43
Data Transfer Instructions פקודות להעברת נתונים
פקודות להעברת נתונים משתמשים כדי להעביר נתונים בין אוגרים
. ללא שימוש במצברRAMמיוחדים לבין
ניתן להשתמש בהעברת נתונים ביןRAM פנימי לביןRAM חיצוני
". העברה לא ישירה"בעזרת
128 בית עליונים שלRAM ואוגרי " לא ישירה"ניתנים לגישה בצורה
SFR ישירה"בגישה ."
www.elecstudy.orgטסליצקי מרק [email protected]
44
Data Transfer Instructions פעולות העברת נתונים
פקודה הסבר
MOV @Ri, direct [@Ri] = [direct]
MOV @Ri, #data [@Ri] = immediate data
MOV DPTR, #data 16 [DPTR] = immediate data
MOVC A,@A+DPTR A = Code byte from [@A+DPTR]
MOVC A,@A+PC A = Code byte from [@A+PC]
MOVX A,@Ri A = Data byte from external ram [@Ri]
MOVX A,@DPTR A = Data byte from external ram [@DPTR]
MOVX @Ri, A External[@Ri] = A
MOVX @DPTR,A External[@DPTR] = A
PUSH direct Push into stack
POP direct Pop from stack
XCH A,Rn A = [Rn], [Rn] = A
XCH A, direct A = [direct], [direct] = A
XCH A, @Ri A = [@Rn], [@Rn] = A
XCHD A,@Ri Exchange low order digits
www.elecstudy.orgטסליצקי מרק [email protected]
45
MOV <dest-byte>,<source-byte>
תוכן של מקור לתוך היעד( מעתיקה)פקודה מעבירה .
תוכן המקור לא משתנה אף דגל לא משתנה.
:דוגמאותMOV R1,#60 ;R1=60H
MOV A,@R1 ;A=[60H]
MOV R2,#61 ;R2=61H
ADD A,@R2 ;A=A+[61H]
MOV R7,A ;R7=A
www.elecstudy.orgטסליצקי מרק [email protected]
46
MOV DPTR, #data 16
סיביות למצביע לנתונים16פקודה מעתיקה ערך של קבוע.
:דוגמא
MOV DPTR,#1032
.DPL=32Hוערך DPH=10Hפקודה מעתיקה
www.elecstudy.orgטסליצקי מרק [email protected]
47
MOVC A,@A + <base-reg>
פקודה הזאת מעבירה את בית של קוד לתוךACC .
סיביות ועוד כתובת של אוגר הבסיס שזה יכול להיות או 8כתובת אפקטיבית מורכבת מכתובתDPTR אוPC( .סופר פקודות .) אף דגל לא משתנה. סיביות כתובת16כך בונים.
פקודה הזאת שימושית כדי לקרוא טבלאות בתוך אזור זיכרון קוד.
אםPC(סופר פקודות )לכתובת לפני שהוא מועבר למצבר1-הוא מתקדם ב, נמצא בשימוש .
:דוגמא
CLR A
LOC1: INC A
MOVC A,@A + PC
RET
Look_up DB 10H
DB 20H
DB 30H
DB 40H
שהוגדרו בעזרת פקודה 4עד 1שגרה הזאת לוקחת ערך שנמצא במצבר שנמצא בין תאים
DB .
לאחר סיום השגרה בתוך המצבר יהיה ערךACC=20H
www.elecstudy.orgטסליצקי מרק [email protected]
48
MOVX <dest-byte>,<source-byte>
פקודה מעבירה מידע בין מצבר לבין זיכרון חיצוני.
סיביות16סיביות או 8: גודל אזור הזיכרון החיצוני –צורות לפקודה הזאת 2ישנם .
סיביות משתמשים באוגר מיוחד 8כאשר משתמשים בצורהEMI0CN כדי לשמור.כדי לציין חלק תחתון של הכתובת הגישה1Rאו 0Rחלק עליון של הכתובת ואוגר
:לדוגמאMOV EMI0CN,#10H \\הכנסת בית עליון של הכתובת לתוך אוגר עזר
MOV R0,#34H \\הכנסת בית תחתון של הכתובת לתוך אוגר עזר
MOVX A,@R0 \\חיצוני נכנס לתוך מצבר 1034תוכן של תא זיכרון
www.elecstudy.orgטסליצקי מרק [email protected]
49
MOVX <dest-byte>,<source-byte>
סיביות16אפשרות שנייה של פעולה הזאת זה שימוש מצביע לזיכרון באורך .
:דוגמא
MOV DPTR,#1034H ;Load DPTR with 16 bit
;address to read (1034H).
MOVX A,@DPTR ;Load contents of 1034H
;into ACC.
סיביות שנמצאת באוגר 16דוגמא שנמצאת בעמוד הזה משתמשת בכתובת באורך
DPTRוהוא אוגר היחיד שיכול להצביע ישירות לאזור הזיכרון החיצוני .
ישנה אפשרות לגשת לכל אחד מהאוגרים שמרכיבים אתDPTR(DPLו-DPH )
. ולהשתמש בכל אחד מהם בנפרד
www.elecstudy.orgטסליצקי מרק [email protected]
50
PUSH Direct
1-פקודה הזאת מכניסה למחסנית נתון ומעלה מצביע לראש המחסנית ב .
תוכן של התא של זיכרון הפנימי מעתק לראש המחסנית שנמצא באזורRAM מיועד
. למחסנית
דגלים לא משתנים ולא מושפעים.
:דוגמא
PUSH 22H
PUSH 23H
נניח שערך התחלתי שלSP4-שווה לFH 22ותוכן של תאיםH ,23H מכילים
.H12-וH11ערכים
מכילים 51H-ו50Hוערך של תאים SP=51Hלאחר ביצוע תוכנה ערך של מצביע
H11ו-H12 .
www.elecstudy.orgטסליצקי מרק [email protected]
51
POP Direct
בנוסף היא מורידה . פקודה קולטת נתון מאזור של מחסנית ומעבירה אותו לאוגר היעד. דגלים לא מושפעים ולא משתנים. 1-מצביע של מחסנית ב
:דוגמא
POP DPH
POP DPL
אם במצב התחלתיSP=51H 4ותוכן תאי זיכרוןFH ,50H51-וH 30יהיהH ,11H. SP=4FHוערך של DPTR=1211Hאז לאחר סיום הדוגמא ערך של , 12H-ו
POP SP
בהמשך לתוכנית ערך שלSP 4קודם ירד עדEH ואז ערך שלו יהיהSP=30H .
www.elecstudy.orgטסליצקי מרק [email protected]
52
XCH A,<byte>
פקודה הזאת מחליפה ערך שנמצא בתוך מצבר עם ערך שנמצא באזור
.אף דגל לא משתנה ולא מושפע. נתונים
:דוגמאXCH A,@R0
נניח שאוגרR0=2EH , מצברACC=F3H (11110011) וערך תא
2EH=76H (01110110) . לאחר ביצוע פקודהACC=76H וערך תא
2EH=F3H .
www.elecstudy.orgטסליצקי מרק [email protected]
53
XCHD A,@Ri
ומחליפה עם אותם ( 0-3סיביות )פקודה לוקחת חלק תחתון של מצבר. מצביע עליוRiסיביות של תא זיכרון שאוגר
לא משנות את מיקומם( 7-4)סיביות של חלק גדול.
אף דגל לא משתנה ולא מושפע.
:דוגמאXCHD A,@R0
:לפני ביצוע
R0=2EH, ACC=76H (01110110) ,2EH=F3H (11110011)RAM
:אחרי ביצוע
ACC=73H (01110011) ,2EH=F6H (11110110)RAM
www.elecstudy.orgטסליצקי מרק [email protected]
54
פעולות עם סיביות ודגלים
מיקרו בקרC8051F020 מסוגל
.לבצע פעולות עם סיביות
כ ניתן לבצע פעולות הבאות"בסה :
set, clear, and, or , not
ניתן לבצע גם פעולות קפיצה
. בהתאם מצב דגלים וסיביות
כל הפעולות עובדות לפי גישה
. ישירה
Mnemonic Description
CLR C Clear C
CLR bit Clear direct bit
SETB C Set C
SETB bit Set direct bit
CPL C Complement c
CPL bit Complement direct bit
ANL C,bit AND bit with C
ANL C,/bit AND NOT bit with C
ORL C,bit OR bit with C
ORL C,/bit OR NOT bit with C
MOV C,bit MOV bit to C
MOV bit,C MOV C to bit
JC rel Jump if C set
JNC rel Jump if C not set
JB bit,rel Jump if specified bit set
JNB bit,rel Jump if specified bit not set
JBC bit,relif specified bit set then clear it and
jump
www.elecstudy.orgטסליצקי מרק [email protected]
55
CLR <bit>
במידה ויש פגישה עליו)סיבית ספציפית ( מאפסת)פקודה מנקה .
במידה ולא מדובר על איפוס של דגל . )אף דגל לא משתנה ולא מושפע(.עצמו
:דוגמאCLR P2.7
,Port 2DCH (11011100)מצב התחלתי
5CH (01011100)מצב סופי
www.elecstudy.orgטסליצקי מרק [email protected]
56
SETB <bit>
1"פקודה הזאת מאתחלת סיבית המבוקשת לערך."
פעולה הזאת עובדת עם כל דגל או סיבית שנתון לגישה לפי הגדרה.
אלא אם כן פקודה משנה את הדגל באופן מכוון, אף דגל לא מושפע.
:דוגמאSETB C
SETB P2.0
224H (00100100)נניח שלפני פעולות ערך של פורט
לאחר פקודה ראשונה דגל נשא מאותחל(C1-שווה ל )
לאחר פקודה שנייהPort 2 25H (00100101)
www.elecstudy.orgטסליצקי מרק [email protected]
57
CPL <bit>
פקודה הזאת הופכת סיבית המבוקשת.
פעולה הזאת עובדת עם כל דגל או סיבית שנתון לגישה לפי הגדרה.
אלא אם כן פקודה משנה את הדגל באופן מכוון, אף דגל לא מושפע.
:דוגמאCPL P2.1
CPL P2.2
53יהיה 2נניח שמצב התחלתי של פורטH (01010011)
55יהיה 2לאחר ביצוע פקודות מצב של פורטH (01010101)
www.elecstudy.orgטסליצקי מרק [email protected]
58
ANL C, <source-bit>
עושיםAND לוגי בין דגלCARRY עם סיבית כלשהי עם הכנסת תוצאה לתוך דגלCARRY .
אז דגל 0אם סיבית היאCARRYאחרת דגל לא משתנה, מתאפס .
אבל לא משנים , אז מתכוונים אל ערך הפוך של סיבית, ליד סיבית" /"במידה וכותבים סימן. אותו
אף דגל אחר לא משתנה
:דוגמאות
MOV C,P2.0 ;Load C with input pin ;state of P2.0.
ANL C,P2.7 ;AND carry flag with ;bit 7 of P2.
MOV P2.1,C ;Move C to bit 1 of Port 2.
ANL C,/OV ;AND with inverse of OV flag.
במידה ו-P2.0=1, P2.7=0 ודגלOV=0אז לאחר רצף פעולות נקבל :
P2.1=0, CY=0, OV=0
www.elecstudy.orgטסליצקי מרק [email protected]
59
ORL C, <source-bit>
עושיםOR לוגי בין דגלCARRY עם סיבית כלשהי עם הכנסת תוצאה לתוך דגלCARRY .
אז דגל 0אם סיבית היאCARRY1-אחרת דגל עולה ל, לא משתנה .
אבל לא משנים , אז מתכוונים אל ערך הפוך של סיבית, ליד סיבית" /"במידה וכותבים סימן. אותו
אף דגל אחר לא משתנה
:דוגמא
MOV C,P2.0 ;Load C with input pin ;state of P2.0.
ORL C,P2.7 ;OR carry flag with ;bit 7 of P2.
MOV P2.1,C ;Move C to bit 1 of ;port 2.
ORL C,/OV ;OR with inverse of OV ;flag.
www.elecstudy.orgטסליצקי מרק [email protected]
60
MOV <dest-bit>,<source-bit>
פקודה מעתיקה את הסיבית המקור לסיבית היעד.
אחד הסיביות חייבת להיות דגלCARRY( .לא משנה מקור או יעד.)
אף דגל אחר לא מושפע .
:דוגמא
MOV P2.3,C
MOV C,P3.3
MOV P2.0,C
אם נניח ש-P2=C5H (11000101), P3.3=0 ודגלCARRYCY=1 , אז לאחר רצף
.P2=CCH (11001100) ,CY=0פעולות האלה
www.elecstudy.orgטסליצקי מרק [email protected]
61
JC תווית
פקודה הזאת היא פקודת קפיצה שמבצעת אותה במידה ודגלCARRY נמצא במצב
. אחרת תוכנה ממשיכה בדרכה". 1"
אף דגל לא משתנה.
:דוגמא
CLR C
SUBB A,R0
JC ARRAY1
MOV A,#20H
ARRAY1:
דגלcarryלאחר פקודת חיסור אם , מתאפס לאחר פקודה ראשונהA יותר קטן מערך
לתווית PCמעבירה את JCופקודה 1-עולה לcarryדגל 0Rשנמצא בתוך אוגר ARRAY1 , אחרת אנו ממשיכים לבצע פקודהMOV , 20מעתיקים ערךHלתוך
.המצבר ואז ממשיכים את התוכנית
www.elecstudy.orgטסליצקי מרק [email protected]
62
JNC תווית
פקודה הזאת היא פקודת קפיצה שמבצעת אותה במידה ודגלCARRY לא נמצא
.אחרת תוכנה ממשיכה בדרכה". 1"במצב
אף דגל לא משתנה.
:דוגמא
CLR C
SUBB A,R0
JNC ARRAY2
MOV A,#20H
ARRAY2:
דגלcarryלאחר פקודת חיסור אם , מתאפס לאחר פקודה ראשונהA יותר גדול או
PCמעבירה את JCופקודה 1-עולה לcarryדגל 0Rשווה לערך שנמצא בתוך אוגר 20Hמעתיקים ערך , MOVאחרת אנו ממשיכים לבצע פקודה , ARRAY2לתווית
.המצבר ואז ממשיכים את התוכניתלתוך
www.elecstudy.orgטסליצקי מרק [email protected]
63
JB <תווית,<סיבית
פקודה הזאת היא פקודת קפיצה שמבצעת אותה במידה וסיבית
.אחרת תוכנה ממשיכה בדרכה". 1"הנבדקת נמצאת במצב
אף דגל לא משתנה.
:דוגמאJB ACC.7,ARRAY1
JB P1.2,ARRAY2
מכיל 1ופורט 01001010נניח שמצבר מכילPort 1=57H
פקודה ראשונה לא מבצעת קפיצה ופקודה שנייה כן . 01010111))
.ARRAY2מבצעת ומעבירה אותנו לפי תווית
www.elecstudy.orgטסליצקי מרק [email protected]
64
JNB <bit>,rel
פקודה הזאת היא פקודת קפיצה שמבצעת אותה במידה וסיבית
.אחרת תוכנה ממשיכה בדרכה". 0"הנבדקת נמצאת במצב
אף דגל לא משתנה.
:דוגמאJNB ACC.6,ARRAY1
JNB P1.3,ARRAY2
מכיל 1ופורט 01001010נניח שמצבר מכילPort 1=57H
פקודה ראשונה לא מבצעת קפיצה ופקודה שנייה כן . 01010111))
.ARRAY2מבצעת ומעבירה אותנו לפי תווית
www.elecstudy.orgטסליצקי מרק [email protected]
65
JBC תווית,<סיבית>
פקודה הזאת היא פקודת קפיצה שמבצעת אותה במידה וסיבית
היא גם כן מאפסת את הסיבית לאחר , " 1"הנבדקת נמצאת במצב
.אחרת תוכנה ממשיכה בדרכה ללא שינוי סיבית. בדיקה
אף דגל לא משתנה.
:דוגמאJBC P1.3,ARRAY1
JBC P1.2,ARRAY2
נניח שמצב של פורטP1=56H (01010110) . פקודה ראשונה לא
לאחר פקודה שנייה תוכנה קופצת . משנה כלום וממשיכה לפקודה שנייה
.52H (01010010)ישתנה לערך P1וערך של פורט ARRAY2לתווית
www.elecstudy.orgטסליצקי מרק [email protected]
66
Program Branching Instructions פקודות קפיצה
בפקודות האלה אנו
משתמשים כדי לבצע
סדר פעולות רצוי
וקפיצות בין קטע קוד
, לקטע קוד אחר
לקריאת שגרות וחזרה
. מפסיקות
ישנם פקודות שמבצעות
קפיצות תמיד או
בהתאם לתנאים
. מסוימים
Mnemonic Description
ACALL addr11 Absolute subroutine call( סיביות11עד )קריאה לתת שגרה
LCALL addr16 Long subroutine call( סיביות16עד )קריאה לתת שגרה
RET Return from subroutineחזרה משגרה
RETI Return from interruptחזרה מפסיקה
AJMP addr11 Absolute jumpסיביות 11קפיצה עד
LJMP addr16 Long jumpסיביות 16קפיצה עד
SJMP rel Short jumpקפיצה קצרה
JMP @A+DPTR Jump indirectקפיצה של גישה עוקבת
JZ rel Jump if A=0קפיצה במידה ומצבר ריק
JNZ rel Jump if A NOT=0קפיצה במידה ומצבר לא ריק
CJNE A,direct,rel
Compare and Jump if Not Equal
צורות שונות של תשווה ותקפוץ במידה אם לא שווה
CJNE A,#data,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
DJNZ Rn,relDecrement and Jump if Not Zero
.0-ותקפוץ אם לא שווה ל1תחסיר DJNZ direct,rel
NOP No Operation. פעולה שלט מבצעת כלום
www.elecstudy.orgטסליצקי מרק [email protected]
67
ACALL addr11
פקודה הזאת מבצעת קריאה ללא תנאי של תת שגרה לפי כתובת שלה.
פקוד מעלה אתPCדוחפת ערך של , 2-בPC(16סיביות ) קודם בית )לתוך מחסנית. 2-בSPומעלה ( תחתון ואז בית עליון
הערך החדש נכנס לPCותוכנה ממשיכה להתבצע מהנקודה הזאת.
תת שגרה חייבת להיות באותו אזור של זיכרון(2 kB block .)
אף דגל לא משתנה.
:דוגמא
ACALL LOC_SUB
מצב נוכחי :SP=07H ,LOC_SUB 0567נמצא במקוםH , וערך שלPCשווה ל-0230H.
08מחסנית מקומות : מצב לאחר ביצוע פקודהH09-וH 32מכילהH02-וH ,SP=09H וערך חדש שלPC=0567H.
www.elecstudy.orgטסליצקי מרק [email protected]
68
LCALL addr16
פקודה הזאת מבצעת קריאה ללא תנאי של תת שגרה לפי כתובת שלה.
פקוד מעלה אתPCדוחפת ערך של , 3-בPC(16סיביות ) קודם בית )לתוך מחסנית. 2-בSPומעלה ( תחתון ואז בית עליון
הערך החדש נכנס לPCותוכנה ממשיכה להתבצע מהנקודה הזאת.
תת שגרה יכולה להיות בכל אזור של זיכרון(64 kB block .)
אף דגל לא משתנה.
:דוגמא
LCALL LOC_SUB
מצב נוכחי :SP=07H ,LOC_SUB 2034נמצא במקוםH , וערך שלPCשווה ל-0230H.
08מחסנית מקומות : מצב לאחר ביצוע פקודהH09-וH 33מכילהH02-וH ,SP=09H וערך חדש שלPC=2034H.
www.elecstudy.orgטסליצקי מרק [email protected]
69
RET
פקודה מחזירה את התוכנה מתת שגרה לתוכנה ראשית .
פקודה מעבירה בית עליון ובית תחתון מהמחסנית לאוגרPC 2ומורידהביתים האלה הם בעצם כתובת חזרה משגרה לתוכנה SP( .2מאוגר
(. ראשית ומוחקת את הנתונים האלה מהמחסנית
פקודה הזאת מסיימת את הפעלת השגרה שמפעילים אותה בעזרת. ”call“פקודה
אף דגל לא משתנה.
נניח שאוגרSP=0BH וכתובות בראש המחסנית( חלק שלRAM )0AH0-וBH 30מכילות ערכיםH02-וH.
ותוכנה ממשיכה לרוץ מכתובת SP=09Hלאחר ביצוע פקודה 0230H.
www.elecstudy.orgטסליצקי מרק [email protected]
70
RETI
פקודה מחזירה את התוכנה מפסיקה לתוכנה ראשית .
פקודה מעבירה בית עליון ובית תחתון מהמחסנית לאוגרPC 2ומורידהביתים האלה הם בעצם כתובת חזרה משגרה לתוכנה SP( .2מאוגר
(. ראשית ומוחקת את הנתונים האלה מהמחסנית
פקודה הזאת מסיימת את הפעלת הפסיקה ומחזירה לוגיקה של פסיקות.למצב התחלתי כדי שיהיה אפשרות לקלוט פסיקות נוספות
נניח שאוגרSP=0BH וכתובות בראש המחסנית( חלק שלRAM )0AH0-וBH 30מכילות ערכיםH02-וH.
ותוכנה ממשיכה לרוץ מכתובת SP=09Hלאחר ביצוע פקודה 0230H.
אוגרPSWלא מתחדש באופן אוטומטי .
לאחר ביצוע פקודה תוכנה ממשיכה לרוץ מאותו מקום איפה שעצרנו
.אותה עקב פסיקה
www.elecstudy.orgטסליצקי מרק [email protected]
71
AJMP addr11
פקודהAJMP 11לפי כתובת של –מאפשרת קפיצה באותו בלוק זיכרון
. סיביות
הכתובת היעד חייבת להיות באותו בלוק זיכרון במרחק של לא יותר מ-
2kB.
אף דגל לא משתנה.
:דוגמאAJMP NEAR
נניח שכרגעPC 0120מכיל ערך שלH ותוויתNEARנמצא בכתובת
0234H . לאחר ביצוע פקודה ערך חדש שלPC 0234יהיהH .
www.elecstudy.orgטסליצקי מרק [email protected]
72
LJMP addr16
פקודהLJMP 16לפי כתובת של –מאפשרת קפיצה באותו בלוק זיכרון
. סיביות
הכתובת היעד יכולה להיות בכל מרחב זיכרון במרחק של לא יותר מ-
64kB.
אף דגל לא משתנה.
:דוגמא
LJMP FAR
נניח שכרגעPC 0120מכיל ערך שלH ותוויתFARנמצא בכתובת
3234H . לאחר ביצוע פקודה ערך חדש שלPC 3234יהיהH .
www.elecstudy.orgטסליצקי מרק [email protected]
73
SJMP rel
היא מוסיפה ל. פקודה לקפיצה קצרה-PC2 ואחר כך מוסיפה לו ערך‘rel’. (signed 8-bit)סיביות 8שיכול להיות עד
זאת תהיה כתובת חדשה שנמצאת ב-PC ולשם תוכנה תתקדם בשלב. הבא
בית קדימה או 127בעזרת פקודה הזאת ניתן להגיע לכתובות במרחק עד. בית אחורה128
:דוגמאSJMP RELSRT
…
…
…
RELSRT:
www.elecstudy.orgטסליצקי מרק [email protected]
74
JMP @A + DPTR
סיביות שנמצא בתו אוגר 8פקודה הזאת מוסיפה ערךACC(מצבר ) סיביות 16לאוגר
(. זה אומר שתוכנה קופצת למיקום חדש)PCותוצאה נכנסת לתוך אוגר
אף אחד מהאוגרים(ACC ,DPTR )לא משתנה
אף דגל לא משתנה .
:דוגמא
MOV DPTR, #LOOK_TBL
JMP @A + DPTR
LOOK_TBL:
www.elecstudy.orgטסליצקי מרק [email protected]
75
JZ rel
פקודה הזאת מבצעת קפיצה לתוויתrel בתנאי שתוכן האוגרACC.אחרת תוכנה ממשיכה לפקודה הבאה ברצף, 0-שווה ל
אוגרACCלא משתנה ואף דגל לא משתנה.
:דוגמא
SUBB A,#20H
JZ LABEL1
DEC A
במידה ואוגרACC 20מכיל ערךH ודגלCARRY0-שווה לCY=0 ,אחרת תוכנה , LABEL1לאחר פקודת חיסור תוכנה תקפוץ לתווית
. ADECתמשיך לפקודה
www.elecstudy.orgטסליצקי מרק [email protected]
76
JNZ rel
פקודה הזאת מבצעת קפיצה לתוויתrel בתנאי שתוכן האוגרACC.אחרת תוכנה ממשיכה לפקודה הבאה ברצף, 0-שונה מ
אוגרACCלא משתנה ואף דגל לא משתנה.
:דוגמאDEC A
JNZ LABEL2
MOV RO, A
במידה ואוגרACCתוכנה 1לאחר פקודת חיסור , 1-מכיל ערך שונה מ.MOVאחרת תוכנה תמשיך לפקודה , LABEL2תקפוץ לתווית
www.elecstudy.orgטסליצקי מרק [email protected]
77
CJNE <dest-byte>,<source-byte>,rel
פקודה משווה ערך שנמצא ב-dest-byteעם ערך שנמצא ב-source-byte . אם הם
. relשונים היא מבצעת קפיצה לתווית
אםdest-byteקטן מ-source-byte דגלcarryשני . )אחרת דגל מתאפס" 1"-עולה ל
(. ערכים הם לא מסומנים
אף אופרנד לא משתנה.
:דוגמא
CJNE R3,#50H,NEQU
… …
NEQU: JC LOC1
LOC1: … …
www.elecstudy.orgטסליצקי מרק [email protected]
78
DJNZ <byte>,<rel-addr>
פקודה הזאת”decrement jump not zero” אפשר לתרגם תחסיר אחד ותקפוץ אם.0-תוצאה שונה מ
תוכנית קופצת לפי תווית0-מהתוכן של זיכרון ואם התוצאה שונה מ1היא מחסירה .
ערך חדש שיהיה בתוך התא יהיה 0-במידה ותוכן התא שווה לFFH .
אף דגל לא מושפע.
:דוגמא
DJNZ 20H,LOC1
DJNZ 30H,LOC2
DJNZ 40H,LOC3
20נניח שתאי זיכרוןH, 30H , 40H , מתא 1לאחר הורדת . 1,2,3מכילים ערכיםH20 מתא 1אם נוריד . ותוכנית תמשיך לפקודה הבאה0נקבל שם ערךH30 נקבל
. 2LOCואז תוכנית תקפוץ לפי תווית ( 0-שהוא שונה מ)1תוכן
www.elecstudy.orgטסליצקי מרק [email protected]
79
NOP
פקודה שלא מבצעת שום פעולה.
פקודה מתבצעת בפולס שעון בודד .
משתמשים בפקודה כדי ליצור השהייה מדויקת ללא שימוש בטיימרים .
12נניח שתדר הגביש MHz , 12זה אומר שתדר של פולס פנימי הוא MHz/12 ושווה
בדוגמא הזאת אנו בונים . מיקרו שנייה1זמן פעולה הבסיסית ביותר הוא . MHz 1-ל
.kHz 125. מיקרו שניות4" 1", מיקרו שניות1.2P–"0 "4גל ריבועי ברגל
:דוגמא
home: CLR P1.2
NOP
NOP
NOP
SETB P1.2
NOP
sjmp home
www.elecstudy.orgטסליצקי מרק [email protected]