138
Chapter 3 Instruction Set How to write a program The 8051 Microcontroller Lê Chí Thông 1 Lê Chí Thông [email protected] sites.google.com/site/chithong Ho Chi Minh City University of Technology

The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Embed Size (px)

Citation preview

Page 1: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Chapter 3 Instruction Set

How to write a program

The 8051 Microcontroller

Lê Chí Thông 1

Lê Chí Thông

[email protected]

sites.google.com/site/chithong

Ho Chi Minh City University of Technology

Page 2: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Instruction Set

• 255 instructions

1-byte instructions: 139

2-byte instructions: 92

3-byte instructions: 24

• Summary instruction set (pdf)

• Full instruction set (pdf)

Lê Chí Thông 2

Page 3: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

The First ProgramFirst_program.asm

ORG 0000H

MOV P1,#0FH

SETB P1.7

CLR P1.0

END

Lê Chí Thông 3

First_program.hex

:0700000075900FD297C2902A

:00000001FF

First_program.lst

LOC OBJ LINE SOURCE

0000 1 ORG 0000H

0000 75900F 2 MOV P1,#0FH

0003 D297 3 SETB P1.7

0005 C290 4 CLR P1.0

5 END

Byte count

Load addressOpcode

Checksum =

2’s complement

of all data

Type

end of file record type

0000H 75H

0001H 90H

0002H 0FH

0003H D2H

0004H 97H

0005H C2H

0006H 90H

CodeMemory

Page 4: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Registers and Data Transfer Instructions

• Register

o Register A = accumulator

o Register B

o Register R0 – R7

• Data Transfer Instruction

o MOV destination, source

Ex:

MOV A,R0

MOV R1,B

MOV R1,R3Lê Chí Thông

A R0

R1 B

4

Page 5: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Internal RAM

• 128 locations from address 00H to 7FH (256 locations for 8052)

• The content of one location is 8 bit.

• Register banks: address 00H to 1FH

• Bit Addressable RAM: address 20H to 2FH

• General purpose RAM: address from 30H to 7FH

Lê Chí Thông 5

Page 6: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Bit-addressable

RAM (20H-2FH)

Register banks

(00H-1FH)

General purpose

RAM (30H-7FH)

Special function registers

(SFRs)(80H-FFH)

Lê Chí Thông 6

Page 7: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Address from 30H to 7FH

• The content of one location is 8 bit.

Ex: MOV A,30H

This instruction moves (reads) the content of location 30H (NOT data 30H) to register A.

Ex: MOV 31H,R4

This instruction moves (writes) the content of register R4to location 31H.

Lê Chí Thông

General Purpose RAM

A 30H

31H R4

7

Page 8: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Bit-addressable

RAM (20H-2FH)

Register banks

(00H-1FH)

General purpose

RAM (30H-7FH)

Special function registers

(SFRs)(80H-FFH)

Lê Chí Thông 8

Page 9: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Address from 20H to 2FH

• The content of one location is 8 bit.

• Can read/write a byte or a bit

Ex: MOV 20H, A ; writes the content of register A to location 20H.

Ex: SETB 20H.0

or SETB 00H

Ex: MOV C,31H

or MOV C, 26H.1

Lê Chí Thông

Bit Addressable RAM

20H A

20H 1

Not affected

26HCY

9

Page 10: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Bit-addressable

RAM (20H-2FH)

Register banks

(00H-1FH)

General purpose

RAM (30H-7FH)

Special function registers

(SFRs)(80H-FFH)

Lê Chí Thông 10

Page 11: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• 4 banks: Bank 0 (default), Bank 1, Bank 2, and Bank 3

• Change register bank by selecting bits RS1 and RS0 (in register PSW)

• One bank includes 8 registers: R0 through R7o R0 of Bank 0 is location 00H

o …

o R7 of Bank 0 is location 07H

o R0 of Bank 1 is location 08H

o …

o R7 of Bank 1 is location 0FH

o R0 of Bank 2 is location 10H

o …

o R7 of Bank 2 is location 17H

o R0 of Bank 3 is location 18H

o …

o R7 of Bank 3 is location 1FH Lê Chí Thông

Register Banks

11

Page 12: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

o R1 of Bank 0 is location ………

o R5 of Bank 0 is location ………

o R5 of Bank 1 is location ………

o R1 of Bank 2 is location ………

o R2 of Bank 3 is location ………

o R6 of Bank 3 is location ………

Lê Chí Thông

Register Banks – Your Turn!

12

Page 13: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: use default bank (Bank 0)

MOV A, R5 = MOV A, 05H

MOV R0, A = MOV 00H, A

Lê Chí Thông

Register Banks

R5 05H≡

Read the contents of register R5 into the accumulator

Read the contents of location 05H into the accumulator

Read the contents of register Ainto register R0

Read the contents of register Ainto location 00H

13

Page 14: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông

Register PSW (Program Status Word)

14

Page 15: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

The active bank is selected by bit RS1 (PSW.4) & RS0 (PSW.3)

Ex: MOV PSW, #00010000B ; select bank 2

or SETB RS1

CLR RS0

Try it: Select bank 1

……………………..

……………………..Lê Chí Thông

Selecting Register Bank

