Tải bản đầy đủ (.pdf) (55 trang)

Tài Liệu Hướng Dẫn Vi Điều Khiển

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (640.53 KB, 55 trang )

CHƯƠNG II: TẬP LỆNH 8951
I. NHÓM LỆNH DI CHUYỂN DỮ LiỆU:
1. Lệnh di chuyển dữ liệu trực tiếp:
- Cú pháp: MOV <ĐÍCH>, <NGUỒN>
Trong đó:
. <ĐÍCH>: có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM nội
Ồ ể
. <
N
GU

N>: có th

là thanh ghi, địa chỉ ô nhớ trong vùng RAM
nội hoặc #<giá trị>
-
Thựchiện: di chuyểnnội dung
<
NGUỒN
>
vào
<
ĐÍCH
>
Thực

hiện:

di

chuyển



nội

dung

NGUỒN

vào

ĐÍCH
-Ví dụ:
MOV A, 120
MOV B, #24
MOV 120,#10110010B
MOV R3, A
MOV P3,#3EH
20
2. Nhóm lệnh di chuyển dữ liệu gián tiếp:
a. Liên quan đến vùng nhớ RAM nội
:
+ Lệnh đọc bộ nhớ:
- Cú pháp: MOV <ĐÍCH>, @Rp
T đó
T
rong
đó
:
. <ĐÍCH>: thanh ghi, ô nhớ
Rp: là thanh ghi R
0

hoặcR
1
.
Rp:



thanh

ghi

R
0

hoặc

R
1
-Thực hiện: lấy nội dung ô nhớ trong vùng RAM nội có địa chỉ là nội dung
thanh ghi Rp đặt vào <ĐÍCH>
-Ví dụ:
MOV 120,#47
MOV R1,#120
MOV A,@R1
; sau khi thực hiện xong đoạn lệnh nội dung thanh ghi A chứa giá trị 47
21
+ Lệnh ghi bộ nhớ:
- Cú pháp: MOV @Rp, <NGUỒN>
Trong đó:
. <NGUỒN>: thanh ghi, ô nhớ hoặc #<giá trị>

RlàhhhiR
0
h ặ R
1
.
R
p:

t
h
an
h
g
hi

R
0

h
o

c
R
1
-Thực hiện: đặt nội dung <NGUỒN> vào ô nhớ trong vùng RAM nội có địa
chỉ là nội dung thanh ghi Rp.
-Ví dụ 1:
MOV R0,#100
MOV @R0, #0E3H
; sau khi thực hiện xong đoạn lệnh nội dung ô nhớ 100 chứa giá trị E3H

-Ví dụ 2:
MOV A, #49
MOV
R
1,#127
MOV @R1, A ; (127) = 49
22
b. Liên quan đến vùng nhớ dữ liệu ngoài:
+ Lệnh đọc bộ nhớ:
- Cú pháp: MOVX A, @DPTR
-Thực hiện: lấy nội dung ô nhớ trong vùng dữ liệu ngoài có địa chỉ là nội
dung thanh ghi DPTR đặt vào thanh ghi A
dung

thanh

ghi

DPTR

đặt

vào

thanh

ghi

A
-Ví dụ:

MOV DPTR,#1000
MOVX A, @DPTR ; A Å (1000)
+ Lệnh đọc bộ nhớ:
- Cú pháp: MOVX @DPTR, A
-Thực hiện: lấy nội dung A đặt vào ô nhớ trong vùng dữ liệu ngoài có địa chỉ
là ộid th h hiDPTR

n
ội

d
ung
th
an
h
g
hi

DPTR
.
-Ví dụ:
MOV
DPTR #
1000
MOV
DPTR
,
#
1000
23

MOV A, #4EH
MOVX @DPTR, A ; ghi giá trị 4EH vào ô nhớ ngoài có địa chỉ 1000
c. Lệnh liên quan đến vùng nhớ chương trình (đọc mã lệnh):
- Cú pháp: MOVC A,@A+DPTR
Th hiệ lấ ộid ô hớ ùhớ h ìh óđị hỉ là ội
-
Th
ực
hiệ
n:
lấ
y n
ội

d
ung
ô
n
hớ
trong v
ù
ng n
hớ
c
h
ương tr
ì
n
h
c

ó

đị
a c
hỉ


n
ội

