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

Tài liệu Vi điều khiển (Microcontroller) pdf

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 (371.84 KB, 55 trang )

VI ĐIỀU KHIỂN
(MICROCONTROLLER).
1
VI ĐIỀU KHIỂN (MICROCONTROLLER).
1. CẤU TRÚC CỦA BỘ VI ĐIỀU KHIỂN.
1.1 Giới thiệu về các bộ vi điều khiển.
Bộ vi điều khiển (MCU – Micro Controller Unit) là một hệ thống vi xử lý cơ bản tích hợp
trong cùng một chip, thông thường trong một MCU có một bộ vi xử lý (CPU), một dung
lượng nhớ khoảng vài KB, và một số giao tiếp vào ra cơ bản thích hợp cho các ứng dụng
điều khiển nhỏ. Với cấu trúc như mô tả trên, người sử dụng có thể nhanh chóng thực hiện
một hệ thống phần cứng điều khiển lập trình bằng cách nối một số ít linh kiện cơ bản như
thạnh anh, tụ điện, điện trở … vào bộ vi điều khiển. Mặt khác do không phải thực hiện các
đường mạch nối giữa các khối CPU, bộ nhớ và vào ra nên khả năng chống nhiễu của hệ
thống cao thích hợp cho môi trường công nghiệp. Hiện nay các bộ vi điều khiển đã trở nên
khá phổ biến trong nhiều lĩnh vực với rất nhiều hãng sản xuất như: học MCU 8051 của
Atmel, họ 68HC11 của Motorola, họ Z80MCU của Zilog …
1.2 Cấu trúc tổng quát của các bộ vi điều khiển.
Sơ đồ khối tổng quát của một bộ vi điều khiển bao gồm các khối cơ bản như trình bày trên
hình 8.1:
- Khối xử lý (Processor) đóng vai trò quyết định tất cả các hoạt động của các bộ phận
khác bên trong vi điều khiển.
- Bộ nhớ điều khiển (Control store) thường là loại bộ nhớ ROM có dung lượng vài KB
chứa các chương trình điều khiển.
- Bộ nhớ RAM thường có dung lượng nhỏ sử dụng cho việc khai báo các biến trung gian,
thông thường các thanh ghi của vi điều khiển cũng nằm trong phần bộ nhớ này.
- Khối tạo xung nhịp và định thời (Clock & timing) đóng vai trò tạo xung nhịp định thời
các hoạt động của hệ thống. Thông thường ở các bộ vi điều khiển tích hợp sẵn bộ tạo
xung nhịp bên trong, tần số hoạt động của hệ thống sẽ được xác định bằng thạch anh nối
vào mạch từ bên ngoài.
- Khối điều khiển reset có nhiệm vụ thiết lập lại các trạng thái của hệ thống, cho phép nó
bắt đầu hoạt động trở lại giống như khi mới cấp nguồn.


1
Power
monitoring
Reset
control
Clock &
timing
Control
store
RAM
P
r
o
c
e
s
s
o
r

I
/
O
p
o
r
t

Power
Reset

Clocking
Input &
Output
pins
Hình 8.1: Sơ đồ khối tổng quát của một bộ vi điều khiển .
- Khối giám sát nguồn (power monitoring) cho phép toàn bộ chip hoạt động ở chế độ chờ
(standby) khi không có yêu cầu điều khiển với công suất rất nhỏ. Vì cấu trúc vi điều
khiển cho phép thực hiện một hệ thống nhỏ gọn, nên nó được sử dụng nhiều trong các
thiết bị điều khiển cầm tay và di động có nguồn cung cấp bằng pin, với khối giám sát
nguồn vi điều khiển có thể hoạt động theo định thời hoặc chỉ khi có yêu cầu từ bên
ngoài.
- Các cổng vào ra (I/O): thông thường vi điều khiển có một vài cổng giao tiếp song song
để giao tiếp điều khiển các thiết bị bên ngoài, đôi khi các cổng này sử dụng như các Bus
(dữ liệu, địa chỉ và điều khiển) của một bộ vi xử lý thông thường, cho các hệ thống có
yêu cầu mở rộng về dung lượng bộ nhớ cũng như các cổng vào ra. Ngoài các cổng vào
ra song song, vi điều khiển còn có các cổng vào ra nối tiếp theo chuẩn RS232 hoặc
IEEE448. Trong một số bộ vi điều khiển còn tích hợp cả các khối A/D và D/A, khi đó sẽ
có cả các đường vào ra cho các khối này.
2. MÔ TẢ PHẦN CỨNG CÁC BỘ VI ĐIỀU KHIỂN HỌ MSC-51.
2.1Giới thiệu chung.
Họ IC vi điều khiển MSC-51 được phát triển, chế tạo và bán ở thị trường bởi hãng Intel.
Các nhà chế tạo IC khác như Siemens của Đức, Advanced Micro Devices, Fujitsu, Philips,
Atmel … là các nhà cung cấp những thiết bị họ MCS-51 được cấp giấy phép bảng quyền
thứ 2. 8051 là bộ vi điều khiển đầu tiên được thương mại hoá trên thị trường, sau đó nhiều
thế hệ khác trong họ ra đời, các đặc tính khác nhau của một số bộ vi điều khiển trong họ
này được mô tả trong bảng sau:
Loại Bộ nhớ chương trình Bộ nhớ dữ liệu Số timer
8051
8031
8751

8052
8032
8752
8951
892051
4K ROM
0K ROM
4K EPROM
8K ROM
0K ROM
8K EPROM
4K EEROM
2K EEROM
128 byte
128 byte
128 byte
256byte
256byte
256byte
256 byte
128 byte
2
2
2
3
3
3
2
0
2.2Tổng quát về phần cứng 8051.

• Sơ đồ khối và chức năng các khối.
Các bộ vi điều khiển 8051, 8031, 8751, 8951 trong họ MSC – 51 có chung một số đặc tính
như:
- 4 KB bộ nhớ loại ROM để ghi các chương trình điều khiển.
- 128 byte RAM.
- 4 cổng vào ra 8 bit.
- 2 bộ định thời (timer) 16 bit.
- Một cổng giao tiếp nối tiếp chuẩn RS 232.
1
- Có thể quản lý được 64 KB bộ nhớ mở rộng cho chương trình và 64 KB bộ nhớ mở
rộng cho dữ liệu.
- Một bộ xử lý các phép toán logic có thể thao tác trên từng bit.
- 210 bit RAM nội được địa chỉ hoá.
- Bộ nhân/chia 4 µs.
Cấu trúc kết nối phần cứng của các bộ vi điều khiển trong họ gần tương tự như nhau, một
số khác biệt giữa chúng cũng được biểu diễn trên sơ đồ khối hình 8.2.

