Transcript 89c51

CẤU TRÚC VI XỬ LÝ VÀ
VI ĐIỀU KHIỂN
PHAN HẢI PHONG
Khoa Vật Lý – Trường ĐH Khoa Học Huế
[email protected]
Mở đầu
1971: tập đoàn Inter đã giới thiệu 8080.


Sau đó các tập đoàn như Motorola, MOS-Technology, Zilog cũng
giới thiệu các bộ vi xử lý tương tự: 6800, 6520, Z80...
1976: Inter giới thiệu bộ vi điều khiển 8748, chip đầu
tiên trong họ VĐK MCS-48.


8748 bao gồm: 1 CPU, 1Kb EPROM, 64 Byte RAM, 27 chân xuất
nhập và một bộ định thời 8 bit.
1980: Inter công bố 89C51, VĐK đầu tiên của họ MSC-51.


89C51 chứa trên 60000 transistor bao gồm 4Kb ROM, 128 byte
RAM, 32 đường IO, 1 port nối tiếp, 2 bộ định thời 16 bit.
4/13/2015

2

Chương I
4/13/2015

3

Sơ đồ khối một hệ vi xử lý
4/13/2015

4

Vi xử lý (μP)
Thực hiện các thao tác tính toán trên dữ liệu
Đưa ra tín hiệu điều khiển hoạt động cho toàn bộ hệ
thống
Gồm các mạch lô-gíc thực hiện liên tục việc nạp lệnh và
thực hiện lệnh
Hoạt động theo một chuỗi các lệnh máy có sẵn -> chương
trình




4/13/2015

5

Phân loại vi xử lý
Theo số bit có thể được xử lý đồng thời: 4 bit, 8 bit, 16
bit, 32 bit…
Theo tập lệnh:




tập lệnh phức hợp (CISC: Complex Instruction Set Computer)
tập lệnh thu gọn (RISC: Reduced Instruction Set Computer)
Theo kiến trúc:



kiến trúc Von Neumann: vùng nhớ dữ liệu và chương trình
không được phân chia độc lập (truy cập trên cùng một đường địa
chỉ)
kiến trúc Harvard: vùng nhớ cho chương trình và cho dữ liệu
được phân biệt rõ ràng
4/13/2015

6

Cấu trúc một vi xử lý
Luồng dữ liệu (Datapath): lưu giữ và xử lý (tính toán) dữ
liệu, tác động trực tiếp trên thông tin
Đơn vị điều khiển (Control Unit): đưa ra những tín hiệu
điều khiển để điều khiển hoạt động của Datapath
Hai thành phần này cùng được xây dựng từ các mạch dãy
và mạch lô-gíc tổ hợp


o
4/13/2015

7

Kiến trúc chung của vi xử lý
4/13/2015

8

Cấu trúc Datapath
Khối tính toán số học lô-gíc (ALU: Arithmetic Logic Unit):
xử lý thông tin (thực hiện các phép toán trên dữ liệu)
Khối nhớ: lưu trữ dữ liệu đầu vào, đầu ra, các biến tạm
thời, các tham số…
Đường bus dữ liệu: vận chuyển dữ liệu giữa các phần tử
nhớ và từ các phần tử nhớ đến khối tính toán



4/13/2015

9

Khối tính toán số học và logic
Gồm:






Bộ cộng
Bộ trừ
Bộ ghi dịch
Khối thực hiện phép toán lô-gíc
Bộ nhân chia
Các mạch tính toán là mạch lô-gíc tổ hợp (không chứa các
phần tử nhớ) => ở đường vào của các toán hạng và ở lối
ra cho kết quả/trạng thái luôn phải có thêm các mạch
chốt để lưu các giá trị này.

4/13/2015

10

Khối nhớ
Các thanh ghi (register) chung: lưu dữ liệu tạm thời
Các thanh ghi có chức năng đặc biệt:






thanh ghi lệnh (instruction register): lưu trữ mã lệnh của lệnh
(opcode)
thanh ghi bộ đếm chương trình (Program counter): cung cấp địa
chỉ hiện tại mà vi xử lý đang truy nhập tới bộ nhớ chương trình
thanh ghi con trỏ chứa địa chỉ dữ liệu (DPTR: Data Pointer)
địa chỉ vùng ngăn xếp (SP: Stack Pointer)
Các thanh ghi được đánh địa chỉ và được quản lý như
một vùng nhớ đặc biệt.

4/13/2015

11

Cấu trúc và hoạt động của đơn vị điều khiển
Được thực thi bằng một máy trạng thái (SM), kết hợp với
các mạch logic điều khiển.



Tín hiệu ra của SM: điều khiển Datapath
Tín hiệu vào của SM: các lệnh điều khiển
Lệnh được lưu trong bộ nhớ chương trình
Quá trình thực thi một lệnh:





Nạp lệnh
Giải mã lệnh
Thực hiện lệnh
4/13/2015

12

Quá trình nạp lệnh
Đơn vị điều khiển đưa nội dung của bộ đếm chương trình
lên bus địa chỉ của bộ nhớ chương trình và cho phép đọc
bộ nhớ này.
Dữ liệu được đọc ra từ bộ nhớ chương trình sẽ được đưa
lên bus lối vào của vi xử lý. Dữ liệu này chính là mã lệnh
(opcode).
Opcode được chốt vào thanh ghi lệnh của vi xử lý và bộ
đếm chương trình được tăng lên một đơn vị, trỏ tới byte
mã chương trình tiếp theo.



4/13/2015

13

Hoạt động bus cho chu kì tìm nạp lệnh
Bus địa chỉ
N
Bộ đếm chương
trình
Bus dữ liệu
Opcode
Thanh ghi lệnh
RAM
N+2
N+1
Clock
Read
4/13/2015

Opcode
N
N-1
14

Bộ nhớ bán dẫn
Các chương trình và dữ liệu được lưu giữ trong bộ nhớ.
Các bộ nhớ được truy xuất trực tiếp bởi CPU: ROM, RAM,
flash.
RAM:






Bộ nhớ có thể đọc/ghi
Mất nội dung khi mất nguồn nuôi.
Chương trình và dữ liệu của người dùng sẽ được nạp vào RAM để
thực thi.
ROM:



Bộ nhớ chỉ đọc
Không mất nội dung khi không có nguồn nuôi.
Flash: Bộ nhớ đọc/ghi, không mất dữ liệu khi mất nguồn
nuôi

4/13/2015

15

