89
1 Chapter 2 The 8051 Assembly Language Programming

1 Chapter 2 The 8051 Assembly Language Programming

  • View
    300

  • Download
    5

Embed Size (px)

Citation preview

Page 1: 1 Chapter 2 The 8051 Assembly Language Programming

1

Chapter 2 The 8051 Assembly Language

Programming

Page 2: 1 Chapter 2 The 8051 Assembly Language Programming

2

Sections

2.1 Inside the 8051

2.2 Introduction to 8051 Assembly Programming

2.3 Assembling and Running an 8051 Program

2.4 The Program Counter and ROM Space in the 8051

2.5 Data Types and Directives

2.6 8051 Flag Bits and the PSW Register

2.7 8051 Register Banks and Stack

Page 3: 1 Chapter 2 The 8051 Assembly Language Programming

3

Objective

• 我們要開始寫一個簡單的 8051 程式。所以我們要瞭解:– 怎麼用 8051 指令寫一個簡單的程式。– 應如何編譯一個 8051 程式,再將其燒錄到 8051 中。– 8051 是如何執行程式的。– 在 8051 中是以 ROM 儲存我們的程式,所以要瞭解 ROM 的運作。

– 應如何利用 8051 內部提供的暫存器放置資料。– 應如何利用 8051 內部提供的 RAM 放置資料。

Page 4: 1 Chapter 2 The 8051 Assembly Language Programming

4

Section 2.1Inside the 8051

Page 5: 1 Chapter 2 The 8051 Assembly Language Programming

5

Memory in the 8051

• On-chip ROM : to save your program– Program is burn in ROM.– Program is fixed and changeless.

• On-chip RAM : to save some temporary data generated in execution time– Data can be changed.– Data is lost when the 8051 powers down.

• Register : to store information temporarily– Some registers are used for internal operations of the 8051.– Some registers are located in RAM. Some have their special

locations.

Page 6: 1 Chapter 2 The 8051 Assembly Language Programming

6

Registers (暫存器)

• Register are used to store information temporarily.• The 8051 has 8-bit registers and 16-bit registers.

– a lot of 8-bit registers - Figure 2-1 (a)

– two 16-bit registers - Figure 2-1(b)

• Appendix 2 ( p357 ) shows the list of registers in the 8051. ( discuss in chapter 5 )

Page 7: 1 Chapter 2 The 8051 Assembly Language Programming

7

Figure 2-1(a) Some 8-bit Registers of the 8051

R0

R4

R5

R2

R1

R3

R6

R7

B

A Accumulator: for all arithmetic and logic instruction

Register 0-7: a set of general-purpose registers

Register B:for arithmetic/logic operation, ex: MUL, DIV

Page 8: 1 Chapter 2 The 8051 Assembly Language Programming

8

Figure 2-1(b) Some 8051 16-bit Registers

PC (program counter)

DPH DPLDPTR

PC

• DPTR ( data pointer ): the 16-bit address for the data located in program (ROM)– DPL : low byte of DPTR

– DPH : high byte of DPTR

• PC ( program counter ): the address of the next instruction

Page 9: 1 Chapter 2 The 8051 Assembly Language Programming

9

A 8-bit Register

• The 8051 use 8-bit data type.– Example : integer and character are 8 bits.

• Any data larger than 8-bits must be broken into 8-bit chunks before it is processed.

D6 D5 D4 D3 D2 D1D7 D0

most significant bit (MSB)

last significant bit (LSB)

Page 10: 1 Chapter 2 The 8051 Assembly Language Programming

10

The 8051 Instructions

Table A-1: 8051 Instruction Set Summary

1. Data Transfer: get or store data– MOV, PUSH, POP

2. Arithmetic Operations:– ADD, SUB, INC, DEC, MUL, DIV

3. Logical Operations:– ANL, ORL, XRL, CLR

4. Program Branching: jump, loop, call instruction– LCALL, RET, LJMP, JZ, JNZ, NOP

Page 11: 1 Chapter 2 The 8051 Assembly Language Programming

11

MOV ( 1/3 )

• Copy the source operand to the destination operand.

MOV destination, source copy

MOV A,#55H ;load value 55H into reg. A

;now A=55H

MOV R6,#12 ;load 12 decimal into R6

;now R6=12=0CH

MOV R0,A ;copy contents of A into R0

;now A=55H, R0=55H – The pound sign ”#” indicate that it is an immediate value.– You can write your command after the semicolon “;”.

Page 12: 1 Chapter 2 The 8051 Assembly Language Programming

12

MOV ( 2/3 )

• Others examples :MOV R5,#0F9H ;load F9H into R5

;now R5=F9H– There is a need for 0 between the # and F to indicate that F

is a hex number and not a letter. MOV R5,#F9H ;illegal

– The value must be within 0-0FFH (or decimal 0-255).MOV R5,#425 ;illegal

– If no “#” exists, it means to load from a memory location.MOV A,17H ;load the value held in memory

;location 17H to reg. A

Page 13: 1 Chapter 2 The 8051 Assembly Language Programming

13

MOV ( 3/3 )

• Others examples :MOV A,#’4’ ;load ASCII ‘4’ into A