Khối xử lý trung tâm (CPU) nhận tín hiệu xung nhịp từ bộ dao động, tần số ra của bộ tạo
dao động sẽ tuỳ thuộc vào tần số thạch anh bên ngoài. Hầu hết các bộ vi điều khiển trong
họ đều có ít nhất 128 byte RAM bên trong. Các thanh ghi thông thường nằm trong phần
RAM. Ngoài 8031/32 các vi điều khiển còn lại đều có bộ nhớ ROM lưu trữ chương trình
điều khiển. Bộ nhớ ROM này có thể là Mask-ROM chỉ lập trình được bởi nhà sản xuất, có
thể là EPROM hoặc EEROM có thể lập trình lại nhiều lần bởi người sử dụng.
Các bộ định thời lập trình được có thể đếm theo xung cung cấp từ bên ngoài hoặc xung
chuẩn từ bộ tạo dao động, có bộ đếm này có ứng dụng rất phổ biến trong điều khiển tự
động.
Bộ điều khiển Bus cung cấp các tín hiệu điều khiển giao tiếp với bên ngoài, và kiểm soát
hoạt động của các cổng vào ra dữ liệu song song. Hai trong bốn cổng vào ra song song (P0
1
TIMER 2

(8032, 8052)
TIMER 1
TIMER 0
ROM
0K – 8031/32
4K – 8051/8951
8K – 8052/8752
128 Byte
RAM
128 byte
RAM
(8032, 8052)
OTHER
REGISTER
INTERRUPT
CONTROL
CPU
Oscillator
BUS
CONTROL
I/O
PORTS
SERIAL
PORT
P0 P2 P1 P3
Address/data
TxD RxD
ALE
PSEN
EA

RST
T0
T1
T2
T2EX
Serial Port
Timer 0
Timer 1
Timer 2 (8032/52)
INT0INT1
Hình 8.2: Sơ đồ khối vi điều khiển MCS – 51.
và P2) có thể sử dụng làm các Bus địa chỉ và dữ liệu trong chế độ giao tiếp bộ nhớ ngoài.
Cổng vào ra nối tiếp có hai đường truyền và nhận dữ liệu nối tiếp với các thiết bị khác.
Bộ điều khiển ngắt tích hợp trong chip cho phép nhận hai yêu cầu ngắt cung cấp thẳng từ
bên ngoài, hoặc từ cổng nối tiếp và các bộ định thời bên trong.
• Các tín hiệu của 8051.
8051/8951 đều có 40 chân tín hiệu giống nhau. Ngoài các chân nhận các nguồn nuôi và các
linh kiện tạo dao động, các chân còn lại hoạt động giống như các đường vào ra. Tuy nhiên,
trong đó có 24 chân có hai công dụng, mỗi đường này có thể hoạt động như đường xuất
nhập, hoặc như đường điều khiển, hoặc là một đường trong của BUS dữ liệu và BUS địa
chỉ. Các cổng vào ra song song thường có cấu trúc cài.
Các thiết kế của 8051 có thể ở hai chế độ: chế độ tối thiểu, hoặc chế độ mở rộng bộ nhớ
hoặc các thành phần khác. Mỗi cổng 8 đường có thể hoạt động giống như một đơn vị giao
tiếp với các thiết bị vào ra song song như: máy in, các bộ biến đổi A/D, D/A …, hoặc mỗi
đường có thể điều khiển một cách độc lập để có thể giao tiếp với các thiết bị chỉ yêu cầu
một bit như: các công tắc, các LED, các solenoid, đóng mở động cơ…. Việc giao tiếp theo
từng bit, có thể điều khiển bằng các lệnh thao tác bit là một điểm mạnh của các bộ vi điều
khiển so với các bộ vi xử lý thông thường.
Cổng 0: Cổng 0 (các chân 32–39) là một cổng hai chức năng. Trong các thiết kế tối thiểu
(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ế

mở rộng về bộ nhớ, nó là Bus đa hợp giữa BUS địa chỉ và BUS dữ liệu.
Cổng 1: Cổng 1 (các chân 1–8) là một cổng vào ra thông thường. Các đường trong cổng
được ký hiệu P1.0, P1.1, P1.2,.… Cổng1 không có chức năng khác, vì vậy chúng chỉ được
dùng cho giao tiếp với các thiết bị ngoài.
Cổng 2: Cổng 2 (các chân 21–28): là một cổng có công dụng kép, nó được dùng như các
đường vào ra, 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.
Cổng 3: Cổng 3 (các chân 10–17): là một cổng công dụng kép. Các đường của cổng này có
nhiều chức năng. Ngoài công dụng như các đường vào ra thông thường, chúng còn có các
công dụng khác như biểu diễn ở bảng sau:
Bit Tên Địa chỉ bit Chức năng
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RxD
TxD
INT0
INT1
T0
T1
WR
RD
B0H
B1H
B2H
B3H

B4H
B5H
B6H
B7H
Nhận dữ liệu cho cổng nối tiếp.
Truyền dữ liệu cho cổng nối tiếp.
Nhận tín hiệu yêu cầu ngắt (0) từ bên ngoài.
Nhận tín hiệu yêu cầu ngắt (1) từ bên ngoài.
Ngõ vào bên ngoài cho Timer 0.
Ngõ vào bên ngoài cho Timer 1.
Tín hiệu điều khiển ghi cho bộ nhớ bên ngoài.
Tín hiệu điều khiển đọc cho bộ nhớ bên ngoài.
8051 có 4 tín hiệu điều khiển.
1
PSEN (Program Store Enable): PSEN (chân 29) là tín hiệu ngõ ra, nó là tín hiệu điều
khiển để cho phép bộ nhớ chương trình mở rộng, trong hệ thống tín hiệu này 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 mã lệnh. Các mã nhị phân của chương trình, được
đọc từ EPROM qua BUS dữ liệu đưa vào thanh ghi lệnh của 8051 để giải mã. Khi thi hành
chương trình trong ROM nội (8051), PSEN sẽ ở mức không tích cực (mức cao).
ALE (Address Latch Enable): Tín hiệu ra ALE (chân 30), có chức năng tương tự như
trong các vi xử lý 8085, 8088, 8086, nó được dùng cho việc tách kênh các Bus đa hợp (địa
chỉ và dữ liệu). Trong cấu hình bộ nhớ mở rộng (tín hiệu EA = 1), cổng 0 vừa là BUS dữ
liệu vừa là byte thấp của BUS địa chỉ, ALE được sử dụng để chốt địa chỉ vào một bộ cài
bên ngoài trong chu kỳ xung nhịp đầu tiên của chu kỳ truy cập bộ nhớ. Sau đó, các đường
cổng 0 dùng để xuất hoặc nhập dữ liệu trong thời gian còn lại của chu kỳ truy cập bộ nhớ.
Tín hiệu ALE có tần số bằng 1/6 lần tần số dao động trên chip, nó 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 8051 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.
Chân này cũng được làm ngõ vào cho xung lập trình cho EPROM trong 8051.

EA (External Access): Tín hiệu vào EA (chân 31) thường được nối lên mức cao (+5V)
hoặc mức thấp (GND). Nếu ở mức cao, 8051 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ì không có bộ nhớ chương trình trong
chip. Nếu EA được nối mức thấp, bộ nhớ bên trong chương trình 8051 sẽ bị cấm, và
chương trình thi hành từ EPROM mở rộng. EA còn được dùng làm ngõ vào cấp điện áp
21V khi lập trình cho EPROM trong 8051.
RST (Reset): Ngõ vào RST (chân 9) là ngõ reset của 8051. 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 8051 được nạp những giá trị
thích hợp để khởi động hệ thống.
Các ngõ vào bộ dao động trên chip (X1, X2): Như trong sơ đồ khối, 8051 có một bộ dao
động trong chip. Nó thường được nối với một thạch anh giữa hai chân 18 và 19 cùng với
các tụ điện. Với 8051 tần số thạch anh thông thường là 12 MHz.
Các chân nguồn: 8051 hoạt động với nguồn đơn +5V. V
CC
được nối vào chân 40 và V
SS
(GND) được nối vào chân 20.
• Tổ chức bộ nhớ của 8051.
Các hệ thống vi xử lý thường thực hiện việc phân biệt các vùng nhớ riêng cho dữ liệu và
chương trình, vì vậy trong máy tính thông thường chương trình và dữ liệu sẽ được nạp từ
đĩa vào các vùng nhớ khác nhau của RAM hệ thống. Các bộ vi điều khiển thực hiện việc
quản lý bộ nhớ theo một cách khác.
8051 không có đĩa để lưu trữ các chương trình, nó có dung lượng nhớ giới hạn ngay bên
trong chip. Dung lượng nhớ này sẽ được sử dụng riêng rẽ cho chương trình và dữ liệu. Tuy
nhiên chúng có thể được mở rộng bê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ớ RAM trên chip được sử dụng cho rất nhiều mục đích như: phần lưu trữ đa dụng,
phần lưu trữ địa chỉ hoá từng bit, các thanh ghi đa năng và các thanh ghi chức năng đặc
biệt. Có hai đặc tính nổi bật trong vi điều khiển là: Các thanh ghi và các cổng vào ra được

1
bản đồ hoá trong bộ nhớ RAM, chúng có thể truy cập giống như các ô nhớ bất kỳ khác.
Ngăn xếp cũng nằm ở bộ nhớ RAM bên trong chip, mà không ở RAM ngoài như các hệ
thống vi xử lý thông thường
• Mô tả về bộ nhớ RAM trong chip của 8051.
RAM bên trong 8051 mô tả trên hình 8.3 bao gồm: 4 tập thanh có địa chỉ 00H tới 1FH,
mỗi tập có 8 thanh ghi được ký hiệu từ R0 tới R7, việc đổi qua các tập thanh ghi khác nhau
được thực hiện bằng hai bit của thanh ghi trạng thái. Vùng nhớ địa chỉ hoá theo bit có địa
chỉ từ 20H tới 2FH, việc truy cập các bit này theo các địa chỉ từ 00 tới 7FH. Vùng nhớ đa
dụng từ 30H tới 7FH. Và các thanh ghi chức năng đặc biệt từ 80H tới FFH, một số thanh
ghi trong vùng này cũng được địa chỉ hoá theo bit.
RAM đa dụng: Ngoài 80 byte RAM đa dụng chiếm các địa chỉ từ 30H–7FH, 32 byte dưới
cùng từ 00H đến 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).
Mọi địa chỉ trong vùng RAM đa dụng đều có thể truy xuất với chế độ đị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, có thể
dùng lệnh sau:
MOV A, 5FH
Lệnh này di chuyển 1 byte dữ liệu dùng định vị địa chỉ trực tiếp để xác định “địa chỉ
nguồn” (5FH). Đích nhận dữ liệu là thanh ghi tích lũy A.
RAM nội cũng có thể được truy xuất bằng định vị đị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 ở 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ỉ trực tiếp để di chuyển dữ liệu “được trỏ bởi R0” vào thanh ghi tích lũy A.
RAM địa chỉ hoá từng bit: 8051 chứa 210 bit được địa chỉ hoá, trong đó 128 bit 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,... bằng một lệnh. Đ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ự. Ngoài ra, các cổng
vào ra cũng được địa chỉ hoá từng bit, làm đơn giản phần mềm xuất nhập từng bit.
Có 128 bit được địa chỉ hoá đ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ụ, để lập bit 67H, ta
dùng lệnh sau:
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ý công việc tương tự sẽ
phải thi hành như sau:
MOV A, 2CH ; đọc cả byte
ORL A, #10000000B ; set MSB
MOV 2CH,A ; ghi lại cả byte
SETB 67H
1
Các tập thanh ghi (register banks): 32 byte thấp của bộ nhớ nội là dành cho các tập thanh
ghi. Tập lệnh của 8051 cho phép truy cập 8 thanh ghi (R0 đến 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 của RAM vào thanh ghi tích lũy:
MOV A, R5
Đây là lệnh 1 byte dùng định vị địa chỉ trực tiếp thanh ghi. Tất nhiên, công việc trên cũng̣
có thể thực hiện bằng lệnh 2 byte dùng định vị địa chỉ trực tiếp nằm trong byte thứ hai:
MOV A, 05H
Các lệnh dùng các định vị trực tiếp thanh ghi (R0 đến R7) sẽ ngắn hơn và nhanh hơn các
lệnh tương ứng nhưng dùng định vị địa chỉ trực tiếp. Các dữ liệu được sử dụng thường
xuyên trong chương trình, nên dùng một trong các thanh ghi này.
1
General
Purpose
RAM
7F 7E 7D 7C 7B 7A 79 78
77 76 75 74 73 72 71 70

6F 6E 6D 6C 6B 6A 69 68
67 66 65 64 63 62 61 60
5F 5E 5D 5C 5B 5A 59 58
57 56 55 54 53 52 51 50
4F 4E 4D 6C 4B 4A 49 48
47 46 45 44 43 42 41 40
3F 3E 3D 3C 3B 3A 39 68
37 36 35 34 33 36
2
31 30
2F 2E 2D 2C 2B 2A 29 28
27 26 25 24 23 22 21 20
1F 1E 1D 1C 1B 1A 19 18
17 16 15 14 13 12 11 10
0F 0E 0D 0C 0B 0A 09 08
07 06 05 04 03 02 01 00
Bank 3
Bank 2
Bank 1
Bank 0 (default)
87 86 85 84 83 82 81 80
Not bit addressable
Not bit addressable
Not bit addressable
Not bit addressable
8F 8E 8D 8C 8B 8A 89 88
Not bit addressable
Not bit addressable
Not bit addressable
Not bit addressable

Not bit addressable
97 96 95 94 93 92 91 90
Not bit addressable
A7 A6 A5 A4 A3 A2 A1 A0
B7 B6 B5 B4 B3 B2 B1 B0
9F 9E 9D 9C 9B 9A 99 98
A7 A6 A5 A4 A3 A2 A1 A0
AF AE ADAC ABAA A9 A8
BC BB BA B9 B8
D7 D6 D5 D4 D3 D2 - D0
E7 E6 E5 E4 E3 E2 E1 E0
F7 F6 F5 F4 F3 F2 F1 F0
P0
SP
DPL
DPH
PCON
TCON
TMOD
TL0
TL1
TH0
TH1
P1
SCON
SBUF
P2
IE
P3
IP

PSW
Acc
B
Hình 8.3: Vùng nhớ RAM trong chip của 8051
00
07
08
0F
10
17
18
1F
20
2F
30
7F
FF
F0
E0
D0
B8
B0
A8
A0
99
98
90
8D
87
88

89
8A
8B
8C
80
81
82
83
Tập thanh ghi có thể chuyển đổi, bằng cách thay đổi các bit chọn tập thanh ghi trong từ
trạng thái (PSW). Giả sử rằng tập thanh ghi thứ 3 được chọn, thì 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 tập thanh ghi” cho phép “chuyển hướng” chương trình nhanh và hiệu
quả, từng phần của chương trình sẽ có một bộ thanh ghi riêng không phụ thuộc vào các
phần khác.
• Các thanh ghi chức năng đặc biệt:
Các thanh ghi nội của trong hầu hết các vi xử lý được truy xuất ngầm định trong tập 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 8051 là một phần của RAM nội. 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ị truy cập trực tiếp, nên chúng không được đặt trong RAM nội). Đây là lý do giải thích tại
sao 8051 có nhiều thanh ghi. Cũng như R0 đến R7, 21 thanh ghi chức năng đặc biệt (SFR:
Special Function Register) của 8051 nằm trong 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 đặt tên. Chỉ có 21 địa chỉ SFR là
được định nghĩa.
Ngoài thanh ghi tích lũy (A) có thể được truy xuất ngầm bằng định vị ngầm định, đa số các
SFR được truy xuất bằng định vị địa chỉ trực tiếp. Một số SFR có thể được địa chỉ hoá theo
bit hoặc theo byte. Người lập trình phải chú ý khi truy xuất theo bit và theo byte. Ví dụ
lệnh: SETB 0E0H