RS1 RS0 Bank

0 0 0

0 1 1

1 0 2

1 1 3

15

Page 16: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Bit-addressable

RAM (20H-2FH)

Register banks

(00H-1FH)

General purpose

RAM (30H-7FH)

Special function registers

(SFRs)(80H-FFH)

Lê Chí Thông 16

Page 17: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông

Special Function Registers (SFRs)• SFRs include register A, B, PSW, P0, P1, P2, P3, DPTR,

TMOD, SCON …

• All SFRs are accessible by name and direct address.

• Both of them must be coded as direct addressEx: MOV P1, A ; Output register A to Port 1

MOV 90H, A ; same

Same opcode: F5 90Ex: MOV R1, ACC

MOV R1, 0E0H

Same opcode: A9 E0Ex: MOV R1, ACC

MOV R1, A

Same function BUT different opcodes (A9 E0 vs. F9)

Try it: Input Port 2 to register A ……………………………17

Page 18: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

1. Immediate Addressing

2. Register Addressing

3. Direct Addressing

4. Indirect Addressing

5. Relative Addressing

6. Absolute Addressing

7. Long Addressing

8. Indexed Addressing

Addressing Modes

Lê Chí Thông 18

Page 19: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông

Coding format- Addressing modes

19

Page 20: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

- Source operand is constant

- Use # sign

(Source)

MOV A,#12

MOV A,#0C4H

MOV R1,#1110B

ADD A,#11110001B

MOV DPTR,#2000H

Immediate Addressing

Lê Chí Thông

A 0 0 0 0 1 1 0 0

A 1 1 0 0 0 1 0 0

R1 0 0 0 0 1 1 1 0

A 1 0 1 1 0 1 0 1CY 1

DPH 0 0 1 0 0 0 0 0 DPL 0 0 0 0 0 0 0 0

20

Page 21: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: MOV R1,#36H

MOV A,R1

MOV R7,#0FH

ANL A,R7

INC A

DEC A

MOV DPTR,#2000

INC DPTR (source)

Lê Chí Thông

Register Addressing

R1 0 0 1 1 0 1 1 0

A 0 0 1 1 0 1 1 0

R7 0 0 0 0 1 1 1 1

A 0 0 0 0 0 1 1 0

A 0 0 0 0 0 1 1 1

A 0 0 0 0 0 1 1 0

DPH 0 0 1 0 0 0 0 0 DPL 0 0 0 0 0 0 0 1

21

Page 22: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Direct Addressing

Lê Chí Thông

• Access internal RAM and SFRs

MOV A,70H ; copy contents of RAM at 70H to A

MOV R0,40H ; copy contents of RAM at 40H to A

MOV 56H,A ; put contents of A into RAM at 56H

MOV 0D0H,A ; put contents of A into PSW

MOV PSW,A ; same

22

Page 23: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Direct Addressing vs. Immediate Addressing

Lê Chí Thông

MOV A,30H MOV A,#30H

Direct addressing Immediate addressing

A 30H A 0 0 1 1 0 0 0 0

23

Page 24: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Play with R0-R7 (bank 0) by Direct Addressing

Lê Chí Thông

MOV A,4 MOV A,R4

MOV A,7 MOV A,R7

MOV 7,6 MOV R7,R6

MOV R2,#05 ; Put 5 in R2

MOV R2,5 ; Put content of RAM at address 5 in R2

R2 05H R2 0 0 0 0 0 1 0 1

24

≠MOV R2,5 MOV R2,#5

Page 25: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

1. Immediate Addressing

2. Register Addressing

3. Direct Addressing

4. Indirect Addressing

5. Relative Addressing

6. Absolute Addressing

7. Long Addressing

8. Indexed Addressing

Addressing Modes

Lê Chí Thông 25

Page 26: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• The address of the source or destination is specified in registers.

• Use registers R0 or R1 for 8-bit address (internal or external RAM)

• Use @ sign to access the content of the memory location: @R0, @R1

Ex: MOV R0,#30H ;R0 30H

MOV A,@R0 ;A(R0): read content of internal RAM at ; address specified by R0 to A

Indirect Addressing

Lê Chí Thông

A

7FH

30H

00H

R0 0 0 1 1 0 0 0 0Internal RAM

26

Page 27: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to move (write) the content of A to location 32H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing

ORG 0000H

MOV 32H,A

END

Method 2: Indirect addressingORG 0000H

MOV R0,#32H

MOV @R0,A

END

Lê Chí Thông 27

Ex: Write Data to Internal RAM (1)

Page 28: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write Data to Internal RAM (2)Write a program to move (write) 40H to location 30H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing

ORG 0000H

MOV 30H,#40H

END

Method 2: Indirect addressingORG 0000H

MOV R0,#30H

MOV @R0,#40H

END

Lê Chí Thông 28

Page 29: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Clear Internal RAMEx: Write a program to clear location 31H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Hint: to clear means to reset the data to zero. Method 1: Direct addressing

ORG 0000H

MOV 31H,#0

END

Method 2: Indirect addressingORG 0000H

MOV R0,#31H

MOV @R0,#0

END

Lê Chí Thông 29

Page 30: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to move (read) the content of location 33H in internal RAM to register A using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing

ORG 0000H

MOV A,33H

END

Method 2: Indirect addressingORG 0000H

MOV R0,#33H

MOV A,@R0

END

Lê Chí Thông 30

Ex: Read Data from Internal RAM

Page 31: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to move (transfer) the content of internal RAM from address 34H to address 35H, using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing

ORG 0000H

MOV 35H,34H

END

Method 2: Indirect addressingORG 0000H

MOV R0,#34H

MOV A,@R0

INC R0

MOV @R0,A

END

Lê Chí Thông 31

Ex: Data Transfer (Read/Write)

Page 32: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: MOV R0,#30H ;R0 30H

MOVX A,@R0 ;A(R0): read content of eXternal RAM at ; address specified by R0 to A

Indirect Addressing – External 8-bit address RAM

Lê Chí Thông

A 30H

00H

External RAMR0 0 0 1 1 0 0 0 0

32

Page 33: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Uses DPTR register for 16-bit addresses (external memory)

• Use @ sign to access the content of the memory location:@DPTR

Ex: MOV DPTR,#4000H ; DPTR Address

MOVX A,@DPTR ; read content of external RAM at

; address 4000H to A

Lê Chí Thông

A 4000H

00H

External RAMDPTR 40H 00H

33

Indirect Addressing – External 16-bit address RAM

Page 34: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: MOV DPTR,#31FFH ; DPTR Address

MOVX @DPTR,A ; write content of A to external RAM

; at address 31FFH

A 31FFH

00H

External RAMDPTR 31H FFH

Lê Chí Thông 34

Indirect Addressing – External 16-bit address RAM

Page 35: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to move the content of register A to location 0033H in external RAM.

ORG 0000H

MOV DPTR,#0033H

MOVX @DPTTR,A

END

Lê Chí Thông 35

Write Data to External RAM (1)

Page 36: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to write 40H to location 0030H in externalRAM.

ORG 0000H

MOV A,#40H

MOV DPTR,#0030H

MOVX @DPTR,A

END

Lê Chí Thông 36

Write Data to External RAM (2)

Page 37: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to clear location 0031H in external RAM. ORG 0000H

CLR A

MOV DPTR,#0031H

MOVX @DPTTR,A

END

Lê Chí Thông 37

Clear External RAM

Page 38: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to read data from external RAM at address 0032 to register A.

ORG 0000H

MOV DPTR,#0032H

MOVX A,@DPTTR

END

Lê Chí Thông 38

Read Data from External RAM

Page 39: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to move the content of location 0034H in external RAM to location 0035H in external RAM.

ORG 0000H

MOV DPTR,#0034H

MOVX A,@DPTTR

INC DPTR

MOVX @DPTR,A

END

Lê Chí Thông 39

Read/Write External RAM

Page 40: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program to move data from internal RAM at address 56H to external RAM at address 4123H.

ORG 0000H

MOV A, 56H

MOV DPTR, #4123H

MOVX @DPTR, A

END

Your Turn!

Lê Chí Thông 40

Page 41: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Register Addressing vs. Indirect Addressing

Lê Chí Thông

MOV A,R1 MOV A,@R1

Register addressing

Indirect addressing

A R1

41

A

7FH

00H

R1Internal RAM

Page 42: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: (Implementation of array)

Clear internal RAM from address60H to 7FH

MOV R0, #60H

LOOP: MOV @R0, #0

INC R0

CJNE R0, #80H, LOOP

Example of Indirect Addressing

Lê Chí Thông 42

R0 60H

(R0) 0

R0 R0+1

R0= 80h?N

Y

Page 43: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program to output (send) the content of internal RAM, from address 20H to 45H, to Port 1

ORG 0000H

MOV R0, #20H

LOOP:

MOV A, @R0

MOV P1, A

INC R0

CJNE R0, #46H, LOOP

END

Your Turn!

Lê Chí Thông 43

Page 44: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

1. Immediate Addressing

2. Register Addressing

3. Direct Addressing

4. Indirect Addressing

5. Relative Addressing

6. Absolute Addressing

7. Long Addressing

8. Indexed Addressing

Addressing Modes

Lê Chí Thông 44

Page 45: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Used in SJMP instruction

• A relative address (or offset) is an 8-bit signed value.

• It is added to PC to form a new value for PC.

• Range: -128 ~ +127

• Usually used with label

Ex: SJMP LABEL1 is in memory at locations 0100H and 0101H

PC = 0102H

If LABEL1 is the label representing an instruction at location 0107H

Relative offset is 0107H – 0102H = 5

Opcode of SJMP LABEL1 is 80 05

Relative Addressing

Lê Chí Thông 45

Page 46: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: SJMP LABEL2 is in memory at locations 2040H and 2041H

PC = 2042H

If LABEL2 is the label representing an instruction at location 2038H

Relative offset is 2038H – 2042H = -10 = F6H

Opcode of SJMP LABEL1 is 80 F6

Relative Addressing

Lê Chí Thông 46

Page 47: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: ORG 0000H

AGAIN: SETB P1.0

NOP

NOP

CLR P1.0

NOP

SJMP AGAIN

END

a. Find the opcode of SJMP AGAIN instruction?

