Cấu trúc bộ VĐK 8051
Giới thiệu về lập trình hợp ngữ
Bài 2
Bộ môn TĐ
Khoa KTĐK
Bài 2: Mục đích
•Cấu trúc bên trong 8051
•Tập thanh ghi
•Tập lệnh
•Bản đồ bộ nhớ
•
Giớithiệuvề ngănxếpSFR
•
Giới
thiệu
về
ngăn
xếp
,
SFR
•Lập trình hợp ngữ
Cấu trúc 8051
•Tổng quan cho người lập trình
Tập thanh ghi
–
Tập
thanh
ghi
–Tập lệnh
Bản đồ bộ nhớ
–
Bản
đồ
bộ
nhớ
•Tổng quan cho người thiết kế phần cứng
Sơ đồ chân
–
Sơ
đồ
chân
– Các thông số về thời gian
–
Các yêu cầuvề dòng điệnvàđiệnáp
–
Các
yêu
cầu
về
dòng
điện
và
điện
áp
Tổng quan cho người thiết kế phần
ứ
c
ứ
ng
9
Tạo nguồn điệnáp5Vtừ nguồn 220V
9
Tạo
nguồn
điện
áp
5V
từ
nguồn
220V
50Hz
XMM1
XMM2
XSC1
G
T
XMM1
V1
220 V
60 Hz
0Deg
D2
1B4B42
1
2
4
3
U3
LM7824CT
LINE VREG
COMMON
VOLTAGE
XMM3
AB
T2
NLT_PQ_4_12
C1 C2 C3
10uF-POL
U2
LM7812CT
LINE VREG
COMMON
VOLTAGE
XMM4
1000uF-POL
100nF
C4
10uF-POL
U1
LM7805CT
LINE VREG
COMMON
VOLTAGE
XMM5
C5
10uF-POL
Tổng quan cho người thiết kế phần
ứ
c
ứ
ng
9
Tạo nguồn điệnáp5Vtừ nguồn 12V
9
Tạo
nguồn
điện
áp
5V
từ
nguồn
12V
U1
LM7805CT
XMM1
V1
12 V
LINE VREG
COMMON
VOLTAGE
C1
C2
C4
C3
C1
100pF
C2
1000uF-POL
C4
100pF
LED1
C3
10uF-POL
R1
4.70K
Ω
LED1
Tổng quan cho người thiết kế phần
ứ
c
ứ
ng
9
Mạch tạo dao động và Reset cho 8051
9
Mạch
tạo
dao
động
và
Reset
cho
8051
VCC
5V
18(XTAL1)
19(XTAL2)
20(GND)
5V
R1
10k
Ω
X1
HC-49/U_11MHz
C3
330pF
C1
330
p
F
C2
330
p
F
J1
Ke
y
= S
p
ace
p
p
yp
Toi chan Reset (9)
Toi chan Reset (9)
Tổ h ờilậ tì h
Tổ
ng quan c
h
o ngư
ời
lậ
p
t
r
ì
n
h
-
Tập thanh ghi
Tập
thanh
ghi
• Các thanh ghi
ABtừ R0 đến R7: là các thanh ghi 8 bit
–
A
,
B
,
từ
R0
đến
R7:
là
các
thanh
ghi
8
bit
– DPTR: [DPH:DPL] thanh ghi 16 bit
–
PC: Bộ đếmchương trình (16 bit)
PC:
Bộ
đếm
chương
trình
(16
bit)
–4 bộ thanh ghi từ R0 đến R7
– Con trỏ ngăn xếp SP
– PSW: thanh ghi từ trạng thái chương trình
– SFR: Thanh ghi chức năng đặc biệt
ề ể ế
•
Đ
i
ề
u khi
ể
n các thi
ế
t bị ngoại vi trên board
Tập thanh ghi-Thanh ghi tích luỹ
A, ACC
A,
ACC
• Được sử dụng phổ biến cho lệnh mov và phép tính số
học
• ACC có địa chỉ SFR là 0E0H
•Ví dụ có chỉ dẫn đầy đủ
Lệnh: mov A R0 ;copy nội dung củaR0vàoA
–
Lệnh:
mov
A
,
R0
;copy
nội
dung
của
R0
vào
A
–Mã lệnh: E8
– Thanh ghi tích luỹ được giải mã hoàn toàn trong mã lệnh
Chỉ dẫn đầ đủ ề thanh ghi tích l ỹ
•
Chỉ
dẫn
đầ
y
đủ
v
ề
thanh
ghi
tích
l
u
ỹ
–Lệnh: Push ACC
–Mã lệnh C0 E0
Tập thanh ghi-Thanh ghi B
•Thường được sử dụng như là thanh ghi
tạmthờigiống như thanh ghi thứ 9
tạm
thời
,
giống
như
thanh
ghi
thứ
9
• Được sử dụng bởi 2 mã lệnh
mul AB div AB
–
mul
AB
,
div
AB
• Thanh ghi giữ toán hạng thứ 2 và sẽ giữ
mộtphầncủakếtquả
một
phần
của
kết
quả
– 8 bit cao của kết quả phép tính nhân
–
Số dư trong phép tính chia
–
Số
dư
trong
phép
tính
chia
Các thanh ghi - PC
• PC là bộ đếm chương trình
•
Được xem như con trỏ lệnh trong các bộ VXL
Được
xem
như
con
trỏ
lệnh
trong
các
bộ
VXL
khác
• PC luôn trỏ tới lệnh kế tiếp của chương trình
Skhi ộtlệ h(1h ặ hiề bt)PC
•
S
au
khi
nạp m
ột
lệ
n
h
(1
h
o
ặ
c n
hiề
u
b
y
t
e
)
,
PC
được tự động tăng để trỏ tới lệnh kế tiếp
•
Không thể thao tác trựctiếptới PC (ngoạitrừ
Không
thể
thao
tác
trực
tiếp
tới
PC
(ngoại
trừ
câu lệnh JMP)
• Không thể đọc trực tiếp nội dung của PC (trừ
mộtsố thủ thuật)
một
số
thủ
thuật)
Tập thanh ghi – R0 tới R7
•Một bộ 8 thanh ghi R0, R1, … R7, mỗi thanh ghi
8bit
8
bit
•Phần lớn được sử dụng như các thanh ghi tạm
•Có sẵn tron
g
4 băn
g
(
bank
)
(
Th
ự
c tế như là các
g g( )( ự
thanh ghi 4x8)
•Băng được lựa chọn bằng cách thiết lập các bit
RS1 RS0 t th h hi từ t thái h
RS1
:
RS0
t
rong
th
an
h
g
hi
từ
t
rạng
thái
c
h
ương
trình PSW.
•
Băng mặc định (lúc bật nguồn) là bank 0
•
Băng
mặc
định
(lúc
bật
nguồn)
là
bank
0
Các thanh ghi - PSW
•Từ trạng thái chương trình là thanh ghi 8 bit có thể địa
chỉ hoá theo bit, thanh ghi này có các cờ:
•CY-cờ nhớ
–Thiết lập khi có nhớ ở trong phép tính số học
•
AC
-
Cờ nhớ phụ
AC
-
Cờ
nhớ
phụ
– Có nhớ từ D3 sang D4. Sử dụng cho các phép toán với số BCD
•P -Cờ chẵn lẻ
P1Nế Aótổ á ố 1là ố lẻ
–
P
=
1
Nế
u
A
c
ó
tổ
ng c
á
c s
ố
1
là
s
ố
lẻ
–P=0 Nếu A có tổng các số 1 là số chẵn
•OV -cờ tràn
–Thiết lập nếu bất cứ một phép tính số học nào gây tràn
Thanh ghi từ trạng thái chương
ìh
PSW
tr
ì
n
h
-
PSW
Minh hoạ về các cờ
•Ví dụ về phép cộng
Các thanh ghi - DPTR
• Thanh ghi 16 bit, được gọi là con trỏ dữ liệu
Đượcsử dụng bởicáclệnh truy cậpbộ nhớ
•
Được
sử
dụng
bởi
các
lệnh
truy
cập
bộ
nhớ
ngoài
•
Cũng đượcsử dụng để lưu các giá trị 16 bit
•
Cũng
được
sử
dụng
để
lưu
các
giá
trị
16
bit
mov DPTR, #data16; Đặt DPTR với địa chỉ ngoài 16 bit
movx A @DPTR ;
[DPTR] tớiA
movx
A
,
@DPTR
;
copy mem
[DPTR]
tới
A
•DPTR được sử dụng cho các thao tác với chuỗi,
LUT (look up table)
LUT
(look
up
table)
Các thanh ghi - SP
• SP là con trỏ ngăn xếp
• SP trỏ tới vị trí cuối cùng đã sử dụng của ngăn xếp
–
Thao tác nạp trước tiên sẽ tăng SP và sau đó copy dữ liệu
– Thao tác lấy trước tiên sẽ copy dữ liệu sau đó giảm SP
• Ở 8051, ngăn xếp được phát triển theo chiều tăng (từ
ùhớ thấ tớiù hớ )àóthể hỉ là RAM
v
ù
ng n
hớ
thấ
p
tới
v
ù
ng n
hớ
cao
)
v
à
c
ó
thể
c
hỉ
là
RAM
trong
•Khi bật nguồn, SP có vị trí 07H
ế
•Các băng thanh ghi 2,3,4 (08H tới 1FH) là vùng ngăn x
ế
p
mặc định
•Ngăn xếp có thể định vị trí lại bằng cách đặt SP tới vùng
bộ hớ từ 30H tới7Fh
bộ
n
hớ
cao
từ
30H
tới
7Fh
– Mov SP, #32H
Các thanh ghi - SFR
• Điềukhiểnhoạt
động củacácthiết
bị
i
i
tê
bị
ngoạ
i
v
i
t
r
ê
n
board
• Các thanh ghi chức
ở
năng đặcbịêt
ở
địa
chỉ trựctiếptừ 80H
tới FFH
•Cácbảnsaocủa
8051 có thể có các
SFR bổ sun
g
g
Bản đồ bộ nhớ của 8051
• ROM bên trong phụ thuộc
vào nhà cung cấp
vào
nhà
cung
cấp
•Khi bật nguồn PC bắt đầu
từ địa chỉ 0000H trong
khô i ROM
khô
ng g
i
an
ROM
Tập lệnh của 8051
• Chuyển dữ liệu
– Chuyển/copy dữ liệu tà vị trí này tới vị trí khác
–
mov movc movx push pop
–
mov
,
movc
,
movx
,
push
,
pop
…
•Lệnh lôgic
–Thực hiện các phép tính lôgic trên dữ liệu
– anl, orl, xrl, clr, cpl, rl, rlc, rr, rrc, swap
•Lệnh số học
–Thực hiện các phép tính số học trên dữ liệu
– add, addc, subb, inc, dec, mul, div
•
Điềukhiểnchương trình
•
Điều
khiển
chương
trình
– Điều khiển luồng chương trình
– jmp, ajmp, ljmp, sjmp, jc, jnc, jb, jnb, jbc, jz, jnz, acall, lcall,
–
c
j
ne, d
j
nz, ret, reti
jj
•NOP
Giới thiệu hợp ngữ của 8051
•Cấu trúc lệnh hợp ngữ
[Nhãn:] Mã lệnh [toán hạng] [;giải thích]
•Ví dụ
start: mov A, #D0H; mã bắt đầu từ đây
•Chỉ dẫn h
ợp
n
g
ữ
ợpg
– ORG xxxxH : origin, bắt đầu hợp dich từ địa chỉ xxxxH
–EQU : địng nghĩa hằng số
• Count EQU 25
ỉ ẫ
–
DB : ch
ỉ
d
ẫ
n định nghĩa dữ liệu 8 bit
• DATA1: DB 28
• DATA2: DB “hello word”
–
END
: báo cho trình hợpdichbiếtkết thúc tệp nguồn
–
END
:
báo
cho
trình
hợp
dich
biết
kết
thúc
tệp
nguồn
Cơ sở về lập trình hợp ngữ
• Định dạng hợp ngữ của Intel
Thực hiện đích nguồn; giải thích
Giá t ị đ đặtt ớ bởidấ #
•
Giá
t
r
ị
đ
ược
đặt
t
rư
ớ
c
bởi
dấ
u
#
– #55, #32 … (không có # được coi như nạp giá trị lưu tại ô
nhớ)
Giá t ị Hth bởihữ H
•
Giá
t
r
ị
H
ex
th
eo sau
bởi
c
hữ
H
– #55H, #32H…
•Nếu số bắt đầu của số Hex là chữ (A-F) thì phải có số 0 đặt
trướcnó
trước
nó
– #0FFH, #0C1H, #0D2H…
• Không hoạt động: NOP!
Các bước xây dựng chương
trình hợpngữ
trình
hợp
ngữ
Tr×nh
so¹n th¶o
myfile.asm
myfile lst
file obj kh c
Tr×nh
hîp dÞch
myfile
.
lst
myfile.obj
file
obj
kh
¸
c
Tr×nh
liªn kÕt
myfile.abs
Tr×nh
chuyÓn ®æi OH
myfile.hexa
Ví dụ về chương trình hợp ngữ
•
Đích
là
hệ
phát
triển
Chương trình làm đày 4 thanh ghi
Đích
là
hệ
phát
triển
8051
–Thiếtbị 8051 chuẩn
–
2K R
O
M
o
n-
c
hi
p
để
Chương
trình
làm
đày
4
thanh
ghi
trong băng thanh ghi với một vài số
và tìm tổng của chúng
O
o
cp
để
chạychương trình
giám sát
– 32K RAM bên ngoài ở
địa
chỉ
0
x
0000
tới
địa
chỉ
0
x
0000
tới
0x7FFF
– RAM này chứacả mã
lệnh và dữ liệu
Vị
tí
đầ
tiê
0
30
–
Vị
t
r
í
đầ
u
tiê
n
0
x
30
của RAM ngoài để bỏ
qua bảng vectơ ngắt
(IVT-Interrupt Vector
Tbl)
T
a
bl
e
)
Ví dụ Demo21 A52
;
; Chuong trinh copy 5 byte du lieu tu d/c 31h sang d/c 60h |
;
Ví
dụ
Demo21
.
A52
org 0h ;chuong trinh bat dau tu o 0h
sjmp start
org 30H
start: mov A, #1 ; nap gia tri dau tien vao 31h
R4 #5
mov
R4
,
#5
mov R0, #31H ; nap con tro
L1: mov @R0, A ; chuyen 1, 2 ,3 , 4, 5 vao 5 o nho 31, 32, 33, 34, 35
inc A
INC R0
djnz R4 L1
djnz
R4
,
L1
mov R1,#60h ;con tro dich (destination)
mov R2,#5 ;so byte can chuyen (so vong lap)
mov R0,#31h ;con tro nguon (source)
LOOP: nop
mov A,#00 ;xoa thanh chua ACC
mov A,@R0 ;chuyen 1 byte tro boi R0 vao A
mov @R1,A ;chuyen tu A vao dich
inc R0 ;tang co tro nguon
inc R1 ;tang con tro dich
djnz R2,LOOP ;kiem tra so vong lap
sjmp $
sjmp
$
nop
END