Tải bản đầy đủ (.docx) (36 trang)

CHƯƠNG 3 GIỚI THIỆU về VI điều KHIỂN AT89C52

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 (278.4 KB, 36 trang )

CHƯƠNG III :
GIỚI THIỆU VI ĐIỀU KHIỂN AT89C52
I. VI ĐIỀU KHIỂN HỌ MCS-51
MCS-51TM là họ vi điều khiển do hãng INTEL sản xuất vào đầu những năm
80 và ngày nay đã trở thành một chuẩn trong công nghiệp. Bắt đầu từ IC tiêu
biểu là 8051 đã cho thấy khả năng thích hợp với những ứng dụng mang tính
điều khiển. Việc xử lí trên byte và các phép toán số học ở cấu trúc dữ liệu nhỏ
được thực hiện bằng nhiều chế độ truy xuất dữ liệu nhanh trên RAM nội. Tập
lệnh cung cấp một bản tiện dụng của những lệnh số học 8 bit gồm cả lệnh nhân
và lệnh chia. Nó cung cấp những hỗ trợ mở rộng on-chip dùng cho những biến 1
bit như là kiểu dữ liệu riêng cho phép quản lí và kiểm tra bit trực tiếp trong
điều khiển và những hệ thống logic đòi hỏi xử lí luận lí.
Sau đây là bảng so sánh các IC trong họ MCS-51TM :
TÊN LINH
KIỆN
8051
8031
8751
8951
8052
8032
8752
8952

BỘ NHỚ
CHƯƠNGù TRÌNH
ON CHIP
4 KB MROM
0 KB
4 KB EPROM
4 KB Flash ROM


8 KB MROM
0 KB
8 KB EPROM
8 KB Flash ROM

BỘ NHỚ DỮ LIỆU
ON CHIP

TIMER

128 Bytes
128 Bytes
128 Bytes
128 bytes
256 Bytes
256 Bytes
256 Bytes
256 Bytes

2
2
2
2
3
3
3
3

II. VI ĐIỀU KHIỂN AT89C52
Do họ MCS-51TM đã trở thành chuẩn công nghiệp nên có rất nhiều hãng sản

xuất ra nó, điển hình là ATMEL Corporation. Hãng này đã kết hợp rất nhiều


tính năng dựa trên nền tảng kỹ thuật của mình để tạo ra các vi điều khiển tương
thích với MCS-51TM nhưng mạnh mẽ hơn.
AT89C52 là một vi điều khiển 8 bit do ATMEL sản xuất, chế tạo theo công
nghệ CMOS, có chất lượng cao, công suất thấp với 8 KB Flash (flash
programmable and erasable read only memory). Thiết bò này được chế tạo bằng
cách sử dụng kỹ thuật bộ nhớ không bốc hơi mật độ cao của ATMEL và tương
thích với chuẩn công nghiệp MCS-51 TM về tập lệnh và các chân ra. Flash onchip cho phép bộ nhớ lập trình được lập trình trong hệ thống bởi một lập trình
viên bình thường. Bằng cách nối 1 CPU 8 bit với một Flash trên một chip đơn,
AT89C52 là một vi điều khiển mạnh (có công suất lớn), cung cấp một sự linh
động cao và giải pháp về giá cả đối với nhiều ứng dụng vi điều khiển.
Các đặc điểm chủ yếu của AT89C52 :
• Tương thích hoàn toàn với họ MCS-51TM của Intel.
• Bộ nhớ chương trình 8K Byte thuộc loại Flash Memory.
• Độ bền : 1000 lần ghi/xóa.
• Tần số hoạt động : 0 Hz đến 24 MHz.
• 3 chế độ khóa bộ nhớ.
• 256 x 8-Bit RAM nội.
• 32 đường I/O lập trình được (4 port).
• 3 timer/counter 16-bit.
• 8 nguồn ngắt.
• Chế độ hạ nguồn và chế độ lười tiêu tốn công suất thấp.


INT1
INT0
Timer 2
Timer 1

Timer 0
Port nối tiếp
Điều khiển
ngắt

Các thanh
ghi khác

128
byte RAM

T2 EXTERNAL
T1

MRO nội

T0

CPU

Oscillator

Điều khiển bus

Các port I/O

Port nối tiếp

EA
RST


P0 P2

PSEN
ALE

P1 P3

TxD

RxD


II.1 Sơ lược về các chân của 8952:
µC 8952 có tất cả 40 chân có chức năng như các đường xuất nhập. Trong đó
có 26 chân có công dụng kép, mỗi đường có thể hoạt động như đường xuất nhập
hoặc như đường điều khiển hoặc là thành phần của bus dữ liệu và bus đòa chỉ.
U 12
3
3
3
3
3
3
3
3

9
8
7

6
5
4
3
2
1
2
3
4
5
6
7
8

19
18
9
31

P
P
P
P
P
P
P
P

0
0

0
0
0
0
0
0

.0
.1
.2
.3
.4
.5
.6
.7

/A
/A
/A
/A
/A
/A
/A
/A

D
D
D
D
D

D
D
D

P
P
P
P
P
P
P
P

1
1
1
1
1
1
1
1

.0 /T 2
.1 /T 2 -E X
.2
.3
.4
.5
.6
.7


XTA L1
XTA L2
R ST

0
1
2
3
4
5
6
7

P
P
P2
P2
P2
P2
P2
P2

2 .0 /A
2 .1 /A
.2 /A 1
.3 /A 1
.4 /A 1
.5 /A 1
.6 /A 1

.7 /A 1

8
9
0
1
2
3
4
5

