Mod4 3 8051 Instrns

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 20

Instruction Set of 8051

ACALL: Absolute Call


8051 Instruction Set
JC: Jump if Carry Set PUSH: Push Value Onto Stack

ADD, ADDC: Add Acc. (With Carry) JMP: Jump to Address RET: Return From Subroutine

AJMP: Absolute Jump JNB: Jump if Bit Not Set RETI: Return From Interrupt

ANL: Bitwise AND JNC: Jump if Carry Not Set RL: Rotate Accumulator Left

CJNE: Compare & Jump if Not Equal JNZ: Jump if Acc. Not Zero RLC: Rotate Acc. Left Through Carry

CLR: Clear Register JZ: Jump if Accumulator Zero RR: Rotate Accumulator Right

CPL: Complement Register LCALL: Long Call RRC: Rotate Acc. Right Through Carry

DA: Decimal Adjust LJMP: Long Jump SETB: Set Bit

DEC: Decrement Register MOV: Move Memory SJMP: Short Jump

DIV: Divide Accumulator by B MOVC: Move Code Memory SUBB: Sub. From Acc. With Borrow

DJNZ: Dec. Reg. & Jump if Not Zero MOVX: Move Extended Memory SWAP: Swap Accumulator Nibbles

INC: Increment Register MUL: Multiply Accumulator by B XCH: Exchange Bytes

JB: Jump if Bit Set NOP: No Operation XCHD: Exchange Digits

JBC: Jump if Bit Set and Clear Bit ORL: Bitwise OR XRL: Bitwise Exclusive OR

POP: Pop Value From Stack Undefined: Undefined Instruction


Some Simple Instructions

MOV dest,source ; dest = source

MOV A,#72H ;A=72H


MOV R4,#62H ;R4=62H
MOV B,0F9H ;B=the content of F9’th byte of RAM

MOV DPTR,#7634H
MOV DPL,#34H
MOV DPH,#76H

MOV P1,A ;mov A to port 1

Note 1:
MOV A,#72H ≠ MOV A,72H
After instruction “MOV A,72H ” the content of 72’th byte of RAM will
replace in Accumulator.

Note 2:
MOV A,R3 ≡ MOV A,3
ADD A, Source ;A=A+SOURCE
ADD A,#6 ;A=A+6

ADD A,R6 ;A=A+R6

ADD A,6 ;A=A+[6] or A=A+R6

ADD A,0F3H ;A=A+[0F3H]

SUBB A, Source ;A=A-SOURCE-C

SUBB A,#6 ;A=A-6

SUBB A,R6 ;A=A+R6


MUL & DIV

• MUL AB ;B|A = A*B


MOV A,#25H
MOV B,#65H
MUL AB ;25H*65H=0E99
;B=0EH, A=99H

• DIV AB ;A = A/B, B = A mod B


MOV A,#25
MOV B,#10
DIV AB ;A=2, B=5
SETB bit ; bit=1
CLR bit ; bit=0

SETB C ; CY=1
SETB P0.0 ;bit 0 from port 0 =1
SETB P3.7 ;bit 7 from port 3 =1
SETB ACC.2 ;bit 2 from ACCUMULATOR =1
SETB 05 ;set high D5 of RAM loc. 20h

Note:

CLR instruction is as same as SETB


i.e.:
CLR C ;CY=0

But following instruction is only for CLR:


CLR A ;A=0
DEC byte ;byte=byte-1
INC byte ;byte=byte+1

INC R7
DEC A
DEC 40H ; [40]=[40]-1
RR – RL – RRC – RLC A

EXAMPLE:
RR A

RR:

RRC: C

RL:

RLC:
C
ANL - ORL – XRL
Bitwise Logical Operations:
AND, OR, XOR
EXAMPLE:
MOV R5,#89H
ANL R5,#08H

CPL A ;1’s complement


Example:
MOV A,#55H ;A=01010101 B
L01: CPL A
MOV P1,A
ACALL DELAY
SJMP L01
Stack in the 8051
• The register used to access
the stack is called SP
(stack pointer) register.
7FH

• The stack pointer in the Scratch pad RAM


8051 is only 8 bits wide,
which means that it can 30H

take value 00 to FFH. 2FH