Sẽ lập bit 0 trong thanh ghi tích lũy, các bit khác không đổi. Có thể thấy rằng E0H đồng
thời là địa chỉ byte của 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. Nhưng vì lệnh SETB chỉ tác động trên bit, nên địa chỉ bit sẽ tác động
trong lệnh.
Từ trạng thái chương trình (PSW: Program Status Word): nằm ở địa chỉ D0H chứa các bit
trạng thái như trong bảng sau:
BIT Tên Địa chỉ Chức năng
PSW.7
PSW.6
PSW.5
PSW.4
PSW.3
PSW.2
PSW.1
PSW.0
CY
AC
F0
RS1
RS0
OV
-
P
D7
D6
D5
D4
D3
D2
D1

D0
Cờ nhớ.
Cờ nhớ phụ.
Cờ Zero.
Chọn tập thanh ghi.
Chọn tập thanh ghi.
Cờ tràn.
Dự phòng.
Cờ chẵn lẻ.
* Cờ nhớ (CY): Thông thường được dùng cho các lệnh số học: nó sẽ được lập 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:
1
ADD A, #1
sẽ trả về thanh ghi tích lũy kết quả 00H và lập cờ nhớ trong PSW.
Cờ nhớ cũng có thể xem như một thanh ghi 1 bit cho các lệnh xử lý bit. Ví dụ, lệnh sau sẽ
AND bit 25H với cờ nhớ và đặt kết quả nằm trong cờ nhớ:
ANL C, 25H
* Cờ nhớ phụ: Khi cộng các số BCD, cờ nhớ phụ (AC) được lập 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
hiệu chỉnh thập phân bằng lệnh DAA, để các kết quả lớn hơn 9 trở về tầm từ 0 ÷ 9.
* Cờ Zero (F0): là1 bit cờ được sử dụng trong nhiều chức năng, nó được lập bằng 1 khi kết
quả các phép tính bằng 0.
* Các bit chọn tập thanh ghi (RS0 và RS1): xác định tập thanh ghi đượ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ụ, ba lệnh
sau cho phép truy cập tập thanh ghi thứ 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”. Tức là, lệnh SETB RS1 hoàn toàn giống như lệnh SETB 0D4H.
* Cờ tràn (OV): được lập sau một lệnh cộng hoặc trừ nếu xảy ra tràn số học. 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 dải kết quả
thích hợp. Khi cộng các số không dấu thì không cần xét tới OV. Các kết quả lớn hơn +127
hoặc nhỏ hơn -128 sẽ lập OV. Ví dụ, phép cộng sau bị tràn và bit OV được lập:
0FH + 7FH = 8EH tức là 15 +127 = 142.
Kết quả là một số có dấu 8EH được xem như -116, không phải là kết quả đúng (142), vì
vậy bit OV được lập, khi kiểm tra cờ OV chúng ta có thể hiệu chỉnh lại kết quả cho thích
hợp.
Thanh ghi B: nằm ở địa chỉ F0H được dùng cùng với thanh ghi tích lũy A trong các lệnh
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ư một thanh
ghi đa dụng. Nó được địa chỉ hoá theo bit (F0H đến F7H).
Con trỏ ngăn xếp (SP): là một thanh ghi 8 bit có đị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ấ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, và
lệnh lấy dữ liệu ra khỏi ngăn xếp sẽ giảm SP. Ngăn xếp của 8051 đượ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 byte đầu
của 8051. Lệnh sau sẽ khởi động lại SP để đỉnh ngăn xếp bắt đầu tại 60H:
MOV SP, #5FH
Sau lệnh trên ngăn xếp của 8051 bị giới hạn trong 32 byte, vì địa chỉ cao nhất của RAM
trên chip là 7FH. Giá trị 5FH được dùng vì SP sẽ tăng lên 60H trước khi cất byte dữ liệu
đầu tiên.
1
Khi người sử dụng không khởi động lại con trỏ ngăn xếp, thì SP lấy giá trị mặc định là
07H khi reset hệ thống, và kết quả là ngăn đầu tiên để cất dữ liệu có địa chỉ là 08H. Khi đó
các tập thanh ghi 1 (có thể cả 2 và 3) sẽ không dùng được vì vùng RAM này đã được sử
dụng làm ngăn xếp.

