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

Thiết kế mạch đo và khống chế nhiệt độ trong phòng dùng 8051

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 (1.34 MB, 61 trang )

MỤC LỤC

1


MỞ ĐẦU

Ngày nay, việc áp dụng khoa học kỹ thuật vào trong quá trình sản xuất
đang là vấn đề được rất nhiều sự quan tâm,nghiên cứu của các nhà khoa học trên
thế giới cũng như trong nước. Nhiệt độ là một trong những thông số quan trọng
ảnh đến đặc tính của vật chất nên trong các quá trình kỹ thuật cũng như trong đời
sống hằng ngày rất hay gặp yêu cầu đo nhiệt độ.
Vì vậy,trong nhiều lĩnh vực sản xuất công nghiệp hiện nay,nhất là nghành
công nghiệp luyện kim, chế biến thực phẩm… vấn đề đo và khống chế nhiệt độ
đặc biệt được chú trọng đến vì nó là một yếu tố quyết định đến chất lượng sản
phẩm. Nắm được tầm quan trọng đó ,em tiến hành nghiên cứu và thiết kế một hệ
thống đo và khống chế nhiệt độ tự động, với mong muốn là giải quyết những yêu
cầu trên, và lấy đó làm đồ án tốt nghiệp cho mình.
Những kiến thức năng lực đạt được trong quá trình học tập ở trường sẽ
được đánh giá qua đợt bảo vệ đồ án tốt nghiệp lần này. Vì vậy chúng em cố gắng
tận dụng tất cả những kiến thức đã học ở trường cùng với sự tìm tòi nghiên cứu,để
có thể hoàn thành tốt nhất đồ án này. Những sản phẩm hay kết quả đạt được ngày
hôm nay tuy không lớn lao. Nhưng đó là những thành quả của những năm học tập.
Là thành công đầu tiên của em trước khi ra trường. Tuy nhiên không thể không
tránh được những thiếu sót , em mong thầy cô và các bạn đóng góp ý kiến và giúp
đỡ để có thể rút ra bài học cho mình.

2


GIỚI THIỆU ĐỀ TÀI


I. Đặt vấn đề
Ngày nay với sự phát triển của công nghiệp vi điện tử,kỹ thuật số các hệ thống
điều khiển dần dần được tự động hóa. Với những kỹ thuật tiên tiến như vi xử lí, vi
mạch số… được ứng dụng vào lĩnh vực điều khiển,thì các hệ thống điều khiển cơ
khí thô sơ, với tốc độ xử lí chậm chạp ít chính xác được thay thế bằng các hệ
thống điều khiển tự động với các lệnh chương trình đã được thiết lập trước.
Trong quá trình sản xuất ở các nhà máy,xí nghiệp hiện nay,việc đo và khống
chế nhiệt độ là một yêu cầu hết sức cần thiết và quan trọng. Vì nếu nắm bắt được
nhiệt độ làm việc của hệ thống, dây chuyền sản xuất … giúp ta những hư hỏng và
sự cố có thể xảy ra.
Để đáp ứng được yêu cầu đo và khống chế nhiệt độ tự động, thì có nhiều
phương pháp để thực hiện, nghiên cứu khảo vi điều khiển 8051 nhóm thực hiện
nhận rằng : ứng dụng vi điều khiển 8051 vào việc đo và khống chế nhiệt độ tự
động là phương pháp tối ưu nhất. Được sự đồng ý của bộ môn Kỹ Thuật Máy
Tính, em tiến hành thực hiện đề tài :
“ Khảo sát và ứng dụng vi điều khiển thiết kế mạch khống chế nhiệt độ trong
phòng”.
II. Giới thiệu đê tài
Với thời gian 3 tháng thực hiện đồ án, cũng như trình độ chuyên môn có hạn,
chúng em đã cố gắng để hoàn thành đồ án này một cách tốt nhất, nhưng chỉ giải
chỉ quyết được những vấn đề sau :
-

Thiết kế mạch đo nhiệt độ trong dải từ 0oC – 99oC hiển thị số.

-

Điều khiển nhiệt độ theo mong muốn.

-


Viết chương trình để đáp ứng yêu cầu trên

-

Thiết kế phần cứng demo

3


 Cấu trúc tổng quan :
- Sơ đồ khối mạch đo nhiệt độ.

Nhiệt độ
môi trường

MẠCH ĐIỆN

Khối
hiển thị

