You are on page 1of 65

H Bch Khoa TP.

HCM

L Ch Thng

The 8051 Microcontroller Chapter 3 Instruction Set How to write a program


L Ch Thng chithong@hcmut.edu.vn Ho Chi Minh City University of Technology
L Ch Thng 1

Instruction Set
255 instructions
1-byte instructions: 139 2-byte instructions: 92 3-byte instructions: 24

Instruction set summary (pdf) Full instruction set (pdf)

L Ch Thng

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

First Program
First_program.asm ORG 0000H MOV P1,#0FH SETB P1.7 CLR P1.0 END First_program.hex
Byte count Load address Type

First_program.lst LOC OBJ LINE 0000 1 0000 75900F 2 0003 D297 3 0005 C290 4 5
0000H
Checksum = 2s complement of all data

SOURCE ORG 0000H MOV P1,#0FH SETB P1.7 CLR P1.0 END
75H 90H 0FH D2H 97H C2H 90H
3

0001H 0002H 0003H 0004H 0005H

Code Memory

Opcode

:0700000075900FD297C2902A :00000001FF
end of record type

L Ch Thng

0006H

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,R3
A R0

R1
L Ch Thng

B
4

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

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 Thng

General purpose RAM (30H-7FH) Bitaddressable RAM (20H-2FH)

Special function registers (SFRs) (80H-FFH)

Register banks (00H-1FH)


L Ch Thng 6

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

General Purpose RAM


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.

30H

Ex: MOV 31H,R4 This instruction moves (writes) the content of register R4 to location 31H.
31H R4
L Ch Thng 7

General purpose RAM (30H-7FH) Bitaddressable RAM (20H-2FH)

Special function registers (SFRs) (80H-FFH)

Register banks (00H-1FH)


L Ch Thng 8

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

Bit Addressable RAM


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.
20H A 1

Ex: SETB 20H.0 or SETB 00H

20H

Not affected

Ex: MOV C,31H or MOV C, 26H.1

CY

26H
L Ch Thng 9

General purpose RAM (30H-7FH) Bitaddressable RAM (20H-2FH)

Special function registers (SFRs) (80H-FFH)

Register banks (00H-1FH)


L Ch Thng 10

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

Register Banks
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 R7
o o o o o o o o o o o R0 of Bank 0 is location 00H R7 of Bank 0 is location 07H R0 of Bank 1 is location 08H R7 of Bank 1 is location 0FH R0 of Bank 2 is location 10H R7 of Bank 2 is location 17H R0 of Bank 3 is location 18H
L Ch Thng 11

o R7 of Bank 3 is location 1FH

Register Banks
Ex: use default bank (Bank 0)
R5

05H

MOV A, R5 = Read the contents of location 05H into the accumulator

MOV A, 05H Read the contents of register R5 into the accumulator

MOV R0, A = Read the contents of register A into register R0

MOV 00H, A Read the contents of register A into location 00H

L Ch Thng

12

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

Register PSW (Program Status Word)

L Ch Thng

13

Selecting Register Bank


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

Ex: MOV PSW, #00010000B ; select bank 2 or SETB RS1 CLR RS0

L Ch Thng

14

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

General purpose RAM (30H-7FH) Bitaddressable RAM (20H-2FH)

Special function registers (SFRs) (80H-FFH)

Register banks (00H-1FH)


L Ch Thng 15

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 address
Ex: MOV P1, A ; Accumulator Port 1 MOV 90H, A ; same Same opcode: F5 90 Ex: MOV R1, ACC MOV R1, 0E0H Same opcode: A9 E0 Ex: MOV R1, ACC MOV R1, A Same function BUT different opcode (A9 E0 vs. F9)
L Ch Thng 16

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

Addressing Modes
Immediate Addressing Register Addressing Direct Addressing Indirect Addressing Relative Addressing Absolute Addressing Long Addressing Indexed Addressing
L Ch Thng 17

Coding format- Addressing modes

L Ch Thng

18

www.tinyurl.com/thongchile

H Bch Khoa TP.HCM

L Ch Thng

Immediate Addressing
- Source operand is constant - Use # sign Ex 3.1: MOV MOV MOV ADD MOV A,#12 A,#0C4H R1,#1110B A,#11110001B DPTR,#2000H
DPL 0 0 0 0 0 0 0 0 A A R1 CY 0 0 0 0 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 A 1 0 1 1 0 1 0 1