b. Find the duration of P1.0=1? P1.0=0?

c. What is the result of this program?

Your Turn!

Lê Chí Thông 47

Page 48: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Used in AJMP, ACALL instruction

• Usually used with label

Absolute Addressing

Memory map showing 2K pages

Lê Chí Thông 48

Within any 2K page, the upper five address

bits are the same for the source and

destination addresses.

The lower 11 bits of the destination are

supplied in the instruction

Page 49: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Used in LCALL and LJMP instruction

• Use full 16-bit address

• Usually used with label

Ex: LCALL SUBPROGRAM1

LJMP LABEL2

Long Addressing

Lê Chí Thông 49

Page 50: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Base address (PC or DPTR) + Offset (A) Effective Address

• Used with JMP or MOVC

Ex: MOVC A, @A+DPTR

MOVC A, @A+PC

JMP @A+DPTR

Indexed Addressing

Lê Chí Thông 50

Page 51: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: An even number from 0 to 6 is in the Accumulator. The following sequence of instructions branches to one of four AJMP instructions in a jump table starting at JMP_TBL.

MOV DPTR, # JMP_TBL

JMP @A + DPTR

JMP_TBL: AJMP LABEL0

AJMP LABEL1

AJMP LABEL2

AJMP LABEL3

• If the Accumulator equals 04H when starting this sequence, execution jumps to label LABEL2. Because AJMP is a 2-byte instruction, the jump instructions start at every other address.

Indexed Addressing

Lê Chí Thông 51

Page 52: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Instruction Types

• Data transfer

• Arithmetic

• Logical

• Boolean variable

• Program branching

Lê Chí Thông 52

Page 53: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryLegend

Lê Chí Thông 53

Page 54: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryData Transfer

Lê Chí Thông 54

Page 55: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryData Transfer

Lê Chí Thông 55

Page 56: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Data TransferMOV dest, source ; dest source

MOV A,#72H ;A=72HMOV R4,#62H ;R4=62HMOV B,0F9H ;B=the content of address F9H of RAM

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

MOV P1,A ;move (out) A to Port 1

Note 1:MOV A,#72H ≠ MOV A,72H

Note 2:MOV A,R3 ≡ MOV A,3 ;R3 of bank 0 is location 3

Lê Chí Thông 56

Page 57: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Creating a Loop (1)Ex: Write a program to write 40H to internal RAM from location 30H to location 36H.

ORG 0000H

MOV 30H,#40H

MOV 31H,#40H

MOV 32H,#40H

MOV 33H,#40H

MOV 34H,#40H

MOV 35H,#40H

MOV 36H,#40H

END

Lê Chí Thông 57

Page 58: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to write 40H to internal RAMfrom location 30H to location 36H.(source)

ORG 0000H

MOV R5,#7 ;Loop=7

MOV R1,#30H;Address=30H

Again: MOV @R1,#40H

INC R1

DEC R5

CJNE R5,#0,Again

END

Lê Chí Thông 58

Addr 30H

(Addr) 40H

AddrAddr+1

Loop=0?N

Y

Loop 7

LoopLoop-1

Creating a Loop (2)

Page 59: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to write 40H to internal RAMfrom location 30H to location 36H.(source)

ORG 0000H

MOV R5,#7;Loop=7

MOV R1,#30H;Address=30H

Again: MOV @R1,#40H

INC R1

DJNZ R5,Again

END

Lê Chí Thông 59

Creating a Loop (3)

Addr 30H

(Addr) 40H

AddrAddr+1

Loop=0?N

Y

Loop 7

LoopLoop-1

Page 60: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to write 40H to internal RAMfrom location 30H to location 36H.(source)

ORG 0000H

MOV R1,#30H;Address=30H

Again: MOV @R1,#40H

INC R1

CJNE R1,#37H,Again

END

Lê Chí Thông 60

Creating a Loop (4)

Addr 30H

(Addr) 40H

AddrAddr+1

Addr=37H?N

Y

Page 61: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Your Turn! Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1

Lê Chí Thông 61

Page 62: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Solutions (1)Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1Method 1: using DJNZ

ORG 0000H

MOV R7,#10

MOV R0,#20H

Loop:MOV P1,@R0 ;Output to Port1

INC R0

DJNZ R7,loop

END

Lê Chí Thông 62

Page 63: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Solutions (2)Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1Method 2: using CJNE

ORG 0000H

MOV R0,#20H

Loop:MOV P1,@R0 ;Output to Port1

INC R0

CJNE R0,#2AH,loop

END

Lê Chí Thông 63

Page 64: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

MOV A,#ENTRY_NUMBER

MOV DPTR,#TABLE

MOVC A,@A+DPTR

TABLE: DB data1, data2, data3, …

Lê Chí Thông 64

Look-up Table

Page 65: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a packed-BCD number in location 33H of internal RAM. Writea program that calculate the square of high decade of this number,and store the result in internal RAM at address 34H

ORG 0MOV A,33HSWAP AANL A,#0FHMOV DPTR,#TABLEMOVC A,@A+DPTRMOV 34H, A

TABLE:DB 0,1,4,9,16,25,36,49,64,81END

Lê Chí Thông 65

Look-up Table - Example