;now A=34H– The immediate value can be copied to A, B, R0-R7.

Page 14: 1 Chapter 2 The 8051 Assembly Language Programming

14

ADD ( 1/2 )

• Add the source operand to register A and put the result in A.

ADD A, source A + source A

MOV A,#25H ;load 25H into A

MOV R2,#34H ;load 34H into R2

ADD A,R2 ;add R2 to A( A=A+R2) ;now A=59H, R2=34H– Reg. A must be the destination of any arithmetic operation.

ADD R0,A ;illegal

Page 15: 1 Chapter 2 The 8051 Assembly Language Programming

15

ADD ( 2/2 )

• Other examples :MOV A,#25H ;load 25H into A

ADD A,#34H ;add 34H to A( A=A+34H=59H)

– The second value is called an immediate operand.

– The format for Assembly language instruction, descriptions of their use, and a listing of legal operand types are provide in Appendix A.1. (discuss in Chap 5)

Page 16: 1 Chapter 2 The 8051 Assembly Language Programming

16

Section 2.2Introduction to 8051 Assembly Programming

Page 17: 1 Chapter 2 The 8051 Assembly Language Programming

17

Program Languages

• Machine language :– a program that consists of 0s and 1’s. – CPU can work on machine language directly.– Example : 7D25

• Low-level language :– It deals directly with the internal structure of the CPU.– Programmers must know all details of the CPU.– Example : MOV R5,#25H ( 8051 assembly language )

• High-level language :– Machine independent– Example : a=37; ( C++ )

Page 18: 1 Chapter 2 The 8051 Assembly Language Programming

18

Assembly Language

• Assembly languages were developed which provided mnemonics for the machine code instructions, plus other features. – Mnemonic : the instruction

• Example : MOV, ADD

– Provide decimal number, named registers, label, command

– programming faster and less prone to error.

• Assembly language programs must be translated into machine code by a program called an assembler.

Page 19: 1 Chapter 2 The 8051 Assembly Language Programming

19

Assembler

• Assembler (組譯器):– a software program can translate an Assembly language pr

ogram into machine code.

– 原始程式( Source program )– 目的程式( Object program, opcode, object code )

原始程式(Source Program)

Text file

Assembler目的程式

(Object Program)Text file

Page 20: 1 Chapter 2 The 8051 Assembly Language Programming

20

Structure of Assembly Language

• An Assembly language program (see Program 2-1) is a series of statements.

[label:] mnemonic [operands] [;command]– Brackets indicate that a field is optional.– Label is the name to refer to a line of program code. An label

referring to an instruction must be followed by a common “:”.

Here: SJMP HERE– Mnemonic and operand(s) perform the real work of the progr

am.– The comment field begins with a semicolon “;”.

Page 21: 1 Chapter 2 The 8051 Assembly Language Programming

21

Mnemonic & Pseudo Instruction

• Two types of assembly instructions :– Mnemonic : tell the CPU what to do

• Example : MOV, ADD

– pseudo-instruction : give directions to the assembler• Example : ORG 0H, END

• pseudo instruction is called directives, too.

Page 22: 1 Chapter 2 The 8051 Assembly Language Programming

22

ORG & END

• ORG tells the assembler to place the opcode at ROM with a chosen start address.

ORG start-addressORG 0200H ;put the following codes

;start at location 200H

• END indicates to the assembler the end of the source code.

ENDEND ;end of asm source file

Page 23: 1 Chapter 2 The 8051 Assembly Language Programming

23

Program 2-1:Sample of an Assembly Language Program

ORG OH ;start (origin) at location 0 MOV R5,#25H ;load 25H into R5 MOV R7,#34H ;load 34H into R7 MOV A,#0 ;load 0 into A ADD A,R5 ;add contents of R5 to A ;now A = A + R5 ADD A,R7 ;add contents of R7 to A ;now A = A + R7 ADD A,#12H ;add to A value 12H ;now A = A + 12HHERE:SJMP HERE ;stay in this loop END ;end of asm source file

Page 24: 1 Chapter 2 The 8051 Assembly Language Programming

24

Section 2.3Assembling and Running an 8051 Program

Page 25: 1 Chapter 2 The 8051 Assembly Language Programming

25

Steps to Create an Executable Assembly Language Program

1. Use an editor to type in a program “myfile.asm”.

2. The assembly source program is fed to an 8051 assembler. “myfile.lst” and “myfile.obj” are generated by the assembler.

3. A link program takes one or more object files to product an absolute object file “myfile.abs”.

4. The “abs”file is fed into a program called “OH” (object to hex converter) which creates a file “myfile.hex”

5. The “myfile.hex” file is to burn into ROM by a special burner.

Page 26: 1 Chapter 2 The 8051 Assembly Language Programming

26

Figure 2-2. Steps to Create a Program

EDITORPROGRAM

myfile.asm

ASSEMBLERPROGRAM

myfile.lstmyfile.obj

LINKERPROGRAM

other obj files

myfile.abs

OHPROGRAM

myfile.hex

Different assemblers use different extension file name. In our simulator, the file must be named as myfile.a51

Page 27: 1 Chapter 2 The 8051 Assembly Language Programming

27

myfile.a51