DPH 0 0 1 0 0 0 0 0

L Ch Thng

19

Register Addressing
Ex: MOV MOV MOV ANL INC DEC MOV INC R1,#36H A,R1 R7,#0FH A,R7 A A DPTR,#2000 DPTR
DPL 0 0 0 0 0 0 0 1
20 L Ch Thng

R1 A R7 A A A

0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 1 1 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 0

DPH 0 0 1 0 0 0 0 0

www.tinyurl.com/thongchile

10

H Bch Khoa TP.HCM

L Ch Thng

Direct Addressing
Access internal RAM and SFRs
MOV A,70H MOV R0,40H MOV 56H,A MOV 0D0H,A MOV PSW,A ; copy contents of RAM at 70H to A ; copy contents of RAM at 40H to A ; put contents of A at 56H ; put contents of A into PSW ; same

L Ch Thng

21

Direct Addressing vs. Immediate Addressing

MOV A,30H
A 30H Direct addressing

MOV A,#30H
0 0 1 1 0 0 0 0 Immediate addressing

L Ch Thng

22

www.tinyurl.com/thongchile

11

H Bch Khoa TP.HCM

L Ch Thng

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


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

MOV R2,5
R2 05H

R2

MOV R2,#5
0 0 0 0 0 1 0 1

L Ch Thng

23

Indirect Addressing
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
R0 0 0 1 1 0 0 0 0 Internal RAM 7FH 30H 00H

L Ch Thng

24

www.tinyurl.com/thongchile

12

H Bch Khoa TP.HCM

L Ch Thng

Indirect Addressing
Ex: MOV MOVX R0,#30H ;R0 30H A,@R0 ;A(R0): read content of eXternal RAM at ; address specified by R0 to A

R0

0 0 1 1 0 0 0 0

External RAM

30H 00H

L Ch Thng

25

Indirect Addressing
Uses DPTR register for 16-bit addresses (external memory) Use @ sign to access the content of the memory location:@DPTR Ex: MOV MOVX DPTR,#4000H A,@DPTR ; read content of external RAM at ; address 4000H to A

DPTR

40H

00H

External RAM

4000H 00H

L Ch Thng

26

www.tinyurl.com/thongchile

13

H Bch Khoa TP.HCM

L Ch Thng

Indirect Addressing

Ex: MOV MOVX

DPTR,#31FFH @DPTR,A ; write content of A to external RAM ; address 31FFH

DPTR

31H

FFH

External RAM

31FFH 00H

L Ch Thng

27

Register Addressing vs. Indirect Addressing


MOV A,R1
A R1 Register addressing R1 Internal RAM 7FH

MOV A,@R1

A 00H Indirect addressing


L Ch Thng 28

www.tinyurl.com/thongchile

14

H Bch Khoa TP.HCM

L Ch Thng

Example of Indirect Addressing


Ex: Implementation of array MOV R0, #60H LOOP: MOV @R0, #0 INC R0 CJNE R0, #80H, LOOP
N R0= 80h? Y R0 60H

(R0) 0 R0 R0+1

L Ch Thng

29

Relative Addressing
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
L Ch Thng 30

www.tinyurl.com/thongchile

15

H Bch Khoa TP.HCM

L Ch Thng

Relative Addressing
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

L Ch Thng

31

Your Turn!
Ex: AGAIN: ORG 0000H 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?

L Ch Thng

32

www.tinyurl.com/thongchile

16

H Bch Khoa TP.HCM

L Ch Thng

Absolute Addressing
Used in AJMP, ACALL instruction Usually used with label
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

Memory map showing 2K pages


L Ch Thng 33

Long Addressing
Used in LCALL and LJMP instruction Use full 16-bit address Usually used with label Ex: LCALL SUBPROGRAM1 LJMP LABEL2

L Ch Thng

34

www.tinyurl.com/thongchile

17

H Bch Khoa TP.HCM

L Ch Thng

Indexed Addressing
Base address (PC or DPTR) + Offset (A) Used with JMP or MOVC Ex: MOVC A, @A+DPTR MOVC A, @A+PC JMP @A+DPTR Effective Address

L Ch Thng

35

Indexed Addressing
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.
L Ch Thng 36