Khối
điều khiển
- Ứng dụng vi điều khiển vào thực tế
-

Tìm hiểu nguyên tắc hoạt động của thiết bị cảm biến (cảm biến nhiệt)và ứng
dụng của nó trong thực tiễn.

4



CHƯƠNG I : KHẢO SÁT VI ĐIỀU KHIỂN VÀ IC 0851
I.1 Nguồn gốc ra đời của vi điều khiển
Trong những thập niên cuối thế kỉ XX, từ sự ra đời của công nghệ bán dẫn,
kĩ thuật điện tử đã có sự phát triển vượt bậc. Các thiết bị điện tử sau đó đã được
tích hợp với mật độ cao và rất cao trong các diện tích nhỏ, nhờ vậy các thiết bị
điện tử nhỏ hơn và nhiều chức năng hơn. Các thiết bị điện tử ngày càng nhiều
chức năng trong khi giá thành ngày càng rẻ hơn, chính vì vậy điện tử có mặt khắp
mọi nơi.
Bước đột phá mới trong công nghệ điện tử, công ty trẻ tuổi Intel cho ra đời bộ
vi xử lý đầu tiên. Đột phá ở chỗ: "Đó là một kết cấu logic mà có thể thay đổi chức
năng của nó bằng chương trình ngoài chứ không phát triển theo hướng tạo một
cấu trúc phần cứng chỉ thực hiện theo một số chức năng nhất định như trước
đây"(trích từ dòng 17 đến 19, trang 3, 'Kĩ thuật VI XỬ LÝ và lập trình
ASSEMBLY cho hệ vi xử lý', tác giả Đỗ Xuân Tiến, nhà xuất bản Khoa học và kĩ
thuật). Tức là phần cứng chỉ đóng vai trò thứ yếu, phần mềm (chương trình) đóng
vai trò chủ đạo đối với các chức năng cần thực hiện. Nhờ vậy vi xử lý có sự mềm
dẻo hóa trong các chức năng của mình. Ngày nay vi xử lý có tốc độ tính toán rất
cao và khả năng xử lý rất lớn.
Vi xử lý có các khối chức năng cần thiết để lấy dữ liệu, xử lý dữ liệu và xuất
dữ liệu ra ngoài sau khi đã xử lý. Và chức năng chính của Vi xử lý chính là xử lý
dữ liệu, chẳng hạn như cộng, trừ, nhân, chia, so sánh.v.v..... Vi xử lý không có khả
năng giao tiếp trực tiếp với các thiết bị ngoại vi, nó chỉ có khả năng nhận và xử lý
dữ liệu mà thôi.
Để vi xử lý hoạt động cần có chương trình kèm theo, các chương trình này
điều khiển các mạch logic và từ đó vi xử lý xử lý các dữ liệu cần thiết theo yêu
cầu. Chương trình là tập hợp các lệnh để xử lý dữ liệu thực hiện từng lệnh được
lưu trữ trong bộ nhớ, công việc thực hành lệnh bao gồm: nhận lệnh từ bộ nhớ, giải
mã lệnh và thực hiện lệnh sau khi đã giải mã.


5