Ngăn xếp được truy xuất trực tiếp bằng các 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) hay các lệnh trở về (RET, RETI) để cất và lấy lại bộ đếm chương trình.
Thanh ghi con trỏ dữ liệu (DPTR – data pointer register): được dùng để truy xuất bộ nhớ
ngoài, nó là một thanh ghi 16 bit có đị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 định vị tức thời để nạp dữ liệu 55H vào thanh ghi A. Lệnh thứ hai cũng
dùng định vị tức thời, lần này để nạp dữ liệu 16 bit (1000H) vào con trỏ dữ liệu. Lệnh thứ
ba dùng định vị gián tiếp để di chuyển dữ liệu trong A (55H) đến RAM ngoài có địa chỉ
chứa trong DPTR (1000H).
Các thanh ghi cổng vào ra: Các cổng của 8051 bao gồm cổng 0 ở địa chỉ 80H, cổng 1 ở
địa chỉ 90H, cổng 2 ở địa chỉ A0H và cổng 3 ở địa chỉ B0H. Tất cả các cổng đều được địa
chỉ hoá từng bit. Điều đó cung cấp một khả năng giao tiếp thuận lợi theo bit. Ví dụ nếu một
động cơ được nối qua một cuộn dây có transistor lái đến bit 7 của Cổng 1, nó có thể được
bật và tắt bằng một lệnh:
SETB P1.7 ; bật motor
CLR P1.7 ; tắt motor
Dấu chấm trong lệnh để xác định một bit trong cổng. Trình hợp dịch sẽ thực hiện việc
chuyển đổi ra địa chỉ tương ứng của bit đó, ví dụ hai lệnh sau thực hiện cùng một công
việc:
CLR P1.7
CLR 97H
Xét một ví dụ khác, giao tiếp đến một thiết bị với một bit trạng thái gọi là BUSY, được lập
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 lập thì nhảy tới nhãn WAIT”. Nói cách khác

“quay trở lại và kiểm tra lần nữa”.
Các thanh ghi của bộ định thời (timer): 8051 có hai bộ định thời/đếm 16 bit được dùng
cho việc định thời hoặc đếm sự kiện. Timer 0 có địa chỉ 8AH (TL0: byte thấp) và 8CH
(TH0: byte cao). Timer 1 có địa chỉ 8BH (TL1: byte thấp) và 8DH (TH1: byte cao). Việc
thiết lập hoạt động các timer được thực hiện bằng cách nạp các giá trị thích hợp cho thanh
ghi chế độ Timer (TMOD - Timer Mode) ở địa chỉ 89H, và thanh ghi điều khiển timer
(TCON – Timer Control) ở địa chỉ 88H. Chỉ có TCON được địa chỉ hoá từng bit.
Các thanh ghi cổng nối tiếp: 8051 có một cổng nối tiếp trong 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 với các IC khác có giao tiếp
1
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 chế độ hoạt động khác nhau được lập
trình qua thanh ghi điều khiển cổng nối tiếp (SCON) được địa chỉ hoá từng bit có địa chỉ
98H.
Các thanh ghi ngắt: 8051 có cấu trúc điều khiển ngắt, cho phép 5 nguồn yêu cầu ngắt, với
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
dữ liệu vào thanh ghi cho phép ngắt (IE) ở địa chỉ A8H. Cả hai thanh ghi được địa chỉ hoá
từng bit.
Thanh ghi điều khiển công suất: Thanh ghi điều khiển công suất (PCON) ở địa chỉ 87H
bao gồm nhiều bit điều khiển. Ý nghĩa của chúng được tóm tắt trong bảng sau:
BIT Tên ký hiệu Chức năng
7
6
5
4
3
2
1
0

SMOD
-
-
-
GF1
GF0
PD
IDL
Khi lập cho phép tăng gấp đôi tốc độ baud cổng nối tiếp.
Không định nghĩa.
Không định nghĩa.
Không định nghĩa.
Cờ đa dụng 1.
Cờ đa dụng 0.
Khi lập cho phép 8051 hoạt động trong chế độ giảm
nguồn (Power down).
Khi lập cho phép 8051 hoạt động trong chế độ rỗi (Idle).
Trong chế độ rỗi CPU sẽ không thực hiện một lệnh nào khác. Lệnh lập bit IDL là lệnh cuối
cùng mà CPU thực hiện trước khi chuyển qua chế độ rỗi. Trong chế độ rỗi nguồn xung nhịp
bên trong sẽ bị cắt không cung cấp tới CPU, nhưng vẫn cung cấp tới bộ điều khiển ngắt, các
bộ định thời và cổng nối tiếp. Trạng thái hiện tại của CPU và các thanh ghi sẽ được giữ
nguyên, các cổng vào ra cũng được duy trì mức logic hiện tại. ALE và PSEN được giữ ở
mức cao. Chế độ rỗi sẽ kết thúc khi có yêu cầu ngắt (được cho phép), bit IDL sẽ được xoá.
Tương tự như chế độ rỗi, lệnh lập bit PD sẽ là lệnh cuối cùng mà CPU thực hiện trước khi
chuyển qua chế độ giảm nguồn. Trong chế độ giảm nguồn, bộ dao động tạo xung nhịp sẽ
ngưng hoạt động, điều này làm tất cả các khối chức năng bên trong ngưng hoạt động. Nội
dung của Ram nội sẽ được giữ nguyên, mức logic của các cổng cũng được giữ nguyên và
ALE và PSEN sẽ được giữ ở mức thấp. Chế độ này chỉ được thoát khỏi khi reset hệ thống.
Trong chế độ giảm nguồn, nguồn cung cấp Vcc có thể giảm xuống 2V. Chú ý không được
giảm nguồn xuống 2V trước khi chuyển qua chế độ giảm nguồn, và phải phục hồi lại Vcc =

5V sau 10 chu kỳ xung nhịp trước khi tín hiệu RST quay về mức thấp trở lại.
• Giao tiếp với bộ nhớ ngoài.
8051 có khả năng mở rộng thêm 64K bộ nhớ chương trình và 64K bộ nhớ dữ liệu bên
ngoài. Do đó có thể dùng thêm ROM và RAM nếu cần. Cũng có thể sử dụng chức năng mở
rộng dung lượng bộ nhớ, để tăng thêm dung lượng cổng vào ra, lúc này các cổng vào ra sẽ
được truy cập giống như các ô nhớ mở rộng.
1
Khi sử dụng bộ nhớ ngoài, cổng 0 không còn là một cổng vào ra nữa. Nó được ghép kênh
giữa phần thấp của BUS địa chỉ (A0–A7), và BUS dữ liệu (D0–D7). Tín hiệu ALE sẽ tác
động mức cao khi bắt đầu mỗi chu kỳ truy cập bộ nhớ để chốt byte thấp của địa chỉ. Cổng 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ỳ truy cập bộ nhớ, byte thấp của địa chỉ được cấp ra cổng 0 và
được chốt bằng xung ALE. Có thể sử dụng một IC chốt 74HC373 (hoặc tương đương) để
giữ byte địa chỉ thấp trong phần còn lại của chu kỳ truy cập bộ nhớ. Trong nửa sau của chu
kỳ bộ nhớ cổng 0 được dùng như BUS dữ liệu, chiều truyền dữ liệu trên nó sẽ tùy theo
lệnh.
Truy xuất bộ nhớ chương trình ngoài: Bộ nhớ chương trình ngoài là một bộ nhớ ROM
được cho phép bởi tín hiệu PSEN. Hình 8.4 mô tả một ví dụ về cách nối một EPROM vào
8051:
Một chu kỳ máy của 8051 gồm 12 chu kỳ xung nhịp. Nếu ngõ vào bộ dao động nội là
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 1 byte 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 trình bày trên
hình 8.5:
1
Port 0
Port 2
8051
ALE
PSEN