www.tinyurl.com/thongchile

18

H Bch Khoa TP.HCM

L Ch Thng

Instruction Types
Data transfer Arithmetic Logical Boolean variable Program branching

L Ch Thng

37

8051 Instruction Set Summary


Legend

L Ch Thng

38

www.tinyurl.com/thongchile

19

H Bch Khoa TP.HCM

L Ch Thng

8051 Instruction Set Summary


Data Transfer

L Ch Thng

39

8051 Instruction Set Summary


Data Transfer

L Ch Thng

40

www.tinyurl.com/thongchile

20

H Bch Khoa TP.HCM

L Ch Thng

Data Transfer
MOV dest, source MOV A,#72H MOV R4,#62H MOV B,0F9H MOV MOV MOV MOV Note 1: MOV Note 2: MOV DPTR,#7634H DPL,#34H DPH,#76H P1,A A,#72H A,R3 ;move (out) A to Port 1 MOV A,72H MOV A,3 ;R3 of bank 0 is location 3
L Ch Thng 41

; dest source ;A=72H ;R4=62H ;B=the content of address F9H of RAM

Data Transfer
Ex: 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 addressing ORG 0000H MOV R0,#30H MOV @R0,#40H END

L Ch Thng

42

www.tinyurl.com/thongchile

21

H Bch Khoa TP.HCM

L Ch Thng

Creating a Loop (1)


Ex: Write a program to write 40H to internal RAM from location 30H to location 36H. ORG MOV MOV MOV MOV MOV MOV MOV END 0000H 30H,#40H 31H,#40H 32H,#40H 33H,#40H 34H,#40H 35H,#40H 36H,#40H

L Ch Thng

43

Creating a Loop (2)


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 DEC R5 CJNE R5,#0,Again END
N Loop 7 Addr 30H

(Addr) 40H AddrAddr+1 LoopLoop-1

Loop=0?

L Ch Thng

44

www.tinyurl.com/thongchile

22

H Bch Khoa TP.HCM

L Ch Thng

Creating a Loop (3)


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
N Loop 7 Addr 30H

(Addr) 40H AddrAddr+1 LoopLoop-1

Loop=0?

L Ch Thng

45

Creating a Loop (4)


Ex: Write a program to write 40H to internal RAM from location 30H to location 36H. (source) ORG 0000H Addr 30H MOV R1,#30H;Address=30H Again: MOV @R1,#40H (Addr) 40H INC R1 CJNE R1,#37H,Again AddrAddr+1 END
N

Addr=37H? Y

L Ch Thng

46

www.tinyurl.com/thongchile

23

H Bch Khoa TP.HCM

L Ch Thng

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

L Ch Thng

47

Your Turn!
Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1 Method 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 Thng

48

www.tinyurl.com/thongchile

24

H Bch Khoa TP.HCM

L Ch Thng

Your Turn!
Ex: Write a program to read data from internal RAM from location 20H to location 29H and output to Port 1 Method 2: using CJNE ORG 0000H MOV R0,#20H Loop:MOV P1,@R0 ;Output to Port1 INC R0 CJNE R0,#2AH,loop END

L Ch Thng

49

Data Transfer More Examples


Ex: 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 addressing ORG 0000H MOV R0,#31H MOV @R0,#0 END

L Ch Thng

50

www.tinyurl.com/thongchile

25

H Bch Khoa TP.HCM

L Ch Thng

Data Transfer More Examples


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 addressing ORG 0000H MOV R0,#32H MOV @R0,A END

L Ch Thng

51

Data Transfer More Examples


Ex: Write a program to move 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 addressing ORG 0000H MOV R0,#33H MOV A,@R0 END

L Ch Thng

52

www.tinyurl.com/thongchile

26

H Bch Khoa TP.HCM

L Ch Thng

Data Transfer More Examples


Ex: Write a program to move 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 addressing ORG 0000H MOV R0,#33H MOV A,@R0 END

L Ch Thng

53

Data Transfer More Examples


Ex: Write a program to move the content of location 34H in internal RAM to location 35H in internal RAM using 2 methods of addressing: direct addressing and indirect addressing. Method 1: Direct addressing ORG 0000H MOV 35H,34H END Method 2: Indirect addressing ORG 0000H MOV R0,#34H MOV A,@R0 INC R0 MOV @R0,A END
L Ch Thng 54