Page 66: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a packed-BCD number in location 34H of internal RAM. Writea program that displays the low decade of this number on thecommon-anode 7-seg LED connected to Port 2 (schematic).

Lê Chí Thông 66

Your Turn!

Page 67: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông 67

Create the TableD7 D6

gD5f

D4e

D3d

D2c

D1b

D0a

0 0 1 0 0 0 0 0 0 40H

1 0 1 1 1 1 0 0 1 79H

2 0 0 1 0 0 1 0 0 24H

3 0 0 1 1 0 0 0 0 30H

4 0 0 0 1 1 0 0 1 19H

5 0 0 0 1 0 0 1 0 12H

6 0 0 0 0 0 0 1 0 02H

7 0 1 1 1 1 0 0 0 78H

8 0 0 0 0 0 0 0 0 00H

9 0 0 0 1 0 0 0 0 10H

TABLE: DB 40h,79h,24h,30h,19h, 12h,02h,78h,00h,10h

Page 68: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0000HMOV 34H,#25HMOV A,34HANL A,#0FHMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,ASJMP DONE

TABLE: DB 40h,79h,24h,30h,19hDB 12h,02h,78h,00h,10h

DONE: NOPEND

(source)

Lê Chí Thông 68

Solutions

Page 69: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

MOV A, #ENTRY_NUMBER

CALL LOOK_UP

LOOK_UP:

INC A

MOVC A, @A+PC

RET

TABLE:

DB data1, data2, data3, …

Lê Chí Thông 69

Look-up Table

Page 70: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

MOV DPTR,#JUMP_TABLEMOV A,INDEX_NUMBERRL AJMP @A+DPTR…

JUMP_TABLE: AJMP CASE0AJMP CASE1AJMP CASE2…

Lê Chí Thông

Jump Table

70

Page 71: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryArithmetic Operations

Lê Chí Thông 71

Page 72: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryArithmetic Operations

Lê Chí Thông 72

Page 73: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryArithmetic Operations

Lê Chí Thông 73

Page 74: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryFlag Effect

Lê Chí Thông 74

Page 75: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Arithmetic Operations (1)

ADD A,#34H ; Immediate addressing A A + 34H

ADD A,34H ;Direct addressing A A + (34H)

ADD A,R1 ;Register addressing A A + R1

ADD A,@R1 ;Indirect addressing A A + (R1)

Lê Chí Thông 75

Page 76: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Arithmetic Operations (2)

MOV A,#23H ; A = 23H, CY = 0, P = 1, OV = 0

ADD A,#22 ; A = 39H, CY = 0, P = 0, OV = 0

ADD A,#11100111B ; A = 20H, CY = 1, P = 1, OV = 0

ADDC A,#09H ; A = 2AH, CY = 0, P = 1, OV = 0

SUBB A,#00100111B ; A = 03H, CY = 0, P = 0, OV = 0

SUBB A,#3 ; A = 00H, CY = 0, P = 0, OV = 0

SUBB A,#0F2H ; A = 0EH, CY = 1, P = 1, OV = 0

Lê Chí Thông 76

Page 77: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Arithmetic Operations (3)

MOV A,#45 ; A = 2DH, CY = 1, P = 0, OV = 0

MOV B,#12H ; B = 12H

MUL AB ; A = 2AH, B = 03H

MOV B,#10 ; B = 10

DIV AB ; A = 04H, B = 02H

MOV A,#-100 ; A = 9CH, CY = 0, P = 0, OV = 0

ADD A,#-50 ; A = 6AH, CY = 1, P = 0, OV = 1

MOV A,#120 ; A = 78H, CY = 1, P = 0, OV = 1

ADD A,#30 ; A = 44H, CY = 0, P = 0, OV = 1

Lê Chí Thông 77

Page 78: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Your Turn!Given 10 8-bit unsigned numbers in internal RAM at starting address 30H. Write a program to calculate the sum of these numbers and store the result in internal RAM at address 2FH. Assume that the result is less than or equal 255.

Lê Chí Thông 78

Page 79: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

SolutionsGiven 10 8-bit unsigned numbers in internal RAM at starting address 30H. Write a program to calculate the sum of these numbers and store the result in internal RAM at address 2FH. Assume that the result is less than or equal 255.

ORG 0MOV R0,#30HCLR AMOV R2,#10

loop: ADD A,@R0INC R0DJNZ R2,loopMOV 2FH,AEND

Lê Chí Thông 79

Page 80: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Rotate instructions operate only on A

RL A

MOV A,#0F0H ; A 11110000

RR A ; A 11100001

RR A

MOV A,#0F0H ; A 11110000

RR A ; A 01111000

Rotate

80Lê Chí Thông

Page 81: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

RRC A

MOV A, #0A9H ; A A9H

ADD A, #14H ; A BDH (10111101), C0

RRC A ; A 01011110, C1

RLC A

MOV A, #3CH ; A 3CH(00111100)

SETB C ; C 1

RLC A ; A 01111001, C1

C

C

Rotate through Carry

81Lê Chí Thông

Page 82: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Note that a shift left is the same as multiplying by 2, shift right is divide by 2

MOV A, #3 ; A 00000011 (3)

CLR C ; C 0

RLC A ; A 00000110 (6)