Bit-Addressable RAM
When 8051 powered up,
20H
the SP register contains 1FH Register Bank 3
value 07. 18H
17H
Register Bank 2
10H
0FH Register Bank 1 )Stack(
08H
07H
Register Bank 0
00H
Example:
MOV R6,#25H
MOV R1,#12H
MOV R4,#0F3H
PUSH 6
PUSH 1
PUSH 4

0BH 0BH 0BH 0BH

0AH 0AH 0AH 0AH F3

09H 09H 09H 12 09H 12

08H 08H 25 08H 25 08H 25

Start SP=07H SP=08H SP=09H SP=08H


LOOP and JUMP Instructions
Conditional Jumps :
JZ Jump if A=0

JNZ Jump if A/=0

DJNZ Decrement and jump if A/=0


CJNE A,byte Jump if A/=byte
CJNE reg,#data Jump if byte/=#data
JC Jump if CY=1

JNC Jump if CY=0

JB Jump if bit=1

JNB Jump if bit=0

JBC Jump if bit=1 and clear bit


DJNZ:

Write a program to clear ACC, then


add 3 to the accumulator ten time

Solution:
MOV A,#0
MOV R2,#10
AGAIN: ADD A,#03
DJNZ R2,AGAIN ;repeat until R2=0 (10 times)
MOV R5,A
LJMP(long jump)
LJMP is an unconditional jump. It is a 3-byte instruction. It
allows a jump to any memory location from 0000 to FFFFH.

AJMP(absolute jump)
In this 2-byte instruction, It allows a jump to any memory
location within the 2k block of program memory.

SJMP(short jump)
In this 2-byte instruction. The relative address range of 00-
FFH is divided into forward and backward jumps, that is ,
within -128 to +127 bytes of memory relative to the address of
the current PC.
CALL Instructions
Another control transfer instruction is the CALL instruction,
which is used to call a subroutine.

• LCALL(long call)
This 3-byte instruction can be used to call subroutines
located anywhere within the 64K byte address space
of the 8051. (absolute call)
• ACALL
ACALL is 2-byte instruction. the target
address of the subroutine must be within 2K
byte range.
Example:
Write a program to copy a block of 10 bytes from RAM location
starting at 37h to RAM location starting at 59h.

Solution:
MOV R0,#37h ; source pointer
MOV R1,#59h ; dest pointer
MOV R2,#10 ; counter
L1: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R2,L1
Decimal Addition
156 + 248
. 100's 10's 1's

. 1 5 6

+ 2 4 8

= 4 0 4 16 Bit Addition
1A44 + 22DB = 3D1F

. 256's 16’s 1's

. 1 A 4 4

+ 2 2 D B

= 3 D 1 F
Performing the Addition with 8051
. 65536's 256's 1's

. R6 R7

+ R4 R5

= R1 R2 R3

1.Add the low bytes R7 and R5, leave the answer in R3.

2.Add the high bytes R6 and R4, adding any carry from step 1, and leave the answer in R2.

3.Put any carry from step 2 in the final byte, R1.


Steps 1, 2, 3
MOV A,R7 ;Move the low-byte into the accumulator

ADD A,R5 ;Add the second low-byte to the accumulator

MOV R3,A ;Move the answer to the low-byte of the result

MOV A,R6 ;Move the high-byte into the accumulator

ADDC A,R4 ;Add the second high-byte to the accumulator, plus carry.

MOV R2,A ;Move the answer to the high-byte of the result

MOV A,#00h ;By default, the highest byte will be zero.

ADDC A,#00h ;Add zero, plus carry from step 2.

MOV R1,A ;Move the answer to the highest byte of the result
The Whole Program
;Load the first value into R6 and R7
MOV R6,#1Ah
MOV R7,#44h
;Load the first value into R4 and R5
MOV R4,#22h
MOV R5,#0DBh
;Call the 16-bit addition routine LCALL ADD16_16

ADD16_16:

;Step 1 of the process


MOV A,R7 ;Move the low-byte into the accumulator
ADD A,R5 ;Add the second low-byte to the accumulator
MOV R3,A ;Move the answer to the low-byte of the result

;Step 2 of the process


MOV A,R6 ;Move the high-byte into the accumulator
ADDC A,R4 ;Add the second high-byte to the accumulator, plus carry.
MOV R2,A ;Move the answer to the high-byte of the result

;Step 3 of the process


MOV A,#00h ;By default, the highest byte will be zero.
ADDC A,#00h ;Add zero, plus carry from step 2.
MOV MOV R1,A ;Move the answer to the highest byte of the result

;Return - answer now resides in R1, R2, and R3. RET

You might also like