www.tinyurl.com/thongchile

27

H Bch Khoa TP.HCM

L Ch Thng

Data Transfer More Examples


Ex: Write a program to write 40H to location 0030H in external RAM. ORG 0000H MOV A,#40H MOV DPTR,#0030H MOVX @DPTR,A END

L Ch Thng

55

Data Transfer More Examples


Ex: Write a program to clear location 0031H in external RAM. ORG 0000H CLR A MOV DPTR,#0031H MOVX @DPTTR,A END

L Ch Thng

56

www.tinyurl.com/thongchile

28

H Bch Khoa TP.HCM

L Ch Thng

Data Transfer More Examples


Ex: Write a program to move the content of location 0032H in external RAM to register A. ORG 0000H MOV DPTR,#0032H MOVX A,@DPTTR END

L Ch Thng

57

Data Transfer More Examples


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 Thng

58

www.tinyurl.com/thongchile

29

H Bch Khoa TP.HCM

L Ch Thng

Data Transfer More Examples


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 Thng

59

Look-up Table
MOV MOV MOVC DB A,#ENTRY_NUMBER DPTR,#TABLE A,@A+DPTR data1, data2, data3,

TABLE:

L Ch Thng

60

www.tinyurl.com/thongchile

30

H Bch Khoa TP.HCM

L Ch Thng

Look-up Table
Given a packed-BCD number in location 33H of internal RAM. Write a program that calculate the square of high decade of this number, and store the result in internal RAM at address 34H ORG 0 MOV A,33H SWAP A ANL A,#0FH MOV DPTR,#TABLE MOVC A,@A+DPTR TABLE: DB 0,1,4,9,16,25,36,49,64,81 END

L Ch Thng

61

Look-up Table
MOV A, #ENTRY_NUMBER CALL LOOK_UP LOOK_UP: INC A MOVC A, @A+PC RET TABLE: DB data1, data2, data3,

L Ch Thng

62

www.tinyurl.com/thongchile

31

H Bch Khoa TP.HCM

L Ch Thng

8051 Instruction Set Summary


Arithmetic Operations

L Ch Thng

63

8051 Instruction Set Summary


Arithmetic Operations

L Ch Thng

64

www.tinyurl.com/thongchile

32

H Bch Khoa TP.HCM

L Ch Thng

8051 Instruction Set Summary


Arithmetic Operations

L Ch Thng

65

8051 Instruction Set Summary


Flag Effect

L Ch Thng

66

www.tinyurl.com/thongchile

33

H Bch Khoa TP.HCM

L Ch Thng

Arithmetic Operations (1)


ADD A,#34H ; Immediate addressing ADD A,34H ADD A,R1 ADD A,@R1 ;Direct addressing ;Register addressing ;Indirect addressing

L Ch Thng

67

Arithmetic Operations (2)


MOV A,#23H ADD A,#22 ADD A,#11100111B ADDC A,#09H SUBB A,#00100111B SUBB A,#3 SUBB A,#0F2H ; A = 23H, CY = 0, P = 1, OV = 0 ; A = 39H, CY = 0, P = 0, OV = 0 ; A = 20H, CY = 1, P = 1, OV = 0 ; A = 2AH, CY = 0, P = 1, OV = 0 ; A = 03H, CY = 0, P = 0, OV = 0 ; A = 00H, CY = 0, P = 0, OV = 0 ; A = 0EH, CY = 1, P = 1, OV = 0

L Ch Thng

68

www.tinyurl.com/thongchile

34

H Bch Khoa TP.HCM

L Ch Thng

Arithmetic Operations (3)


MOV A,#45 MOV B,#12H MUL AB MOV B,#10 DIV AB MOV A,#-100 ADD A,#-50 MOV A,#120 ADD A,#30 ; A = 2DH, CY = 1, P = 0, OV = 0 ; B = 12H ; A = 2AH, B = 03H ; B = 10 ; A = 04H, B = 02H ; A = 9CH, CY = 0, P = 0, OV = 0 ; A = 6AH, CY = 1, P = 0, OV = 1 ; A = 78H, CY = 1, P = 0, OV = 1 ; A = 44H, CY = 0, P = 0, OV = 1
L Ch Thng 69

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 Thng

70

www.tinyurl.com/thongchile

35