BUS: địa chỉ, dữ liệu và điều khiển
Bus: tập các dây dẫn mang những thông tin có cũng một
mục đích.
Việc truy cập đến một mạch quanh CPU sử dụng ba bus:
bus địa chỉ, bus dữ liệu, bus điều khiển.
Thao tác đọc/ghi:







CPU xác định vị trí của dữ liệu bằng cách đặt một địa chỉ lên bus
địa chỉ
Xuất tín hiệu điều khiển lên bus điều khiển để xác định thao tác
là đọc hay ghi
Lấy byte dữ liệu từ bộ nhớ ở địa chỉ xác định, đặt byte này lên
bus dữ liệu.
CPU đọc dữ liệu và đưa vào các thanh ghi nội hoặc CPU xuất dữ
liệu lên bus dữ liệu
4/13/2015

16

Cấu trúc chung của một VĐK
Bus địa chỉ
Bus dữ liệu
CPU
Bus điều khiển
Mạch giao tiếp
RAM
ROM
Thiết bị ngoại vi
4/13/2015

17

Chương II
4/13/2015

18

Tổng quát
Vi mạch đặc trưng của họ MSC-51 là chip 89C51.










4 KB bộ nhớ Flash
128 byte RAM
4 port xuất nhập 8 bit
2 bộ định thời 16 bit
Mạch giao tiếp nối tiếp UART
Không gian nhớ chương trình ngoài 64Kbyte
Không gian nhớ dữ liệu ngoài 64Kbyte
Bộ xử lý bit
210 vị trí nhớ được đánh địa chỉ, mỗi vị trí 1 bit
4/13/2015

19

Sơ đồ chân của VĐK 89C51
4/13/2015

20

Sơ đồ khối tổng quát của chip 89C51
External interrupts
Interrupt
Control
On-chip
ROM for
program
code
Timer/Counter
On-chip
RAM
Timer 1
Timer 0
Counter
Inputs
CPU
OSC
Bus
Control
4 I/O Ports
P0 P1 P2 P3
Serial
Port
TxD RxD
Address/Data
4/13/2015

21

Sơ đồ khối chi tiết của chip 89C51
4/13/2015

22

Các cổng vào ra của VĐK 89C51
Port 0 (các chân từ 32-39): làm nhiệm vụ xuất/nhập
hoặc làm bus địa chỉ và bus dữ liệu đa hợp (byte thấp của
bus địa chỉ).
Port 1 (các chân từ 1-8): làm nhiệm vụ xuất/nhập để giao
tiếp với thiết bị ngoài.
Port 2 (các chân từ 21-28): làm nhiệm vụ xuất/nhập
hoặc làm byte địa chỉ cao của bus địa chỉ 16-bit.
Port 3 (các chân từ 10 đến 17): Nếu không làm chức năng
xuất nhập thì mỗi chân của port 3 có những chức năng
riêng khác nhau




4/13/2015

23

Chức năng các chân của P3 và P1
Bit
Tên
Địa chỉ
bit
P3.0
RxD
B0h
Nhận dữ liệu của port nối tiếp
P3.1
TxD
B1h
Phát dữ liệu của port nối tiếp
P3.2
/INT0
B2h
Ngõ vào ngắt ngoài 0
P3.3
/INT1
B3h
Ngõ vào ngắt ngoài 1
P3.4
T0
B4h
Ngõ vào của bộ định thời/đếm 0
P3.5
T1
B5h
Ngõ vào của bộ định thời/đếm 1
P3.6
/WR
B6h
Điều khiển ghi bộ nhớ dữ liệu ngoài
P3.7
/RD
B7h
Điều khiển đọc bộ nhớ dữ liệu ngoài
P1.0
T2
90h
Ngõ vào của bộ định thời/đếm 2
P1.1
T2EX
91h
Nạp lại/thu nhận tín hiệu của bộ định thời
2
4/13/2015

Chức năng
24

Chân cho phép bộ nhớ chương trình PSEN
Cho phép truy xuất bộ nhớ chương trình ngoài.
Chân này thường được nối với chân cho phép xuất OE
của EPROM (hoặc ROM) để cho phép đọc các byte lệnh.
Có mức tích cực thấp.
Khi thực hiện chương trình ở RAM nội, chân này được
duy trì ở mức logic 1.




4/13/2015

25

Chân cho phép chốt địa chỉ ALE
Xuất tín hiệu cho phép chốt địa chỉ để giải đa hợp bus dữ
liệu và bus địa chỉ.
Khi port 0 được dùng làm bus địa chỉ/ dữ liệu đa hợp,
chân ALE xuất tín hiệu để chốt địa chỉ và một thanh ghi
ngoài trong suốt ½ chu kì đầu của chu kì bộ nhớ. Sau đó,
các chân của port 0 sẽ xuất nhập dữ liệu hợp lệ trong ½
chu kì tiếp theo.
ALE có f=1/6 fclock.



4/13/2015

26

Chân truy xuất ngoài EA
Nếu ở mức logic “1” thì VĐK thực thi chương trình trong
ROM nội.
Nếu ở mức logic “0” thì VĐK thực thi chương trình ở trên
bộ nhớ ngoài.


4/13/2015

27

Các chân khác
Chân Vcc (chân 40) nối với nguồn +5V
Chân GND (chân 20) nối với đất
Chân RESET (chân 9) dùng để thiết lập lại trạng thái ban
đầu cho hệ thống.




Khi được treo ở logic 1 trong thời gian tối thiểu 2 chu kì máy, các
thanh ghi bên trong 89C51 được nạp lại các giá trị thích hợp cho
việc khởi động lại hệ thống
Chân XTAL1 và XTAL2 (chân 18-19) nối với thạch anh
cung cấp dao động ngoại cho VĐK, hoặc là nhận dao động
từ nguồn xung clock TTL.

4/13/2015

28

Mạch dao động
89C51
Dao động
TTL
XTAL1
XTAL2
Ghép với mạch dao động
TTL ngoài
4/13/2015

89C51
XTAL1
XTAL2
Ghép với mạch dao động
thạch anh
29

Tổ chức bộ nhớ
Bộ nhớ nội của chip 89c51 bao gồm ROM và RAM
RAM trên chip bao gồm:






Vùng RAM đa chức năng
Vùng RAM định địa chỉ bit
Các dãy thanh ghi
Các thanh ghi chức năng đặc biệt
Hai đặc tính cần chú ý:



Các thanh ghi và các port xuất/nhập được định địa chỉ theo kiểu
ánh xạ bộ nhớ và được truy xuất như một vị trí trong bộ nhớ.
Vùng Stack thường trú trong RAM nội thay vì ở trong RAM ngoài
như đối với vi xử lí
4/13/2015