dung thanh ghi A + DPTR đặt vào thanh ghi A.
-Ví dụ 1:
MOV A,#2
MOV DPTR,#500
MOVC A,@A+DPTR ; A Å (502)
-Ví dụ 2:
MOV A, #4
MOV DPTR,#TABLE
MOVC A, @A+DPT
R
TABLE: DB 12H, 4EH, 0C7H, 084H, 055H,……
24
3. Nhóm lệnh liên quan đến ngăn xếp:
+ Ghi vào ngăn xếp:
- Cú pháp: PUSH Thanh ghi/ địa chỉ
-Thực hiện: cất nội dung thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp
Đ ă ế
+
Đ
ọc ng

ă
n x
ế
p:
- Cú pháp: POP Thanh ghi/ địa chỉ
Thựchiện: lấynội dung ở đỉnh ngănxếp gán vào thanh ghi ô nhớ
-
Thực

hiện:

lấy

nội

dung



đỉnh

ngăn

xếp

gán

vào

thanh


ghi
,
ô

nhớ
+ ví dụ: MOV A,#100
MOV
100
#
3
EH
MOV
100
,
#
3
EH
PUSH ACC
PUSH 100
MOV A, #21H
MOV 100, #40
POP 100
POP ACC
25
4. Lệnh trao đổi dữ liệu:
- Cú pháp: XCH A, <NGUỒN>
Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ hoặc @Rp
-Thực hiện: trao đổi nội dung thanh ghi A và <NGUỒN>
Ó Ệ Ố

II. NH
Ó
M L

NH S

HỌC
1. Lệnh cộng:
a. Cộng không nhớ:
- Cú pháp: ADD A, <NGUỒN>
T đó <NGUỒN> ó thể là th h hi ô hớ #< iá t ị>h ặ @R
T
rong
đó
:
<NGUỒN>
c
ó

thể



th
an
h
g
hi
,
ô

n
hớ
,
#<
g


t
r
ị>

h
o

c
@R
p
-Thực hiện: A Å A + <NGUỒN>
b. Cộng có nhớ:
- Cú pháp: ADDC A, <NGUỒN>
T đó NGUỒNóthể là th h hi ô hớ #iátị h ặ @R
T
rong
đó
: <
NGUỒN
> c
ó

thể




th
an
h
g
hi
,
ô
n
hớ
,
#
<g


t
r

>
h
o

c
@R
p
-Thực hiện: A Å A + <NGUỒN> + C
26
2. Lệnh trừ:

- Cú pháp: SUBB A, <NGUỒN>
Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ, #<giá trị> hoặc @Rp
-Thực hiện: A Å A - <NGUỒN> - C (carry bit)
3. Lệnh nhân
:
Cú há
MUL
AB
-

p

p:
MUL
AB
-Thực hiện: A * B = BA (B: byte cao của kết quả; A: byte thấp của kết quả)
4. Lệnh chia:
- Cú pháp: DIV AB
-Thực hiện: A : B = A dư B (A: chứa phần nguyên; B: chứa phần dư)
5. L

nh tăn
g
m

t đơn v

:

g



- Cú pháp: INC <ĐÍCH>
Trong đó: <ĐÍCH> có thể là thanh ghi, ô nhớ
- Thực hiện: <ĐÍCH> = <ĐÍCH> + 1
27
6. Lệnh giảm một đơn vị:
- Cú pháp: DEC <ĐÍCH>
Trong đó: <ĐÍCH> có thể là thanh ghi, ô nhớ
- Thực hiện: <ĐÍCH> = <ĐÍCH> - 1
Ó


III. NH
Ó
M L

NH NH

Y:
1. Lệnh nhảy không điều kiện:

a
.
Nhả
y

g

n:

- Cú pháp: SJMP <NHÃN>
T đ
ó
<
NHÃ
N
>


tt

h

t

i
ế
tli

h
th b

d



T
rong
đ
ó

:
<
NHÃ
N
>


m

t

t

,
h
ay n

m
t

v
i
ế
t

li

n n
h
au,

th
eo sau
b

ng
d

u

:


dùng để đánh dấu vị trí chương trình.
- Thực hiện: nhày không điều kiện đến vị trí chương trình được chỉ định bởi
Ã
ế
Ã
<
N
H
Ã
N
>, khoảng cách từ lệnh đ
ế
n <
N
H
Ã
N
> không vư


t quá 128
b
yte mã
lệnh.
b
.
Nhả
y
xa:
y
- Cú pháp: LJMP <NHÃN>
28
- Thực hiện: nhảy đến vị trí được chỉ định bởi <NHÃN>, <NHÃN> có thể nằm ở
bất kì vị trí nào trong chương trình.
2
L

nh
nhả
y

đi

uki

n
:
2
.

L

nh

nhả
y



đi

u

ki

n
:
a. Lệnh so sánh và nhảy nếu không bằng (compare and jump if not equal)
-
Cú phá
p:



phá
p:
CJNE A, <TOÁN HẠNG >, <NHÃN>
Trong đó <TOÁN HẠNG> có thể là thanh ghi, ô nhớ hoặc #<giá trị>
- Thực hiện: So sánh A và <TOÁN HẠNG>, nếu:
+ A ≠ <TOÁN HẠNG>: nhảy đến <NHÃN> và nếu:

. A > <TOÁN HẠNG>: bit C = 0
. A < <TOÁN HẠNG>: bit C = 1
+ A = <TOÁN HẠNG>: thực hiện lệnh kế tiếp
- Một dạng khác của lệnh:
Á
Ã
CJNE Ri/@Rp, #<GI
Á
TRỊ>, <NH
Ã
N>
29
b. Lệnh giảm nội dung Ri một đơn vị và nhảy nếu bằng zero (decrement Ri by 1
and jump if not zero):
Cú phá
p:
DJNZ
Ri
<
NHÃ
N>
-


phá
p:
DJNZ
Ri
,
<

NHÃ
N>
- Thực hiện: Ri = Ri - 1, nếu:
+
Ri
>
0
:
nhả
y
đế
n
<
NHÃ
N
>
Ri

0
:

nhả
y

đế
n

NHÃ
N


+ Ri =0: thực hiện lệnh kế tiếp
c. Lệnh nhảy phụ thuộc vào trạng thái bit kiểm tra:
- Cú pháp: JB/ JNB BIT, <NHÃN>
Trong đó: BIT có thể là các bit của một thanh ghi hoặc các chân I/O của vi điều

khi

n
- Thực hiện: nhảy đến vị trí chương trình được chỉ định bởi <NHÃN> nếu BIT
b
ằn
g
1 ho

c bằn
g
0
g

g
d. Lệnh nhảy thông qua việc kiểm tra cờ CARRY:
- Cú pháp: JC/ JNC <NHÃN>
- Thực hiện: nhảy đến vị trí chương trình được chỉ định bởi <NHÃN> nếu C bằng
1 hoặc bằng 0
30
e. Lệnh nhảy thông qua việc kiểm tra cờ ZERO:
- Cú pháp: JZ/ JNZ <NHÃN>
- Thực hiện: nhảy đến vị trí chương trình được chỉ định bởi <NHÃN> nếu Z bằng
1 hoặc bằng 0
IV

NHÓ
ML

NH LOGIC:
IV
.
NHÓ
M

L

NH

LOGIC:
1. ANL A, <NGUỒN>
2
ORL
A
,
<
NGU

N>
2
.
ORL
A
,

<

NGU

N>
3. XRL A, <NGUỒN>
4. CL
R
A
;
xóa n

i dun
g
thanh
g
hi A
;

gg
5. CPL A ; đảo các BIT trong thanh ghi A
6. NOP ; lệnh không thực hiện, bỏ qua khi gặp lệnh này
7. SWAP A ; đảo vị trí 4 bit cao và 4 bit thấp trong thanh ghi A
8 Nhóm lệnh quay vòng
:
a. Quay phải thanh ghi A
- Cú pháp: RR A
31
- Thực hiện:
Bit 7 >- bit 0
b
.

L

nh quay
trá
ithanhghiA:
b
.

L

nh

quay

trá
i

thanh

ghi

A:
- Cú pháp: RL A
- Thực hiện:
Bit 7 < bit 0
c. Lệnh quay trái thanh ghi A với cờ C:
Cú há
RLC
A
-


p

p
:
RLC
A
- Thực hiện:
Bit
7
<
bit
0
C
Bit

7

bit

0
C
32
d. Lệnh quay phải thanh ghi A với cờ C:
- Cú pháp: RRC A
- Thực hiện:
Bit 7

>


bit 0
C
Bit

7

>
bit

0
C
V. NHÓM LỆNH THAO TÁC BIT:
1
CLR
BIT
;

aBIT=
0
1
.
CLR
BIT
;


a

BIT


=

0
2. SETB BIT ; đặt BIT = 1
3
CPL
BIT
;
đ

on

i dung hi

n
tạ
i
củ
aBIT
3
.
CPL
BIT
;

đ

o

n


i

dung

hi

n

tạ
i

củ
a

BIT
4. Lệnh di chuyển BIT
- MOV C
,
BIT
;
C Å BIT
,
;
- MOV BIT, C ; BIT Å C
33
VI. NHÓM LỆNH LIÊN QUAN ĐẾN CHƯƠNG TRÌNH CON:
1. CALL <TÊN CHƯƠNG TRÌNH CON> ; gọi chương trình con
2. RET ; kết thúc chương trình con
ế