ORG 0H ;start at location 0 MOV R5,#25H ;load 25H into R5

MOV R7,#34H ;load 34H into R7

MOV A,#0 ;load 0 into A

ADD A,R5 ;add contents of R5 to A

;now A = A + R5

ADD A,R7 ;add contents of R7 to A

;now A = A + R7

ADD A,#12H ;add to A value 12H

;now A = A + 12H

;HERE:SJMP HERE ;stay in this loop

END ;end of asm source file

Page 28: 1 Chapter 2 The 8051 Assembly Language Programming

28

Myfile.lst

Intel-8051 Macro Assembler - Version 1.00

1 0000 ORG 0H ;start at location 0

2 0000 7D25 MOV R5,#25H ;load 25H into R5

3 0002 7F34 MOV R7,#34H ;load 34H into R7

4 0004 7400 MOV A,#0 ;load 0 into A

5 0006 2D ADD A,R5 ;add contents of R5 to A

6 0007 ;now A = A + R5

7 0007 2F ADD A,R7 ;add contents of R7 to A

8 0008 ;now A = A + R7

9 0008 2412 ADD A,#12H ;add to A value 12H

10 000A ;now A = A + 12H

11 000A ;HERE:SJMP HERE ;stay in this loop

12 000A END ;end of asm source file

Page 29: 1 Chapter 2 The 8051 Assembly Language Programming

29

List File

• The list file “myfile.lst” lists – line number, ROM address for this opcode, the opcode, instruct

ion and command.

1 0000 ORG 0H ;start at location 0

2 0000 7D25 MOV R5,#25H ;load 25H into R5

3 0002 7F34 MOV R7,#34H ;load 34H into R7

4 0004 7400 MOV A,#0 ;load 0 into A

5 0006 2D ADD A,R5 ;add contents of R5 to A

6 0007 ;now A = A + R5

7 0007 2F ADD A,R7 ;add contents of R7 to A

8 0008 ;now A = A + R7

9 0008 2412 ADD A,#12H ;add to A value 12H

10 000A ;now A = A + 12H

11 000A ;HERE:SJMP HERE ;stay in this loop

12 000A END ;end of asm source file

Page 30: 1 Chapter 2 The 8051 Assembly Language Programming

30

Linking

• When we write a large program, we may partition the job into several little programs.

• These little programs are assembled separately by different programmers.

• Finally, link them together and produce an absolute program with an absolute addressing.

a1.obj

a2.obja3.obj

a1.abs

main

Page 31: 1 Chapter 2 The 8051 Assembly Language Programming

31

Myfile.obj

:0A0000007D257F3474002D2F24129B

opcode

length

start address

Except opcodes, all other bytes are used to tell the loader how to load the program to ROM.

Page 32: 1 Chapter 2 The 8051 Assembly Language Programming

32

Program 2-1: ROM Contents

120009

240008

2F0007

2D0006

000005

740004

340003

7F0002

250001

7D0000

CodeAddress

Page 33: 1 Chapter 2 The 8051 Assembly Language Programming

33

Section 2.4The Program Counter and ROM Space in the 8051

Page 34: 1 Chapter 2 The 8051 Assembly Language Programming

34

Program Counter ( 1/2 )

• The Program Counter ( PC ) points to the address of the next instruction to be executed.

• As the CPU fetches the opcode from the program ROM, the program counter is incremented to point to the next instruction.

• PC is called instruction pointer, too.

PC F E D C B A 9 8 7 6 5 4 3 2 1 0 16-bit register

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0001H 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0002H

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 FFFEH 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 FFFFH

10000H addresses

Page 35: 1 Chapter 2 The 8051 Assembly Language Programming

35

Program Counter ( 2/2 )

• The PC in the 8051 is 16-bits wide.– The 8051 can access program addresses 0000 to FFFFH, a

total of 64K bytes of code.• 10000H (in hex) = 24*4 = 216 = 26 ×210 = 64 K

– The exact range of program addresses depends on the size of on-chip ROM.

• When the 8051 is powered up, the PC has the value of 0000 in it.– That is, the address of the first executed opcode at ROM

address is 0000H.

• We can examine the list file to loop the action of PC.

•10 in hex

= 16 = 24 in decimal

•1K = 210 in decimal

Page 36: 1 Chapter 2 The 8051 Assembly Language Programming

36

ROM Address of Opcodes

000A

ADD A,#12H24120008

ADD A,R72F0007

ADD A,R52D0006

MOV A,#074000004

MOV R7,#34H7F340002

MOV R5,#25H7D250000

Assembly LanguageMachine LanguageROM Address

ORG 0H: put the instruction with the ROM address 0000H

2 byte opcode

next instruction is 0+2=0002

Program is form 0000 to 0009. Total 10 bytes.

000A is the address of the next instruction if exists.

Page 37: 1 Chapter 2 The 8051 Assembly Language Programming

37

Notes

• The pseudo instructions ORG & END are not translated into opcodes.

• Since ORG 0H, the program will be burned into the program ROM with the start address 0000H.

• The opcodes can be found in Appendix H (page 2-25,2-26, 2-27). (discuss in Chap.5)

Page 38: 1 Chapter 2 The 8051 Assembly Language Programming