30

Sơ đồ địa chỉ RAM nội
7Fh
Vùng RAM đa mục đích
30h
2Fh
Vùng RAM định địa chỉ bit
20h
1Fh
18h
17h
10h
0Fh
08h
07h
00h
4/13/2015

Bank 3
Bank 2
Bank 1
R0 –R7
31

Vùng RAM đa mục đích
Gồm 80 byte từ địa chỉ 30h đến 7Fh
Vùng RAM từ địa chỉ 00h đến 2Fh: vùng có thể định địa
chỉ đến từng bit.
Việc truy xuất một vị trí nhớ được thực hiện bằng cách
sử dụng kiểu định địa chỉ trực tiếp hoặc gián tiếp.
Ví dụ: đọc nội dung tại địa chỉ 5Fh của RAM nội vào
thanh ghi A






Định địa chỉ trực tiếp:
MOV A,5Fh
Định địa chỉ gián tiếp:
MOV R0, #5FH
MOV A,@R0
4/13/2015

32

Vùng RAM định địa chỉ bit
89C51 chứa 210 vị trí bit được định địa chỉ trực tiếp:





128 bit được chứa trong các byte từ 20h đến 2Fh.
Phần còn lại nằm trong các thanh ghi đặc biệt (trong khoảng địa
chỉ từ 80h đến FFh).
Việc định địa chỉ đến từng bit cho phép các bit có thể được đặt và
xóa...bằng một lệnh.
Các port của 89C51 cũng được định địa chỉ bit
Ví dụ: để set bit 67h ta dùng lệnh: SETB 67h


Nếu không được định địa chỉ bit (với vi xử lí) thì ta phải dùng
lệnh
MOV A,2Ch
OR A,#10000000b
MOV 2Ch,A
4/13/2015

33

Các dãy thanh ghi
Chứa trong 32 vị trí thấp nhất của RAM, gồm 4 dãy thanh
ghi. Mỗi dãy gồm 8 thanh ghi từ R0 đến R7.
Lệnh sử dụng các thanh ghi trong dãy là lệnh ngắn và
thực hiện nhanh hơn so với kiểu định địa chỉ trực tiếp.
Ví dụ: lệnh đọc nội dung tại địa chỉ 05h vào thanh chứa A



hoặc:
4/13/2015

MOV A,R5
MOV A,05h
;lệnh 1 byte
;lệnh 2 byte
34

Các dãy thanh ghi
Dãy thanh ghi đang hoạt động được gọi là dãy thanh ghi
tích cực và có thể thay đổi bằng cách thay đổi các bit
chọn dãy trong thanh ghi từ trạng thái chương trình
PSW. Dãy thanh ghi mặc định sau khi reset hệ thống là
dãy 0.
Ví dụ: giả sử dãy 3 đang tích cực, lệnh ghi nội dung của
thanh chứa A vào vị trí 18h là


MOV R0,A
4/13/2015

35

Các thanh ghi chức năng đặc biệt (SFR)
VĐK 89C51 có 21 thanh ghi đặc biệt SFR chiếm phần trên
của RAM nội từ địa chỉ 80h đến FFh (Chú ý: không phải
tất cả các địa chỉ đều được định nghĩa).

4/13/2015

36

Thanh ghi từ trạng thái chương trình PSW
Bit
Kí hiệu Địa chỉ
Mô tả
PSW.7
CY
D7h
Cờ nhớ
PSW.6
AC
D6h
Cờ nhớ phụ
PSW.5
F0
D5h
Cờ 0
PSW.4
RS1
D4h
Chọn dãy thanh ghi (bit 1)
PSW.3
RS0
D3h
PSW.2
OV
D2h
Cờ tràn
PSW.1
-
D1h
Dự trữ
PSW.0
P
D0h
Cờ kiểm tra chẵn lẻ
4/13/2015

Chọn dãy thanh ghi (bit 0)
00 = bank 0: địa chỉ từ 00h
01 = bank 1: địa chỉ từ 08h
10 = bank 2: địa chỉ từ 10h
11 = bank 3: địa chỉ từ 18h
-
07h
0Fh
17h
1Fh
37

Thanh ghi B
Địa chỉ: F0h – F7h
Thanh ghi B có địa chỉ F0h được dùng chung với thanh
ghi A trong các phép toán nhân, chia.
Lệnh MUL AB: nhân hai số 8 bit không dấu chứa trong A
và B. Kết quả 16 bit được chứa trong cặp thanh ghi B:A
(thanh ghi A chứa byte thấp, thanh ghi B chứa byte cao).
Lệnh DIV AB:chia A bởi B, thương số cất trong thanh
chứa A và dư số cất trong thanh ghi B.




4/13/2015

38

Con trỏ Stack
Con trỏ Stack (Stack pointer – SP) là 1 thanh ghi 8 bit ở
địa chỉ 81h. SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh
của Stack.
Nếu ta không khởi động SP, nội dung mặc định của
thanh ghi này là 07h.


4/13/2015

39

Con trỏ dữ liệu DPTR
Con trỏ dữ liệu DPTR (data pointer) được dùng để truy
xuất bộ nhớ chương ngoài hoặc bộ nhớ dữ liệu ngoài.
DPTR là 1 thanh ghi 16 bit có địa chỉ là 82h (DPL, byte
thấp) và 83h (DPH, byte cao).
Ví dụ: ghi giá trị 55h vào địa chỉ 1000h ở RAM ngoài



MOV A,#55h
MOV DPTR,#1000h
MOV @DPTR,A
4/13/2015

40

Các thanh ghi cổng
Các port xuất nhập của 89C51 bao gồm: port 0 (địa chỉ
80h), port 1 (địa chỉ 90h), port 2 (địa chỉ A0h), port 3
(địa chỉ B0h).
Các port 0, 2, 3 không được dùng để xuất/nhập nếu ta sử
dụng bộ nhớ ngoài hoặc các chức năng đặc biệt của
89C51.
Các port đều được định địa chỉ từng bit.



4/13/2015

41

Các thanh ghi định thời
89C51 có 2 bộ định thời/đếm 16 bit:



Bộ định thời 0 có địa chỉ 8Ah (TL0 – byte thấp) và 8Ch (TH0 –
byte cao).
Bộ định thời 1 có địa chỉ 8Bh (TL1 – byte thấp) và 8Dh (TH1 –
byte cao).
Hoạt động của bộ định thời được thiết lập bởi:



Thanh ghi chế độ định thời TMOD (time mode register) ở địa chỉ
89h.
Thanh ghi điều khiển định thời TCON (time control register) ở
địa chỉ 88h.
4/13/2015

