Beruflich Dokumente
Kultur Dokumente
Microcontroller
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-1
RAM ROM
Serial
Timer COM
Port
hsabaghianb @ kashanu.ac.ir
A single chip
Microcontroller
Microprocessors 1-2
Block Diagram
External Interrupts
Interrupt
Control
Timer 1
Timer 2
4k
ROM
128 bytes
RAM
Bus
Control
4 I/O Ports
CPU
OSC
P0 P2 P1
Addr/Data
hsabaghianb @ kashanu.ac.ir
P3
Serial
TXD RXD
Microprocessors 1-3
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-4
Embedded System
(8051 Application)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-5
Microprocessors 1-6
Microprocessors 1-7
8031
80xx
87xx
89xx
no ROM
mask ROM
EPROM
Flash EEPROM
89xx
8951
8952
8953
8955
898252
891051
892051
Example (AT89C51,AT89LV51,AT89S51)
AT= ATMEL(Manufacture)
C = CMOS technology
LV= Low Power(3.0v)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-8
IO pin
Other
32
256
32
12k
256
32
WD
20k
256
32
WD
898252
8k
256
32
ISP
891051
1k
64
16
AC
892051
2k
128
16
AC
89XX
ROM
RAM
Timer
8951
4k
128
8952
8k
8953
8955
Source
Microprocessors 1-9
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-10
8051
Schematic
Pin out
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-11
8051
Foot Print
hsabaghianb @ kashanu.ac.ir
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RST
(RXD)P3.0
(TXD)P3.1
(INT0)P3.2
(INT1)P3.3
(T0)P3.4
(T1)P3.5
(WR)P3.6
(RD)P3.7
XTAL2
XTAL1
GND
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
8051
(8031)
(8751)
(8951)
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
Vcc
P0.0(AD0)
P0.1(AD1)
P0.2(AD2)
P0.3(AD3)
P0.4(AD4)
P0.5(AD5)
P0.6(AD6)
P0.7(AD7)
EA/VPP
ALE/PROG
PSEN
P2.7(A15)
P2.6(A14)
P2.5(A13)
P2.4(A12)
P2.3(A11)
P2.2(A10)
P2.1(A9)
P2.0(A8)
Microprocessors 1-12
Microprocessors 1-13
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-14
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-15
Vcc
Load(L1)
Internal CPU
bus
Write to latch
Clk
P1.X
pin
P1.X
Q
M1
TB1
Read pin
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-16
Microprocessors 1-17
Vcc
TB2
Vcc
Write to latch
Clk
P1.X
pin
P1.X
Q
M1
output 1
TB1
Read pin
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-18
Vcc
TB2
ground
Write to latch
Clk
P1.X
pin
P1.X
Q
M1
output 0
TB1
Read pin
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-19
TB2
2. MOV A,P1
Vcc
external pin=High
Load(L1)
P1.X pin
P1.X
Write to latch
Clk
M1
TB1
Read pin
3. Read pin=1 Read latch=0
Write to latch=1
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-20
Vcc
2. MOV A,P1
TB2
Load(L1)
external pin=Low
MOV P1,#0FFH
Internal CPU bus
P1.X pin
P1.X
Write to latch
Clk
M1
TB1
Read pin
3. Read pin=1 Read latch=0
Write to latch=1
8051 IC
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-21
hsabaghianb @ kashanu.ac.ir
Port
P0.0
DS5000 P0.1
P0.2
8751
P0.3
P0.4
8951
P0.5
P0.6
P0.7
10 K
Microprocessors 1-22
IMPORTANT PINS
PSEN (out):
ALE (out):
EA (in):
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-23
Pins of 8051
Vccpin 40
Vcc provides supply voltage to the chip.
The voltage source is +5V.
GNDpin 20ground
XTAL1 and XTAL2pins 19,18
These 2 pins provide external clock.
Way 1using a quartz crystal oscillator
Way 2using a TTL oscillator
Example 4-1 shows the relationship
between XTAL and the machine cycle.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-24
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-25
N
C
EXTERNAL
OSCILLATOR
SIGNAL
XTAL2
XTAL1
GND
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-26
Machine cycle
Solution:
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-27
Pins of 8051
RSTpin 9reset
input pin and active highnormally low.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-28
Power-On RESET
Vcc
31
10 uF
EA/VPP
X1
30 pF
X2
RST
9
8.2 K
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-29
Register
Reset Value
PC
0000
ACC
0000
0000
PSW
0000
SP
0007
DPTR
0000
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-30
Pins of 8051
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-31
Pins of 8051
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-32
Address Multiplexing
for External Memory
Figure 2-7
Multiplexing
the address
(low-byte)
and data
bus
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-33
Address Multiplexing
for External Memory
Figure 2-8
Accessing
external
code
memory
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-34
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-35
Accessing External
Data Memory
Figure
2-11
Interface
to 1K
RAM
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-36
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-37
74LS373
G
D
OE
CS
A0
A7
D0
D7
EA
P2.0
A8
P2.7
A15
8051
hsabaghianb @ kashanu.ac.ir
ROM
Microprocessors 1-38
WR
RD
74LS373
G
D
CS
A0
A7
D0
D7
EA
P2.0
A8
P2.7
A15
8051
hsabaghianb @ kashanu.ac.ir
RAM
Microprocessors 1-39
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-40
WR
RD
74LS373
G
D
CS
A0
A7
D0
D7
EA
P2.0
A8
P2.7
A15
8051
hsabaghianb @ kashanu.ac.ir
RAM
Microprocessors 1-41
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-42
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-43
On-Chip Memory
Internal RAM
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-44
Registers
1F
Bank 3
18
17
Bank 2
10
0F
Bank 1
08
07
06
05
04
03
02
01
00
hsabaghianb @ kashanu.ac.ir
R7
R6
R5
R4
R3
R2
R1
R0
Bank 0
Microprocessors 1-45
7F
78
2E
2D
2C
Bit addressing:
mov C, 1Ah
or
mov C, 23h.2
2B
2A
29
28
27
26
25
1A
24
10
23
22
21
0F
07
08
06
05
04
03
02
01
00
20
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-46
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-47
Figure 2-6
Summary
of the 8051
on-chip
data
memory
(RAM)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-48
Figure 2-6
Summary
of the 8051
on-chip
data
memory
(Special
Function
Registers)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-49
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-50
Register Banks
Active bank selected by PSW [RS1,RS0] bit
Permits fast context switching in interrupt
service routines (ISR).
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-51
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-52
Used in assembler
instructions
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-53
Registers
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-54
Registers
A
B
R0
DPTR
DPH
DPL
R1
R2
PC
PC
R3
R4
R5
R6
R7
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-55
The 8051
Assembly Language
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-56
Overview
Data transfer instructions
Addressing modes
Data processing (arithmetic and logic)
Program flow instructions
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-57
dest source
;increment stack
;move byte
;move from stack
;decrement
pointer,
on stack
to byte,
stack pointer
Exchange instructions
XCH a, byte
XCHD a, byte
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-58
Addressing Modes
Immediate Mode specify data by its value
mov A, #0
mov B, #11
mov DPTR,#7521h
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-59
Addressing Modes
Immediate Mode continue
MOV DPTR,#7521h
MOV DPL,#21H
MOV DPH, #75
COUNT EGU 30
~
~
0RG 200H
MYDATA:DB IRAN
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-60
Addressing Modes
Register Addressing either source or
destination is one of CPU register
MOV
MOV
ADD
ADD
MOV
MOV
MOV
R0,A
A,R7
A,R4
A,R7
DPTR,#25F5H
R5,DPL
R,DPH
Microprocessors 1-61
Addressing Modes
Direct Mode specify data by its 8-bit address
Usually for 30h-7Fh of RAM
Mov
Mov
Mov
Mov
a, 70h
R0,40h
56h,a
0D0h,a
hsabaghianb @ kashanu.ac.ir
;
;
;
;
Microprocessors 1-62
Addressing Modes
Direct Mode play with R0-R7 by direct address
MOV A,4
MOV A,R4
MOV A,7
MOV A,R7
MOV 7,2
MOV R7,R6
MOV R2,#5
MOV R2,5
hsabaghianb @ kashanu.ac.ir
;Put 5 in R2
;Put content of RAM at 5 in R2
Microprocessors 1-63
Addressing Modes
Register Indirect the address of the source or
destination is specified in registers
Uses registers R0 or R1 for 8-bit address:
mov psw, #0
mov r0, #0x3C
mov @r0, #3
; dptr 9000h
; a M[9000]
Microprocessors 1-64
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-65
Addressing Modes
Register Indexed Mode source or
destination address is the sum of the base
address and the accumulator(Index)
Base address can be DPTR or PC
mov dptr, #4000h
mov a, #5
movc a, @a + dptr
hsabaghianb @ kashanu.ac.ir
;a M[4005]
Microprocessors 1-66
Addressing Modes
Register Indexed Mode continue
Base address can be DPTR or PC
ORG 1000h
PC
1000
1002
1003
mov a, #5
movc a, @a + PC
Nop
;a M[1008]
Table Lookup
MOVC only can read internal code memory
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-67
Acc Register
A register can be accessed by direct and register mode
This 3 instruction has same function with different code
0703 E500
0705 8500E0
0708 8500E0
mov a,00h
mov acc,00h
mov 0e0h,00h
hsabaghianb @ kashanu.ac.ir
mov a,r1
mov acc,r1
mov 0e0h,r1
Microprocessors 1-68
SFRs Address
B always direct mode - except in MUL & DIV
0703 8500F0
0706 8500F0
mov b,00h
mov 0f0h,00h
0709 8CF0
070B 8CF0
mov b,r4
mov 0f0h,r4
mov p0,a
mov 80h,a
mov p0,p1
Microprocessors 1-69
SFRs Address
All SFRs such as
(ACC, B, PCON, TMOD, PSW, P0~P3, )
Microprocessors 1-70
Immediate data
;machine code=243d
Direct addressing
Op code
mov r3,0E8h
hsabaghianb @ kashanu.ac.ir
Direct address
;machine code=ABE8
Microprocessors 1-71
Op code
070D
070E
070F
0710
0711
0712
0713
0714
0715
0716
0717
E8
E9
EA
ED
EF
2F
F8
F9
FA
FD
FD
hsabaghianb @ kashanu.ac.ir
n n n
mov
mov
mov
mov
mov
add
mov
mov
mov
mov
mov
a,r0
a,r1
a,r2
a,r5
a,r7
a,r7
r0,a
r1,a
r2,a
r5,a
r5,a
;E8
;E9
;EA
;ED
;Ef
=
=
=
=
=
1110
1110
1110
1110
1110
1000
1001
1010
1101
1111
Microprocessors 1-72
070D
070D
070E
070F
0710
0711
0712
E7
93
83
E0
F0
F2
E3
hsabaghianb @ kashanu.ac.ir
i
; i = 0 or 1
mov
movc
movc
movx
movx
movx
movx
a,@r1
a,@a+dptr
a,@a+pc
a,@dptr
@dptr,a
@r0,a
a,@r1
Microprocessors 1-73
Relative address
0700
0700
0702
0703
0704
0705
Op code
E106
00
00
00
00
hsabaghianb @ kashanu.ac.ir
A7-A0
1
2
3
4
5
6
7
8
org 0700h
ajmp next
nop
nop
nop
nop
07FEh
;next=706h
next:
end
Microprocessors 1-74
Op code
A7-A0
020707
00
00
00
00
hsabaghianb @ kashanu.ac.ir
1
2
3
4
5
6
7
8
org 0700h
ajmp next
nop
nop
nop
nop
;next=0707h
next:
end
Microprocessors 1-75
Stacks
pop
push
stack pointer
stack
Microprocessors 1-76
Stack
Stack-oriented data transfer
Only one operand (direct addressing)
SP is other operand register indirect - implied
;
;
;
;
Initialize SP
SP SP+1, M[SP] M[55]
M[41] M[55]
b M[55]
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-77
Stack (push,pop)
Therefore
Push
Push
Push
push
Push
Push
Push
Push
Push
Pop
Pop
Push
Pop
a
r0
r1
acc
psw
b
13h
0
1
7
8
0e0h
0f0h
;is
;is
;is
;is
;is
;is
hsabaghianb @ kashanu.ac.ir
invalid
invalid
invalid
correct
correct
correct
;acc
;b
Microprocessors 1-78
Exchange Instructions
two way data transfer
XCH a, 30h
XCH a, R0
XCH a, @R0
XCHD a, R0
a[7..4] a[3..0]
;
;
;
;
a M[30]
a R0
a M[R0]
exchange digit
R0[7..4] R0[3..0]
Only 4 bits exchanged
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-79
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-80
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-81
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-82
Arithmetic Instructions
Add
Subtract
Increment
Decrement
Multiply
Divide
Decimal adjust
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-83
Arithmetic Instructions
Mnemonic
Description
ADD A, byte
ADDC A, byte
SUBB A, byte
INC A
increment A
INC byte
INC DPTR
DEC A
decrement accumulator
DEC byte
decrement byte
MUL AB
DIV AB
DA A
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-84
ADD Instructions
add a, byte
; a a + byte
addc a, byte
; a a + byte + C
These instructions affect 3 bits in PSW:
C = 1 if result of add is greater than FF
AC = 1 if there is a carry out of bit 3
OV = 1 if there is a carry out of bit 7, but not from bit 6, or
visa versa.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-85
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-86
ADD Examples
What is the value of
the C, AC, OV flags
after the second
instruction is
executed?
mov a, #3Fh
add a, #D3h
0011 1111
1101 0011
0001 0010
C = 1
AC = 1
OV = 0
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-87
0111
1000
1111
complement:
0000 00 0
1111
0000
7F 127
80 -128
1111
FF -1
(negative 113)
(negative 45)
(overflow)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-88
Addition Example
; Computes Z = X + Y
; Adds values at locations 78h and 79h and puts them in 7Ah
;-----------------------------------------------------------------X
equ
78h
Y
equ
79h
Z
equ
7Ah
;----------------------------------------------------------------org 00h
ljmp Main
;----------------------------------------------------------------org 100h
Main:
mov a, X
add a, Y
mov Z, a
end
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-89
Microprocessors 1-90
Subtract
SUBB A, byte
Example:
SUBB A, #0x4F
;A A 4F C
Notice that
There is no subtraction WITHOUT borrow.
Therefore, if a subtraction without borrow is desired,
it is necessary to clear the C flag.
Example:
Clr c
SUBB A, #0x4F
hsabaghianb @ kashanu.ac.ir
;A A 4F
Microprocessors 1-91
increment A
INC byte
INC DPTR
DEC A
decrement accumulator
DEC byte
decrement byte
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-92
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-93
Multiply
When multiplying two 8-bit numbers, the size of the
maximum product is 16-bits
FF x FF = FE01
(255 x 255 = 65025)
MUL AB
; BA
A * B
Microprocessors 1-94
Division
Integer Division
DIV AB
; divide A by B
A Quotient(A/B)
B Remainder(A/B)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-95
Decimal Adjust
DA a
; decimal adjust a
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-96
Logic Instructions
Bitwise logic operations
Clear
Rotate
Swap
Logic instructions do NOT affect the flags in PSW
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-97
Bitwise Logic
ANL AND
ORL OR
XRL XOR
Examples:
00001111
ANL 10101100
00001100
CPL Complement
hsabaghianb @ kashanu.ac.ir
ORL
00001111
10101100
10101111
XRL
00001111
10101100
10100011
CPL
10101100
01010011
Microprocessors 1-98
a, byte
direct, reg. indirect, reg,
immediate
byte, a
direct
byte, #constant
ex:
cpl a
CPL Complement
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-99
;PSW OR 00011000
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-100
clear
rotate left
rotate left through Carry
rotate right
rotate right through Carry
swap accumulator nibbles
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-101
A
byte
Ri
@Ri
hsabaghianb @ kashanu.ac.ir
(direct mode)
(register mode)
(register indirect mode)
Microprocessors 1-102
Rotate
Rotate instructions operate only on a
RL a
Mov a,#0xF0
RR a
; a 11110000
; a 11100001
RR a
Mov a,#0xF0
RR a
hsabaghianb @ kashanu.ac.ir
; a 11110000
; a 01111000
Microprocessors 1-103
mov a, #0A9h
add a, #14h
; a A9
; a BD (10111101), C0
rrc a
; a 01011110, C1
RLC a
mov a, #3ch
setb c
; a 3ch(00111100)
; c 1
rlc a
; a 01111001, C1
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-104
a, #3
C
a
a
a
hsabaghianb @ kashanu.ac.ir
;
;
;
;
;
A
C
A
A
A
00000011
0
00000110
00001100
00000110
(3)
(6)
(12)
(6)
Microprocessors 1-105
Swap
SWAP a
mov a, #72h
swap a
hsabaghianb @ kashanu.ac.ir
; a 27h
; a 27h
Microprocessors 1-106
Microprocessors 1-107
Shift/Mutliply Example
Program segment to multiply by 2 and add
1.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-108
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-109
Unconditional Jumps
SJMP <rel addr>
Short jump,
relative address is 8-bit 2s complement
number, so jump can be up to 127 locations
forward, or 128 locations back.
Long jump
Absolute jump to
anywhere within 2K block of program memory
JMP @A + DPTR
Long
indexed jump
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-110
Infinite Loops
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-111
Re-locatable Code
Memory specific NOT Re-locatable (machine code)
org 8000h
Start: mov C, p1.6
mov p3.7, C
ljmp Start
end
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-112
Jump table
Mov
Mov
Rl
Jmp
dptr,#jump_table
a,#index_number
a
@a+dptr
...
Jump_table: ajmp case0
ajmp case1
ajmp case2
ajmp case3
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-113
Conditional Jump
These instructions cause a jump to occur only if a
condition is true. Otherwise, program execution
continues with the next instruction.
loop: mov a, P1
jz loop
mov b, a
Microprocessors 1-114
Conditional jumps
Mnemonic
Description
JZ <rel addr>
Jump if a = 0
Jump if a != 0
JC <rel addr>
Jump if C = 1
Jump if C != 1
Jump if bit = 1
Jump if bit != 1
&clear
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-115
else
send a 1 to LED
jz led_off
Setb P1.6
sjmp skipover
led_off: clr P1.6
mov A, P0
skipover:
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-116
Description
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-117
Iterative Loops
For A = 0 to 4 do
{}
For A = 4 to 0 do
{}
clr a
loop: ...
...
inc a
cjne a, #4, loop
mov R0, #4
loop: ...
...
djnz R0, loop
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-118
Iterative Loops(examples)
mov a,#50h
mov b,#00h
cjne a,#50h,next
mov b,#01h
next: nop
end
mov a,#0aah
mov b,#10h
Back1:mov r6,#50
Back2:cpl a
djnz r6,back2
djnz b,back1
end
hsabaghianb @ kashanu.ac.ir
mov a,#25h
mov r0,#10h
mov r2,#5
Again: mov @ro,a
inc r0
djnz r2,again
end
mov a,#0h
mov r4,#12h
Back: add a,#05
djnz r4,back
mov r5,a
end
Microprocessors 1-119
; stack PC
; PC address 11 bit
; stack PC
; PC address 16 bit
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-120
Return
Return is also similar to a jump, but
Return instruction pops PC from stack to get
address to jump to
ret
hsabaghianb @ kashanu.ac.ir
; PC stack
Microprocessors 1-121
Subroutines
call to the subroutine
Main:
sublabel:
...
acall sublabel
...
...
...
...
the subroutine
ret
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-122
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-123
Subroutine - Example
square:
push b
mov b,a
mul ab
pop b
ret
8 byte and 11 machine cycle
square: inc a
movc a,@a+pc
ret
table: db 0,1,4,9,16,25,36,49,64,81
13 byte and 5 machine cycle
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-124
sqrt:
Sqrs:
; Port 3 is an input
; Clear bits 7..4 of A
inc a
movc a, @a + PC
ret
db 0,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3
end
hsabaghianb @ kashanu.ac.ir
service
main program
subroutine
data
Microprocessors 1-125
Why Subroutines?
Subroutines allow us to have "structured"
assembly language programs.
This is useful for breaking a large design
into manageable parts.
It saves code space when subroutines can
be called many times in the same program.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-126
example of delay
mov a,#0aah
Back1:mov p0,a
lcall delay1
cpl a
sjmp back1
Delay1:mov r0,#0ffh;1cycle
Here: djnz r0,here ;2cycle
ret
;2cycle
end
Delay2:
mov r6,#0ffh
back1: mov r7,#0ffh ;1cycle
Here: djnz r7,here ;2cycle
djnz r6,back1;2cycle
ret
;2cycle
end
Delay=1+(1+255*2+2)*255+2
=130818 machine cycle
Delay=1+255*2+2=513 cycle
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-127
Main:
Again:
Delay:
Loop1:
Loop0:
equ P1.6
org ooh
ljmp Main
reset service
org 100h
clr
GREEN_LED
acall Delay
cpl
GREEN_LED
sjmp Again
main program
mov
mov
mov
djnz
djnz
djnz
ret
END
hsabaghianb @ kashanu.ac.ir
R7,
R6,
R5,
R5,
R6,
R7,
#02
#00h
#00h
$
Loop0
Loop1
subroutine
Microprocessors 1-128
Example
; Move string from code memory to RAM
org 0
mov dptr,#string
mov r0,#10h
Loop1:
clr a
movc a,@a+dptr
jz stop
mov @r0,a
inc dptr
inc r0
sjmp loop1
Stop:
sjmp stop
; on-chip code memory used for string
org 18h
String:
db this is a string,0
end
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-129
Example
; p0:input p1:output
mov a,#0ffh
mov p0,a
back:
mov a,p0
mov p1,a
sjmp back
Again:
request
setb p1.2
mov a,#45h
;data
jnb p1.2,again ;wait for data
mov p0,a
setb p2.3
clr p2.3
hsabaghianb @ kashanu.ac.ir
;enable strobe
Microprocessors 1-130
Example
; duty cycle 50%
back:
cpl p1.2
acall delay
sjmp back
back:
setb p1.2
acall delay
Clr p1.2
acall delay
sjmp back
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-131
Example
; duty cycle 66%
back:
setb p1.2
acall delay
acall delay
Clr p1.2
acall delay
sjmp back
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-132
8051 timer
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-133
Interrupts
Program Execution
mov a, #2
mov b, #16
mul ab
mov R0, a
mov R1, b
mov a, #12
mov b, #20
mul ab
add a, R0
mov R0, a
mov a, R1
addc a, b
mov R1, a
end
hsabaghianb @ kashanu.ac.ir
interrupt
ISR: inc r7
mov a,r7
jnz NEXT
cpl P1.6
NEXT: reti
return
Microprocessors 1-134
Interrupt Sources
Original 8051 has 5 sources of interrupts
Timer 0 overflow
Timer 1 overflow
External Interrupt 0
External Interrupt 1
Serial Port events (buffer full, buffer empty, etc)
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-135
Interrupt Process
If interrupt event occurs AND interrupt flag for
that event is enabled, AND interrupts are
enabled, then:
1. Current PC is pushed on stack.
2. Program execution continues at the interrupt
vector address for that interrupt.
3. When a RETI instruction is encountered, the PC
is popped from the stack and program execution
resumes where it left off.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-136
Interrupt Priorities
What if two interrupt sources interrupt at
the same time?
The interrupt with the highest PRIORITY
gets serviced first.
All interrupts have a default priority
order.
Priority can also be set to high or low.
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-137
Interrupt SFRs
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-138
Interrupt Vectors
Each interrupt has a specific place in code memory where
program execution (interrupt service routine) begins.
External Interrupt 0:
Timer 0 overflow:
External Interrupt 1:
Timer 1 overflow:
Serial :
Timer 2 overflow(8052+)
hsabaghianb @ kashanu.ac.ir
0003h
000Bh
0013h
001Bh
0023h
002bh
Microprocessors 1-139
Interrupt Vectors
To avoid overlapping Interrupt Service routines, it is
common to put JUMP instructions at the vector
address. This is similar to the reset vector.
org 009B
ljmp EX7ISR
cseg at 0x100
Main: ...
...
EX7ISR:...
...
reti
hsabaghianb @ kashanu.ac.ir
; at EX7 vector
; at Main program
; Main program
; Interrupt service routine
; Can go after main program
; and subroutines.
Microprocessors 1-140
ISRBLK:
Loop2:
Loop1:
Loop0:
push PSW
mov PSW,#18h
mov R0, #10
mov R7, #02h
mov R6, #00h
mov R5, #00h
djnz R5, $
djnz R6, Loop0
djnz R7, Loop1
cpl P1.6
djnz R0, Loop2
pop PSW
reti
hsabaghianb @ kashanu.ac.ir
Microprocessors 1-141