RLC A ; A 00001100 (12)

RRC A ; A 00000110 (6)

Rotate and Multiplication/Division

82Lê Chí Thông

Page 83: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

SWAP A

MOV A, #72H ; A 72H

SWAP A ; A = 27H

Swap

83Lê Chí Thông

Page 84: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryLogic Operations

Lê Chí Thông 84

Page 85: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Logic Operations (1)

Lê Chí Thông 85

MOV A,#46H

MOV R3,A

ANL A,#0FH

MOV R7,A

MOV A,R3

ANL A,#0F0H

SWAP A

MOV R6,A

R6 = ………………………….; R7 = …………………………….

Page 86: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Logic Operations (2)

Lê Chí Thông 86

MOV R2,#05H

MOV R3,#07H

MOV A,R2

SWAP A

ORL A,R3

A = ………………………….

Page 87: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryBoolean Variable

Lê Chí Thông 87

Page 88: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Boolean Variable

Lê Chí Thông 88

ORG 0

LOOP: MOV C,P1.0

ANL C,P1.1

MOV P1.2,C

SJMP LOOP

END

Page 89: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Your Turn!

Lê Chí Thông 89

Page 90: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Solutions

Lê Chí Thông 90

ORG 0

LOOP: MOV C,P1.4

CPL C

ANL C,P1.5

CPL C

ORL C,P1.6

MOV P1.7,C

SJMP LOOP

END

Page 91: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryProgram Branching

Lê Chí Thông 91

Page 92: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

8051 Instruction Set SummaryProgram Branching

Lê Chí Thông 92

Page 93: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Program Branching

Lê Chí Thông 93

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.

SJMP : 8-bit offsetLJMP : 11-bit address (2KB segment)AJMP : 16-bit

Unconditional jumps

Page 94: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Conditional Jumps

Lê Chí Thông 94

JZ Jump if A=0

JNZ Jump if A ≠ 0

DJNZ Decrement and jump if ≠ 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

Page 95: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

CALL Instruction

Lê Chí Thông 95

LCALL(long call)This 3-byte instruction can be used to call subroutines located anywhere within the 64K byte address space of the 8051.

ACALL (absolute call)

ACALL is 2-byte instruction. the target address of the subroutine must be within 2K byte range.

Page 96: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Call is similar to a jump, but

– Call pushes PC on stack before branching

ACALL <address ll> ; stack PC

; PC address 11 bit

LCALL <address 16> ; stack PC

; PC address 16 bit

Call and Return

96Lê Chí Thông

Page 97: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

• Return is also similar to a jump, but

– Return instruction pops PC from stack to get address to jump to

RET ; PC stack

Call and Return

97Lê Chí Thông

Page 98: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

MAIN: ...

ACALL SUBLABEL

...

...

SUBLABEL: ...

...

RET

the subroutine

call to the subroutine

Subroutines

98Lê Chí Thông

Page 99: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

DJNZ – a For loop

Lê Chí Thông 99

Use DJNZ to create a for loop control

Ex: a 10-time loopMOV R7,#10

LOOP: (begin loop)……(end loop)DJNZ R7,LOOP(continue)

Page 100: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

DJNZ – a For loop

Lê Chí Thông 100

Use DJNZ to create a 1000-time loop?

Page 101: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

DJNZ – an example

Lê Chí Thông 101

Ex: Write a program to write 40H to internal RAM from location 30H to location 36H.(source)

ORG 0000H

MOV R5,#7;Loop=7

MOV R1,#30H;Address=30H

Again: MOV @R1,#40H

INC R1

DJNZ R5,Again

END

Addr 30H

(Addr) 40H

AddrAddr+1

Loop=0?N

Y

Loop 7

LoopLoop-1

Page 102: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program to clear ACC, then add 3 to the accumulator ten times.

Solution:

MOV A,#0

MOV R2,#10

AGAIN: ADD A,#03

DJNZ R2,AGAIN ;repeat until R2=0 (10 times)

MOV R5,A

Lê Chí Thông 102

DJNZ – another example

Page 103: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program to copy a block of 10 bytes from RAM location starting at 37h to RAM location starting at 59h.

Lê Chí Thông 103

DJNZ – Your Turn!

Page 104: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

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 pointerMOV R1,#59h ; dest pointer MOV R2,#10 ; counter

L1: MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,L1

Lê Chí Thông 104

Solutions

Page 105: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông 105

Blinky Program

P1.0 1

Delay

P1.0 0

Delay

schematic

Page 106: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: SETB P1.0

ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP

DELAY: MOV R6,#200DL1: MOV R7,#250

DJNZ R7,$DJNZ R6,DL1RETEND

(source)

Waveform? Period? Frequency?

Lê Chí Thông 106

Blinky Program

P1.0 1

Delay

P1.0 0

Delay

Page 107: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: SETB P1.0

ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP

DELAY: MOV R6,#200DL1: MOV R7,#250 1MC x 1

DJNZ R7,$ 2 MC x 250DJNZ R6,DL1RETEND

Lê Chí Thông 107

Blinky Program

501 MC

Page 108: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: SETB P1.0

ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP

DELAY: MOV R6,#200 1 MC x 1DL1: MOV R7,#250