42

Các thanh ghi của cổng nối tiếp
Thanh ghi đệm dữ liệu nối tiếp SBUF (serial data buffer):



Có địa chỉ 99H.
Nơi lưu dữ liệu truyền đi và dữ liệu nhận về
Thanh ghi điều khiển port nối tiếp SCON (serial port
control register) ở địa chỉ 98H.

4/13/2015

43

Các thanh ghi ngắt
89C51 có một cấu trúc ngắt với 2 mức ưu tiên và 5
nguyên nhân ngắt.
Ngắt bị vô hiệu hóa khi reset hệ thống và sau đó được
cho phép bằng cách ghi vào thanh ghi cho phép ngắt IE
(interrupt enable register - A8h).
Mức ưu tiên ngắt được thiết lập thông qua thanh ghi ưu
tiên ngắt IP (interupt priority register - B8h).



4/13/2015

44

Thanh ghi điều khiển nguồn PCON (87h)
Bit
Kí hiệu
Mô tả
7
SMOD
Tăng gấp đôi tốc độ baud
6
-
Không định nghĩa
5
-
Không định nghĩa
4
-
Không định nghĩa
3
GF1
Bit cờ đa mục đích 1
2
GF0
Bit cờ đa mục đích 2
1
PD
Chế độ nguồn giảm
0
IDL
Chế độ nguồn nghỉ
4/13/2015

45

Bộ nhớ ngoài
Cấu trúc của MCS-51 cho phép mở rộng không gian bộ
nhớ và không gian dữ liệu lên đến 64 Kbyte.
Khi sử dụng bộ nhớ ngoài, port 0 trở thành bus địa chỉ
(A0-A7) và bus dữ liệu (D0-D7) đa hợp. Port 2 thường
được dùng làm byte cao của bus địa chỉ.


4/13/2015

46

Đa hợp và không đa hợp
Chu kì máy
A0-A15
Địa chỉ
D0-D7
Dữ liệu
Không đa hợp
Chu kì máy
A8-A15
AD0-AD7
Địa chỉ
Địa chỉ
Dữ liệu
Đa hợp (Multiplex)
4/13/2015

47

Đọc ROM (1)
P0.0
2. 74373 latches the
address and send to
OE
ROM
OC
G 74LS373
A0
P0.7
A7
PSEN
ALE
1. Send address to
ROM
D
Address
D0
D7
EA
P2.0
A8
P2.7
A15
89C51
4/13/2015

ROM
48

Đọc ROM (2)
PSEN
ALE
P0.0
P0.7
2. 74373 latches the
address and send to ROM
74LS373
G
D
Address
OE
OC
A0
A7
D0
D7
EA
3. ROM send the
instruction back
P2.0
A8
P2.7
A15
89C51
4/13/2015

ROM
49

Đọc RAM
ALE
P0.0
P0.7
74LS373
G
D
Address
A0
A7
D0
EA
P2.0
D7
A8
P2.1
A9
RS
WR
OE
W
89C51
4/13/2015

CS
RAM
50

Chương 3
4/13/2015

51

Các kiểu định địa chỉ








Thanh ghi (register)
Trực tiếp (direct)
Gián tiếp (indirect)
Tức thời (immediate)
Tương đối (relative)
Tuyệt đối (absolute)
Dài (long)
Chỉ số (indexed)
4/13/2015

52

Định địa chỉ thanh ghi
Lệnh sử dụng kiểu đánh địa chỉ thanh ghi được mã hóa
bằng cách dùng 3 bit thấp nhất của mã lệnh (opcode) để
chỉ ra một thanh ghi bên trong không gian địa chỉ logic
Mã lệnh và địa chỉ toán hạng (3 bit) kết hợp thành 1 lệnh
ngắn (1 byte)
Truy xuất trực tiếp 8 thanh ghi R0 – R7






Ví dụ: ADD A,R7
00101: lệnh cộng
111: thanh ghi R7
opcode
4/13/2015

(opcode: 00101111b)
n
n
n
53

Định địa chỉ trực tiếp
Được sử dụng để truy xuất các biến nhớ hoặc các thanh
ghi trên chip
Mã lệnh và địa chỉ toán hạng kết hợp thành 1 lệnh 2 byte
Ví dụ: chuyển nội dung của thanh ghi A vào địa chỉ 90h
(P1)
MOV P1,A (opcode: 10001001 - 10010000)
10001001: opcode
10010000: địa chỉ của P1 (90h)






4/13/2015

54

Định địa chỉ gián tiếp
Các thanh ghi R0 và R1 hoạt động như là các con trỏ
Nội dung của chúng chỉ ra địa chỉ trong RAM, nơi dữ liệu
được đọc hoặc ghi.
Bit có ý nghĩa thấp nhất trong opcode xác định thanh ghi
được dùng làm con trỏ.
Được nhận biết nhờ vào kí tự @ đặt trước R0 hoặc R1.
Ví dụ: nếu R1 chứa 40h và địa chỉ 40h chứa 55h, lệnh:





MOV A,@R1
Nạp 55h cho A
4/13/2015

55

Định địa chỉ tức thời
Dùng khi toán hạng nguồn là một hằng số thay vì một
biến.
Nhận biết nhờ vào kí tự # đặt trước toán hạng.
Ví dụ: MOV A, #12; Nạp giá trị 12 (0Ch) vào thanh ghi A



4/13/2015

56

Các loại lệnh
Nhóm lệnh số học
Nhóm lệnh logic
Nhóm lệnh di chuyển dữ liệu
Nhóm lệnh xử lí bit
Nhóm lệnh rẽ nhánh





4/13/2015

57

Một số phương pháp định địa chỉ
Định địa chỉ thanh ghi: truy xuất trực tiếp các thanh ghi
từ R0 – R7
Định địa chỉ trực tiếp: truy cập đến địa chỉ được trỏ bởi
toán hạng.
Định địa chỉ gián tiếp:





Địa chỉ của toán hạng sẽ được chứa trong một thanh ghi con trỏ
(R0 hoặc R1 đối với RAM trong, DPTR đối với RAM ngoài).
Nhận biết bằng kí tự @ đặt trước thanh ghi
Định địa chỉ tức thời:




Giá trị của toán hạng được nêu ra rõ ràng ngay trong câu lệnh.
Đặc điểm : luôn kèm theo ký tự “#” phía trước toán hạng.
MOV A, 4Fh (Ram o 4Fh đang có 14h)
4/13/2015

58