38

The Operation of 8051

1. The 8051 is powered up. The PC is set to the value 0000H.

2. The CPU fetch the instruction with address 0000H and get the machine code 7D. The CPU decodes it and asks the operand 25. The PC is set to the value 0002H.

3. The CPU fetch the instruction with address 0002H and get the machine code 7F. The CPU decodes it and asks the operand 34. The PC is set to the value 0004H.

4. Do the same work until the 8051 is powered down.

PC=0000+2=0002H

PC=0000H

PC=0002+2=0004H

Page 39: 1 Chapter 2 The 8051 Assembly Language Programming

39

8051 ROM Map

• The 8051 can access 64K bytes of ROM since the PC is 16-bit register.– 10000H bytes = 216 bytes = 64K bytes

– 0000 to FFFF address range

• However, the exact program size depends on the selected chip.– 8751, AT8951 have only 4K bytes.

– AT89C52 has 8K bytes

– Dallas Semiconductor’s DS5000-32 has 32K bytes on-chip ROM.

•10 in hex

= 16 = 24 in decimal

•1K = 210 in decimal

Page 40: 1 Chapter 2 The 8051 Assembly Language Programming

40

Example 2-1

Find the ROM memory address of the following 8051 chips.

(a) AT89C51 (or 8751) with 4KB

(b) DS5000-32 with 32KB

Solution:

(a) 4K bytes = 4 × 1024 bytes = 4096 bytes = 1000H bytes (or 4K bytes = 22+10 bytes = 212 bytes = 1000 H bytes) This memory maps to address locations of 0000 to 0FFFH. Notice that 0 is always the first location.

(b) 32K bytes = 32 × 1024 bytes = 32,768 bytes (or 32K bytes = 25+10 bytes = 215 bytes = 8000 H bytes) Converting 32,768 to hex, we get 8000H. Therefore, the memory space is 0000 to 7FFFH.

Page 41: 1 Chapter 2 The 8051 Assembly Language Programming

41

Figure 2-3. 8051 On-Chip ROM Address Range

0000 0000 0000

0FFF

1FFF

7FFF

byte

8752AT89C52

DS5000-32

8751AT89C51

byte byte

4K = 212

=4096 =1000H

8K = 213

=8192 =2000H

32K = 215

=32768 =8000H

Page 42: 1 Chapter 2 The 8051 Assembly Language Programming

42

Section 2.5Data Types and Directives

Page 43: 1 Chapter 2 The 8051 Assembly Language Programming

43

Data Type

• The 8051 microcontroller has only one data type.– 8-bit data

– 00 to FFH data range (0 to 255 in decimal)

– Programmers must take care the meaning of data type by themselves.

– Assembly Language defines some data representations and pseudo instructions.

• DB, EQU

– Assembler can translate these data representations to be processed by the 8051.

Page 44: 1 Chapter 2 The 8051 Assembly Language Programming

44

DB ( 1/3 )

• Define byte in the program.

data-name DB data-value data-value data-name

ORG 500H

DATA1: DB 28 ;decimal (1C in hex)DATA2: DB 00110101B;binary (35 in hex)DATA3: DB 39H ;hexadecimal – data-name is the label refer to the ROM address saved the con

tent data-value.– It is an address, DATA1=0500H, DATA2=0501H.

0500H 1C 0501H 35 0502H 39 0503H

address ROM

Page 45: 1 Chapter 2 The 8051 Assembly Language Programming

45

DB ( 2/3 )

• Define ASCII number or characters : ORG 510H

DATA1: DB “2591” ORG 518H DATA2: DB “My name is Joe”

– Assembler translates the ASCII numbers or characters to binary number.

– ASCII Codes in Appendix F (p401) – The label is the address of first content at

ROM. You can think them as a table.

0510H 32 0511H 35 0512H 39 0513H 31

address ROM

0518H 4D 0519H 79 051AH 20 051BH 6E 051CH 61 051DH 6D 051EH 65

............

Page 46: 1 Chapter 2 The 8051 Assembly Language Programming

46

DB ( 3/3 )

• The data-label is a 16-bit value.

• Usually, we use the register DPTR to point the first content of data. ORG 0H

MOV DPTR,#DATA1

... ....

DATA1: DB “2591”

• Reference to Chapter 5, Example 5-7.

0510H 32 0511H 35 0512H 39 0513H 31

address ROM

......

DATA1=0510H

DPTR=0510H

Page 47: 1 Chapter 2 The 8051 Assembly Language Programming

47

EQU

• Define a constant without occupying a memory location.

data-name EQU data-value

data-value data-name COUNT EQU 25 ;25 in decimal =19H

... ....MOV R3,#COUNT ;R3=19H now – EQU just associates a constant value with a data label.

– When the label appears in the program, its constant value will be substituted for the label by assembler.

Page 48: 1 Chapter 2 The 8051 Assembly Language Programming

48

Section 2.68051 Flag Bits and the PSW Register

Page 49: 1 Chapter 2 The 8051 Assembly Language Programming

49

Flags

• When the CPU perform arithmetic operations, sometimes an exception may occur.– Example : overflow

• How does the CPU tell programmers that an exception occurs?