G
D Q
D
0
– D
7
A
0
– A
7
A
8
– A
15
OE
EA
EPROM
74HC373
Hình 8.4: Truy cập bộ nhớ chương trình bên ngoài.
S1 S2 S3 S4 S5 S6 S1
P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2
PCH (Program counter high byte)
PCH
PCL
PCL
Opcode
Byte 2
Hình 8.5: Giản đồ thời gian truy cập bộ nhớ chương trình ngoài.
Port 0
Port 2

PSEN
ALE
CK
Truy xuất bộ nhớ dữ liệu ngoài: 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 (P3.6 và P3.7). Việc truy xuất bộ nhớ dữ liệu
ngoài có thể thực hiện với lệnh MOVX dùng con trỏ dữ liệu (DPTR), 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à 8051 cũng giống như EPROM, do đó
cũng có thể mở rộng bộ nhớ RAM lên đến 64Kbyte. Tín hiệu yêu cầu đọc RD của 8051
được nối tới chân cho phép xuất (OE) của RAM, và tín hiệu yêu cầu ghi WR được nối tới
chân cho phép ghi (WR) của RAM.
Giản đồ thời gian cho lệnh đọc bộ nhớ dữ liệu ngoài biểu diễn trên hình 8.6 cho lệnh đọc
(MOVX A, @DPTR).
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 cổng 0, trong chu kỳ ghi RD giữ mức cao.
1
S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6
DPL Data in
Hình 8.6: Giản đồ thời gian truy cập bộ nhớ dữ liệu ngoài.
PCH DPH (Data pointer high byte)
PCL
Opcode
ALE
PSEN
RD
Port 2
Port 0
Hình 8.7: Truy cập bộ nhớ ngoài theo cấu trúc trang.
Port 0
P2.0

8051
ALE
PSEN
G
D Q
D
0
– D
7
A
0
– A
7
A
8

OE
EA
EPROM
74HC373
P2.1
WE
NC
RD
WR
A
9
CS
Bằng các định vị địa chỉ gián tiếp thanh ghi sử dụng R0 và R1, cũng có thể truy cập bộ nhớ
ngoài theo cấu hình phân trang. Trong chế độ này cổng 2 được truy cập giống như một cổng

vào ra thông thường. Cổng 0 vẫn được sử dụng làm Bus đa hợp (cung cấp 8 bit địa chỉ
trong nửa chu kỳ đầu, sau đó sử dụng làm Bus dữ liệu). Như vậy các địa chỉ cung cấp từ
cổng 0 cho phép truy cập 256 byte nhớ mỗi trang, việc chọn trang có thể sử dụng các bit
một cổng khác. Hình 8.7 mô tả sơ đồ ghép nối 8051 với dung lượng RAM 1KB truy cập
theo cách phân trang, với các trang được chọn bằng P2.0 và P2.1.
Khi các bit P2.0 và P2.1 được thiết lập để chọn một trong 4 trang, thì lệnh MOVX sẽ đọc
hoặc ghi dữ liệu trong trang đó. Ví dụ với sơ đồ hình 8.7, nếu P2.0 = P2.1 = 0 thì các lệnh
sau sẽ đọc dữ liệu trong ô nhớ 0050H của RAM vào thanh ghi chứa:
MOV R0,#50H
MOVX A,@R0
Để đọc được địa chỉ 3FFH của RAM thì hai bit chọn trang cần được lập lên 1, Các lệnh
sau có thể sử dụng:
SETB P2.0
SETB P2.1
MOV R0,#0FFH
MOV A,@R0.
Giải mã địa chỉ: Nếu cần sử dụng nhiều EPROM và/hoặc nhiều RAM bên ngoài, 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ụ trên hình
1
CS
CS
CS
OE
D
0
–D
7
A
0
–A

12
CS
CS
CS
OE
D
0
–D
7
A
0
–A
12
WE
PSEN
RD
WR
0
1
2
3
7
Chọn mạch cho các
bộ nhớ khác
C
B
A
A13
A14
A15

A0 –A12
A0 –A12
G
1
G
2A
G
2B
V
CC
Hình 8.8: Giải mã địa chỉ trong hệ thống có nhiều bộ nhớ ngoài.
8.8 mô tả một hệ thống với nhiều bộ nhớ EPROM 2764 (8 KB) cho chương trình, và nhiều
bộ nhớ RAM 6264 (8KB) cho dữ liệu.
Bộ nhớ ngoài sử dụng chung cho chương trình và dữ liệu: 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. Đó là làm cách
nào phần mềm có thể sửa đổi chương trình và ghi trở lại khi nó được chứa trong bộ nhớ
“chỉ đọc”. Cách giải quyết là sử dụng chung một vùng nhớ RAM cho cả chương trình và dữ
liệu. Điều này có thể thực hiện bằng cách nối đường OE của RAM vào một mạch logic
AND của PSEN và RD như mô tả trên hình 8.9. Lúc này một chương trình có thể được nạp
vào RAM bằng cách ghi RAḾ như bộ nhớ dữ liệu, và thực hiện bằng cách truy xuất RAḾ
như bộ nhớ chương trình.
• Hoạt động reset.
8051 đượ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. Sau khi reset thanh ghi đếm chương trình được đặt lại 0000H. Khi RST trở lại
mức thấp, việc thi hành chương trình luôn bắt đầu ở địa chỉ đầu tiên trong bộ nhớ chương
trình (địa chỉ 0000H). Nội dung của RAM nội không bị thay đổi bởi lệnh Reset.
2.2.1 Hoạt động của bộ định thời (timer).
• Giới thiệu.
Bộ định thời bên trong vi điều khiển là một bộ đếm được tạo thành từ một chuỗi các flip-
flop nối tiếp với nhau, mỗi flip-flop là một bộ chia 2. Ngõ vào của Timer là nguồn xung

nhịp. Ngõ ra của tầng cuối làm xung nhịp cho flip-flop báo tràn của timer (còn gọi là cờ của
timer), cờ sẽ được kiểm tra bằng phần mềm để tạo ra ngắt. Giá trị nhị phân trong các flip-
flop của timer thay đổi như trong một bộ đếm nhị phân, nó sử dụng cho việc đếm số xung
nhịp (hoặc các sự kiện) từ thời điểm timer được khởi động. Ví dụ timer 16 bit sẽ đếm lên từ
0000H đến FFFFH. Cờ báo tràn sẽ lên 1 khi số đếm tràn từ FFFFH đến 0000H. 8051 có hai
timer 16 bit, mỗi timer có bốn chế độ làm việc. Các timer được sử dụng để: định khoảng
thời gian, đếm sự kiện hoặc tạo tốc độ baud cho cổng nối tiếp trong 8051.
Trong các ứng dụng định khoảng thời gian, các timer được lập trình đếm trong một khoảng
nhất định và lập cờ tràn để thông báo. Cờ sẽ được chương trình kiểm tra, để định thời thực
hiện một tác động như: kiểm tra trạng thái của các ngõ vào hoặc tác động các ngõ ra. Một
số ứng dụng khác có thể sử dụng timer tạo xung nhịp để đo khoảng thời giữa hai sự kiện (ví
dụ: đo độ rộng xung).
Đếm sự kiện dùng để xác định số lần xảy ra của một sự kiện. Một “sự kiện” có thể là tác
động ngoài nào đó làm chuyển trạng thái ở một ngõ vào của 8051. Các timer cũng có thể
cung cấp xung nhịp xác định tốc độ baud cho cổng nối tiếp trong 8051.
1
RAM
WR
RD
Psen
Hình 8.9: Sử dụng bộ nhớ ngoài chung cho chương trình và dữ liệu.
Việc truy xuất các timer của 8051 sử dụng sáu thanh ghi chức năng đặc biệt trong bảng
sau:
SFR Chức năng Địa chỉ Địa chỉ theo bit
TCON
TMOD
TL0
TL1
TH0
TH1