Ví dụ
MOV R0, #4Fh; đang chứa 14h
MOV A,@R0 ; A chứa 14h


4/13/2015

59

Cú pháp
[Nhãn]:
[Lệnh] [Toán hạng đích],[Toán hạng nguồn] ;[chú thích]
 Ví dụ:


Lenhcong: ADD A,#30H ; cong thanh ghi A voi gia tri 30H
4/13/2015

60

Các lệnh tính toán số học
4/13/2015

61

Các lệnh tính toán số học
4/13/2015

62

Các lệnh thực hiện các phép toán lôgic
4/13/2015

63

4Fh: nội dung 03h;11
A: nội dung 02h; ở trong RAM 02h có 01h
ANL 4Fh, @A -> 4Fh:02h;
ANL 4Fh,#01 -> 01




A: 00000001b
RL A -> 0011 1011b
SWAP A -> 1011 0011b



4/13/2015

64

Các lệnh thực hiện các phép toán lôgic
4/13/2015

65

Các lệnh trao đổi dữ liệu
4/13/2015

66

Các lệnh trao đổi dữ liệu
4/13/2015

67

Các lệnh trao đổi dữ liệu
4/13/2015

68

Các lệnh thao tác xử lý đại số Boolean
4/13/2015

69

Các lệnh rẽ nhánh
4/13/2015

70

Các lệnh rẽ nhánh chương trình
4/13/2015

71

Các lệnh rẽ nhánh chương trình
4/13/2015

72

Chương trình ASM mẫu
#include <sfr51.inc> ; đầu chương trình, khai báo file chứa địa
chỉ của các thanh ghi SFR
; định nghĩa tên gọi cho các chân cổng vào/ra (nếu muốn)
#define led1 P1.0
#define led2 P1.1
...
; khai báo các biến dạng byte (nếu có)
var1 data 0x30
var2 data 0x31
...
4/13/2015

73

Chương trình ASM mẫu (tt)
; khai báo các biến dạng bit (nếu có)
flag1 bit 0x00
flag2 bit 0x01
...
; định nghĩa các hằng số (nếu có)
constant1 equ 123
constant2 equ 456
4/13/2015

74

Chương trình ASM mẫu (tt)
org 0x0000 ; tạo mã đặt tại địa chỉ reset
ajmp main
; tạo mã đặt tại các vector ngắt (nếu sử dụng ngắt)
org 0x0003
ljmp ChuongTrinhXuLyNgatNgoai0
org 0x000B
ljmp ChuongTrinhXuLyNgatTimer0
...
4/13/2015

75

Chương trình ASM mẫu (tt)
; đặt địa chỉ đầu cho chương trình chính
org 0x0030
main:
; bắt đầu viết các lệnh cho chương trình chính từ đây
mov SP,#0x6F
; viết các thủ tục khởi tạo hệ thống
...
; viết thân chương trình chính (vòng lặp chính)
main_loop:
...
sjmp main_loop
4/13/2015

76

Chương trình ASM mẫu (tt)
; viết các chương trình con và các chương trình xử lý ngắt (nếu
có)
ChuongTrinhCon1:
; các lệnh xử lý của chương trình con 1
...
; kết thúc bằng lệnh ret
ret
ChuongTrinhCon2:
; các lệnh xử lý của chương trình con 2
...
ret ; kết thúc bằng lệnh ret

4/13/2015

...
77

Chương trình ASM mẫu (tt)
; định nghĩa các bảng hằng số lưu sẵn trong bộ nhớ chương
trình
Bang1:
db 0,1,0x02,0x86
Bang2:
db 156,235,8,9
...
; chỉ dẫn báo hiệu kết thúc toàn bộ đoạn chương trình
end
4/13/2015

78

Chương trình ASM mẫu (tt)
ChuongTrinhXuLyNgatNgoai0:
; các lệnh xử lý của chương trình xử lý ngắt ngoài 0
...
; kết thúc bằng lệnh reti
reti
ChuongTrinhXuLyNgatTimer0:
; các lệnh xử lý của chương trình xử lý ngắt timer 0
...
; kết thúc bằng lệnh reti
reti
...
4/13/2015

79

Chương 4
4/13/2015

80

Giới thiệu
89C51 có 2 bộ định thời 16 bít, mỗi bộ có 4 chế độ hoạt
động
Các bộ định thời được dùng để:





Định thời trong một khoảng thời gian.
Đếm sự kiện.
Tạo tốc độ baud cho port nối tiếp của chip 89C51
4/13/2015

81

Bộ định thời 3-bit
TIMER FLIP-FLOPS (3 bit)
FLIP-FLOP
CỜ
XUNG
NHỊP
D
/Q
Q0
D
/Q
D
Q1
/Q
Q2
D
/Q
Q
cờ
Sơ đồ logic
XUNG
NHỊP
Q0
Q1
Q2
Giản đồ thời gian
FLAG
4/13/2015

82

Các SFR của bộ định thời
Thanh
ghi
Địa chỉ
Định địa
chỉ bit
TCON
Điều khiển
88H
Có
TMOD
Chọn chế độ
89H
Không
TL0
Byte thấp của bộ định
thời 0
8AH
Không
TL1
Byte thấp của bộ định
thời 1
8BH
Không
TH0
Byte cao của bộ định
thời 0
8CH
Không
TH1
Byte cao của bộ định
thời 1
8DH
Không
4/13/2015

Mục đích
83

Thanh ghi chế độ định thời (TMOD)
Bit
Tên
7
GATE
6
Bộ định
thời
Mô tả
1 Bit điều khiển cổng. Khi được set lên 1, bộ định
thời chỉ hoạt động trong khi INT1 ở mức cao và
TRx = 1.
1 Bit chọn chức năng đếm hoặc định thời:
1 = đếm sự kiện
0 = định thời trong một khoảng thời gian.
5
M1
1 Bit chọn chế độ thứ nhất.
4
M0
1 Bit chọn chế độ thứ hai.
3
GATE
2
0 Bit điều khiển cổng cho bộ định thời 0.
0 Bit chọn chức năng đếm hoặc định thời cho bộ
định thời 0.
1
M1
0 Bit chọn chế độ thứ nhất.
0
M0
0 Bit chọn chế độ thứ hai.
4/13/2015

84