• Answer is the flags.– A flag is a bit to denote an exception occurred.– Carry flag ( CY )– Auxiliary carry flag ( AC )– Parity check ( P )– Overflow ( OV )

Page 50: 1 Chapter 2 The 8051 Assembly Language Programming

50

CY ( Carry )

• If there is an carry out from the D7 bit during an operation, CY is set; otherwise CY is cleared.– The CY is used to detect errors in arithmetic operations.

– FFH+80H=17FH Carry out overflow

– It is large than the data range of 8-bit register.

D6 D5 D4 D3 D2 D1D7 D0

ACCY

1111 1111 1000 00000111 1111

1

Overflow CY=1

Page 51: 1 Chapter 2 The 8051 Assembly Language Programming

51

AC ( Auxiliary Carry )

• If there is an carry from D3 to D4 during an operation, AC is set; otherwise AC is cleared.– The AC flag is used by instructions that perform BCD

(binary coded decimal) arithmetic. (See Chapter 6)

– 88+08 = 96 Auxiliary carry out overflow

D6 D5 D4 D3 D2 D1D7 D0

ACCY

1000 1000 0000 10001001 0000

Overflow AC=1

Add 6 and get the correct result

十進位個位數十進位十位數

Page 52: 1 Chapter 2 The 8051 Assembly Language Programming

52

OV ( Overflow ) (1/2)

• OV is set whenever the result of a signed number operation is too large, causing the high-order bit to overflow into the sign bit. (See Chapter 6)– 2’s complement method is used in the signed numbers.

– The range of 8-bit number is –128 to 127 in decimal.

• In 8-bit signed number operations, OV is set to 1 if either of the following two conditions occurs:1. There is a carry from D6 to D7 but no carry out of D7.

2. There is a carry from D7 out but no carry from D6 to D7.

Page 53: 1 Chapter 2 The 8051 Assembly Language Programming

53

OV ( Overflow ) (2/2)

• In the following example, there is an carry from D6 to D7 but no carry out of D7. Thus, the overflow bit is set.– 40H + 40H = 80 H Overflow the range -80H to 7FH

– CY=0, OV=1, AC=0

D6 D5 D4 D3 D2 D1D7 D0

ACCY

0100 0000 0100 00001000 0000

sign bitunsigned hex number

the result = 80H = -128 in decimal wrong!

Page 54: 1 Chapter 2 The 8051 Assembly Language Programming

54

P ( Parity Check )

• The parity flag reflects the number of 1s in the A ( accumulator ) register only.

• If A contains an odd number of 1s, then P=1. If A has an even number of 1s, then P=0.

• Example :– A = 0011 0011 # of 1s = 4 P = 0

– A = 1011 0011 # of 1s = 5 P = 1

Page 55: 1 Chapter 2 The 8051 Assembly Language Programming

55

Example of CY, AC and OV

• Example 1 :MOV A,#FFH

ADD A,#03H – A=FFH+03H=02H

– CY=1, AC=1, OV=1

1111 1111 0000 00110000 0010CY=1, AC=1, OV=1

• Example 2 :MOV A,#41H

ADD A,#4EH – A=41H+4EH=8FH

– CY=0, AC=0, OV=1

0100 0001 0100 11101000 1111CY=0, OV=1, AC=0

1

Page 56: 1 Chapter 2 The 8051 Assembly Language Programming

56

PSW ( Program Status Word ) Register

• The 8051 has a flag register PSW to indicate arithmetic conditions such as the carry bit.– Carry flag ( CY ): PSW.7

– Auxiliary carry flag ( AC ): PSW.6

– Parity check ( P ): PSW.0

– Overflow ( OV ) PSW.2

– Register Bank Selector ( RS1, RS0 ): PSW.4, PSW.3• discuss later

P--OVRS0RS1F0ACCY

7 6 5 4 3 2 1 0

PSW register

Page 57: 1 Chapter 2 The 8051 Assembly Language Programming

57

Figure 2-4. Bits of the PSW Register

P--OVRS0RS1F0ACCY

CY PSW.7 Carry flag.

AC PSW.6 Auxiliary carry flag.

-- PSW.5 Available to the user for general purpose.

RS1 PSW.4 Register Bank selector bit 1.

RS0 PSW.3 Register Bank selector bit 0.

OV PSW.2 Overflow flag.

-- PSW.1 User definable bit.

P PSW.0 Parity flag. Set/cleared by hardware each instruction

cycle to indicate an odd/even number of 1 bits in the

accumulator.

7 6 5 4 3 2 1 0

Page 58: 1 Chapter 2 The 8051 Assembly Language Programming

58

Instructions and PSW

• Table 2-1 shows how the instructions affect flag bits. – ADD affects CY, OV and AC.

– “MUL AB” affects OV and CY=0 (CY always equals 0).• Multiple register A with register B. The result is placed in A and B

where A has the lower byte and B has the higher byte.

• If the product is greater than FFH, OV=1; otherwise, OV=0.

MOV A,#5H ;load 5H into A

MOV B,#7H ;load 7H into B

MUL AB ;B=0, A=35=23H, CY=0, OV=0