Để thực hiện các công việc với các thiết bị cuối cùng, chẳng hạn điều khiển
động cơ, hiển thị kí tự trên màn hình .... đòi hỏi phải kết hợp vi xử lý với các mạch
điện giao tiếp với bên ngoài được gọi là các thiết bị I/O (nhập/xuất) hay còn gọi là
các thiết bị ngoại vi. Bản thân các vi xử lý khi đứng một mình không có nhiều hiệu
quả sử dụng, nhưng khi là một phần của một máy tính, thì hiệu quả ứng dụng của
Vi xử lý là rất lớn. Vi xử lý kết hợp với các thiết bị khác được sử trong các hệ
thống lớn, phức tạp đòi hỏi phải xử lý một lượng lớn các phép tính phức tạp, có
tốc độ nhanh. Chẳng hạn như các hệ thống sản xuất tự động trong công nghiệp,
các tổng đài điện thoại, hoặc ở các robot có khả năng hoạt động phức tạp v.v...
Bộ Vi xử lý có khả năng vượt bậc so với các hệ thống khác về khả năng tính
toán, xử lý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt
hiệu quả đối với các bài toán và hệ thống lớn.Tuy nhiên đối với các ứng dụng nhỏ,
tầm tính toán không đòi hỏi khả năng tính toán lớn thì việc ứng dụng vi xử lý cần
cân nhắc. Bởi vì hệ thống dù lớn hay nhỏ, nếu dùng vi xử lý thì cũng đòi hỏi các
khối mạch điện giao tiếp phức tạp như nhau. Các khối này bao gồm bộ nhớ để
chứa dữ liệu và chương trình thực hiện, các mạch điện giao tiếp ngoại vi để xuất
nhập và điều khiển trở lại, các khối này cùng liên kết với vi xử lý thì mới thực hiện
được công việc. Để kết nối các khối này đòi hỏi người thiết kế phải hiểu biết tinh
tường về các thành phần vi xử lý, bộ nhớ, các thiết bị ngoại vi. Hệ thống được tạo
ra khá phức tạp, chiếm nhiều không gian, mạch in phức tạp và vấn đề chính là
trình độ người thiết kế.
Từ thực tế đó, Con người chúng ta đã sang tạo ra vi điều khiển để giảm bớt
sự lãng phí đó. Bộ vi điều khiển có trên chip bộ vi xử lý(CPU), bộ nhớ Ram,Rom,
cổng vào ra và bộ định thời. Nói cách khác, bộ xử lý,ram,rom,cổng vào ra và bộ
định thời tất cả được nhúng trên chip vi điều khiển. Do vậy, người thiết kế ko cần
phải bổ xung them bộ nhớ ngoài , cổng vào ra và bộ định thời để cho hệ thống

hoạt động.
I.2 Tìm hiểu về chip 8051
I.2.1 Đặc điểm chung
6


- Thuộc họ MOS-51
- Có dung lượng nhớ 4Kb flash ROM để lưu trữ mã lệnh (chương trình), thời gian
ghi xóa lên đến 1000 lần
- Tần số làm việc: 0Hz – 20Mhz
- Bộ nhớ RAM nội 128 byte, 8 bit
- Cung cấp 32 tín hiệu điều khiển I/O
- Có 2 bộ timer/counter 16 bit
- Có 5 nguồn ngắt
- Hỗ trợ truyền thông nối tiếp bất đồng bộ
- Có 40 chân
- Sử dụng điện áp cung cấp 5VDC

I.2.2 Cấu trúc

7


I.2.2.1 Cấu trúc bên trong của 8051
Phần chính của vi điều khiển 8051 là bộ xử lí trung tâm(CPU: central
processing unit) bao gồm :
- Thanh ghi tích lũy A
- Thanh ghi tích lũy phụ B,dung cho phép nhân và chia
- Đơn vị logic học(ALU : Arithmetic Logical Unit)
- Từ trạng thái chương trình( PSW : Program Status Word)

- Bốn băng thanh ghi
- Con trỏ ngăn xếp
- Ngoài ra có bộ nhớ chương trình, bộ giải mã lệnh, bộ điều khiển thời gian và
logic
Đơn vị xử lí trung tâm nhận trực tiếp xung từ bộ giao động,ngoài ra còn có
khả năng đưa một tín hiệu giữ nhịp bên ngoài.
Chương trình đang chạy có thể dừng lại nhờ một khối điều khiển ngắt ở bên
trong.Các nguồn ngắt có thể là : các biến cố ở bên ngoài, sự tràn bộ đếm định
thời hoặc cũng có thể là giao diện nối tiếp.
Hai bộ định thời 16 bit hoạt động như 1 bộ đếm.Các cổng (port 0,port 1,
port 2, port 3). Sử dụng vào mục đích điều khiển.
Ở cổng 3 có thêm các đường dẫn điều khiern dùng để trao đổi với bộ nhớ
bên ngoài, hoặc để đầu nối giao diện nối tiếp, cũng như các đường ngắt dẫn
bên ngoài.
Giao diên nối tiếp có chứa một bộ truyền và một bộ nhận không đồng bộ,
làm việc độc lập viuws nhau.Tốc độ truyền qua cổng nối tiếp có thể đặt trong
vảy rộng và được ấn định bằng một bộ định thời.
Trong vi điều khiển 8051 có hai thành phần quan trọng khác đó là bộ dữ
liệu và các thanh ghi :
Bộ nhớ gồm có bộ nhớ RAM và bộ nhớ ROM.Các thanh ghi sử dụng để
lưu trữ thông tin trong quá trình xử lí. Khi CPU làm việc nó làm thay đổi nội
dung của các thanh ghi.
8