Thanh ghi điều khiển định thời (TCON)
Bit
Ký
Hiệu
Địa chỉ
bit
TCON.7
TF1
8FH
Cờ tràn của bộ định thời 1.
TCON.6
TR1
8EH
Bit điều khiển hoạt động của bộ định thời 1.
TCON.5
TF0
8DH
Cờ tràn của bộ định thời 0.
TCON.4
TR0
8CH
Bit điều khiển hoạt động của bộ định thời 0.
TCON.3
IE1
8BH
Cờ ngắt bên ngoài 1 (kích khởi cạnh).
TCON.2
IT1
8AH
Cờ ngắt bên ngoài 1 (kích khởi cạnh hoặc
mức).
TCON.1
IE0
89H
Cờ ngắt bên ngoài 0 (kích khởi cạnh).
TCON.0
IT0
88H
Cờ ngắt bên ngoài 0 (kích khởi cạnh hoặc
mức).
4/13/2015

Mô tả
85

Các chế độ hoạt động
M1 M0 Chế độ
Mô tả
0
0
0
Chế độ định thời 13 bit
0
1
1
Chế độ định thời 16 bit
1
0
2
1
1
3
Chế độ tự động nạp lại 8
bit
Chế độ định thời chia sẻ
4/13/2015

86

Chế độ định thời 13 bit
Byte cao THx được ghép với 5 bit thấp của TLx để tạo
thành bộ định thời 13-bit.
Khi có xung clock đến, bộ định thời đếm lên từ giá trị
đếm được nạp.
Tràn sẽ xuất hiện khi chuyển số đếm từ 2000H xuống
0000H và set cờ tràn TFx bằng 1.



Time
clock
4/13/2015

TLx
THx
(5 bit) (8 bit)
TFx
87

Chế độ định thời 16 bit
Có cấu hình giống chế độ định thời 13 bit
Thanh ghi định thời TLx/THx có thể được đọc/ghi tại bất
kì thời điểm nào


Time
clock
4/13/2015

TLx
THx
(8 bit) (8 bit)
TFx
88

Chế độ tự nạp lại 8 bit
Byte thấp của bộ định thời (TLx) hoạt động định thời 8
bit.
Byte cao TFx lưu giữ giá trị nạp lại.
Khi số đếm tràn từ FFH xuống 00H, cờ tràn được set và
giá trị trong THx được nạp vào TLx.



Time
clock
TLx
(8 bit)
TFx
THx
(8 bit)
4/13/2015

89

Chế độ định thời chia sẻ
Bộ định thời 0:



Được chia thành 2 bộ định thời 8 bit TL0 và TH0.
Mỗi bộ sẽ set cờ tràn tương ứng là TF0 và TF1.
Bộ định thời 1:



Không hoạt động ở chế độ 3 nhưng có thể chuyển qua chế độ
khác.
Cờ tràn TF1 không bị ảnh hưởng.
4/13/2015

90

Chế độ định thời chia sẻ
Time
clock
Time
clock
Time
clock
4/13/2015

TL0
TF0
(8 bit)
TH0
TF1
(8 bit)
TL1
TH1
(8 bit) (8 bit)
91

Nguồn xung clock định thời
C/T = 0:



Nguồn xung clock do mạch dao động trong chip tạo ra.
Được dùng để định một khoảng thời gian.
C/T = 1:



Được cấp xung clock từ nguồn ngoài (trên 2 chân P3.4 và P3.5)
Được dùng để đếm sự kiện. Các thanh ghi định thời tăng khi có
chuyển trạng thái từ 1 ->0 ở ngõ vào Tx.
4/13/2015

92

Điều khiển các bộ định thời
Sử dụng bit TRx trong thanh ghi TCON:



TRx = 1: khởi động
TRx = 0 : dừng
Sử dụng bit GATE và ngõ vào INTx:



Khi INTx ở mức cao, bộ định thời nhận xung clock.
Khi INTx ở mức thấp, bộ định thời bị khoá, không nhận xung nữa.
4/13/2015

93

Ví dụ
MOV
động
MOV
MOV
SETB
.....
CLR TR1
CLR TF1







4/13/2015

TMOD,#xxxxH
;thiết lập chế độ hoạt
TL1,#xxH
TH1,#XXH
TRx
;ghi giá trị đếm vào TLx
;ghi giá trị đếm vào THx
;bộ định thời hoạt động
;ngừng bộ định thời
;xoá cờ tràn
94

Đọc bộ định thời đang hoạt động
Sai pha có thể xảy ra khi đọc 2 thanh ghi định thời, do
không thể đọc 2 thanh ghi bằng 1 lệnh
Giải pháp:






Đọc byte cao
Đọc byte thấp
Đọc lại byte cao
Nếu byte cao đổi giá trị thì thực hiện lại thao tác đọc trên
4/13/2015

95

Ví dụ
LAP:




4/13/2015

MOV A,TH1
MOV R6, TL1
CJNE A,TH1,LAP
MOV R7,A
96

Chương 5
4/13/2015

97

Mở đầu
Chip 89C51 có 1 cổng nối tiếp với 4 chế độ hoạt động
khác nhau.
Việc truy xuất port nối tiếp được thực hiện thông qua
chân TxD và RxD
Đặc trưng của port nối tiếp là khả năng hoạt động song
công (full duplex)
Các thanh ghi liên quan:







SBUF: được dùng để truy xuất giá trị trên cổng nối tiếp
SCOM: được dùng để điều khiển port nối tiếp.
PCON: sử dụng bit PCON.7 (SMOD) để xác định tốc độ truyền


SMOD = 0: truyền với tốc độ thường
SMOD = 1: truyền với tốc độ gấp đôi
4/13/2015

98

Sơ đồ khối port nối tiếp
TxD
Q
SBUF
(write only)
CLK
Baud rate clock
(transmit)
RxD
D
Shift register
CLK
Baud rate clock
(receive)
SBUF
(read only)
89C51 internal bus
4/13/2015

99

Thanh ghi điều khiển port nối tiếp SCON
Bit
Kí hiệu
SCON.7
SM0
9FH Bit 0 chọn chế độ của port nối tiếp
SCON.6
SM1
9EH Bit 1 chọn chế độ của port nối tiếp
SCON.5
SM2
9DH Bit 2 chọn chế độ của port nối tiếp,
cho phép truyền thông đa xử lí ở chế
độ 2 và 3.
SCON.4
REN
9CH Cho phép nhận dữ liệu. Phải bằng 1
để nhận kí tự
SCON.3
TB8
9BH Bit dữ liệu thứ 9 được phát ở chế độ 2
và 3 (9 bit)
SCON.2
RB8
9AH Bit dữ liệu thứ 9 trong trường hợp
nhận 9 bit
SCON.1
TI
99H Cờ ngắt phát, được set ngay khi kết
thúc việc phát một khung dữ liệu
SCON.0
RI
98H Cờ ngắt nhận, được set ngay khi kết
thúc việc nhận một khung dữ liệu
4/13/2015