H Bch Khoa TP.HCM

L Ch Thng

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. ORG 0 MOV R0,#30H CLR A MOV R2,#10 loop: ADD A,@R0 INC R0 DJNZ R2,loop MOV 2FH,A END

L Ch Thng

71

Rotate
Rotate instructions operate only on A RL A
MOV RR A,#0F0H A ; A 11110000 ; A 11100001

RR A
MOV RR A,#0F0H A ; A 11110000 ; A 01111000
L Ch Thng 72

www.tinyurl.com/thongchile

36

H Bch Khoa TP.HCM

L Ch Thng

Rotate through Carry


RRC A
MOV A, #0A9H ADD A, #14H RRC A
C

; A A9H ; A BDH (10111101), C0 ; A 01011110, C1


C

RLC A
MOV A, #3CH SETB C RLC A ; A 3CH(00111100) ; C 1 ; A 01111001, C1
L Ch Thng 73

Rotate and Multiplication/Division


Note that a shift left is the same as multiplying by 2, shift right is divide by 2
MOV CLR RLC RLC RRC A, #3 C A A A ; ; ; ; ; A C A A A 00000011 0 00000110 00001100 00000110 (3) (6) (12) (6)

L Ch Thng

74

www.tinyurl.com/thongchile

37

H Bch Khoa TP.HCM

L Ch Thng

Swap
SWAP A

MOV A, #72H SWAP A

; A 72H ; A = 27H

L Ch Thng

75

8051 Instruction Set Summary


Logic Operations

L Ch Thng

76

www.tinyurl.com/thongchile

38

H Bch Khoa TP.HCM

L Ch Thng

Logic Operations (1)


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 = .
L Ch Thng 77

Logic Operations (2)


MOV R2,#05H MOV R3,#07H MOV A,R2 SWAP A ORL A,R3 A = .

L Ch Thng

78

www.tinyurl.com/thongchile

39

H Bch Khoa TP.HCM

L Ch Thng

8051 Instruction Set Summary


Boolean Variable

L Ch Thng

79

Boolean Variable
ORG 0 LOOP: MOV C,P1.0 ANL C,P1.1 MOV P1.2,C SJMP LOOP END

L Ch Thng

80

www.tinyurl.com/thongchile

40

H Bch Khoa TP.HCM

L Ch Thng

Your Turn!

L Ch Thng

81

Your Turn!
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
L Ch Thng 82

www.tinyurl.com/thongchile

41

H Bch Khoa TP.HCM

L Ch Thng

8051 Instruction Set Summary


Program Branching

L Ch Thng

83

8051 Instruction Set Summary


Program Branching

L Ch Thng

84

www.tinyurl.com/thongchile

42

H Bch Khoa TP.HCM

L Ch Thng

Program Branching
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.

Unconditional jumps

SJMP : 8-bit offset LJMP : 11-bit address (2KB segment) AJMP : 16-bit
L Ch Thng 85

Conditional Jumps
JZ JNZ DJNZ CJNE A,byte CJNE reg,#data JC JNC JB JNB JBC Jump if A=0 Jump if A 0 Decrement and jump if 0 Jump if A byte Jump if byte #data Jump if CY=1 Jump if CY=0 Jump if bit=1 Jump if bit=0 Jump if bit=1 and clear bit
L Ch Thng 86

www.tinyurl.com/thongchile

43

H Bch Khoa TP.HCM

L Ch Thng

CALL Instruction
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.

L Ch Thng

87

Call and Return


Call is similar to a jump, but
Call pushes PC on stack before branching
ACALL <address ll> ; stack PC ; PC address 11 bit ; stack PC ; PC address 16 bit

LCALL <address 16>

L Ch Thng

88

www.tinyurl.com/thongchile

44

H Bch Khoa TP.HCM

L Ch Thng

Call and Return


Return is also similar to a jump, but
Return instruction pops PC from stack to get address to jump to RET
; PC stack

L Ch Thng

89

Subroutines
call to the subroutine ... ACALL SUBLABEL ... ... SUBLABEL: ... ... the subroutine RET MAIN:

L Ch Thng

90

www.tinyurl.com/thongchile

45

H Bch Khoa TP.HCM

L Ch Thng

DJNZ a For loop