– SETB C affects CY=1 (CY always equals 0) only.• SETB C is to set CY=PSW.7=1.

• See Appendix A.1

Page 59: 1 Chapter 2 The 8051 Assembly Language Programming

59

Table 2-1: Instructions That Affect Flag Bits

Note: X can be 0 or 1.XCJNEXMOV C,bitXORL C,/bitXORL C,bitXANL C,/bitXANL C,bitXCPL C0CLR C1SETB CXRLCXRRCXDA

X0DIV X0MUL

X XXSUBBX XXADDCX XXADDACOVCYInstruction

Page 60: 1 Chapter 2 The 8051 Assembly Language Programming

60

Example 2-2Show the status of the CY, AC, and P flags after the addition of 38H and 2FH in the following instructions.

MOV A,#38H

ADD A,#2FH ;after the addition A=67H,CY=0

Solution:

38 0011 1000

+2F 0010 1111

67 0110 0111

CY=0 since there is no carry beyond the D7 bit

AC=1 since there is a carry from the D3 to the D4 bit

P= 1 since the accumulator has an odd number of 1s (it has five 1s).

Page 61: 1 Chapter 2 The 8051 Assembly Language Programming

61

Example 2-3Show the status of the CY, AC, and P flags after the addition of 9CH and 64H in the following instructions.

MOV A,#9CH

ADD A,#64H ;after addition A=00 and CY=1

Solution:

9C 1001 1100

+64 0110 0100

100 0000 0000

CY=1 since there is a carry beyond the D7 bit

AC=1 since there is a carry from the D3 to the D4 bit

P= 1 since the accumulator has an even number of 1s (it has zero 1s).

Page 62: 1 Chapter 2 The 8051 Assembly Language Programming

62

Example 2-4Show the status of the CY, AC, and P flags after the addition of 88H and 93H in the following instructions.

MOV A,#88H

ADD A,#93H ;after the addition A=1BH,CY=1

Solution:

88 1000 1000

+93 1001 0011

11B 0001 1011

CY=1 since there is a carry beyond the D7 bit

AC=0 since there is no carry from the D3 to the D4 bit

P= 0 since the accumulator has an even number of 1s (it has four 1s).

Page 63: 1 Chapter 2 The 8051 Assembly Language Programming

63

Section 2.78051 Register Banks and Stack

Page 64: 1 Chapter 2 The 8051 Assembly Language Programming

64

RAM in the 8051

• 128 bytes of RAM in the 8051• These 128 bytes are divide into three different groups:

– 32 bytes for register banks and the stack• 00 to 1FH RAM

– 16 bytes for bit-addressable read/write memory• 20H to 2FH RAM

– 80 bytes for scratch pad• 30H to 7FH RAM

Page 65: 1 Chapter 2 The 8051 Assembly Language Programming

65

Figure 2-5. RAM Allocation in the 80517F

302F

201F

1817

100F

0807

00

Scratch pad RAM

Bit-Addressable RAM

Register Bank 3

Register Bank 2

Register Bank 1 (stack)

Register Bank 0

Register Banks and the stack

Page 66: 1 Chapter 2 The 8051 Assembly Language Programming

66

R0 to R7

• The 8051 uses 8 registers as general register.– They are named as R0,R1,...,R7.

– They form a register bank.

• The 8051 provides 4 banksBank 0 Bank 1 Bank 2 Bank 3

00-07H 08H-0FH 10H-17H 18H-1FH

– See Figure 2-6

• Where is the address of R0?

Page 67: 1 Chapter 2 The 8051 Assembly Language Programming

67

Figure 2-6. 8051 Register Banks and their RAM Addresses

Bank 0 Bank 1 Bank 2 Bank 3

07 R7 0F R7 17 R7 1F R7

06 R6 0E R6 16 R6 1E R6

05 R5 0D R5 15 R5 1D R5

04 R4 0C R4 14 R4 1C R4

03 R3 0B R3 13 R3 1B R3

02 R2 0A R2 12 R2 1A R2

01 R1 09 R1 11 R1 19 R1

0 R0 08 R0 10 R0 18 R0

Page 68: 1 Chapter 2 The 8051 Assembly Language Programming

68

Register Banks

• RS1 and RS0 decide the bank used by R0-R7.– RS1 and RS0 are bits 4 and 3 of PSW register, respectively.

• Default register bank :– When the 8051 is powered up, RS1=RS0=0. That is, the RAM

locations 00-07H are accessed with R0-R7.

– If we don’t change the values of RS1 and RS0, we use the default register bank: Bank 0.

18H-1FH31110H-17H20108H-0FH11000H-07H000AddressRegister BankRS0RS1

Page 69: 1 Chapter 2 The 8051 Assembly Language Programming

69

Example 2-5

State the contents of RAM locations after the following program: MOV R0,#99H ;load R0 with value 99H MOV R1,#85H ;load R1 with value 85H MOV R2,#3FH ;load R2 with value 3FH MOV R7,#63H ;load R7 with value 63H MOV R5,#12H ;load R5 with value 12H

Solution:

After the execution of above program we have the following:

RAM location 0 has value 99H RAM location 1 has value 85H

RAM location 2 has value 3FH RAM location 7 has value 63H