I.2.2. 2Chức năng các chân vi điều khiển

U1
39
38

37
36
35
34
33
32

P0 .0 /AD0
P0 .1/AD1
P0 .2/AD2
P0 .3/AD3
P0 .4/AD4
P0 .5/AD5
P0 .6 /AD6
P0 .7/AD7
1
2
3
4
5
6
7
8

P1.0
P1.1
P1.2
P1.3
P1.4
P1.5

P1.6
P1.7

19
18
31

P2.0 /A8
P2.1/A9
P2.2/A10
P2.3/A11
P2.4/A12
P2.5/A13
P2.6 /A14
P2.7/A15
P3.0 /RXD
P3.1/T XD
P3.2/INT 0
P3.3/INT 1
P3.4/T 0
P3.5/T 1
P3.6 /WR
P3.7/RD

XT AL1
XT AL2

ALE/PROG
PSEN


21
22
23
24
25
26
27
28
10
11
12
13
14
15
16
17
30
29

EA/VPP
RST

9

AT 89C51

Hình 2.2 Sơ đồ các chân vi điều khiển
-

Port 0 : là port có 2 chức năng ở trên chân từ 32 đến 39 trong các thiết kế cỡ

nhỏ(không dùng bộ nhớ mở rộng) có 2 chức năng như các đường IO. Đối với
các thiết kế cỡ lớn(với bộ nhớ mở rộng) nó được kết hợp kênh giữa các bus

-

Port 1 : port 1 là một port I/O trên các chân từ 1 đến 8. Các chân được ký hiệu
P1.0,P1.1,P1.2… có thể dùng cho các thiết bị ngoài nếu cần. Port 1 không có
chức năng khác, vì vậy chúng ta chỉ được dùng trong giao tiếp với các thiết bị
ngoài.

-

Port 2 : port 2 là một port công dụng kép trên các chân từ 21 đến 28 được
dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối cới các
thiết kế dùng bộ đếm mở rộng.

9


-

Port 3 : port 3 là một port công dụng kép trên các chân 10 đến 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 8051 như ở bảng sau :

Bit
P3.0
P3.1
P3.2
P3.3

P3.4
P3.5
P3.6
P3.7
-

Tên
RxD
TxD
INT0
INT1
T0
T1
WR
RD

Chức năng
Ngõ vào nhận dữ liệu nối tiếp
Ngõ xuất dữ liệu nối tiếp
Ngõ vào ngắt cứng thứ 0
Ngõ vào ngắt cứng thứ 1
Ngõ vào của Timer/Counter thứ 0
Ngõ vào của Timer/Counter thứ 1
Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài
Ngõ điều khiển đọc dữ liệu từ bộ nhớ bên ngoài

PSEN ( Program Store Enable) : 8051 có 4 tín hiệu điều khiển 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 và 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 từ EPROM qua bus và
được chốt vào thanh ghi lệnh của 8051 để giải mã lệnh. Khi thi hành chương
trình trong ROM nội (8051) PSEN sẽ ở mức thụ động( mức cao).

-

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 xử lí 8585,8086,8088. 8051dùng ALE một cách
tương tự cho làm việc giải các kênh các bus địa chỉ và dữ liệu khi port0 được
dùng cho chế độ chuyển đổi của nó: Vừa là bus dữ liệu vừa là bit thấp của địa
chỉ. ALE là tín hiệu để chốt địa chỉ vào một thanh ghi bên ngoài trong nửa đầu
của chu kỳ bộ nhớ. Sau đó, các đường port0 dùng để xuất hoặc nhập dữ liệu
trong nửa sau chu kỳ của bộ nhớ.
10


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à nguồn xung nhịp cho các hệ thống. Nếu xung trên 8051
là 12 MHz thì ALE có tần số 2MHz.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 EPROM trong 8051.
-

EA (External Access) : tín hiệu vào AE 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, 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. Nếu AE được nối mức
thấp bộ nhớ bên trong chương trình 8051 bị cấm và chương trình thi hành từ
EPROM mở rộng.Người ta còn dùng chân AE làm chân cấp điên áp 21v khi
lập trình cho EPROM trong 8051.