Điều khiển
Chế độ
Byte thấp của timer 0
Byte thấp của timer 1
Byte cao của timer 0
Byte cao của timer 1
88H
89H
8AH
8BH
8CH
8DH
Có
Không
Không
Không
Không
Không
• Thanh ghi chế độ của timer (TMOD).
Thanh ghi TMOD chứa hai nhóm 4 bit dùng để đặt chế độ làm việc cho Timer 0 và Timer 1
như mô tả trong bảng sau:
BIT Tên Timer Chức năng
7
6
5
4
3
2
1
0

GATE
C/T
M1
M0
GATE
C/T
M1
M0
1
1
1
1
0
0
0
0
Khi =1 timer chỉ chạy khi INT1 ở mức cao.
1: đếm sự kiện bên ngoài; 0: định khoảng thời gian
bit định chế độ cho timer 1.
bit định chế độ cho timer 1.
Bit cổng cho timer 0
Bit chọn counter/timer cho timer 0
bit định chế độ cho timer 0.
bit định chế độ cho timer 0.
Bốn chế độ của mỗi timer sẽ được chọn tuỳ theo giá trị khởi động cho các bit M1 và M0
tương ứng của nó như mô tả trong bảng sau:
M1 M0 Chế độ Chức năng
0
0
1

1
0
1
0
1
0
1
2
3
Chế độ định thời 13 bit.
Chế độ định thời 16 bit.
Chế độ tự động nạp lại 8 bit.
Chế độ định thời tách biệt:
Timer 0: TL0 là bộ định thời 8 bit điều khiển bởi chế độ
của timer 0. TH0 tương tự nhưng được điều khiển bởi
chế độ của timer 1.
Timer 1: ngưng hoạt động.
Thanh ghi TMOD không được địa chỉ hoá theo bit vì không cần thiết. Thông thường giá trị
của nó được nạp một lần khi bắt đầu chương trình, để khởi động chế độ của các timer. Sau
đó các timer có thể cho bắt đầu hoạt động hoặc ngưng lại … bằng cách truy cập các thanh
ghi đặc biệt khác của timer.
• Thanh ghi điều khiển timer (TCON).
1
Thanh ghi TCON chứa các bit trạng thái và các bit điều khiển cho Timer 0 và Timer 1 như
mô tả trong bảng sau:
BIT Tên Địa chỉ Chức năng
7
6
5
4

3
2
1
0
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
8FH
8EH
8DH
8CH
8BH
8AH
89H
88H
Cờ báo tràn của timer 1, được lập bởi phần cứng khi
xảy ra tràn; được xoá bằng phần mềm hoặc phần cứng
khi phục vụ chương trình ngắt.
Bit điều khiển chạy của timer 1. Được lập xoá bằng
phần mềm để điều khiển timer1 on/off.
Cờ báo tràn cho timer 0.
Bit điều khiển chạy cho timer 0.
Cho phép ngắt INT1: được lập bằng phần cứng khi có
cạnh xuống ở ngõ vào INT1; được xoá bằng phần mềm
hoặc phần cứng khi phụ vụ ngắt.

Chọn kiểu tác động ngắt INT1: được lập xoá bằng phần
mềm để chọn kiểu tác động ngắt bằng cạnh xuống hoặc
bằng mức thấp.
Cho phép ngắt INT0.
Chọn kiểu ngắt cho INT0.
Bốn bit thấp của TCON không sử dụng cho các timer, chúng được sử dụng để phát hiện và
khởi động kiểu tác động cho các ngắt bên ngoài.
• Các chế độ timer và cờ báo tràn.
Các timer 0 và 1 có các chế độ hoạt động tương đương nhau, nên trong phần này chỉ số ‘x’
được sử dụng để chỉ thị cho một timer bất kỳ. Ví dụ THx có thể chỉ thị cho TH0 hoặc TH1.
1
TLx
(5 bit)
THx
(8 bit)
TFxTimer
Clock
a) Mode 0
TLx
(5 bit)
THx
(8 bit)
TFxTimer
Clock
c) Mode 2
TLx
(8 bit)
TFx
THx
(5 bit)

Timer
Clock
Nạp lại
TLx
(5 bit)
THx
(8 bit)
Timer
Clock
TL0
(8 bit)
TF0Timer
Clock
TH0
(8 bit)
TF1Timer
Clock
d) Mode 3
Hình 8.10: Các chế động hoạt động của các timer
Chế độ 0 (mode 0) - chế độ timer 13 bit: Chế độ này được thực hiện tương thích với 8048
(bộ vi điều khiển có trước 8051). Hoạt động của chế độ này biểu diễn trên hình 8.10a. 5 bit
thấp của TLx cùng với THx sẽ tạo thành bộ định thời 13 bit, 3 bit cao của TLx không sử
dụng.
Chế độ 1 – chế độ timer 16 bit: Chế độ này tương tự như chế độ 0, ngoại trừ việc các timer
hoạt động đầy đủ 16 bit (hình 8.10b). Khi nhận được xung nhịp bộ đếm sẽ đếm lên từ
0000H, và cờ tràn sẽ báo khi bộ đếm chuyển trạng thái từ FFFFH về 0000H, sau đó bộ đếm
vẫn tiếp tục đếm. Cờ báo tràn là bit TFx trong TCON có thể đọc hoặc ghi bằng phần mềm.
Chú ý MSB bộ đếm là bit 7 của THx và LSB là bit 0 của TLx. Các thanh ghi timer
(TLx/THx) có thể được đọc hoặc ghi bất cứ lúc nào bằng phần mềm.
Chế độ 2 - chế độ tự động nạp lại 8 bit: trong chế độ này TLx hoạt động như một timer 8

bit, còn THx vẫn giữ nguyên giá trị cần nạp lại. Khi số đếm tràn từ FFH đến 00H, không
những cờ timer được lập mà giá trị trong THx đồng thời được nạp vào TLx, việc đếm được
thực hiện liên tục từ giá trị trong THx lên đến FFH xuống 00H và nạp lại.… Chế độ này rất
thông dụng vì sự tràn timer xảy ra trong những khoảng thời gian nhất định và tuần hoàn
một khi đã khởi động TMOD và THx.
Chế độ 3 - chế độ timer tách biệt: trong chế độ này timer 0 tách thành hai timer 8 bit. (TL0
và TH0), TL0 có cờ báo tràn là TF0 và TH0 có cờ báo tràn là TF1. Timer 1 không hoạt
động ở chế độ 3, nhưng có thể được khởi động bằng cách chuyển sang chế độ khác. Giới
hạn duy nhất là cờ báo tràn TF1 không còn bị tác động khi timer 1 bị tràn vì nó đã được nối
tới TH0.
Khi timer 0 ở chế độ 3, có thể cho timer 1 chạy và ngưng bằng cách chuyển nó ra ngoài và
vào chế độ 3. Nó vẫn có thể được sử dụng bởi cổng nối tiếp để tạo tốc độ baud, hoặc nó có
thể được sử dụng cho các ứng dụng khác khi không cần ngắt (vì nó không còn được nối
với TF1).
• Nguồn tạo xung nhịp.
Có thể sử dụng hai nguồn tạo xung nhịp cung cấp cho các timer. Chúng được chọn bằng
cách ghi vào bit C/T (counter/timer) trong TMOD. Một nguồn tạo xung nhịp dùng cho định
khoảng thời gian, cái khác cho đếm sự kiện.
Định khoảng thời gian (interval timing): Nếu C/T = 0, hoạt động timer liên tục được chọn
và timer được dùng cho việc định khoảng thời gian. Lúc đó, timer lấy xung nhịp từ bộ dao
động trong chip. Xung nhịp ngõ ra bộ tạo dao động được giảm tần số bằng bộ chia 12 trước
khi cấp vào timer để thích hợp cho phần lớn các ứng dụng. Như vậy với thạch anh 12 MHz,
thì tốc độ xung nhịp cung cấp cho timer sẽ là1 MHz. Báo tràn timer xảy ra sau một số (cố
định) xung nhịp, tuỳ thuộc vào giá trị ban đầu được nạp vào các thanh ghi timer TLx/THx.
Đếm sự kiện (Event counting): Nếu C/T = 1, timer lấy xung nhịp từ nguồn bên ngoài.
Trong hầu hết các ứng dụng, nguồn bên ngoài này cung cấp cho timer một xung khi xảy ra
1
một “sự kiện” – timer dùng đếm sự kiện. Số sự kiện được xác định bằng phần mềm bằng
cách đọc các thanh ghi TLx/THx, vì giá trị 16 bit trong các thanh ghi này tăng thêm 1 cho
mỗi sự kiện.