Use DJNZ to create a for loop control Ex: a 10-time loop MOV R7,#10 LOOP: (begin loop) (end loop) DJNZ R7,LOOP (continue)

L Ch Thng

91

DJNZ a For loop


Use DJNZ to create a 1000-time loop?

L Ch Thng

92

www.tinyurl.com/thongchile

46

H Bch Khoa TP.HCM

L Ch Thng

DJNZ an example
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
Loop 7 Addr 30H

(Addr) 40H AddrAddr+1 LoopLoop-1

Loop=0?
93

L Ch Thng

DJNZ another example


Write a program to clear ACC, then add 3 to the accumulator ten times. Solution: MOV A,#0 MOV R2,#10 ADD A,#03 DJNZ R2,AGAIN ;repeat until R2=0 (10 times) MOV R5,A

AGAIN:

L Ch Thng

94

www.tinyurl.com/thongchile

47

H Bch Khoa TP.HCM

L Ch Thng

DJNZ Your Turn!


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

L Ch Thng

95

DJNZ Your Turn!


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 MOV R1,#59h MOV R2,#10 L1: MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R2,L1 ; source pointer ; dest pointer ; counter

L Ch Thng

96

www.tinyurl.com/thongchile

48

H Bch Khoa TP.HCM

L Ch Thng

Blinky Program
P1.0 1 Delay P1.0 0 Delay

schematic
L Ch Thng 97

Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END (source) Waveform? Period? Frequency?
L Ch Thng 98

www.tinyurl.com/thongchile

49

H Bch Khoa TP.HCM

L Ch Thng

Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END

1MC x 1 2 MC x 250

501 MC

L Ch Thng

99

Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END

501 MC x 200 2 MC x 200

100,601 MC

L Ch Thng

100

www.tinyurl.com/thongchile

50

H Bch Khoa TP.HCM

L Ch Thng

Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END

100,601 MC 100,603 MC 2 MC

L Ch Thng

101

Blinky Program
ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END 1 MC 100,063 + 2 MC 1 MC 100,063 + 2 MC 2 MC

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


L Ch Thng 102

www.tinyurl.com/thongchile

51

H Bch Khoa TP.HCM

L Ch Thng

Blinky Program
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

tH T

tL

L Ch Thng

103

Blinky Program - Estimating


ORG 0 LOOP: SETB P1.0 ACALL DELAY CLR P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END tH = tL tDELAY 200 x 250 x 2 MC = 100,000 MC = 100,000 s T 200,000 s f 5 Hz
L Ch Thng 104

www.tinyurl.com/thongchile

52

H Bch Khoa TP.HCM

L Ch Thng

Blinky Program Alternative Method


ORG 0 LOOP: CPL P1.0 ACALL DELAY SJMP LOOP DELAY: MOV R6,#200 DL1: MOV R7,#250 DJNZ R7,$ DJNZ R6,DL1 RET END
P1.0 NOT (P1.0)

Delay

L Ch Thng

105

10-kHz square wave


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

L Ch Thng

106

www.tinyurl.com/thongchile

53

H Bch Khoa TP.HCM

L Ch Thng

10-kHz square wave


Write a program that creates a 10-KHz square wave at pin P1.3. Assume that crystal is 24 MHz. ORG 0000H lap: CPL P1.3 ACALL delay50 SJMP lap delay50: MOV R4,#25 DJNZ R4,$ RET END

L Ch Thng

107

10-kHz square wave, duty cycle 30%


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 Thng

108

www.tinyurl.com/thongchile

54

H Bch Khoa TP.HCM

L Ch Thng

10-kHz square wave, duty cycle 30%


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 0000H lap: SETB P1.3 ACALL delay30 CLR P1.3 ACALL delay70 SJMP lap Delay30: MOV R4,#15 DJNZ R4,$ RET Delay70: MOV R4,#35 DJNZ R4,$ RET END
L Ch Thng 109

100-kHz square wave


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

L Ch Thng

110

www.tinyurl.com/thongchile

55

H Bch Khoa TP.HCM

L Ch Thng

100-kHz square wave


Write a program that creates a 100-kHz square wave at pin P1.1. Assume that crystal is 12 MHz. ORG 0000H CPL P1.1 NOP NOP SJMP lap END

lap:

L Ch Thng

111

100-kHz square wave, duty cycle 40%


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 Thng

112

www.tinyurl.com/thongchile