DJNZ R7,$DJNZ R6,DL1 2 MC x 200RETEND

Lê Chí Thông 108

Blinky Program

501 MC x 200 100,601 MC

Page 109: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: SETB P1.0

ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP

DELAY: MOV R6,#200DL1: MOV R7,#250

DJNZ R7,$DJNZ R6,DL1RET 2 MCEND

Lê Chí Thông 109

Blinky Program

100,601 MC100,603 MC

Page 110: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: SETB P1.0 1 MC

ACALL DELAY 100,063 + 2 MCCLR P1.0 1 MCACALL DELAY 100,063 + 2 MCSJMP LOOP 2 MC

DELAY: MOV R6,#200DL1: MOV R7,#250

DJNZ R7,$DJNZ R6,DL1RETEND

tH = 100,063 + 2 + 1 = 100,066 MC tL = 100,063 + 2 + 2 + 1 = 100,068 MC

Lê Chí Thông 110

Blinky Program

Page 111: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

If using 12 MHz crystal, 1 MC = 1 μs

tH = 100,066 MC = 100,066 μs

tL = 100,068 MC = 100,068 μs

T = tH + tL = 200,134 μs

f = 1/T = 4.99 Hz

Lê Chí Thông 111

Blinky Program

tH tL

T

P1.0 1

Delay tH

P1.0 0

Delay tL

Page 112: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: SETB P1.0

ACALL DELAYCLR P1.0ACALL DELAYSJMP LOOP

DELAY: MOV R6,#200DL1: MOV R7,#250

DJNZ R7,$DJNZ R6,DL1RETEND

tH = tL ≈ tDELAY ≈ 200 x 250 x 2 MC = 100,000 MC = 100,000 μs T ≈ 200,000 μs f ≈ 5 Hz

Lê Chí Thông 112

Blinky Program - Estimating

P1.0 1

Delay tH

P1.0 0

Delay tL

Page 113: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

ORG 0LOOP: CPL P1.0

ACALL DELAYSJMP LOOP

DELAY: MOV R6,#200DL1: MOV R7,#250

DJNZ R7,$DJNZ R6,DL1RETEND

Lê Chí Thông 113

Blinky Program – Alternative Method

P1.0 NOT (P1.0)

Delay

P1.0 1

Delay

P1.0 0

Delay

Page 114: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz.

Lê Chí Thông 114

10-kHz square wave

Page 115: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz.

Lê Chí Thông 115

10-kHz square wave

tH tL

T

P1.3 1

Delay tH

P1.3 0

Delay tL

P1.3 NOT (P1.3)

Delay

If tH = tL

Page 116: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz.

ORG 0000Hlap: CPL P1.3

ACALL delaySJMP lap

delay:MOV R4,#50DJNZ R4,$RETEND

Lê Chí Thông 116

10-kHz square wave

P1.3 NOT (P1.3)

Delay

Page 117: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 10-KHz square wave with duty cycle 30% at pin P1.3. Assume that crystal is 24 MHz.

Lê Chí Thông 117

10-kHz square wave, duty cycle 30%

tH tL

T

P1.3 1

Delay tH

P1.3 0

Delay tL

Page 118: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 10-KHz square wave with duty cycle 30% at pin P1.3. Assume that crystal is 24 MHz.

ORG 0000Hlap: SETB P1.3

ACALL delay1CLR P1.3ACALL delay2SJMP lap

Delay1: MOV R4,#30DJNZ R4,$RET

Delay2: MOV R4,#70DJNZ R4,$RETEND

Lê Chí Thông 118

10-kHz square wave, duty cycle 30%

P1.3 1

Delay tH

P1.3 0

Delay tL

Page 119: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 100-kHz square wave at pin P1.1. Assume that crystal is 12 MHz.

Lê Chí Thông 119

100-kHz square wave

Page 120: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 100-kHz square wave at pin P1.1. Assume that crystal is 12 MHz.

ORG 0000Hlap: CPL P1.1

NOPNOPSJMP lapEND

Lê Chí Thông 120

100-kHz square wave

Page 121: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 100-kHz square wave with duty cycle 40% at pin P1.2. Assume that crystal is 12 MHz.

Lê Chí Thông 121

100-kHz square wave, duty cycle 40%

Page 122: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Write a program that creates a 100-kHz square wave with duty cycle 40% at pin P1.2. Assume that crystal is 12 MHz.

ORG 0000Hlap: SETB P1.2

NOPNOPNOPCLR P1.2NOPNOPNOPSJMP lapEND

Lê Chí Thông 122

100-kHz square wave, duty cycle 40%

Page 123: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

CJNE A,#05H,Skip

(Statement 1)

Skip: (Continue)

Lê Chí Thông 123

CJNE – Equal/Not Equal (1)

A = 05H?N

Y

Statement 1

Page 124: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Ex: Write a program to write 40H to internal RAM from location 30H to location 36H.(source)

ORG 0000H

MOV R1,#30H;Address=30H

Again: MOV @R1,#40H

INC R1

CJNE R1,#37H,Again

END

Lê Chí Thông 124

An Example

Addr 30H

(Addr) 40H

AddrAddr+1

Addr=37H?N

Y

Page 125: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