- RST(Reset) : Ngõ vào RST trên 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 trong 8051
được tải những giá trị thích hợp để khởi động hệ thống. Việc kết nối chân
RESET đảm bảo hệ thống bắt đầu làm việc khi Vi
điều khiển được cấp điện, hoặc đang hoạt động mà
hệ thống bị lỗi cần tác động cho Vi điều khiển hoạt
động trở lại, hoặc do người sử dụng muốn quay về
trạng thái hoạt động ban đầu.
- Vì vậy chân RESET được kết nối như hình vẽ :

- Với Vi điều khiển sử dụng thạch anh có tần số fzat =
12MHz sử dụng C=10µF và R=10KΩ.
- Các ngõ vào bộ dao động trên chip :

11


Như đã thấy trong hình trên, 8051 có một bộ dao động trên chip.Nó thường được
nối với thạch anh giữa 2 chân 18 và 19. Tần số thạch anh thông thường là 12MHz.
Mạch dao động được đưa vào hai chân này thông thường được kết nối với dao
động thạch anh như sau:
Ghi chú: C1,C2= 30pF±10pF (thường được sử dụng với C1,C2 là tụ 33pF) dùng
ổn định dao động cho thạch anh.
-

Các chân nguồn: 8051 vận hành 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.
I.2.2.3 . Tổ chức bộ nhớ :
8051 có bộ nhớ theo cấu trúc Harvard : có những vùng cho bộ nhớ riêng


biệt cho chương trình dữ liệu. Như đã nói ở trên, cả chương trình và dữ liệu có thể
ở bên trong 8051, 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 Kbyte bộ nhớ chương trình và 64 Kbyte bộ nhớ dữ liệu.
Bộ nhớ bên trong bao gồm ROM và RAM trên chip,RAM trên chip bao gồm
nhiều 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

Bộ nhớ
dữ liệu được
chọn
qua WR và
RD
0000
Hình 2.3 Tóm tắt các vùng nhớ của 8051
Hai đặc tính cần lưu ý là :
12


-

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 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 như các bộ xử lí
khác.
• Chi tiết về bộ nhớ RAM trên chip:

Như ta đã thấy trên hình sau, RAM bên trong 8051 được phân chia giữa các
bank thanh ghi ( 00H- 1FH),RAM địa chỉ hóa từng bit(20-2FH)
RAM đa dụng (30H-7FH) và các thanh ghi chức năng đặc biệt (80H-FFH).
- RAM đa dụng :

địa

địa

chỉ Địa chỉ bit

chỉ

byte

byte

Địa chỉ bit

13

Kí hiệu


7F
Vùng

RAM

bình thường

30
2F
2E
2D
2C
2B
2A
29
28
27
26
25
24
23
22
21
20
1F

7F
77
6F
67
5F
57
4F
47
3F
37
2F

27
1F
17
0F
07

7E
76
6E
66
5E
56
4E
46
3E
36
2E
26
1E
16
0E
06

18
17 Bank 3
10
0F

Bank 2
Bank 1


7D
75
6D
65
5D
55
4D
45
3D
35
2D
25
1D
15
0D
05

7C
74
6C
64
5C
54
4C
44
3C
34
2C
24

1C
14
0C
04

7B
73
6B
63
5B
53
4B
43
3B
33
2B
23
1B
13
0B
03

7A
72
6A
62
5A
52
4A
42

3A
32
2A
22
1A
12
0A
02

79
71
69
61
59
51
49
41
39
31
29
21
19
11
09
01

78
70
68
60

58
50
48
40
38
30
28
20
18
10
08
00

FF
F0

F7 F6 F5 F4 F3 F2 F1 F0 B

E0

E7 E6 E5 E4 E3 E2 E1 E0 ACC

D0 D7 D6 D5 D4 D3 D2 D1 D0 PSW
B8

-

B0

B7 B6 B5 B4 B3 B2 B1 B0 P3


A8 AF

-

-

BC BB BA B9 B8 IP

AC AB AA A9 A8 IE

A0 A7 A6 A5 A4 A3 A2 A1 A0 P2
99
98

SBUF
97 96 95 94 93 92 91 90 SCON

90

P1

8D
TH1
8C
TH0
8B
TL1
8A
TL0

89
TMOD
88 8F 8E 8D 8C 8B 8A 89 88 TCON
87
PCON

83
08 Bank thanh ghi 0
07
82
Mặc định được gán từ R0-R7
81
80

DPH
DPL
SP
87 86 85 84 83 82 81 80 P0

00

