Transcript Document

Suranaree University
Of Technology
มทส
Chapter 2
8051 Assembly
Language Programming
2002/2/27
2002 Anant Oonsivilai
Microcomputers and Microprocessors
Outlines
8051 registers
Manipulate data using registers & MOVE
instructions
Code simple assembly language instructions
Assemble and run a program
Sequence events upon power-up
Examine programs in ROM codes
ROM memory map
Execution of instructions
Data types
PSW register (Program Status Word)
RAM memory space
Stack
Register banks
2002 Anant Oonsivilai
8051 Registers
A
B
R0
D7
D6
D5
D4
D3
D2
D1
D0
8 bit Registers
R1
R2
DPTR
DPH
DPL
R3
R4
PC
PC (Program counter)
R5
R6
Figure2-1 (b): Some 8051 16 bit Registers
R7
Figure2-1 (a): Some 8 bit Registers of the 8051
2002 Anant Oonsivilai
MOV Instruction
MOV destination, source ; copy source to
dest.
MOV A,#55H
MOV R0,A
;load value 55H into reg. A
;copy contents of A into R0
;(now A=R0=55H)
MOV R1,A
;copy contents of A into R1
;(now A=R0=R1=55H)
MOV R2,A
;copy contents of A into R2
;(now A=R0=R1=R2=55H)
MOV R3,#95H ;load value 95H into R3
;(now R3=95H)
MOV A,R3
;copy contents of R3 into A
;now A=R3=95H
2002 Anant Oonsivilai
Notes on Programming
Value (proceeded with #) can be loaded
directly to registers A, B, or R0 – R7

MOV R5, #0F9H
If values 0 to F moved into an 8-bit register,
the rest assumed all zeros

MOV A, #5
A too large value causes an error

MOV A, #7F2H
2002 Anant Oonsivilai
ADD Instruction
ADD A, source ;ADD the source operand
;to the accumulator
MOV A, #25H
;load 25H into A
MOV R2,#34H ;load 34H into R2
ADD A,R2
;add R2 to accumulator
;(A = A + R2)
2002 Anant Oonsivilai
Structure of Assembly
Language
ORG 0H
;start (origin) at location 0
MOV
MOV
MOV
ADD
R5,#25H
R7,#34H
A,#0
A,R5
ADD A,R7
ADD A,#12H
HERE: SJMP HERE
END
;load 25H into R5
;load 34H into R7
;load 0 into A
;add contents of R5 to A
;now A = A + R5
;add contents of R7 to A
;now A = A + R7
;add to A value 12H
;now A = A + 12H
;stay in this loop
;end of asm source file
Program 2-1:Sample of an Assembly Language Program
2002 Anant Oonsivilai
Steps to Create a Program
2002 Anant Oonsivilai
8051 Program Counter & ROM
Space
2002 Anant Oonsivilai
8051 Program Counter & ROM
Space
2002 Anant Oonsivilai
8051 Program Counter & ROM
Space
2002 Anant Oonsivilai
Execute a Program Byte by
Byte
1. PC=0000: opcode 7D fetched; 25
fetched; R5←25; PC+2
2. PC=0002: opcode 7F fetched; 34 fetched;
R7←34; PC+2
3. PC=0004; opcode 74 fetched; 0 fetched;
A←0; PC+2
4. PC=0006; opcode 2D fetched; A←A+R5;
PC+1
5. (Similarly…)
2002 Anant Oonsivilai
8051 On-Chip ROM Address
Range
2002 Anant Oonsivilai
Data Types & Directives
DATA1:
DATA2:
DATA3:
DATA4:
DATA6:
2002 Anant Oonsivilai
ORG 500H
DB
28
;DECIMAL (1C in Hex)
DB
00110101B
;BINARY (35 in Hex)
DB
39H
;HEX
ORG 510H
DB
“2591”
; ASCII NUMBERS
ORG 518H
DB “My name is Joe” ;ASCII CHARACTERS
PSW (Flag) Register
2002 Anant Oonsivilai
Instructions Affecting Flag Bits
2002 Anant Oonsivilai
ADD Instruction and PSW
2002 Anant Oonsivilai
ADD Instruction and PSW
2002 Anant Oonsivilai
ADD Instruction and PSW
2002 Anant Oonsivilai
8051 RAM Allocation
2002 Anant Oonsivilai
8051 Register Banks
2002 Anant Oonsivilai
Access RAM Locations Using Register
Names
2002 Anant Oonsivilai
Access RAM Locations Using
Addresses
2002 Anant Oonsivilai
Switch Register Banks
2002 Anant Oonsivilai
Switch Register Banks
2002 Anant Oonsivilai
Pushing onto Stack
2002 Anant Oonsivilai
Popping from Stack
2002 Anant Oonsivilai
Stack & Bank 1 Conflict
2002 Anant Oonsivilai
Stack & Bank 1 Conflict
2002 Anant Oonsivilai