56

H Bch Khoa TP.HCM

L Ch Thng

100-kHz square wave, duty cycle 40%


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 0000H SETB P1.2 NOP NOP NOP CLR P1.2 NOP NOP NOP SJMP lap END
L Ch Thng 113

lap:

CJNE Equal/Not Equal (1)


N

A = 05H?
Y Statement 1

Skip:

CJNE A,#05H,Skip (Statement 1) (Continue)

L Ch Thng

114

www.tinyurl.com/thongchile

57

H Bch Khoa TP.HCM

L Ch Thng

An Example
Ex: Write a program to write 40H to internal RAM from location 30H to location 36H. (source) ORG 0000H Addr 30H MOV R1,#30H;Address=30H Again: MOV @R1,#40H INC R1 (Addr) 40H CJNE R1,#37H,Again END AddrAddr+1
N

Addr=37H? Y

L Ch Thng

115

CJNE Equal/Not Equal (2)


N

A = 05H?
Y

Statement 2

Statement 1

CJNE A,#05H,Not_Eq (Statement 1) SJMP Next Not_Eq: (Statement 2) Next: (Continue)

L Ch Thng

116

www.tinyurl.com/thongchile

58

H Bch Khoa TP.HCM

L Ch Thng

CJNE Greater Than or Equal/Less Than (1)


N

A 05H?
Y Statement 1

CJNE A,#05H,Next Next: JNC GT_Eq SJMP Continue GT_Eq: (Statement 1) Continue: (Continue) CJNE A,#05H,$+3 JNC GT_Eq SJMP Continue GT_Eq: (Statement 1) Continue: (Continue)
L Ch Thng 117

An Example
Ex: 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
L Ch Thng 118

www.tinyurl.com/thongchile

59

H Bch Khoa TP.HCM

L Ch Thng

CJNE Greater Than or Equal/Less Than (2)


N

A 05H?
Y

Statement 2

Statement 1

GT_Eq: Next:

CJNE A,#05H,$+3 JNC GT_Eq (Statement 2) SJMP Next (Statement 1) (Continue)

L Ch Thng

119

Jump Table
MOV MOV RL JMP JUMP_TABLE: AJMP AJMP AJMP DPTR,#JUMP_TABLE A,INDEX_NUMBER A @A+DPTR CASE0 CASE1 CASE2

L Ch Thng

120

www.tinyurl.com/thongchile

60

H Bch Khoa TP.HCM

L Ch Thng

Bit Testing
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 Thng

121

Bit Testing
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 0000H MOV DPTR,#0100H MOV R4,#100 loop: MOVX A,@DPTR JNB ACC.7,positive MOV P2,A SJMP next positive: MOV P1,A next: INC DPTR DJNZ R4,loop END
L Ch Thng 122

www.tinyurl.com/thongchile

61

H Bch Khoa TP.HCM

L Ch Thng

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

L Ch Thng

123

Your Turn!
Ex: 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 MOV R0,#40H LOOP: MOV A,@R0 JB ACC.0,NEXT MOV P2,A NEXT: INC R0 DJNZ R4,LOOP END ; Number of loops ; Address pointer ; Read data from internal RAM to A ; skip if odd number ; Output to Port 2 if even number

L Ch Thng

124

www.tinyurl.com/thongchile

62

H Bch Khoa TP.HCM

L Ch Thng

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

L Ch Thng

125

Your Turn!
Ex: 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
L Ch Thng 126

www.tinyurl.com/thongchile

63

H Bch Khoa TP.HCM

L Ch Thng

Bit Testing
P1.0 P1.1 P1.2

LOOP:

SKIP:

MOV JNB CPL MOV SJMP

Example Problem
A 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.

www.tinyurl.com/thongchile

ROX ROX ROX ROX


C,P1.0 P1.1,SKIP C P1.2,C LOOP
L Ch Thng 127 L Ch Thng 128

64

H Bch Khoa TP.HCM

L Ch Thng

References
I. Scott MacKenzie , The 8051 Microcontroller, 2nd Edition, Prentice-Hall, 1995 Kenneth J. Ayala, The 8051 Microcontroller: Architecture, Programming, and Applications, West Publishing Company hsabaghianb@kashanu.ac.jr , Lecture notes

L Ch Thng

129

www.tinyurl.com/thongchile

65