RAM location 5 has value 12H

Page 70: 1 Chapter 2 The 8051 Assembly Language Programming

70

Example 2-6

Repeat Example 2-5 using RAM addresses instead of register names.

Solution:

This is called direct addressing mode and uses the RAM address location for the destination address. See Chapter5 for a more detailed discussion of addressing modes.

MOV 00,#99H ;load R0 with value 99H MOV 01,#85H ;load R1 with value 85H MOV 02,#3FH ;load R2 with value 3FH MOV 07,#63H ;load R7 with value 63H MOV 05,#12H ;load R5 with value 12H

Page 71: 1 Chapter 2 The 8051 Assembly Language Programming

71

Example 2-7State the contents of the RAM locations after the following program: SETB PSW.4 ;select bank 2 MOV R0,#99H ;load R0 with value 99H MOV R1,#85H ;load R1 with value 85H MOV R2,#3FH ;load R2 with value 3FH MOV R7,#63H ;load R7 with value 63H MOV R5,#12H ;load R5 with value 12H

Solution:

By default, PSW.3=0 & PSW.4=0

“SETB PSW.4” sets RS1=1 and RS0=0 Register bank 2.

Register bank 2 uses RAM locations 10H – 17H.

RAM location 10H has value 99H RAM location 11H has value 85H

RAM location 12H has value 3FH RAM location 17H has value 63H

RAM location 15H has value 12H

Page 72: 1 Chapter 2 The 8051 Assembly Language Programming

72

How to Switch Register Banks

• Usually, 8 data is not enough.• Bits D4 and D3 of the PSW are used to select the

desired register bank.– D4 is referred to as PSW.4 ( RS1 )– D3 is referred to as PSW.3 ( RS0 )

• Use SETB and CLR SETB PSW.4 ;set RS1=1

CLR PSW.3 ;clear RS0=0 – Choose Bank 2 ( Addresses: 10F-17H for R0-R7 )

Page 73: 1 Chapter 2 The 8051 Assembly Language Programming

73

Stack

• Stack : a section of RAM to store data items• Two operations on the stack :

– PUSH : put an item onto the top of the stack

– POP : remove an item from the top of the stack

PUSH PUSHPUSH POP POP

Page 74: 1 Chapter 2 The 8051 Assembly Language Programming

74

When Do WE Use the Stack ?

• To save the temporary data • To save the return address

– The CPU uses the stack to save the address of the instruction just below the CALL instruction ( CPU want to execute the subroutine. )

– It is the return address.

– That is how the CPU knows where to resume when the CPU returns from the called subroutine.

– See Chapter 3.

Page 75: 1 Chapter 2 The 8051 Assembly Language Programming

75

Stack in the 8051

• The stack is a section of RAM used by the CPU to store information temporarily.

• The stack is in the 8051 RAM location 08H to 1FH.• How the stack is accessed by the CPU ?• The answer is SP ( Stack Pointers ) .

– SP is an 8-bit register.

– SP always points to the last used location.

– SP stores the address of top data.

RAM Addr.

0D

0C

0B

0A

09

08 25

12

F3

6C

FF

01

SP

SP 0A

Page 76: 1 Chapter 2 The 8051 Assembly Language Programming

76

PUSH

• Put the content of the RAM-address into the top of the stack.

PUSH RAM-addressMOV R6,#25H

PUSH 6

– Register Bank 0 is used.• R6 has the address 06H.

– SP is incremented by 1 automatically.

– The storing of a CPU register in the stack is called a PUSH.

PUSH 6RAM Addr.

0B

0A

09

08

RAM Addr.

0B

0A

09

08 25

06 25

SP=07 SP=08

R6 25

Page 77: 1 Chapter 2 The 8051 Assembly Language Programming

77

POP

• Remove the top value from the stack to the assigned RAM-address.

POP RAM-addressPOP 3

– Register Bank 0 is used.

• R3 has the address 03H.

– SP is decremented by 1 automatically.

– The loading the contents of the stack back into a CPU register is called a POP.

POP 3RAM Addr.

0B

0A

09

08

RAM Addr.

0B

0A

09

0825

SP=07SP=08

08 25

R3 25

Page 78: 1 Chapter 2 The 8051 Assembly Language Programming

78

Example 2-8Show the stack and stack pointer for the following. Assume thedefault stack area. MOV R6,#25H MOV R1,#12H MOV R4,#0F3H PUSH 6 PUSH 1 PUSH 4Solution:

PUSH PUSH PUSHRAM Addr.

0B

0A

09

08

RAM Addr.

0B

0A

09

08

RAM Addr.

0B

0A

09

08

RAM Addr.

0B

0A

09

0825 25 25

25

12

12 F3

SP=07 SP=08 SP=0ASP=09

12

F3

Page 79: 1 Chapter 2 The 8051 Assembly Language Programming

79

Example 2-9Examining the stack, show the contents of the registers and SP

after execution of the following instructions. All values are in hex.

POP 3 ;POP stack into R3

POP 5 ;POP stack into R5

POP 2 ;POP stack into R2

Solution:

After POP 3 After POP 5 After POP 2

0B 54 0B 0B 0B

0A F9 0A F9 0A 0A