14


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ẽ 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ụ, sau khi 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ứ 2 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.
- RAM địa chỉ hóa từng bit : 8051 chứa 210 bit được địa chỉ hóa, trong đó
128 bit là ở các địa chỉ byte 20H đến 2FH, và phần còn lại 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 điều khiển nói chung. Các bit có thể đặt,xóa,AND,OR…với một lệnh
đơn. Đ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ỉ 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ỉ 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 các bit phụ thuộc vào lện được dùng.
Ví dụ, để đặt bit 67H,ta dùng lệnh sau :
SETB 67H
Chú ý rằng “ địa chỉ bit 67” 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 của địa chỉ này.
15


- Các bank thanh ghi :
32 byte thấp của bộ nhớ nội là dành cho các bank thanh ghi. Bộ lệnh của
8051 hỗ trợ 8 thanh ghi (R0 đến R7) và theo mặc định(sau khi reset hệ thống)
các thanh ghi này ở đị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 ghi bằng lệnh 2 byte dùng địa chỉ trực tiếp nằm bên trong byte thứ 2
:
MOV A,05H
Các lệnh dùng các thanh ghi R0 đến R7 thì sẽ 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ể 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).Gỉa 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).
I.2.2.4. các thanh ghi chức năng đặc biệt:
Các thanh ghi nội của 8051 được truy xuất ngầm định bởi bộ lệnh.Ví dụ lệnh
“INC A” sẽ tăng nội dung 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 đượ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 trực tiếp, sẽ không
có lợi khi đặt chúng vào trong RAM trên chip).Đó là lý do để 8051 có nhiều
thanh ghi. Cũng như R0 đến R7, có 21 thanh ghi chức năng đặc biệt(SFR :
16


special Funtion Rgister) ở vùng trên 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ừ 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ó đượ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  sẽ thiết lập bit 0 trong thanh ghi tích lũy,các bit
khác không thay đổi. Ta 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ó 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ả.
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

ĐỊACHỈ BIT KÍ HIỆU

CHỨC NĂNG

PSW.7 D7H

C hoặc Cy Cờ nhớ

PSW.6
PSW.5
PSW.4
PSW.3

AC
F0
RS1

RS0

D6H
D5H
D4H
D3H

PSW.2 D2H

0V

PSW.1 D1H
PSW.0 D0H

P

Cờ nhớ phụ
Cờ 0 hay cờ Zero
Bit lựa chọn dãy thanh ghi
Bit lựa chọn dãy thanh ghi
Cờ tràn với phép tính liên quan đến số nhị phân
có dấu
Chưa được thiết kế để sử dụng
Cờ chẵn lẻ

17


-


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 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 PSW. 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 sẽ AND bit 25H
với cờ nhớ và đặt kết quả trở vào cờ nhớ : ANL 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ộng
được là số BCD, thì sau lệnh cộng cần có DAA ( hiệu chỉnh thập phân
thanh ghi tích lũy) để mang kết quả lớn hơn 9 trở về tâm từ 0 đến 9.

-

Cờ 0(F0) : là một bit cờ đa dụng dành 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 đượ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 bank thanh ghi 3 và di chuyển nội dung của thanh ghi
R7( địa chỉ byte IFH) đế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 một lệnh cộng hoặc trừ nếu có một 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ủa nó 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.
18


Thanh ghi B :
Thanh ghi B ở địa chỉ F0H được dùng cù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ả 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.
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 ghi 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 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.
Để 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,#%FH
Trên 8051 ngăn xếp bị giới hạn 32 byte vì địa chỉ cao nhất của RAM trên
chip là 7FH. Sở dĩ cù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à để lấy giá trị mặc định khi reset hệ thống. Gía trị mặc định đó là 07H và
kết quả là ngăn đầu tiên để cất dữ liệu địa chỉ 08H. Nếu phần mềm ứng
dụng không khởi động lại SP, 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 các lệnh PUSH và POP để lưu
giữ 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,LACALL) và các lệnh trở về(RET ,RETI) để
cất và lấy lại bộ đếm chương trình.
19


Con trỏ dữ liệu :
Con trỏ dữ liệu (DPTR) được dùng để 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
MOV @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 dung địa chỉ tức thời, lần này để tải dữ liệu 16 bit 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ỉ chứa DPTR(1000H)
Các thanh ghi port xuất nhập :
Các port của 8051bao 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ừn bit. Điều đó cung cấp một khả năng giao tiếp thuận lợi.
Các thanh ghi timer :
8051 chứa 2 bộ định thời đếm 16 bit được dùng trong 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ỉ hóa từng bit.
Các thanh ghi port nối tiếp:
8051 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ó 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
20