3. RETI ; k
ế
t thúc chương trình ng

t
34
Chương III: CÁC THANH GHI CÓ CHỨC NĂNG ĐẶC BIỆT
(
SFR: S
p
ecial Function Re
g
isters
)
T
113
-
138

(
p
g)
I. CÁC THANH GHI ĐIỀU KHIỂN TIMER/COUNTER:
ªVi điều khiển 8951 có 2 timer/counter: TIMER/COUNTER0 và TIMER/COUNTER1
T
.

113
138

,

TLTK
ªCấu trúc của một bộ timer/counter:
8951
18
OSC
÷12
C/T = 0: T
C/T = 1: C
TFx
TH
8
bit
TL
8
bit
Thạch anh
T
C
0
:
SW h

TFx
tràn
TH
x:

8

bit
TL
x:

8
bit
19
Tx
&
00…0 00…0
(14/15)
SW
TRx
GATE
0
:
SW h

1: SW đóng
INTx
T
Fx
,
C
/
T
,
GATE
,
TRx: các bit

(12/13)
&
,
/
,
,
THx, TLx: 2 thanh ghi 8 bit, ghi/đọc được
Tx, INTx: chân 8951
35
1. Thanh ghi điều khiển timer: TCON
Là thanh ghi 8 bit, truy xuất (ghi/đọc) byte hoặc bit
T

tb t
MOV
TCON
#
iá t ị
-
T
ruy xu

t

b
y
t
e:
MOV


TCON
,
#
g


t
r

- Truy xuất bit: SETB/CLR <TÊN BIT>
3
6
2
4
1
7
0
5
IE1
3
TF0 IE0
6
TF1
2
IT0
4
TR1
1
TR0
7

0
IT1
5
TF
1
:
báo trạng thái tràn cho bộ Timer/Counter
1
TF
1
:
báo

trạng

thái

tràn

cho

bộ

Timer/Counter
1
TR1: điều khiển cấp xung cho bộ Timer/Counter1
TF0: báo trạng thái tràn cho bộ Timer/Counter0
TR0: điều khiển cấp xung cho bộ Timer/Counter0
IE1: báo trạng thái ngắt ngoài 1
IT