09 76 09 76 09 76 09

08 6C 08 6C 08 6C 08 6C

Start SP=0B SP=0A SP=09 SP=08

Page 80: 1 Chapter 2 The 8051 Assembly Language Programming

80

SP ( Stack Pointer )

• SP register is used to access the stack.– When the 8051 is powered up ( i.e., no data in the stack ) ,

the SP register contains value 07H.

– The locations 20-2HF of RAM are reserved for bit-addressable memory and must not be used by the stack.

– The stack size is 08H-1FH (24 bytes).

– If in a given program we need more than 24 bytes of stack, we can change the SP to point to RAM location 30H - 7FH.

MOV SP,#5FH ;make RAM location 60H is

;the first stack location

Page 81: 1 Chapter 2 The 8051 Assembly Language Programming

81

Example 2-10Show the stack and stack pointer for the following instructions. MOV SP,#5FH ;make RAM location 60H ;first stack location MOV R2,#25H MOV R1,#12H MOV R4,#0F3H PUSH 2 PUSH 1 PUSH 4Solution:

After PUSH 2 After PUSH 1 After PUSH 4

63 63 63 63

62 62 62 62 F3

61 61 61 12 61 12

60 60 25 60 25 60 25

Start SP=5F SP=60 SP=61 SP=62

Page 82: 1 Chapter 2 The 8051 Assembly Language Programming

82

Instructions’ References

• Appendix A.1 shows the usage of instructions.• Table A-1 ( page 356 )

– Mnemonic’s byte ( opcode size )& machine cycle

– Types of mnemonics

• Table 10 in Appendix H ( page 418 )– Explanation of some terms

– Mnemonic’s description, byte & oscillator period

• Table 11 in Appendix H ( page 422 )– Mnemonic’s operands, opcode & byte

Page 83: 1 Chapter 2 The 8051 Assembly Language Programming

83

Relative Terms’ Explanations

• Mnemonic : assembly instruction • Byte : the size (in byte) of opcode • Machine Cycle ( MC ): the number of machine

cycle needed to execute this instruction– A machine cycle is a time unit to execute instructions

inside the 8051.

• Oscillator period : the number of oscillator periods needed to execute this instruction– Each machine cycle contains 12 oscillator periods.

– A clock is an oscillator period.

Page 84: 1 Chapter 2 The 8051 Assembly Language Programming

84

Questions

• What are the byte, machine cycle and hex code for the following instructions ?

ADD A,R0

;code=28, byte=1, MC=1

ADD A,R5

;code=2D, byte=1, MC=1

MOV R0,#0FFH

;code=78, byte=2, MC=1

MOV R5,#0FFH

;code=7D, byte=2, MC=2

PUSH data addr

;code=C0, byte=2, MC=2

POP data addr

;code=D0, byte=2, MC=2

Page 85: 1 Chapter 2 The 8051 Assembly Language Programming

85

Simulator

• 秉華科技有線公司: SIMLAB-8051– 用軟體來模擬實際上硬體成品的運作情形。– 提供各種實習板,可在上面發展程式,觀察程式執行的過程。

– 可以單步執行或全速執行。– 可以看到 Registers, ROM, RAM 的內容。– 提供 C 語言轉 8051 的介面。– 說明 說明主題 F1 8051 指令集

• 說明各種指令的用法– 說明 說明主題 F1 使用說明

• 說明 Simlab_8051 基本使用方法

Page 86: 1 Chapter 2 The 8051 Assembly Language Programming

86

Simlab_8051 基本使用方法

• 說明 說明主題 F1 使用說明1.從基本型實習板或功能型專題板中選取任一項實習板。2.從實習板中選取範例說明,再以滑鼠左鍵點選任一個範例程式。

3.並以滑鼠右鍵開啟任一個範例程式。4.從原始檔視窗中按下滑鼠右鍵後選取。

• 儲存 , 組譯及載入 ( 快速延遲時間 )• 儲存 , 組譯及載入 ( 實際延遲時間 )

5.按下執行選項 ( 上面的圖示 ) 的執行,並從示意圖中觀察實習板的動作情形。

• Demo

Page 87: 1 Chapter 2 The 8051 Assembly Language Programming

87

You are able to (1/2)

• List the registers of the 8051 microcontroller• Manipulate data using the registers and MOV

instructions• Code simple 8051 Assembly language instructions• Assemble and run an 8051 program• Describe the sequence of events that occur upon 8051

power-up• Example programs in ROM code of the 8051• Explain the ROM memory map of the 8051

Page 88: 1 Chapter 2 The 8051 Assembly Language Programming

88

You are able to (2/2)

• Detail the execution of 8051 Assembly language instructions

• Describe 8051 data types• Explain the purpose of the PSW (program status

word) register• Discuss RAM memory space allocation in the 8051• Diagram the use of the stack in the 8051• Manipulate the register banks of the 8051

Page 89: 1 Chapter 2 The 8051 Assembly Language Programming

89

Homework

• Chapter 2 Problems :7,22,23,25,27,29,37,38,40,42,43,47,48

• Note: – Please write and compile the program of Problems 47,48.

– For the programming problem, please use "8 LED learning board" for the following question.