Địa chỉ
Mô tả
100

Các chế độ hoạt động
SM0
SM1
Mô tả
Tốc độ baud
0
0
0
Đồng bộ
8 bit
Cố định (fOSC/12)
0
1
1
UART 8bit
Thay đổi (thiết lập bởi bộ
định thời)
1
0
2
UART 9bit
Cố định (fOSC/32 hoặc
fOSC/64)
1
1
3
UART 9bit
Thay đổi (thiết lập bởi bộ
định thời)
4/13/2015

Chế độ
101

Chế độ 0
Là chế độ truyền đồng bộ duy nhất. Chân RxD sẽ là
tín hiệu truyền/nhận dữ liệu, chân TxD là tín hiệu xung
nhịp. Bit LSB (bit 0) của dữ liệu được phát đầu tiên
Tốc độ baud cố định và bằng fOSC/12
Phát dữ liệu được khởi động bằng một lệnh ghi dữ liệu
vào SBUF
Nhận dữ liệu được khởi động khi bit REN ở mức 1 và RI
ở mức 0.




4/13/2015

102

Chế độ 1
Port nối tiếp hoạt động như một bộ thu phát không đồng
bộ UART
Dữ liệu gồm 10 bit:





1 bit start (mức 0)
8 bit dữ liệu
1 bit stop (mức 1)
Khi thu, bit stop được đưa đến RB8 của SCON
Việc phát được khởi động bằng cách ghi vào SBUF
Tốc độ baud được thiết lập bởi tốc độ tràn của bộ định
thời 1.



4/13/2015

103

Chế độ 2 và 3
Dữ liệu gồm 11 bit:1 bit start, 8 bit dữ liệu, 1 bit stop, 1
bit lập trình được (bit thứ 9)
Khi phát, bit 9 là bit được đặt vào TB8 của SCON
Khi thu, bit 9 nhận được sẽ đặt vào RB8
Tốc độ baud bằng fOSC/32 hoặc fOSC/64




4/13/2015

104

Bit cho phép thu
Bit REN trong thanh ghi SCON phải set bằng 1 để cho
phép nhận kí tự
Lệnh:
SETB REN
Hoặc MOV SCON,#xxx1xxxxB



4/13/2015

105

Bit dữ liệu thứ 9
Bit dữ liệu thứ 9 được phát ở chế độ 2 và 3 phải được
nạp cho bit TB8 bằng phần mềm
Bit dữ liệu thứ 9 thu được phải đặt vào bit RB8 của SCON


4/13/2015

106

Bit chẵn lẻ
Bit thứ 9 thường được dùng làm bit chẵn lẻ (sử dụng bit
P của PSW)
Lệnh phát 8 bit với bit kiểm tra chẵn:


MOV C,P
MOV TB8,C
MOV SBUF,A
Lệnh phát 8 bit với bit kiểm tra lẻ:

MOV C,P
CPL C
MOV TB8,C
MOV SBUF,A
4/13/2015

107

Các cờ ngắt
Cờ ngắt thu RI được set khi kết thúc nhận kí tự và chỉ ra
bộ đệm thu đầy

WAIT: JNB RI,WAIT
CLR RI
MOV A,SBUF
Cờ ngắt phát TI được set khi kết thúc việc phát 1 kí tự và
bộ đệm phát rỗng

WAIT: JNB TI,WAIT
CLR TI
MOV SBUF,A
4/13/2015

108

Truyền thông đa xử lý
Các chế độ 2 và 3 được ứng dụng để tạo thành một môi
trường mạng sử dụng nhiều VĐK 89C51 sắp xếp theo mô
hình master/slaver

I/O
89C51 Master
4/13/2015

89C51 Slaver 1
I/O
89C51 Slaver 2
109

Tốc độ baud của port nối tiếp
Mode 0:

Baud rate = fOSC/12
Mode 2:

Baud rate = (2SMOD/64)*fOSC
Mode 1,3:

4/13/2015

110

Sử dụng cổng nối tiếp
Chọn chế độ cho cổng nối tiếp (đồng bộ/dị bộ,
8bit/9bit...), từ đó chọn được giá trị cho các bit trong thanh
ghi SCON. Lưu ý xóa các bit TI và RI.
Chọn tốc độ truyền mong muốn, từ đó tính ra giá trị của
thanh ghi TH1. Cho timer1 chạy ở chế độ Auto Reload 8bit
(không dùng ngắt tràn timer1).
Đặt mức ưu tiên ngắt và cho phép ngắt cổng nối tiếp nếu
muốn.



4/13/2015

111

Sử dụng cổng nối tiếp
Bắt đầu quá trình truyền dữ liệu bằng một lệnh ghi dữ liệu
muốn truyền vào thanh ghi SBUF. Quá trình truyền kết thúc
thì cờ TI sẽ tự động đặt lên 1.
Khi một khung dữ liệu đã được nhận đầy đủ, cờ RI sẽ tự
động đặt lên 1 và người lập trình lúc này có thể dùng lệnh
đọc thanh ghi SBUF để lấy dữ liệu nhận được ra xử lý.


4/13/2015

112

Khởi động port nối tiếp
Baud rate = 2400
Sử dụng bộ định thời 1 để cấp xung clock


SM0
SM1
SM2
REN
TB8
RB8
TI
RI
0
1
0
1
0
0
1
0
GTE
C/T
M1
M0
GTE
C/T
M1
M0
0
0
1
0
0
0
0
0
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TCON
0
1
0
0
0
0
0
0
TH1
1
1
1
1
0
0
1
1
SCON
TMOD
4/13/2015

113

Lệnh khởi động port nối tiếp
ORG
INIT: MOV
MOV
MOV
SETB
END
4/13/2015

8100H
SCON,#52H
TMOD,#20H
TH1,#F4H
TR1
;port nối tiếp, chế độ 1
;bộ định thời 1, chế độ 2
;giá trị nạp lại để có 2400 baud
;bộ định thời 1 hoạt động
114

Chương 6
4/13/2015

115

Giới thiệu
Ngắt là việc xảy ra một sự kiện làm cho chương trình
hiện hành bị tạm ngưng trong khi một điều kiện khác
được thực hiện.

time
Main program
Chương trình không có ngắt
ISR
Main
time
4/13/2015

ISR
Main
ISR
Main
Main
Chương trình có ngắt
116

Tổ chức ngắt
89C51 có 5 nguyên nhân ngắt:




2 ngắt ngoài
2 ngắt do bộ định thời
1 ngắt do port nối tiếp
Có 2 sơ đồ xử lý ngắt:



Sơ đồ chuỗi vòng
Sơ đồ hai mức ưu tiên
4/13/2015

117

Thanh ghi cho phép ngắt (IE)
Mỗi nguyên nhân ngắt được cho phép hoặc không thông
qua thanh ghi cho phép ngắt IE có địa chỉ 0A8H

Bit
Kí hiệu
Địa chỉ
IE.7
EA
AFH
Cho phép/không cho phép toàn cục
IE.6
-
AEH
Không sử dụng
IE.5
ET2
ADH
Cho phép ngắt do bộ định thời 2
IE.4
ES
ACH
Cho phép ngắt do port nối tiếp
IE.3
ET1
ABH
Cho phép ngắt do bộ định thời 1
IE.2
EX1
AAH
Cho phép ngắt từ bên ngoài (1)
IE.0
EX0
A8H
Cho phép ngắt từ bên ngoài (0)
IE.1
ET0
A9H
Cho phép ngắt do bộ định thời 0
4/13/2015

Mô tả
118

Ưu tiên ngắt
Mỗi nguyên nhân ngắt được lập trình để có một trong hai
mức ưu tiên ngắt thông qua thanh ghi ưu tiên ngắt IE có
địa chỉ 0B8H

Bit
Địa chỉ
Mô tả
IP.7
-
Không sử dụng
IP.6
-
Không sử dụng
IP.5
PT2
BDH
Ưu tiên ngắt do bộ định thời 2
IP.4
PS
BCH
Ưu tiên ngắt do port nối tiếp
IP.3
PT1
BBH
Ưu tiên ngắt do bộ định thời 1
IP.2
PX1
BAH
Ưu tiên ngắt từ bên ngoài (1)
IP.1
PT0
B9H
Ưu tiên ngắt do bộ định thời 0
IP.0
PX0
B8H
Ưu tiên ngắt từ bên ngoài (0)
4/13/2015

Kí hiệu
119

Chuỗi vòng
Chuỗi vòng xác định ngắt nào được ưu tiên phục vụ
trước.
Mức độ ưu tiên:







Ngắt ngoài 0
Ngắt do bộ định thời 0
Ngắt ngoài 1
Ngắt do bộ định thời 1
Ngắt do port nối tiếp
4/13/2015

120

Xử lý ngắt
Quá trình xử lý ngắt:







Hoàn tất việc thực thi lệnh hiện hành
Bộ đếm chương trình PC được cất vào stack
Trạng thái của ngắt hiện hành được lưu giữ lại
Các ngắt được chặn lại ở mức ngắt
Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục
vụ ngắt ISR
ISR được thực thi
Việc thực thi ISR kết thúc khi gặp lệnh RETI.Lệnh này lấy
lại giá trị cũ của bộ đếm chương trình PC từ stack và
phục hồi trạng thái của ngắt cũ

4/13/2015

121

Các vector ngắt
Giá trị được nạp cho bộ đếm chương trình được gọi là
vector ngắt.
Vector ngắt chính là địa chỉ bắt đầu của trình phục vụ
ngắt của nguyên nhân tương ứng
Khi trình gây ngắt được trỏ tới, cờ gây ngắt tự động bị
xóa bởi phần cứng, ngoại trừ cờ RI và TI



4/13/2015

122

Địa chỉ các vector ngắt
Ngắt
Địa chỉ
Reset hệ thống
RST
0000H
Ngắt ngoài 0
IE0
0003H
Bộ định thời 0
TF0
000BH
Ngắt ngoài 1
IE1
0013H
Bộ định thời 1
TF1
001BH
Port nối tiếp
RI hoặc TI
0023H
4/13/2015

Cờ
123

Chương trình sử dụng ngắt
ORG
LJMP
...
ORG
MAIN:
...
4/13/2015

000H ;điểm nhập sau khi reset
MAIN
;các điểm nhập của ISR
0030H;điểm nhập chương trình chính
;chương trình chính bắt đầu
124

Trình phục vụ ngắt kích thước nhỏ
Các trình phục vụ phải được bắt đầu ở gần đáy của bộ
nhớ.
Chỉ có 8 byte giữa các điểm nhập của trình phục ngắt ->
trình phục vụ ngắt tương ứng có độ dài không quá 8 byte.
Ví dụ: ngắt do bộ định thời 0
ORG 0000H; reset
LJMP MAIN
ORG 000BH; điểm nhập của ngắt do bộ định thời 0
T0_ISR:
;bắt đầu ISR cho bộ định thời 0
RETI
;trở về chương trình chính
MAIN:



4/13/2015

125

Trình phục vụ ngắt kích thước lớn
Với trình phục vụ ngắt lớn hơn 8 byte, ta phải chuyển
chương trình này đến một nơi khác trong bộ nhớ chương
trình hoặc lấn qua điểm nhập của ISR khác
Ví dụ: khảo sát bộ định thời 0


ORG
LJMP
ORG
LJMP
ORG
MAIN:
T0_ISR:
RETI
4/13/2015

0000H
MAIN
000BH
T0_ISR
0030H
;reset
;điểm nhập bộ định thời 0
;phía trên các vector ngắt
;ISR của bộ định thời 0
;quay về chương trình chính
126

Ngắt do port nối tiếp
Xuất hiện khi cờ ngắt phát TI hoặc cờ ngắt thu RI được
set bằng 1



Ngắt phát xuất hiện khi việc phát một kí tự đã ghi vào SBUF hoàn
tất(SBUF rỗng).
Ngắt thu xuất hiện khi một kí tự được thu đầy đủ và đang ở trong
SBUF (SBUF đầy).
Cờ ngắt do port nối tiếp gây ra không được xóa bởi phần
cứng. Nguyên nhân ngắt phải được xác định trong trình
phục vụ ngắt và cờ ngắt phải được xóa bởi phần mềm

4/13/2015

127

Các ngắt ngoài
Ngắt ngoài xảy ra khi có mức thấp hoặc cạnh âm trên
chân /INT0 và /INT1
Cờ tạo ra các ngắt: bit IE0 và IE1 của thanh ghi TCON




Cờ tạo ra ngắt được xóa bởi phần cứng nếu là ngắt thộc loại tác
động cạnh.
Nếu ngắt thuộc loại tác động mức, nguyên nhân ngắt sẽ điều
khiển mức của cờ.
Việc chọn loại tác động ngắt là cạnh hay mức được thực
hiện thông qua bit IT0 và IT1 của TCON

4/13/2015

128