1
hhétáđộ ắtài
1
bằ h ố (d f lt IT
1
0
tá độ ắt
IT
1
: c
h
o p

p

c
độ
ng ng
ắt
ngo
ài

1

bằ
ng cạn
h
xu

ng

(d
e
f
au
lt

IT
1
=
0
,

c
độ
ng ng
ắt

bằng mức thấp)
IE0: báo trạng thái ngắt ngoài 0
IT0:cho phép tác động ngắt ngoài 0 bằng cạnh xuống (default IT1 = 0, tác động ngắt
bằng mức thấp)
36
2. Thanh ghi chế độ timer: TMOD

thanh ghi
8
bit
,
truy xu


t
(
ghi
/
đ

c) byte


thanh

ghi

8
bit
,

truy

xu

t

(
ghi
/
đ

c)


byte
MOV TMOD, #giá trị
36241705
ĐIỀU KHIỂN TIMER 0
GATEM1 M1GATE M0C/T M0
ĐIỀU KHIỂN TIMER 1
C/T
GATE, C/T: điều khiển trạng thái hoạt động cho Timer/Counter
M1, M0: chọn chế độ hoạt động cho Timer/Counter
M1 M0 Chế độ Mô tả
00 0
Timer/Counter 13 bit
0
1
1
Timer/Counter 16 bit
<
VÍ DỤ
>
0
1
1
Timer/Counter

16

bit
10 2 Timer/Counter 8 bit, auto reload
11 3
Timer/Counter 8 bit

<


DỤ
>
<VÍ DỤ>
37
HOẠ
T
ĐỘ
NG
CỦ
A

CCH
Ế ĐỘ
TIMER/COUNTER
HOẠ
T

ĐỘ
NG

CỦ
A


C

CH



ĐỘ

TIMER/COUNTER
ª Chế độ 0: 13 bit
TL 5 BIT
PULSE INPUT
TH 8 BIT
TF
TL
x :
5

BIT
TH
x :
8

BIT
TF
x
ª
Ch
ế
đ

1
:
16

bit
PULSE INPUT
ª

Ch
ế

đ


1
:

16

bit
T
Lx : 8 BIT
T
Hx : 8 BIT
T
Fx
38
HOẠ
T
ĐỘ
NG
CỦ
A


CCH
Ế ĐỘ
TIMER/COUNTER
HOẠ
T

ĐỘ
NG

CỦ
A


C

CH


ĐỘ

TIMER/COUNTER
ª Chế độ 2: 8 bit AUTORELOAD
PULSE INPUT
TFxTLx : 8 BIT
OVERFLOW
THx : 8 BIT
39
HOẠ
T
ĐỘ

NG
CỦ
A

CCH
Ế ĐỘ
TIMER/COUNTER
HOẠ
T

ĐỘ
NG

CỦ
A


C

CH


ĐỘ

TIMER/COUNTER
ª Chế độ 3: 8 bit
TL0 : 8 BIT
PULSE INPUT
TF0
TF1TH0 : 8 BIT

OSC:12
TR1
#
#
Trong chếđộnày, TH1 và TL1 không đượcsử dụng, thay vào đólàTH0
và TL0 hoạt động như 2bộ Timer/counter 8 bit. Tuy nhiên, xung cung cho
TH
0


b

đi

khi


i/
1
40

TH
0



t


b



đi

u
khi

nc

at
i
mer
/
counte
r
1
.
VÍ DỤ Ứ
NG
DỤ
NG CH
Ế ĐỘ
1
16
BITS


DỤ



NG

DỤ
NG

CH


ĐỘ

1
:
16

BITS

ª
Ch
ế
đ

1
:
16
bit
ª
Ch
ế

đ



1
:

16

bit
YÊU CẦU: Viết chương trình điều
khiển bóng đèn theo qui luật: 300mS

ng
300
mS
t

t
(
delay
s

dụ
ng
timer
0
8951

ng
,
300

mS

t

t

(
delay

s

dụ
ng
timer
0
,
mode 16 bit).
THỰC HIỆN:
BEGIN: CPL P1.0
CALL DL300mS
SJMP
BEGIN
P1.0
12Mhz
SJMP
BEGIN
DL300mS:
……….
RET
41

CHƯƠNG
TRÌ
NH CON DELAY
300
S
CHƯƠNG

TRÌ
NH

CON

DELAY

300
m
S
DL
300
mS:
#
C

u
trú
cl

pNl

n(N

<=
255
):
DL
300
mS:
PUSH 05
MOV TMOD,#01H
#
C

u

trú
c

l

p

N

l

n

(N

255
):

MOV Ri, #N
<Nhãn>:
MOV
R
5,#6
X1: MOV TH0,#HIGH(15536)
MOV TL0,#LOW(15536)
; LỆNH LẶP
DJNZ
Ri
<
Nhã
>
SETB TR0
CLR TF0
JNB
TF
0
,$
;
ch
ờ trà
n
DJNZ
Ri
,
<
Nhã
n
>

# Hoạt động của timer 0, mode 1:
JNB
TF
0
,$
;

ch


trà
n
DJNZ R5, X1
POP 05
15536 655350
&
1
TF0
RET
42
VÍ DỤ Ứ
NG
DỤ
NG CH
Ế ĐỘ
2
8
BITS AUTORELOAD



DỤ


NG

DỤ
NG

CH


ĐỘ

2
:
8

BITS

AUTORELOAD
ª
Ch
ế
đ

2
:
8
bit autoreload
8951

ª
Ch
ế

đ


2
:

8

bit

autoreload
YÊU CẦU: Viết chương trình xuất
chuỗi xung 500Hz ra loa (delay sử
dụ
ng
timer
1
mode
2
)
P2.5
dụ
ng
timer
1
,

mode
2
)
.
THỰC HIỆN:
BEGIN: CPL P2.5
12Mhz
CALL DL1mS
SJMP BEGIN
DL
1
S
DL
1
m
S
:
……….
RET
43
CHƯƠNG
TRÌ
NH CON DELAY
1
S
CHƯƠNG

TRÌ
NH


CON

DELAY

1
m
S
#
C

u
trú
cl

pNl

n(N
<=
255
):
DL
1
mS:
#
C

u

trú
c


l

p

N

l

n

(N

255
):
MOV Ri, #N
<Nhãn>:
DL
1
mS:
PUSH 07
MOV TMOD,#20H
; LỆNH LẶP
DJNZ
Ri
<
Nhã
>
MOV
R

7,#5
MOV TH1,#56
MOV TL1,#56
DJNZ
Ri
,
<
Nhã
n
>
# Hoạt động của timer 1, mode 2:
SETB TR1
X1: CLR TF1
JNB
TF
1
,$
;
ch
ờ trà
n
TL1 = 56 255
TH1 = 56
JNB
TF
1
,$
;

ch



trà
n
DJNZ R7, X1
POP 07
TF1
1
RET
44

×