CJNE A,#05H,Not_Eq

(Statement 1)

SJMP Next

Not_Eq: (Statement 2)

Next: (Continue)

Lê Chí Thông 125

CJNE – Equal/Not Equal (2)

A = 05H?N

Y

Statement 1Statement 2

Page 126: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

CJNE A,#05H,Next

Next: JC LessThan

(Statement 1)

LessThan: (Continue)

Lê Chí Thông 126

CJNE – Greater Than or Equal/Less Than (1)

A ≥ 05H?N

Y

Statement 1

CJNE A,#05H,$+3

JC LessThan

(Statement 1)

LessThan: (Continue)

Page 127: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

CJNE A,#05H,Next

Next: JNC GT_Eq

SJMP Continue

GT_Eq: (Statement 1)

Continue: (Continue)

Lê Chí Thông 127

CJNE – Greater Than or Equal/Less Than (1)

A ≥ 05H?N

Y

Statement 1

CJNE A,#05H,$+3

JNC GT_Eq

SJMP Continue

GT_Eq: (Statement 1)

Continue: (Continue)

Page 128: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Examine the content of A, if 5 ≤ A ≤ 10 then output A to Port 1; if not, output A to Port 2.

ORG 0

CJNE A,#5,$+3

JC PORT2

CJNE A,#11,$+3

JNC PORT2

MOV P1,A

SJMP DONE

PORT2:MOV P2,A

DONE: NOP

END

128Lê Chí Thông

An Example

Page 129: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

CJNE A,#05H,$+3

JNC GT_Eq

(Statement 2)

SJMP Next

GT_Eq: (Statement 1)

Next: (Continue)

Lê Chí Thông 129

CJNE – Greater Than or Equal/Less Than (2)

A ≥ 05H?N

Y

Statement 1Statement 2

Page 130: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a 20-byte string in internal RAM, starting at address 40H. Write a program that output even numbers to Port 2.

130Lê Chí Thông

Bit Testing

Page 131: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a 20-byte string in internal RAM, starting at address 40H. Write a program that output even numbers to Port 2.

ORG 0

MOV R4,#20 ; Number of loops

MOV R0,#40H ; Address pointer

LOOP:

MOV A,@R0 ; Read data from internal RAM to A

JB ACC.0,NEXT ; skip if odd number

MOV P2,A ; Output to Port 2 if even number

NEXT:

INC R0

DJNZ R4,LOOP

END 131Lê Chí Thông

Bit Testing

Page 132: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a 20-byte string in external RAM, starting at address 4000H. Write a program that output odd numbers to Port 2.

132Lê Chí Thông

Your Turn!

Page 133: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a 20-byte string in external RAM, starting at address 4000H. Write a program that output odd numbers to Port 2.

ORG 0

MOV R4,#20 ; Number of loops

MOV DPTR,#4000H ; Address of external RAM

LOOP:

MOVX A,@DPTR ; Read data from external RAM to A

JNB ACC.0,NEXT; skip if even number

MOV P2,A ; Output to Port 2 if odd number

NEXT:

INC DPTR

DJNZ R4,LOOP

END 133Lê Chí Thông

Solutions

Page 134: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a 100-byte unsigned number string in external RAM at address starting from 0100H. Write a program that sends positive numbers to Port 1 and negative numbers to Port 2.

Hint:- A positive number has MSB = 0.- A negative number has MSB = 1.- Use JB / JNB instruction--

Lê Chí Thông

Bit Testing

134

Page 135: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Given a 100-byte unsigned number string in external RAM at address starting from 0100H. Write a program that sends positive numbers to Port 1 and negative numbers to Port 2.

ORG 0000HMOV DPTR,#0100HMOV R4,#100

loop: MOVX A,@DPTRJNB ACC.7,positiveMOV P2,ASJMP next

positive: MOV P1,Anext: INC DPTR

DJNZ R4,loopEND

Lê Chí Thông

Bit Testing

135

Page 136: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông

Bit Testing

LOOP: MOV C,P1.0

JNB P1.1,SKIP

CPL C

SKIP: MOV P1.2,C

SJMP LOOP

XOR

P1.0

P1.1

P1.2

136

Page 137: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

Lê Chí Thông

Example ProblemA 4-bit DIP switch and a common-anode 7-segment LED are connected to an 8051 as shown in the following figure. Write a program that continually reads a 4-bit code from the DIP switch and updates the LEDs to display the appropriate hexadecimal character. For example, if the code 1100B is read, the hexadecimal character “C” should appear, thus, segments a through g respectively should be ON, OFF, OFF, ON, ON, ON, and OFF. Note that setting an 8051 port pin to “1” turns the corresponding segment “ON”.

137

Page 138: The 8051 Microcontroller Chapter 3 Instruction Set How to ...bmthanh/ViXuLy/8051-Chap3-Instruction_V1.pdf · Chapter 3 Instruction Set How to write a program The 8051 Microcontroller

138

References

Lê Chí Thông

• I. Scott MacKenzie , The 8051 Microcontroller, 2nd Edition, Prentice-Hall, 1995

• Kenneth J. Ayala, The 8051 Microcontroller: Architecture, Programming, and Applications, West Publishing Company

[email protected] , Lecture notes