qua thanh ghi điều khiển port nối tiếp (SCON)(được địa chỉ hóa từng bit) ở
địa chỉ 98H.
Các thanh ghi ngắt :
8051 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ỉ 8AH. Cả hai thanh ghi được địa chỉ hóa từng bit.
Các 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 :

I.2.3 Tập lệnh của 8051
I.2.3.1. Nhóm lệnh di chuyển dữ liệu

 Lệnh di chuyển dữ liệu trực tiếp :
- Cú pháp: MOV <ĐÍCH>, <NGUỒN>
Trong đó:
. <ĐÍCH>: có thể là thanh ghi, địa chỉ ô nhớ trong vùng RAM
nội

21


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

A, 120

MOV

B, #24

MOV

120,#10110010B

MOV

R3, A

MOV


P3,#3EH

 Lệnh di chuyển dữ liệu gián tiếp :
-

Liên quan đến vùng nhớ RAM nội :
+ Lệnh đọc bộ nhớ:
- Cú pháp: MOV

<ĐÍCH>, @Rp

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

@Rp, <NGUỒN>

Trong đó:
. <NGUỒN>: thanh ghi, ô nhớ hoặc #<giá trị>

. Rp: là thanh ghi R0 hoặc R1
22


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

; (127) = 49

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

A, @DPTR ; A ß (1000)


+ Lệnh đọc bộ nhớ:
- Cú pháp: MOVX @DPTR, A
- Thực hiện: lấy nội dung A đặt vào ô nhớ trong vùng dữ liệu ngoài
có địa chỉ là nội dung thanh ghi DPTR.
- Ví dụ:
MOV

DPTR,#1000

MOV A, #4EH
MOVX @DPTR, A ; ghi giá trị 4EH vào ô nhớ ngoài có địa chỉ
1000
23


-

Lệnh liên quan đến vùng nhớ chương trình
- Cú pháp: MOVC A,@A+DPTR
- Thực hiện: lấy nội dung ô nhớ trong vùng nhớ chương trình có địa
chỉ là nội dung thanh ghi A + DPTR đặt vào thanh ghi A.
- Ví dụ 1:
MOV

A,#2

MOV

DPTR,#500


MOVC A,@A+DPTR

; A ß (502)

- Ví dụ 2:
MOV

A, #4

MOV

DPTR,#TABLE

MOVC A, @A+DPTR
TABLE:

DB

12H, 4EH, 0C7H, 084H, 055H,……

 Nhóm lệnh liên quan đến ngăn xếp
+ Ghi vào ngăn xếp:
- Cú pháp: PUSH

Thanh ghi/ địa chỉ

- Thực hiện: cất nội dung thanh ghi hoặc ô nhớ vào đỉnh ngăn xếp
+ Đọc ngăn xếp:
- Cú pháp: POP Thanh ghi/ địa chỉ
- Thực hiện: lấy nội dung ở đỉnh ngăn xếp gán vào thanh ghi, ô nhớ

+ ví dụ:

MOV A,#100
MOV 100,#3EH
PUSH ACC
PUSH 100
MOV A, #21H
MOV 100, #40
POP 100
POP ACC

24


 Lệnh trao đổi dữ liệu :
- Cú pháp: XCH

A, <NGUỒN>

Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ hoặc @Rp
- Thực hiện: trao đổi nội dung thanh ghi A và NGUỒN>
I.2.3.2. Nhóm lện số học
 Lệnh cộng :
-

Cộng không nhớ :
+ Cú pháp: ADD

A, <NGUỒN>


Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ, #<giá trị>
hoặc @Rp
+ Thực hiện: A ß A + <NGUỒN>
-

Cộng có nhớ :
+ Cú pháp: ADDC A, <NGUỒN>
Trong đó: <NGUỒN> có thể là thanh ghi, ô nhớ,#<giá trị>
hoặc @Rp
+ Thực hiện: A ß A + <NGUỒN> + C

 Lệnh trừ :
- Cú pháp: SUBB

A, <NGUỒN>

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

AB

- Thực hiện: A * B = BA (B: byte cao của kết quả; A: byte thấp của
kết quả)
 Lệnh chia :
- Cú pháp: DIV AB

25



×