Nguồn xung nhịp ngoài được cung cấp bằng các chân cổng 3. Bit 4 của cổng 3 (P3.4) dùng
làm ngõ vào tạo xung nhịp bên ngoài cho Timer 0 và được gọi là “T0”, còn P3.5 hay “T1”
là ngõ vào tạo xung nhịp cho Timer 1.
Trong các ứng dụng đếm, các thanh ghi timer được tăng thêm 1 tương ứng với sự chuyển
trạng thái logic từ 1 xuống 0 ở ngõ vào bên ngoài (Tx). Ngõ vào bên ngoài được lấy mẫu
trong S5P2 của mọi chu kỳ máy. Như vậy, khi ngõ vào cao trong một chu kỳ và thấp trong
một chu kỳ kế thì số đếm được tăng thêm 1. Giá trị mới xuất hiện trong các thanh ghi trong
S3P1 của chu kỳ theo sau chu kỳ phát hiện sự chuyển trạng thái. Do đó cần 2 chu kỳ máy (2
µs) để ghi nhận một sự chuyển trạng thái1 sang 0, tần số ngoài tối đa là 500 KHz (giả sử hệ
thống hoạt động ở 12 MHz).
• Cho chạy, dừng và điều khiển các timer.
Hình 8.10 mô tả các cấu hình khác nhau cho các thanh ghi TLx, THx và TFx của timer. Hai
nguồn xung nhịp có thể cung cấp cho timer như trên hình 8.11. Phương pháp đơn giản nhất
để bắt đầu (cho chạy) và dừng các timer là dùng các bit điều khiển chạy (TRx) trong
TCON. TRx bị xóa sau khi reset hệ thống, như vậy các timer theo mặc định là bị cấm (bị
dừng) sau khi reset. TRx được đặt lên 1 bằng phần mềm để cho các timer chạy.
Vì TRx ở trong thanh ghi TCON có địa chỉ theo bit, nên việc cho chạy và dừng timer có
thể thực hiện dễ dàng trong chương trình. Ví dụ, cho timer 0 chạy bằng lệnh: SETB
TR0
Và dừng bằng lệnh: CLR TR0
Trình hợp dịch sẽ thực hiện việc chuyển đổi ký hiệu cần thiết từ “TR0” sang địa chỉ bit
tương ứng của nó. Lệnh SETB TR0 sẽ giống như SETB 8CH.
Một cách khác để điều khiển các timer là dùng bit GATE trong TMOD và ngõ vào bên
ngoài INTx. Đặt GATE = 1 cho phép timer sẽ được điều khiển bằng INTx. Việc này hữu
dụng cho việc đo độ rộng xung. Ví dụ để đo mức cao của xung ngõ vào INT0: Khởi động
Timer 0 ở chế độ 2 (chế độ timer 16 bit), với TL0/TH0 = 0000H, GATE = 1 và TR0 = 1.
Khi INT0 ở mức cao, timer được “mở cổng” cấp xung nhịp 1 MHz (nếu 8051 hoạt động ở
1
Bộ tạo dao động
nội

÷12
C/T
Tx
Hình 8.11: Sơ đồ cung cấp xung nhịp cho timer
Timer
Clock
tần số 12 MHz). Khi INT0 xuống thấp, timer bị “đóng cổng” và thời khoảng của xung tính
bằng µs là số đếm được trong TL0/TH0. (Có thể lập trình INT0 để tạo ra một ngắt khi nó
xuống thấp).
Hình 8.12 minh họa Timer 1 hoạt động ở chế độ 1 như một timer 16 bit. Sơ đồ chỉ các khả
năng điều khiển việc cấp nguồn tạo xung nhịp cho timer.
• Khởi động và truy xuất các thanh ghi timer.
Thông thường các thanh ghi được khởi động một lần ở đầu chương trình để đặt chế độ làm
việc cần thiết. Sau đó trong thân chương trình, các timer được cho chạy, dừng, các bit cờ
được kiểm tra và xóa, các thanh ghi timer được đọc và cập nhật …, theo yêu cầu của các
ứng dụng.
TMOD là thanh ghi đầu tiên được khởi động, vì nó đặt chế độ hoạt động cho timer. Ví dụ
các lệnh sau khởi động Timer 1 ở chế độ 1 có xung nhịp cung cấp từ bộ dao động nội cho
việc định khoảng thời gian:
MOV TMOD, #00010000B
Lệnh trên đặt M1 = 0 và M0 = 1 cho chế độ 1, C/T = 0 và GATE = 0 cho xung nhịp nội, và
xóa các bit chế độ của timer 0. Timer thật sự không bắt đầu định thời cho đến khi bit điều
khiển chạy TR1 được đặt lên 1.
Nếu cần số đếm ban đầu, các thanh ghi timer TL1/TH1 cũng phải được khởi động. Vì các
timer đếm lên và đặt cờ báo tràn khi có sự chuyển tiếp FFFFH sang 0000H. Một khoảng
100 µs có thể được định thời bằng cách khởi động trị cho TL1/TH1 là FF9CH:
MOV TL1, #9CH
MOV TH1, #0FFH
Sau đó cho chạy timer bằng cách đặt bit điều khiển chạy bằng lệnh:
SETB TR1

1
Bộ tạo dao
động
÷12
C/T
TL1 TH1 TF1
TR1
Gate
T1
INT1
Hình 8.12: Sơ đồ điều khiển hoạt động của Timer 1 trong chế độ 1
Cờ báo tràn được tự động đặt lên 1 sau 100 µs. Phần mềm có thể đợi trong 100 µs bằng
cách dùng lệnh rẽ nhánh có điều kiện nhảy đến chính nó, trong khi cờ báo tràn chưa được
đặt lên 1:
WAIT: JNB TF1, WAIT
Khi timer tràn, cần dừng timer và xóa cờ báo tràn trong phần mềm có thể dùng các lệnh
như: CLR TR1
CLR TF1.
Đọc timer đang chạy: Trong một số ứng dụng cần đọc giá trị trong các thanh ghi timer khi
nó đang chạy. Vì phải đọc hai thanh ghi timer, “sai pha” có thể xảy ra nếu byte thấp tràn vào
byte cao giữa hai lần đọc. Giá trị có thể đọc được không đúng. Giải pháp là đọc byte cao
trước, kế đó đọc byte thấp rồi đọc byte cao lại một lần nữa. Nếu byte cao đã thay đổi thì lặp
lại các hoạt động đọc. Các lệnh dưới đây đọc nội dung của các thanh ghi timer TL1/TH1
vào các thanh ghi R6/R7:
AGAIN: MOV A, TH1
MOV R6, TL1
CJNZ A, TH1, AGAIN
MOV R7, A
2.2.2 Hoạt động cổng nối tiếp.
• Giới thiệu.

8051 có một cổng nối tiếp trong chip có thể hoạt động ở nhiều chế độ, trên một dải tần số
rộng. Chức năng chủ yếu của cổng nối tiếp là thực hiện chuyển đổi song song sang nối tiếp
đối với dữ liệu xuất, và chuyển đổi nối tiếp sang song song với dữ liệu nhập.
Việc truy xuất phần cứng qua cổng nối tiếp được thực hiện bằng các chân TXD và RXD.
Các chân này là hai bit của cổng 3, P3.1 (TXD) và P3.0 (RXD).
Cổng nối tiếp cho phép hoạt động song công (full duplex), và bộ đệm thu (receiver
buffering) cho phép một ký tự sẽ đã thu giữ trong bộ đệm, trong khi ký tự thứ hai được
nhận. Nếu CPU đọc ký tự thứ nhất trước khi ký tự thứ hai được thu đầy đủ, thì dữ liệu sẽ
không bị mất.
Hai thanh ghi chức năng đặc biệt cho phép phần mềm truy xuất đến cổng nối tiếp là: SBUF
và SCON. Bộ đệm cổng nối tiếp (SBUF) có địa chỉ 99H thực chất bao gồm hai bộ đệm. Dữ
liệu ghi vào SBUF sẽ được truyền ra thiết bị bên ngoài, và đọc SBUF để truy xuất dữ liệu
thu được. Đây là hai thanh ghi riêng biệt (một thanh ghi chỉ ghi để phát và một thanh ghi
chỉ đọc để thu).
Thanh ghi điều khiển cổng nối tiếp (SCON) có địa chỉ 98H là thanh ghi địa chỉ hoá theo
bit, nó chứa các bit trạng thái và các bit điều khiển. Các bit điều khiển cho phép thiết lập
các chế độ hoạt động cho cổng nối tiếp, và các bit trạng thái chỉ thị việc kết thúc phát hoặc
thu ký tự. Các bit trạng thái có thể được kiểm tra bằng phần mềm hoặc có thể được lập trình
để tạo ngắt.
Tần số làm việc của cổng nối tiếp, còn gọi là tốc độ baud có thể cố định (lấy từ bộ dao
động trên chip). Khi muốn tốc độ baud thay đổi, cần lập trình Timer 1.
• Thanh ghi điều khiển cổng nối tiếp.
1
Chế độ hoạt động của cổng nối tiếp được thiết lập bằng cách ghi dữ liệu vào thanh ghi điều
khiển cổng nối tiếp (SCON). Ý nghĩa các bit của SCON được mô tả trong bảng sau:
Bit Ký hiệu Địa chỉ Chức năng
7
6
5
4