P 3 .0 /R XD
P 3 .1 /T XD
P 3 .2 /IN T O
P 3 .3 /IN T 1
P 3 .4 /T O
P 3 .5 /T 1
P 3 .6 /W R
P 3 .7 /R D
PSEN
A L E /P R O G

2
2
2
2
2
2
2
2


1
2
3
4
5
6
7
8

1
1
1
1
1
1
1
1

0
1
2
3
4
5
6
7

29
30


E A /V P P
AT89C 52

II.2 Hệ thống giao tiếp port:
a/ Port 0:
Port 0 là một port hai chức năng trên các chân 32 – 39. Trong các thiết kế
cỡ nhỏ (không dùng bộ nhớ mở rộng) nó có chức năng như các đường I/O.
Đối với các thiết kế lớn với bộ nhớ mở rộng, nó được hợp kênh giữa bus dữ
liệu và byte thấp
của bus đòa chỉ.
Châ Chức năng thay thế
b/ Port 1 : là một
port I/O 8-bit hai
n
chiều có pullup
nội. Đầu ra port 1
P1.0 T2 (đầu vào đếm cho
có thể lái 4 đầu
vào TTL. Khi viết
Timer/Counter 2)
P1.1 T2EX
(xung
kích
capture/reload
cho
Timer/Counter 2 và điều
khiển trực tiếp.



các mức 1 ra các chân port thì chúng được kéo lên do có điện trở nội và có thể
dùng làm đầu vào. Khi vai trò là cổng nhập, những chân của port 1 bò kéo
xuống thấp sẽ đổ dòng vì có nội trở kéo lên.
Hơn nữa, P1.0 và P1.1 có thể được dùng như là đầu vào bộ đếm
timer/counter 2 bên ngoài (P1.0/T2) và xung kích (P1.1/T2EX).
Port 1 cũng nhận những byte đòa chỉ thấp trong khi lập trình Flash và
trong khi kiểm tra Flash .

c/ Port 2:
Port 2 là một port công dụng kép trên các chân 21 – 28 được dùng như các
đường xuất nhập hoặc là byte cao của bus đòa chỉ đối với các thiết kế dùng bộ
nhớ mở rộng.
d/ Port 3:
Port 3 là một port công dụng kép trên các chân 10 – 17. Các chân của port
này có nhiều chức năng, các công dụng chuyển đổi có liên hệ với các đặc tính
đặc biệt của 8952 như ở bảng sau:
Bit

Tên

Chức năng chuyển đổi

P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7


RXD
TXD
INT0\
INT1\
T0
T1
WR\
RD\

Dữ liệu nhận cho port nối tiếp
Dữ liệu phát cho port nối tiếp
Ngắt 0 bên ngoài
Ngắt 1 bên ngoài
Ngõ vào của Timer/counter 0
Ngõ vào của Timer/counter 1
Xung ghi bộ nhớ dữ liệu ngoài
Xung đọc bộ nhớ dữ liệu ngoài

II.3/ Các tín hiệu điều khiển:
µC 8952 có 4 tín hiệu điều khiển:


a/ PSEN\ (Program Store Enable):
PSEN\ là tín hiệu ra trên chân 29. Nó là tín hiệu điều khiển cho phép bộ
nhớ chương trình mở rộng, PSEN\ thường được nối đến chân OE (Output
Enable) của một EPROM để cho phép đọc các byte mã lệnh.
PSEN\ sẽ ở mức thấp trong thời gian lấy lệnh. Các mã nhò phân của
chương trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi
lệnh của 8952 để giải mã lệnh. Nếu thi hành chương trình trong ROM nội

(8952) thì PSEN\ sẽ ở mức thụ động (mức cao).
b/ ALE (Address Latch Enable):
Tín hiệu ra ALE trên chân 30 tương hợp với các thiết bò làm việc với các vi
xử lí 8085, 8088, 8086.
µC 8952 dùng ALE một cách tương tự cho việc giải kênh các bus đòa chỉ và
dữ liệu.
Khi port 0 được dùng trong chế độ chuyển đổi: vừa là bus dữ liệu vừa là
byte thấp của bus đòa chỉ, ALE là tín hiệu để chốt byte thấp đòa chỉ vào một
thanh ghi bên ngoài trong nửa đầu chu kì bộ nhớ. Sau đó, các đường port 0
dùng để xuất nhập dữ liệu trong nửa sau của chu kì bộ nhớ.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và
có thể được dùng làm nguồn xung nhòp cho các phần khác của hệ thống. Nếu
xung nhòp trên 8952 là 12 Mhz thì ALE có tần số 2 Mhz. Chỉ ngoại trừ khi thi
hành lệnh MOVX, một xung ALE sẽ bò mất. Trong trường hợp là 8051 thì
chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong chip.
c/ EA\ (External Access):
Tín hiệu vào EA\ trên chân 31 thường được mắc lên mức cao (+5v) hoặc
mức thấp (GND). Nếu ở mức cao, 8952 thi hành chương trình từ ROM nội
trong khoảng đòa chỉ thấp (4K). Nếu ở mức thấp, chương trình chỉ được thi
hành từ bộ nhớ mở rộng.
Khi dùng 8031, EA\ luôn được nối mức thấp vì 8031 không có bộ nhớ
chương trình trên chip. Nếu EA\ được nối mức thấp thì bộ nhớ chương trình
bên trong 8952 sẽ bò cấm và chương trình chỉ được thi hành từ EPROM mở
rộng.


Người ta còn dùng EA\ làm chân cấp điện áp 21V khi lập trình cho
EEPROM trong 8051.
d/ RST (Reset):
Ngõ vào RST trên chân 9 là ngõ reset của 8952. Khi tín hiệu này được đưa

lên mức cao (trong ít nhất 2 chu kì máy), các thanh ghi bên trong 8952 được
tải những giá trò thích hợp để khởi động hệ thống.
e/ Các ngõ vào bộ dao động trên chip:
Như đã thấy trong các hình trên, 8952 có một bộ dao động trên chip. Nó
thường được nối với một thạch anh giữa hai chân 18 và 19. Các tụ giữ cũng
cần thiết như đã vẽ. Tần số thạch anh thông thường là 12 Mhz.
f/ Các chân nguồn:
8952 hoạt động với nguồn đơn +5V. Vcc được nối vào chân 40 và Vss
(GND) được nối vào chân 20.

II.4/ Tổ chức bộ nhớ:
II.4.1/ Khảo sát tổ chức bộ nhớ 8952:
µC 8952 có bộ nhớ được tổ chức theo cấu trúc Harvard : có những vùng bộ
nhớ riêng biệt cho chương trình và dữ liệu.
Như đã nói ở trên, cả chương trình và dữ liệu có thể ở bên trong (8952); dù
vậy chúng có thể được mở rộng bằng các thành phần ngoài lên đến tối đa 64
Kbytes bộ nhớ chương trình và 64 Kbytes bộ nhớ dữ liệu.
Bộ nhớ bên trong bao gồm ROM (8952) và RAM trên chip bao gồm
nhiều thành phần: Phần lưu trữ đa dụng, phần lưu trữ đòa chỉ hóa từng bit,
các bank thanh ghi và các thanh ghi chức năng đặc biệt.


FFFF

FF

FFFF

Bộ nhớ
chương trình

được chọn
qua PSEN\

00

được chọn
qua WR\
và RD\
0000

000
0

Bộ nhớ trên chip

Bộ nhớ
dữ liệu

Bộ nhớ mở rộng

Tóm tắt các vùng bộ nhớ của 8952.
Hai đặc tính cần lưu ý là:
Các thanh ghi và các port xuất nhập đã được xếp trong bộ nhớ và có thể
được truy xuất trực tiếp giống như các đòa chỉ bộ nhớ khác.
 Ngăn xếp bên trong RAM nội nhỏ hơn so với RAM ngoài so với bộ xử lí
khác.


II.4.2 Chi tiết về bộ nhớ RAM trên chip:
Như sẽ thấy trong hình sau, RAM bên trong 8952 được phân chia thành các

bank thanh ghi (00H – 1FH), RAM đòa chỉ hóa bit (20H – 2FH), RAM đa
dụng (30H – 7FH) và các thanh ghi chức năng đặc biệt trong khoảng (80H –
FFH).
 RAM đa dụng:

Mặc dù trên hình cho thấy 80 bytes RAM đa dụng chiếm các đòa chỉ từ 30H
– 7FH, 32 bytes dưới cùng từ 00H – 1FH cũng có thể được dùng với mục đích
tương tự (mặc dù các đòa chỉ này đã có mục đích khác).

Đòa chỉ

Đòa chỉ


byte
Ñòa chæ bit
Ñòa chæ bit

byte
7F

F
F
F F F F F F F F F B
0 7 6 5 4 3 2 1 0
E E E E E E E E E ACC
0 7 6 5 4 3 2 1 0

RAM ña duïng


D D D D D D D _ D PSW
0 7 6 5 4 3 2
0
30
2F 7
F
2 7
E 7
2 6
D F
2 6
C 7
2 5
B F
2 5
A 7
29 4
F
28 4
7
27 3
F

B _ _ _ B B B B B IP
8
C B A 9 8
7
E
7
6

6
E
6
6
5
E
5
6
4
E
4
6
3
E

7
D
7
5
6
D
6
5
5
D
5
5
4
D
4

5
3
D

7
C
7
4
6
C
6
4
5
C
5
4
4
C
4
4
3
C

7
B
7
3
6
B
6

3
5
B
5
3
4
B
4
3
3
B

7
A
7
2
6
A
6
2
5
A
5
2
4
A
4
2
3
A


7
9
7
1
6
9
6
1
5
9
5
1
4
9
4
1
3
9

7
8
7
0
6
8
6
0
5
8

5
0
4
8
4
0
3
8

B B B B B B B B B P3
0 7 6 5 4 3 2 1 0

A A _ _ A A A A A IE
8 F
C B A 9 8

A A A A A A A A A P2
0 7 6 5 4 3 2 1 0

9 khoâng ñöôïc ñòa chæ hoùa SBU
9
bit
F
9 9 9 9 9 9 9 9 9 SCO
8 F E D C B A 9 8 N


26 3
7
25 2

F
24 2
7
23 1
F
22 1
7
21 0
F
20 0
7
1F

3
6
2
E
2
6
1
E
1
6
0
E
0
6

3 3 3 3
5 4 3 2

2 2 2 2
D C B A
2 2 2 2
5 4 3 2
1 1 1 1
D C B A
1 1 1 1
5 4 3 2
0 0 0 0
D C B A
0 0 0 0
5 4 3 2
BANK 3

3
1
2
9
2
1
1
9
1
1
0
9
0
1

3

0
2
8
2
0
1
8
1
0
0
8
0
0

18
17

BANK 2

10
0F

BANK 1

08
07

BANK 0
( Mặc đònh cho R0 – R7
)

00

BIỆT

RAM

9 9 9 9 9 9 9 9 9 P1
0 7 6 5 4 3 2 1 0

8 không được đòa chỉ hóa TH1
D
bit
8 không được đòa chỉ hóa TH0
C
bit
8 không được đòa chỉ hóa TL1
B
bit
8 không được đòa chỉ hóa TL0
A
bit
8 không được đòa chỉ hóa TM
9
bit
OD
8 8 8 8 8 8 8 8 8 TCO
8 F E D C B A 9 8 N
8 không được đòa chỉ hóa PCO
7
bit

N
8 không được đòa chỉ hóa
3
bit
8 không được đòa chỉ hóa
2
bit
8 không được đòa chỉ hóa
1
bit
8 8 8 8 8 8 8 8 8
0 7 6 5 4 3 2 1 0

DPH
DPL
SP
P0

CÁC THANH GHI CHỨC NĂNG ĐẶC


Tóm tắt bộ nhớ dữ liệu trên chip
Mọi đòa chỉ trong vùng RAM đa dụng đều có thể được truy xuất tự do dùng
cách đánh đòa chỉ trực tiếp hoặc gián tiếp. Ví dụ, để đọc nội dung ở đòa chỉ
5FH của RAM nội vào thanh ghi tích lũy, lệnh sau sẽ được dùng:
MOV A, 5FH
Lệnh này di chuyển 1 byte dữ liệu dùng cách đánh đòa chỉ trực tiếp để xác
đònh “đòa chỉ nguồn” (5FH). Đích nhận dữ liệu được ngầm xác đònh trong mã
lệnh là thanh ghi tích lũy A.
RAM bên trong cũng có thể được truy xuất dùng cách đánh đòa chỉ gián tiếp

qua R0 hay R1. Ví dụ, hai lệnh sau thi hành cùng nhiệm vụ như lệnh đơn ở
trên:
MOV R0, #5FH
MOV

A, @R0

Lệnh đầu dùng đòa chỉ tức thời để di chuyển giá trò 5FH vào thanh ghi R0,
và lệnh thứ hai dùng đòa chỉ gián tiếp để di chuyển dữ liệu “được trỏ bởi R0”
vào thanh ghi tích lũy.
 RAM đòa chỉ hóa từng bit:

µ C 8952 chứa 210 bits được đòa chỉ hóa, trong đó 128 bits là ở các
đòa chỉ byte 20H đến 2FH, và phần còn lại là trong các thanh ghi
chức năng đặc biệt.
Ý tưởng truy xuất từng bit riêng rẽ bằng phần mềm là một đặc tính tiện lợi
của vi điều khiển nói chung. Các bit có thể được đặt, xóa, AND, OR, … với
một lệnh đơn. Trong khi đó, đa số các vi xử lí đòi hỏi một chuỗi lệnh đọc –
sửa – ghi để đạt được hiệu quả tương tự. Hơn nữa, các port I/O cũng được đòa
chỉ hóa từng bit làm đơn giản phần mềm xuất nhập từng bit.
Có 128 bits được đòa chỉ hóa đa dụng ở các byte 20H đến 2FH. Các đòa chỉ
này được truy xuất như các byte hoặc như các bit phụ thuộc vào lệnh được
dùng. Ví dụ, để đặt bit 67H, ta dùng lệnh sau:
SET 67H


Chú ý rằng “đòa chỉ bit 67H” là bit có trọng số lớn nhất (MSB) ở “đòa chỉ
byte 2CH”. Lệnh trên sẽ không tác động đến các bit khác ở đòa chỉ này. Các
vi xử lí sẽ phải thi hành nhiệm vụ tương tự như sau:
MOV A, 2CH


; đọc cả byte

ORL A, #10000000B

; set MSB

MOV 2CH, A
; ghi lại cả byte
 Các bank thanh ghi:
32 bytes thấp nhất của bộ nhớ nội là dành cho các bank thanh ghi. Bộ lệnh
của 8952 hỗ trợ 8 thanh ghi (R0 – R7) và theo mặc đònh (sau khi reset hệ
thống) các thanh ghi này ở các đòa chỉ 00H – 07H. Lệnh sau đây sẽ đọc nội
dung ở đòa chỉ 05H vào thanh ghi tích lũy :
MOV A, R5
Đây là lệnh một byte dùng đòa chỉ thanh ghi. Tất nhiên, thao tác tương tự có
thể được thi hành bằng lệnh 2 bytes dùng đòa chỉ trực tiếp nằm trong byte thứ
hai:
MOV A, 05H
Các lệnh dùng các thanh ghi R0 đến R7 thì ngắn hơn và nhanh hơn các lệnh
tương ứng nhưng dùng đòa chỉ trực tiếp. Các giá trò dữ liệu được dùng thường
xuyên nên dùng một trong các thanh ghi này.
Bank thanh ghi tích cực có thể được chuyển đổi bằng cách thay đổi các
bit chọn bank thanh ghi trong từ trạng thái chương trình (PSW). Giả sử rằng
bank thanh ghi 3 được tích cực, lệnh sau sẽ ghi nội dung của thanh ghi tích
lũy vào đòa chỉ 18H:
MOV R0, A
Ý tưởng dùng “các bank thanh ghi” cho phép “chuyển hướng” chương trình
nhanh và hiệu quả (từng phần riêng rẽ của phần mềm sẽ có một bộ thanh ghi
riêng không phụ thuộc vào các phần khác).

II.5 Các thanh ghi chức năng đặc biệt:


Các thanh ghi nội của 8952 được truy xuất ngầm đònh bởi bộ lệnh. Ví dụ
lệnh “INC A” sẽ tăng nội dung của thanh ghi tích lũy A lên 1. Tác động này
được ngầm đònh trong mã lệnh.
Các thanh ghi trong 8952 được đònh dạng như một phần của RAM trên chip.
Vì vậy mỗi thanh ghi sẽ có một đòa chỉ (ngoại trừ thanh ghi đếm chương trình
và thanh ghi lệnh vì các thanh ghi này hiếm khi bò tác động trực tiếp, nên
không lợi lộc gì khi đặt chúng vào trong RAM trên chip). Đó là lí do để 8952
có nhiều thanh ghi như vậy. Cũng như R0 đến R7, có 21 thanh ghi chức năng
đặc biệt (SFR: Special Function Register) ở vùng trên của RAM nội, từ đòa
chỉ 80H đến FFH. Chú ý rằng hầu hết 128 đòa chỉ từ 80H đến FFH không
được đònh nghóa. Chỉ có 21 đòa chỉ SFR là được đònh nghóa.
Ngoại trừ thanh ghi tích lũy A có thể được truy xuất ngầm như đã nói, đa số
các SFR được truy xuất dùng đòa chỉ trực tiếp. Chú ý rằng một vài SFR có thể
được đòa chỉ hóa bit hoặc byte. Người thiết kế phải thận trọng khi truy xuất
bit và byte. Ví dụ lệnh sau:
SETB 0E0H
Lệnh này sẽ set bit 0 trong thanh ghi tích lũy, các bit khác không đổi. Ta
thấy rằng E0H đồng thời là đòa chỉ byte của cả thanh ghi tích lũy và là đòa chỉ
bit của bit có trọng số nhỏ nhất trong thanh ghi tích lũy. Vì lệnh SETB chỉ tác
động trên bit, nên chỉ có đòa chỉ bit là có hiệu quả.
a/ Từ trạng thái chương trình:
Từ trạng thái chương trình (PSW: Program Status Word) ở đòa chỉ D0H chứa
các bit trạng thái như bảng tóm tắt sau:
Bit
PSW.7
PSW.6
PSW.5

PSW.4

Kí hiệu
CY
AC
F0
RS1

Đòa chỉ
D7H
D6H
D5H
D4H

Ý nghóa
Cờ nhớ
Cờ nhớ phụ
Cờ 0
Bit 1 chọn bank thanh ghi




PSW.3

RS0

D3H

PSW.2

PSW.1
PSW.0

OV
_
P

D2H
D1H
D0H

Bit 0 chọn bank thanh ghi
00 = bank 0 ( đòa chỉ 00H – 07H )
01 = bank 1 ( đòa chỉ 08H – 0FH )
10 = bank 2 ( đòa chỉ 10H – 17H )
11 = bank 3 ( đòa chỉ 18H – 1FH )
Cờ tràn
Dự trữ
Cờ parity chẵn

Cờ nhớ:

Cờ nhớ (CY) có công dụng kép. Thông thường nó được dùng cho các lệnh
toán học: nó sẽ được set nếu có một số nhớ sinh ra bởi phép cộng hoặc có
một số mượn bởi phép trừ. Ví dụ, nếu thanh ghi tích lũy chứa FFH, thì lệnh
sau:
ADD A, #1
sẽ trả về thanh ghi tích lũy kết quả 00H và set cờ nhớ trong PSWK.
Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh luận lí
thi hành trên bit. Ví dụ, lệnh sau sẽ AND bit 25H với cờ nhớ và đặt

kết quả trở vào cờ nhớ:
AND C, 25H


Cờ nhớ phụ:

Khi cộng các số BCD, cờ nhớ phụ (AC) được set nếu kết quả của 4 bit thấp
trong khoảng 0AH đến 0FH. Nếu các giá trò được cộng là số BCD thì sau
lệnh cộng cần có DA A (hiệu chỉnh thập phân thanh ghi tích lũy) để điều
chỉnh kết quả cho phù hợp.


Cờ 0:

Cờ 0 (F0) là 1 bit cờ đa dụng dành cho các ứng dụng của người dùng.
• Các bit chọn bank thanh ghi :

Các bit chọn bank thanh ghi (RS0 và RS1) xác đònh bank thanh ghi nào được
tích cực. Chúng được xóa sau khi reset hệ thống và được thay đổi bằng phần


mềm nếu cần. Ví dụ, 3 lệnh sau cho phép bank thanh ghi 3 và di chuyển nội
dung của thanh ghi R7 (đòa chỉ byte 1FH) đến thanh ghi tích lũy:
SETB RS1
SETB RS0
MOV A, R7
Khi chương trình được hợp dòch, các đòa chỉ bit đúng được thay thế cho các
kí hiệu “RS1” và “RS0”.
Vậy, lệnh SETB RS1 sẽ giống như lệnh SETB 0D4H.
• Cờ tràn:


Cờ tràn (OV) được set sau một lệnh cộng hoặc trừ nếu có phép toán
bò tràn. Khi các số có dấu được cộng hoặc trừ với nhau, phần mềm
có thể kiểm tra bit này để xác đònh xem kết quả có nằm trong tầm
xác đònh không. Khi các số không dấu được cộng, bit OV có thể
được bỏ qua. Các kết quả lớn hơn +127 hoặc nhỏ hơn –128 sẽ set
bit OV.
Ví dụ, phép cộng sau bò tràn và bit OV được set :
Hex

0F
+

Thập phân

15
+

7F

127

8E
142
Kết quả là một số có dấu 8EH được xem như –14, không phải là một kết
quả đúng (142), vì vậy bit OV được set.

b/ Thanh ghi B:
Thanh ghi B ở đòa chỉ F0H được dùng với thanh ghi tích lũy A cho các phép
toán nhân và chia.

Lệnh MUL AB sẽ nhân các giá trò không dấu 8 bit trong A và B rồi trả về
kết quả 16 bit trong A (byte thấp) và B (byte cao).


Lệnh DIV AB sẽ chia A cho B rồi trả về kết quả nguyên trong A và phần dư
trong B.
Thanh ghi B cũng có thể được xem như thanh ghi đệm đa dụng. Nó được đòa
chỉ hóa từng bit bằng các đòa chỉ bit F0H đến F7H.
c/ Con trỏ ngăn xếp:
Con trỏ ngăn xếp (SP) là một thanh ghi 8 bit ở đòa chỉ 81H. Nó chứa đòa chỉ
của byte dữ liệu hiện hành trên đỉnh của ngăn xếp. Các lệnh trên ngăn xếp
bao gồm các thao tác cất dữ liệu vào ngăn xếp và lấy dữ liệu ra khỏi ngăn
xếp. Lệnh cất dữ liệu vào ngăn xếp sẽ làm tăng SP trước khi cất dữ liệu, và
lệnh lấy dữ liệu ra khỏi ngăn xếp sẽ đọc dữ liệu và giảm SP.
Ngăn xếp của 8952 được giữ trong RAM nội và được giới hạn các đòa chỉ có
thể truy xuất bằng đòa chỉ gián tiếp. Chúng là 128 bytes đầu của 8952.
Để khởi động lại SP với ngăn xếp bắt đầu tại 60H, các lệnh sau đây được
dùng:
MOV SP, #5FH
Trên 8952 ngăn xếp bò giới hạn 32 bytes vì đòa chỉ cao nhất của RAM trên
chip là 7FH. Sở dó dùng giá trò 5FH vì SP sẽ tăng lên 60H trước khi cất byte dữ
liệu đầu tiên.
Người thiết kế có thể chọn không phải khởi động lại con trỏ ngăn xếp mà
để nó lấy giá trò mặc đònh khi reset hệ thống. Giá trò mặc đònh đó là 07H và
kết quả là ngăn đầu tiên để cất dữ liệu có đòa chỉ là 08H.
Nếu phần mềm ứng dụng không khởi động lại SP, thì bank thanh ghi 1 (có
thể cả 2 và 3) sẽ không dùng được vì vùng RAM này đã được dùng làm ngăn
xếp.
Ngăn xếp được truy xuất trực tiếp bằng lệnh PUSH và POP để lưu trữ tạm
thời và lấy lại dữ liệu, hoặc được truy xuất ngầm bằng các lệnh gọi chương

trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để cất và lấy lại
bộ đếm chương trình.

d/ Con trỏ dữ liệu:


Con trỏ dữ liệu (DPTR) để truy xuất bộ nhớ ngoài là một thanh ghi
16 bit ở đòa chỉ 82H (DPL: byte thấp) và 83H (DPH: byte cao).
Ba lệnh sau sẽ ghi 55H vào RAM ngoài ở đòa chỉ 1000H:
MOV

A, #55H

MOV

DPTR, #1000H

MOVX

@DPTR, A

Lệnh đầu tiên dùng đòa chỉ tức thời để tải dữ liệu 55H vào thanh ghi tích
lũy. Lệnh thứ hai cũng dùng đòa chỉ tức thời, lần này để tải dữ liệu 16 bits
1000H vào con trỏ dữ liệu. Lệnh thứ ba dùng đòa chỉ gián tiếp để di chuyển
dữ liệu trong A (55H) đến RAM ngoài ở đòa chỉ được chứa trong DPTR
(1000H).
e/ Các thanh ghi port xuất nhập:
Các port của 8952 bao gồm Port 0 ở đòa chỉ 80H, Port 1 ở đòa chỉ 90H, Port 2
ở đòa chỉ A0H và Port 3 ở đòa chỉ B0H.
Tất cả các port đều được đòa chỉ hóa từng bit. Điều đó cung cấp một khả

năng giao tiếp thuận lợi.
Ví dụ, nếu một motor được nối qua một cuộn dây có transistor lái đến bit 7
của Port 1, nó có thể được bật và tắt bằng một lệnh đơn:
SETB P1.7 ; bật motor
CLR

P1.7 ; tắt motor
Các lệnh trên dùng dấu chấm để xác đònh một bit trong một byte.
Trình hợp dòch sẽ thi hành sự chuyển đổi cần thiết, vì vậy hai lệnh
sau đây là như nhau:

CLR P1.7
CLR 97H
Trong một ví dụ khác, xem xét giao tiếp đến một thiết bò với một bit trạng
thái gọi là BUSY, được set khi thiết bò đang bận và được xóa khi thiết bò đã
sẵn sàng. Nếu BUSY được nối tới P1.5, vòng lặp sau sẽ được dùng để chờ
thiết bò trở lại trạng thái sẵn sàng:
WAIT :

JB P1.5, WAIT


Lệnh này có nghóa là “nếu bit P1.5 được set thì nhảy tới nhãn
WAIT”.
Nói cách khác “nhảy trở lại và kiểm tra lần nữa”.
f/ Các thanh ghi timer:
µC 8952 chứa ba bộ đònh thời/đếm 16 bits được dùng cho việc đònh thời
hoặc đếm sự kiện.
Timer 0 ở đòa chỉ 8AH (TL0: byte thấp) và 8CH (TH0 : byte cao).
Timer 1 ở đòa chỉ 8BH (TL1: byte thấp) và 8DH (TH1 : byte cao).

Việc vận hành timer được set bởi thanh ghi Timer Mode (TMOD) ở
đòa chỉ 89H và thanh ghi điều khiển timer (TCON) ở đòa chỉ 88H.
Chỉ có TCON được đòa chỉ từng bit.
Đặc biệt 8952 còn có timer 2 có các thanh ghi sau:
Các thanh ghi Timer 2 các bit điều khiển và trạng thái chứa trong thanh
ghi T2CON và T2MOD cho Timer 2. Cặp thanh ghi RCAP2H và RCAP2L là
những thanh ghi Capture/Reload trong chế độ capture 16 bit hay chế độ autoreload 16 bit.
Thanh ghi T2CON đòa chỉ 0C8H:
TF EXF RCL TCL EXEN
2
2
K
K
2
7

6


hiệu
TF2

EXF2

RCLK

5

4


3

TR
2

C/

2

1

CP / RL2

T2

0

Chức năng
Cờ tràn Timer 2, set khi Timer 2 tràn và phải được clear
bằng phần mềm. TF2 sẽ không set khi RCLK = 1 hoặc
TCLK = 1.
Cờ ngoài của Timer 2, set khi xảy ra capture hoặc reload do
T2EX xuống thấp và EXEN2 = 1. Nếu ngắt Timer 2 được
kích hoạt, EXF2 = 1 sẽ làm CPU trỏ đến ISR của Timer 2.
EXF2 phải được xóa bằng phần mềm. EXF2 không gây nên
ngắt trong chế độ đếm lên/xuống (DCEN = 1).
Kích hoạt xung clock bộ thu. Khi set, các xung tràn Timer 2


sẽ là xung clock cho bộ thu port nối tiếp trong mode 1 và 3.

RCLK = 0 thì bộ thu port nối tiếp sẽ dùng các xung tràn của
Timer 1.
TCLK Kích hoạt xung clock bộ phát. Khi set, các xung tràn Timer 2
sẽ là xung clock cho bộ phát port nối tiếp trong mode 1 và 3.
TCLK = 0 thì bộ phát port nối tiếp sẽ dùng các xung tràn của
Timer 1.
EXEN2 Kích hoạt bên ngoài. Khi set, cho phép capture hay reload
khi T2EX xuống thấp (nếu Timer 2 không sử dụng cho port
nối tiếp). EXEN2 = 0 làm cho Timer 2 bỏ qua các sự kiện
trên T2EX.
TR2
Khởi động/Dừng Timer 2. TR2 = 1 làm khởi động Timer 2.
C/T2
Bit lựa chọn timer hay counter. C/T2 = 0 : timer. C/T2 = 1 :
counter đếm sự kiện bên ngoài (kích cạnh xuống).
CP/RL Lựa chọn capture hay reload. CP/RL2 = 1: capture xảy ra khi
2
T2EX xuống thấp nếu EXEN2 = 1. CP/RL2 = 0 : reload xảy
ra khi Timer 2 tràn hoặc khi T2EX xuống thấp nếu EXEN2 =
1. Nếu TCLK hay RCLK = 1, bit này bò bỏ qua và timer bò
ép vào chế độ reload khi Timer 2 tràn.
g/ Các thanh ghi port nối tiếp:
µC8952 chứa một port nối tiếp trên chip dành cho việc trao đổi thông tin với
các thiết bò nối tiếp như máy tính, modem hoặc cho việc giao tiếp với các IC
khác có giao tiếp nối tiếp (các bộ chuyển đổi A/D, các thanh ghi dòch … ).
Một thanh ghi gọi là bộ đệm dữ liệu nối tiếp (SBUF) ở đòa chỉ 99H sẽ giữ cả
hai dữ liệu truyền và nhận.
Khi truyền dữ liệu thì ghi lên SBUF, khi nhận dữ liệu thì đọc SBUF.
Các mode vận hành khác nhau được lập trình qua thanh ghi điều
khiển port nối tiếp (SCON) (được đòa chỉ hóa từng bit) ở đòa chỉ

98H.
h/ Các thanh ghi ngắt:
µC 8952 có cấu trúc 5 nguồn ngắt (2 mức ưu tiên).


Các ngắt bò cấm sau khi reset hệ thống và sẽ được cho phép bằng việc ghi
thanh ghi cho phép ngắt (IE) ở đòa chỉ A8H.
Cả hai thanh ghi được đòa chỉ hóa từng bit.
i/ Thanh ghi điều khiển công suất:
Thanh ghi điều khiển công suất (PCON) ở đòa chỉ 87H chứa nhiều bit điều
khiển. Chúng được tóm tắt trong bảng sau:
Bi
t
7


hiệu
SMO
D

6
5
4
3
2
1

_
_
_

GF1
GF0
PD

0

IDL

Ý nghóa
Bit gấp đôi tốc độ baud, nếu được set thì tốc độ baud sẽ
tăng gấp đôi trong các
mode1, 2 và 3 của port nối tiếp.
Không đònh nghóa
Không đònh nghóa
Không đònh nghóa
Bit cờ đa dụng 1
Bit cờ đa dụng 0
Giảm công suất, được set để kích hoạt mode giảm công
suất, chỉ thoát khi
reset.
Mode chờ, set để kích hoạt mode chờ, chỉ thoát khi có
ngắt hoặc reset hệ thống.

II.6 Bộ nhớ ngoài:
µC 8952 có khả năng mở rộng bộ nhớ lên đến 64K bộ nhớ chương trình và
64K bộ nhớ dữ liệu ngoài. Do đó, có thể dùng thêm ROM và RAM bên
ngoài nếu cần.
Khi dùng bộ nhớ ngoài, Port 0 không còn là một port I/O thuần túy nữa. Nó
được hợp kênh giữa bus đòa chỉ (A0 – A7) và bus dữ liệu (D0 – D7) với tín
hiệu ALE để chốt byte thấp của đòa chỉ khi bắt đầu mỗi chu kì bộ nhớ. Port 2

thông thường được dùng cho byte cao của bus đòa chỉ.
Trong nửa đầu của mỗi chu kì bộ nhớ, byte thấp của đòa chỉ được cấp trong
Port 0 và được chốt bằng xung ALE. Một IC chốt 74HC373 (hoặc tương


đương) sẽ giữ byte đòa chỉ thấp trong phần còn lại của chu kì bộ nhớ. Trong
nửa sau của chu kì bộ nhớ Port 0 được dùng như bus dữ liệu và được đọc hoặc
ghi tùy theo lệnh.
a/ Truy xuất bộ nhớ chương trình ngoài:
Bộ nhớ chương trình ngoài là một IC ROM được cho phép bởi tín hiệu
PSEN\. Hình sau mô tả cách nối một EPROM vào 8952:
8952

EPROM

PORT 0

D0 - D7
74HC373

EA

D

ALE

G

PORT 2
PSEN


Q

A0 - A7

A8 - A15
OE

Giao tiếp giữa 8952 và EPROM.
Một chu kì máy của 8952 có 12 chu kì xung nhòp. Nếu bộ dao động trên
chip được lái bởi một thạch anh 12 Mhz thì một chu kì máy kéo dài 1 µs.
Trong một chu kì máy, sẽ có hai xung ALE và hai byte được đọc từ bộ
nhớ chương trình (nếu lệnh hiện hành là lệnh 2 bytes thì byte thứ hai sẽ
được loại bỏ). Giản đồ thời gian của một lần lấy lệnh được vẽ ở hình sau:


Giản đồ thời gian đọc bộ nhớ chương trình ngoài.
b/ Truy xuất bộ nhớ dữ liệu ngoài:
8952

RAM

PORT 0

D0 - D7
74HC373

EA

D


ALE

G

A0 - A7

A8 -A15

PORT 2
RD
WR
PSEN

Q

NC

OE
WR
CS

Giao tiếp giữa 8952 và RAM.
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi/đọc bằng
các tín hiệu WR\ và RD\ (các chân P3.6 và P3.7 thay đổi chức năng).


Chỉ có một cách truy xuất bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng
con trỏ dữ liệu (DPTR) 16 bits hoặc R0 và R1 xem như thanh ghi đòa chỉ.
Kết nối bus đòa chỉ và bus dữ liệu giữa RAM và 8952 cũng giống như

EPROM và do đó cũng có thể lên đến 64 Kbytes bộ nhớ RAM.
Ngoài ra, chân RD\ của 8952 được nối tới chân cho phép xuất (OE\) của
RAM và chân WR\ được nối tới chân ghi (WR\) của RAM.
Giản đồ thời gian cho lệnh đọc dữ liệu ngoài được vẽ trên hình sau đối

với lệnh MOVX A, @DPTR:
Giản đồ thời gian của lệnh MOVX.
Giản đồ thời gian cho lệnh ghi (MOVX @DPTR, A) cũng tương tự chỉ
khác đường WR\ sẽ thay vào đường RD\ và dữ liệu được xuất ra trên
chân Port 0 (RD\ vẫn giữ mức cao).
c/ Giải mã đòa chỉ:
Nếu có nhiều EPROM và/hoặc nhiều RAM được giao tiếp với 8952, thì
cần phải giải mã đòa chỉ.
Mạch giải mã cũng tương tự như các hệ vi xử lí khác. Ví dụ, nếu dùng
nhiều EPROM và RAM 8Kbytes thì bus đòa chỉ cần phải được giải mã để
xác đònh IC nhớ nào được chọïn.


Người ta thường dùng IC giải mã 74HC138 với các ngõ ra được nối tới
các ngõ vào chọn chip (CS) trên các IC nhớ. Hình sau vẽ một hệ thống với
nhiều EPROM 8K 2764 và RAM 8K 6264:

Giải mã đòa chỉ.
d/ Xếp chồng bộ nhớ chương trình và dữ liệu bên ngoài:
Vì bộ nhớ chương trình là ROM, nên nảy sinh một vấn đề bất tiện khi
phát triển phần mềm cho 8051/8031. Đối với 8952 đã cải tiến bằng cách
thay thế bằng EEPROM, hoặc dùng một cách để khắc phục nhược điểm
trên là xếp chồng các vùng nhớ chương trình và dữ liệu.



Một IC RAM có thể chứa cả chương trình và dữ liệu bằng cách nối
đường OE\ của RAM vào một mạch logic AND của PSEN\ và RD\.
Mạch trên hình sau cho phép một IC RAM được dùng làm bộ nhớ
chương trình và dữ liệu:
Vậy một chương trình có thể được tải vào RAM (bằng cách ghi nó như
bộ nhớ dữ liệu) và thi hành (bằng cách truy xuất nó như bộ nhớ chương
trình).
II.7 Lệnh Reset:
µC8952 được reset bằng cách giữ chân RST ở mức cao ít nhất trong hai
chu kì máy và trả nó về mức thấp.
Vcc
R 1
100

C

SW 1
1

2

10uf

RESET

R 2
8 .2 k

0
M A ÏC H R E S E T H E Ä T H O ÁN G


RST có thể được kích bằng tay dùng một nút bấm hoặc có thể được kích
khi cấp điện dùng một mạch R-C.

Trạng thái của tất cả các thanh ghi trong 8952 sau khi Reset hệ thống
được tóm tắt trong bảng sau:


×