3
2
1
0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
9FH
9EH
9DH
9CH
9BH
9AH
99H
98H
Bit chọn chế độ.
Bit chọn chế độ.
Bit chọn chế độ, cho phép truyền thông tin trong chế
độ đa xử lý trong chế độ 2 và 3; RI sẽ không tác động
nếu nhận được bit thứ 9 bằng 0.
Cần được lập để cho phép nhận dữ liệu.
Khi được lập bit thứ 9 sẽ được truyền trong chế độ 3;
bit này có thể lập xoá bằng phần mềm.
Khi được lập, bit thứ 9 sẽ được nhận.
Được lập khi kết thúc truyền 1 byte dữ liệu, bit này có

thể xoá bằng phần mềm.
Được lập khi nhận xong một byte dữ liệu, có thể xoá
bằng phần mềm.

Các chế độ truyền cổng nối tiếp với thiết bị bên ngoài được định nghĩa bằng các bit SM1
và SM0 như mô tả trong bảng sau:
SM0 SM1 Chế độ Chức năng Tốc độ baud
0
0
1
1
0
1
0
1
0
1
2
3
Thanh ghi dịch.
8bit UART
9bit UART
9bit UART
Cố định (tần số dao động/12).
Thay đổi (theo giá trị của timer).
Cố định (tần số dao động/12 hoặc 64.
Thay đổi (theo giá trị của timer).
Trước khi sử dụng cổng nối tiếp, phải khởi động SCON để chọn chế độ thích hợp. Ví dụ,
lệnh: MOV SCON, #01010010B
Sẽ khởi động cổng nối tiếp ở chế độ 1 (SM0/SM1 = 0/1), cho phép bộ thu (REN=1) và đặt

cờ ngắt phát (TI=1) để chỉ bộ phát sẵn sàng hoạt động.
• Các chế độ hoạt động.
Cổng nối tiếp có 4 chế độ hoạt động, có thể chọn được bằng cách viết các số 1 hay 0 vào
các bit SM0 và SM1 trong SCON. Có ba chế độ cho phép truyền đồng bộ (UART), trong
chế độ này, mỗi ký tự được thu (nhận) hoặc phát đều nằm trong một khung có một bit start
và 1 bit stop. Ở chế độ 0, cổng nối tiếp hoạt động như một thanh ghi dịch thông thường.
1
Chế độ 0: (Thanh ghi dịch 8 bit): Chế độ 0 được chọn bằng cách ghi các bit 0 vào SM1 và
SM0 của SCON. Trong chế độ này, cổng nối tiếp hoạt động giống như một thanh ghi dịch 8
bit. Dữ liệu nối tiếp vào và ra qua RXD và TXD theo xung nhịp. 8 bit được phát hoặc thu
với bit đầu tiên là LSB. Tốc độ baud cố định ở 1/12 tần số dao động trên chip.
Việc phát được khởi động bằng một lệnh ghi dữ liệu vào SBUF. Dữ liệu được dịch ra ngoài
trên đường RXD (P3.0), với các xung nhịp dịch được gửi ra đường TXD (P3.1). Mỗi bit
được phát đi (trên RXD) trong một chu kỳ máy. Trong mỗi chu kỳ máy, tín hiệu xung nhịp
dịch xuống thấp ở S3P1 và trở về mức cao ở S6P1. Định thời dữ liệu phát biểu diễn trên
hình 8.13a.
1
S1 S2 S3 S4 S5 S6
P1 P2 P1 P2 P1 P2 P1 P2 P1 P2 P1 P2
D1D0 D2 D3 D4 D5 D6 D7
a) Định thời phát nối tiếp trong chế độ 0
Một chu kỳ máy
Osc
ALE
Data out
Shift clock
S3P1
S6P1
ALE
Data out

RXD
Shift clock
TXD
b) Định thời nhận nối tiếp trong chế độ 0
ALE
Data in
RXD
Shift clock
TXD
D0 D1 D2 D3 D4 D5 D6 D7
Hình 8.13: Định thời thu phát dữ liệu trên cổng nối tiếp ở chế độ 0
Việc thu được khởi động khi bit cho phép bộ thu (REN) là 1, và bit ngắt thu (RI) là 0. Qui
tắc chung là lập REN khi bắt đầu chương trình để khởi động cổng nối tiếp, rồi xóa RI để
bắt đầu nhận dữ liệu. Khi RI bị xóa, các xung nhịp được đưa ra đường TXD khi bắt đầu chu
kỳ máy kế tiếp, và dữ liệu được đưa ra đường RXD theo xung nhịp. Mỗi bit dữ liệu được
nhận vào cổng nối tiếp ở cạnh lên của xung nhịp trên đường TXD như biểu diễn trên hình
8.13b.
Một ứng dụng của chế độ thanh ghi dịch là mở rộng khả năng xuất dữ liệu của 8051. IC
thanh ghi dịch nối tiếp ra song song có thể được nối vào các đường TXD và RXD của 8051
để cung cấp thêm 8 đường ra như trên hình 8.14. Có thể nối nối tiếp thêm các thanh ghi
dịch để mở rộng thêm nhiều cổng vào ra khác nữa.
Chế độ 1 (Truyền bất đồng bộ 8 bit với tốc độ baud thay đổi được): Ở chế độ 1, cổng nối
tiếp của 8051 làm việc như một bộ truyền nhận nối tiếp bất đồng bộ (UART-Universal
Asynchronous Receiver/Transmitter) 8 bit với tốc độ baud thay đổi được. UART thực hiện
thu phát dữ liệu nối tiếp với mỗi ký tự dữ liệu đi trước là bit start ở mức thấp, theo sau là bit
stop ở mức cao. ngoài ra có thể chèn thêm bit kiểm tra chẵn lẻ giữa bit dữ liệu cuối cùng và
bit stop.
Trong chế độ 1, mỗi ký tự dữ liệu bao gồm 10 bit được phát trên TXD hoặc thu trên RXD
bao gồm: 1 bit start (luôn là 0), 8 bit dữ liệu (LSB đầu tiên) và1 bit stop (luôn là 1). Khi thu,
bit stop được đưa vào RB8 trong SCON. Trong 8051 chế độ baud được đặt bằng tốc độ báo

tràn của Timer 1.
Tạo xung nhịp và đồng bộ hoá các thanh ghi dịch của cổng nối tiếp trong các chế độ 1, 2 và
3 được thiết lập bằng bộ đếm 4 bit (chia cho 16), ngõ ra của bộ đếm cung cấp xung nhịp
xác định tốc độ baud. Ngõ vào của bộ đếm này được chọn qua phần mềm.
Việc truyền dữ liệu (phát) được khởi động bằng cách ghi vào SBUF, nhưng quá trình phát
dữ liệu sẽ vẫn chưa thật sự bắt đầu cho đến khi vòng quay kế tiếp của bộ đếm chia cho 16
cung cấp tốc độ baud cho cổng nối tiếp. Dữ liệu được dịch ra ngoài trên đường TXD bắt
đầu bằng bit start, theo sau là 8 bit dữ liệu và sau cùng là bit stop. Độ rộng (theo thời gian
của mỗi bit) là nghịch đảo của tốc độ baud được lập trình trong timer. Cờ ngắt phát (TI)
được đặt lên 1 khi bit stop xuất hiện trên TXD.
Việc thu dữ liệu được khởi động khi có sự chuyển trạng thái từ 1 xuống 0 trên đường
RXD. Bộ chia 16 tức thời được xóa để đồng bộ số đếm với luồng bit đến (bit kế tiếp sẽ đến
ở vòng đếm 16 kế tiếp …). Luồng bit đến được lấy mẫu giữa các vòng đếm16.
1
8051
Thanh ghi dịch
DATA
CLOCK
TXD
RXD
Hình 8.14: Tăng thêm cổng vào ra song song sử dụng cổng nối tiếp ở chế độ 0

×