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

Thiết kế Robot tự động dò đường sử dụng vi điều khiển 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 (792.42 KB, 59 trang )

NGUYỄN CÔNG DANH

TRƯỜNG ĐẠI HỌC VINH

Khoa ®iÖn tö - viÔn th«ng
---------@&?---------

ĐỒ ÁN

TỐT NGHIỆP ĐẠI HỌC
THIẾT KẾ HẠ TẦNG MẠNG CHO HỆ THỐNG DOANH NGHIỆP

Đề tài

THIẾT KẾ ROBOT TỰ ĐỘNG DÒ ĐƯỜNG
SỬ DỤNG VI ĐIỀU KHIỂN 8051

Sinh viên thực hiện : NGUYỄN DUY TUẤN
Lớp
: 49K - ĐTVT
Giảng viên hướng dẫn: TH.S ĐẶNG THÁI SƠN

NGHỆ AN, 01/2013

NGHỆ AN, 01/2013
1


MỤC LỤC
LỜI NÓI ĐẦU.............................................................................................................iii
TÓM TẮT ĐỒ ÁN......................................................................................................iv


DANH MỤC BẢNG BIỂU..........................................................................................v
DANH MỤC HÌNH VẼ..............................................................................................vi
DANH MỤC CHỮ CÁI VIẾT TẮT.........................................................................vii
MỞ ĐẦU......................................................................................................................1
PHẦN I CƠ SỞ LÝ THUYẾT.....................................................................................2
CHƯƠNG I GIỚI THIỆU HỌ VI ĐIỀU KHIỂN 8051..........................................2
1.1 Sự ra đời của họ vi điều khiển 8051...........................................................2
1.2 Kiến trúc chung của họ vi điều khiển 8051................................................2
1.3 Tóm tắt tập lệnh của 8051………………………………………………..3
1.3.1 Chế độ đánh địa chỉ...………………………………………………4
1.3.2 Tóm tắt tập lệnh của 8051………………………………………….7
1.4 Giới thiệu về vi điều khiển AT89C51…………………………………..12
1.4.1 Sơ đồ và chức năng các chân của AT89C51……………………..12
1.4.2 Cấu trúc bên trong của AT89C51………………………………...16
1.4.3 Các hoạt động chức năng chính trong AT89C51…………………18
PHẦN II PHÂN TÍCH VÀ THIẾT KẾ……………………………………………21
CHƯƠNG II MỘT SỐ BỘ PHẬN CHỨC NĂNG CỦA ROBOT……………..21
2.1 Hệ thống cảm biến nhận vạch…………………………………………..21
2.1.1 Nguyên lý cơ bản…………………………………………………21
2.1.2 Các loại cảm biến ………………………………………………...22
2.2 Động cơ DC ……………………………………………………………24
2.2.1 Cấu tạo …………………………………………………………...24
2.2.2 Nguyên tắc hoạt động………………………………………….....24
2.2.3 Điều khiển tốc độ động cơ DC……………………………………
26
2.2.4 Điều khiển động cơ bằng mạch cầu H……………………………27
2.2.5 Điều khiển động cơ bằng phương pháp PWM……………………32

2



2.3 Nguồn…………………………………………………………………...33
CHƯƠNG III TÍNH TOÁN VÀ THIẾT KẾ …………………………………...34
3.1 Sơ đồ khối tổng quát……………………………………………………34
3.2 Khối nguồn …………………………………………………………….34
3.3 Khối điều khiển trung tâm ……………………………………………..35
3.4 Khối cảm biến ………………………………………………………….36
3.5 Khối công suất điều khiển động cơ …………………………………….37
CHƯƠNG IV THI CÔNG PHẦN CỨNG VÀ PHẦN MỀM ………………….38
4.1 Thiết kế mạch in ……………………………………………………….38
4.1.1 Thiết kế mạch in cho mạch cảm biến hồng ngoại ………………..38
4.1.2 Thiết kế mạch in cho mạch điều khiển…………………………...38
4.1.3 Thiết kế mạch in cho mạch công suất ……………………………39
4.2 Lập trình phần mềm cho AT89C51 …………………………………….40
4.2.1 Lưu đồ thuật toán ………………………………………………...40
4.2.2 Chương trình phần mềm………………………………………….41
KẾT LUẬN……………………….………………………………………………..49
TÀI LIỆU THAM KHẢO …………………………………………………………50

3


LỜI NÓI ĐẦU
Trong cuộc sống của chúng ta, robot có vai trò ngày càng lớn và ngày càng
thông minh theo sự phát triển của khoa học kỹ thuật. Trên thế giới, đã xuất hiện rất
nhiều robot thông minh có thể giúp con người thực hiện những công việc đơn giản
cũng như những công việc nguy hiểm, phức tạp, như robot hỗ trợ bác sĩ phẫu thuật,
robot làm việc trong môi trường phóng xa, robot thám hiểm mặt trăng… Ứng dụng
của robot trong thời đại này là rất lớn đối với con người.
Ở nước ta hiện nay, một số ngành thuộc lĩnh vực cơ điện tử và tự động hoá

đang phát triển rất nhanh. Việc nghiên cứu, tìm hiểu về robot đã có những bước
phát triển đáng kể, đặc biệt là trong các viện nghiên cứu, sinh viên các trường đại
học. Với cuộc thi Robocon Châu Á Thái Bình Dương, sinh viên Việt Nam đã có
nhiều lần vô địch, vượt qua các đối thủ mạnh của các nước phát triển như Nhật Bản,
Trung Quốc… Điều đó chứng tỏ sinh viên chúng ta rất quan tâm đến việc nghiên
cứu, tìm hiểu về robot.
Với niềm đam mê tìm hiểu về robot, và với mong muốn khoa Điện tử - Viễn
thông của chúng ta có thể tham gia cuộc thi Robocon toàn quốc, em đã mạnh dạn
thực hiện đề tài “Thiết kế Robot tự động dò đường sử dụng vi điều khiển 8051”.
Mặc dù phạm vi đề tài rất nhỏ và khiêm tốn, nhưng với em, đây là bước khởi đầu
quan trọng khi lần đầu tiên bước vào thế giới robot, một thế giới hấp dẫn, đa dạng
và đầy thử thách.
Trong quá trình thực hiện đồ án này, e xin chân thành cảm ơn Thạc sĩ Đặng
Thái Sơn đã tận tình hướng dẫn và giúp đỡ em thực hiện tốt đề tài này. Mặc dù vậy
nhưng do thời gian và kiến thức của bản thân có hạn nên đồ án không thể tránh khỏi
sai sót, mong quý thầy cô và các bạn đóng góp ý kiến để đồ án được hoàn thiện
hơn.
Vinh, ngày 07 tháng 01 năm 2013
Sinh viên thực hiện

4


Nguyễn Duy Tuấn
TÓM TẮT ĐỒ ÁN
Trong thời đại ngày nay, với sự phát triển của công nghệ điện tử tự động hóa
đã làm cho con người dần được thay thế bởi các loại máy móc trong một số công
việc từ đơn giản đến phức tạp. Trong những năm qua, các cuộc thi Robocon đã làm
dấy lên phong trào tìm hiểu sâu rộng hơn trong sinh viên cả nước về công nghệ tự
động hóa. Trong phạm vi đồ án này, e nghiên cứu các vấn đề như sau:

-

Nghiên cứu các kĩ thuật nhận biết môi trường bên ngoài cho robot sử dụng

các loại cảm biến hiện có trên thị trường.
-

Nghiên cứu các kĩ thuật điều khiển tốc độ động cơ sử dụng vi điều khiển

8051.
-

Nghiên cứu kỹ thuật lập trình cho vi điều khiển 8051 sử dụng hợp ngữ và
ngôn ngữ assembly.
Các kỹ thuật trên đã được em trình bày một cách chi tiết trong đồ án. Các kết

quả nghiên cứu đã được ứng dụng trong sản phẩm “Robot tự động dò đường”.
ABSTRACT
Nowadays, with the development of Electronic Automation Technology, it
has made people gradually beinh replaced by machineries in a number of works
from simple to complex. Machines are applied in doing both simple works and
complex works instead of human labor. In the recent years, it’s robocon contest that
has arisen nation-wide movements of students in studying automation technology.
In domain of this research, I concentrate on reseaching these following issues:
- Researching techniques to identify the external environment for robot using
sensors available on the market
- Researching techniques motor speed control using 8051 microcontroller
- Researching on programming techniques for 8051 microcontroller using
assembly language.


5


The techniques above are presented in details in this research. The results of
reseaching are applied in product “Automatic Robot Navigation”.

DANH MỤC BẢNG BIỂU
Bảng 1.1 Các đặc tính của họ vi điều khiển 8051..........................................................
2
Bảng 1.2 Các lệnh rẽ nhánh............................................................................................
11
Bảng 1.3 Chức năng các chân port 3..............................................................................
14
Bảng 1.4 Nội dung các thanh ghi sau khi Reset.............................................................
15
Bảng 1.5 Các thanh ghi chức năng đặc biệt điều khiển timer........................................
19
Bảng 1.6 Địa chỉ các vecto ngắt.................................................................................
19
Bảng 1.7 Trạng thái các thanh ghi sau reset.....................................................................
20
Bảng 2.1 Cách hoạt động của mạch cầu H.....................................................................
28

6


DANH MỤC HÌNH VẼ
Hình 1.1 Sơ đồ khối của họ vi điều khiển 8051.............................................................
3

Hình 1.2 Sơ đồ nguyên lý vi điều khiển AT89C51 ......................................................
12
Hình 1.3 Sơ đồ khối bộ vi điều khiển AT89C51 ..........................................................
13
Hình 1.4 Mạch dao động dùng thạch anh cho AT89C51..............................................
16
Hình 1.5 Bản đồ bộ nhớ data trên chíp AT89C51..........................................................
18
Hình 2.1 Nguyên tắc nhận biết vạch của led thu phát hồng ngoại................................
22
Hình 2.2 Sơ đồ nguyên lý thu phát hồng ngoại..............................................................
23
Hình 2.3 Hình ảnh quang trở thực tế..............................................................................
23

7


Hình 2.4 Nguyên lý thu dùng ánh sáng khả biến...........................................................
24
Hình 2.5 Sơ đồ mạch cầu H............................................................................................
27
Hình 2.6 Sơ đồ nguyên lý mạch cầu H sử dụng Relay..................................................
29
Hình 2.7 Sơ đồ nguyên lý mạch cầu H dùng BJT công suất.........................................
30
Hình 2.8 Sơ đồ nguyên lý mạch cầu H dùng MOSFET................................................
31
Hình 2.9 Sơ đồ nguyên lý mạch cầu H dùng Relay kết hợp FET.................................
31

Hình 2.10 Phương pháp điều khiển động cơ bằng PWM..............................................
32
Hình 2.11 Một loại ác quy khô.......................................................................................
33
Hình 3.1 Sơ đồ khối tổng quát........................................................................................
34
Hình 3.2 Sơ đồ nguyên lý khối nguồn............................................................................
35
Hình 3.3 Sơ đồ nguyên lý mạch điều khiển...................................................................
35
Hình 3.4 Sơ đồ nguyên lý mạch cảm biến hồng ngoại..................................................
36
Hình 3.5 Sơ đồ nguyên lý mạch đệm tín hiệu dùng bộ so sánh LM324.......................
36
Hình 3.6 Sơ đồ nguyên lý khối công suất điều khiển động cơ......................................
37
Hình 4.1 Sơ đồ mạch in khối cảm biến hồng ngoại.......................................................
38

8


Hình 4.2 Sơ đồ mạch in khối điều khiển........................................................................
38
Hình 4.3 Sơ đồ mạch in khối công suất.........................................................................
39

DANH MỤC CHỮ CÁI VIẾT TẮT
RAM
ROM

CPU
Opcode
PSW
I/O
OE
PSEN
EPROM

Random access memory
Read only memory
Central Processing Unit
Operation code
Program Status Word
Input- Output
Output Enable
Program store enable
Erasable Programmable Read Only
Memory

ALE
EA
RST
Led
DC
PWM
MOSFET

Address Latch Enable
External Access
Reset

Light Emitting Diode
Direct Current
Pulse Width Modulation
Metal- Oxide Semeconductor
Field-Effect Transisor
Robot Contest

Robocon

9

Bộ nhớ ghi/đọc
Bộ nhớ chỉ đọc
Đơn cị xử lý trung tâm
Hoạt động mã
Chương trình từ trạng thái
Vào – ra
Kích hoạt đầu ra
Chương trình lưu trữ cho phép
Bộ nhớ ROM có thể lập trình
được bằng xung điện hoặc xóa
được bằng tia cực tím.
Địa chỉ chốt cho phép
Bên ngoài truy cập
Thiết lập lại
Đi ốt phát quang
Điện một chiều
Độ rộng xung
Transistor hiệu ứng trường Oxit
Kim loại – Bán dẫn

Cuộc thi robot


MỞ ĐẦU
- Mục tiêu đề tài:
Robocon viết tắt của chữ Robot Contest, là kì thi sáng tạo robot Châu Á
Thái Bình Dương được tổ chức hằng năm. Đây là cuộc thi được khởi xướng tại
Nhật Bản. Từ năm 2002, nó trở thành cuộc thi thường niên do Hiệp hội Phát thanh
và Truyền hình Châu Á Thái Bình Dương tổ chức tại các nước thành viên mang tên
ABU Robocon để cổ vũ cho phong trào sáng tạo robot trong khu vực. Thành viên
tại mỗi nước được cử một đội là sinh viên của một trường đại học hay cao đẳng
tham dự (ngoại trừ nước đăng cai tổ chức được cử 2 đội). Trong đa số trường hợp,
đội ABU robocon được tuyển ra từ vòng thi trong nước do đài truyền hình thành
viên tổ chức với cùng chủ đề. Là cuộc thi truyền hình có yếu tố kỹ thuật và tính đối
kháng cao, Robocon có được sự quan tâm rất lớn của mọi thành phần trong xã hội.
Để chọn đội tuyển tham gia cuộc thi Robocon quốc tế, Việt Nam tổ chức
cuộc thi Robocon Việt Nam. Robocon trở thành ngày hội thường niên của sinh viên
Việt Nam, nơi tôn vinh năng lực sang tạo của thế hệ trẻ.
Trường Đại học Vinh chúng ta đã tham gia cuộc thi Robocon toàn quốc vào
năm 2008 nhưng không thành công. Kế tiếp niềm đam mê của cha anh là rất nhiều
sinh viên khoa Điện tử - Viễn thông những chưa có điều kiện cũng như kinh nghiệm
để tham gia cuộc thi. Do đó, mục tiêu của đề tài này là khơi dậy niềm đam mê điện
tử của các em sinh viên, tạo dựng một tiền đề để góp phần giúp cho khoa Điện tử Viễn thông có thể tham gia cuộc thi Robocon trong tương lai.
- Nhiệm vụ của đề tài

10


Nhiệm vụ của đề tài này là thiết kế một con robot có thể tự động đi theo
đường đi đã định trước bằng cách dò theo các vạch đen trên nền trắng mà không có

sự tác động trợ giúp bên ngoài.
- Yêu cầu của đề tài
Yêu cầu đề tài là thiết kế một con robot hoạt động với tốc độ cao nhất, ổn định nhất.
Robot có thể hoạt động linh hoạt, đi theo các loại đường từ đơn giản đến phức tạp.

PHẦN I
CƠ SỞ LÝ THUYẾT
CHƯƠNG I
GIỚI THIỆU HỌ VI ĐIỀU KHIỂN 8051
1.1 Sự ra đời của họ vi điều khiển 8051
Vào năm 1981 hãng Intel giới thiệu một số bộ vi điều khiển được gọi là
8051. Bộ vi điều khiển này có 128 byte RAM, 4K byte ROM trên chíp, hai bộ định
thời, một cổng nối tiếp và 4 cổng (đều rộng 8 bit) vào ra tất cả được đặt trên một
chíp. Lúc ấy nó được coi là một “hệ thống trên chíp”. 8051 là một bộ xử lý 8 bit có
nghĩa là CPU chỉ có thể làm việc với 8 bit dữ liệu tại một thời điểm. Dữ liệu lớn
hơn 8 bit được chia ra thành các dữ liệu 8 bit để cho xử lý. 8051 có tất cả 4 cổng
vào - ra I/O mỗi cổng rộng 8 bit. Mặc dù 8051 có thể có một ROM trên chíp cực đại
là 64 K byte, nhưng các nhà sản xuất lúc đó đã cho xuất xưởng chỉ với 4K byte
ROM trên chíp.
Vi điều khiển 8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản
xuất khác sản xuất và bán bất kỳ dạng biến thế nào của 8051 mà họ thích với điều
kiện họ phải để mã lại tương thích với 8051. Điều này dẫn đến sự ra đời nhiều phiên
bản của 8051 với các tốc độ khác nhau và dung lượng ROM trên chíp khác nhau
được bán bởi hơn nữa các nhà sản xuất. Điều này quan trọng là mặc dù có nhiều
biến thể khác nhau của 8051 về tốc độ và dung lượng nhớ ROM trên chíp, nhưng tất
cả chúng đều tương thích với 8051 ban đầu về các lệnh. Điều này có nghĩa là nếu ta

11



viết chương trình của mình cho một phiên bản nào đó thì nó cũng sẽ chạy với mọi
phiên bản bất kỳ khác mà không phân biệt nó từ hãng sản xuất nào.
1.2 Kiến trúc chung của họ vi điều khiển 8051
Bộ vi điều khiển 8051có kiến trúc Harvard là thành viên đầu tiên của họ
8051. Hãng Intel ký hiệu nó là MCS 51.
Họ vi điều khiển 8051 có một số đặc tính chung như sau:
Bảng 1.1 Các đặc tính của họ vi điều khiển 8051
Đặc tính
ROM trên chip
RAM
Đặc tính
Bộ định thời
Các chân vào ra
Nguồn ngắt
Cổng nối tiếp

Số lượng
4K byte
128 byte
Số lượng
2
32
6
1

Sơ đồ khối của họ vi điều khiển 8051 như sau:

INTERRUPT
CONTROL


ROM

ON - CHIP
RAM

BUS
CONTROL

4 I/O
PORTS

TIMER 0
TIMER 1

CPU

OSC

P0 P1 P2 P3

SERIAL
PORT

TXD

ADDRESS/DATA

Hình 1.1 Sơ đồ khối của họ vi điều khiển 8051
1.3 Tóm tắt tập lệnh của 8051


12

RXD

COUNTER INPUTS

EXTERNAL
INTERRUPTS


Tập lệnh của MSC-51 được tối ưu hoá cho các ứng dụng điều khiển 8 bit.
Nhiều kiểu định địa chỉ cô đọng và nhanh, dung để truy xuất RAM nội được dùng
đến nhằm tạo thuận lợi cho các thao tác trên các cấu trúc dữ liệu nhỏ. Tập lệnh cũng
hộ trợ các biến 1 bit cho phép quản lý bit trực tiếp trong các hệ logic và điều khiển
có yêu cầu xử lý bit. Cũng như trong trong các vi xử lý 8bit, các lệnh của 8051 có
các opcode 8 bit, do đó số lệnh có thể lên đến 256 lệnh (thực tế có 255 lệnh, một
lệnh không được định nghĩa). Ngoài opcode, một số lệnh còn có thêm 1 hay 2 byte
nữa cho dữ liệu hoặc địa chỉ. Tập lệnh có 139 lệnh 1 byte, 94 lệnh 2 byte và 24 lệnh
3 byte. Tập lệnh của 8051 được chia thành 5 nhóm: số học, logic, chuyển dữ liệu,
chuyển điều khiển, nhóm lệnh rẽ nhánh.
1.3.1 Chế độ đánh địa chỉ
Khi một lệnh được thực thi và lệnh này cần dữ liệu, một câu hỏi được đặt ra
là “Dữ liệu được chứa ở đâu”. Câu trả lời cho câu hỏi này tạo ra các kiểu định địa
chỉ của 8051. Có nhiều kiểu định địa chỉ do vậy có nhiều kiểu câu trả lời cho câu
hỏi trên chẳng hạn như: trong byte thứ 2 của 1 lệnh, trong thanh ghi R4, trong địa
chỉ trực tiếp hoặc trong bộ nhớ ngoài ở địa chỉ trong con trỏ dữ liệu.
Các kiểu định địa chỉ là phần cần thiết cho toàn bộ tập lệnh của mỗi một bộ
vi xử lý, vi điều khiển. Các kiểu định địa chỉ cho phép ta xác định rõ nguồn và đích
của dữ liệu theo nhiều cách khác nhau phụ thuộc vào tình huống lập trình. Có 8 kiểu
định địa chỉ như sau:

1.3.1.1 Thanh ghi địa chỉ
8051 có 4 bank thanh ghi, mỗi bank có 8 thanh ghi đánh số từ R0 đến R7.
Tại mỗi thời điểm chỉ có một bank thanh ghi được tích cực. Muốn chọn bank thanh
ghi nào ta chỉ cần gán các bít nhị phân thích hợp vào RSI (PSW.4) và RS0 (PSW.3)
trong thanh ghi trạng thái chương trình (PSW). Các lệnh sử dụng kiểu định địa chỉ
thanh ghi được mã hoá bằng cách dùng 3 bit thấp nhất của opcode để chỉ ra một
thanh ghi bên trong của không gian địa chỉ logic này.
Mã lệnh

n

Địa chỉ thanh ghi

13

n

n


Ngoài ra, một số thanh ghi đặc biệt như thanh ghi tích luỹ, con trỏ dữ liệu…
cũng được xác định trong các lệnh nên không các bít địa chỉ. Trong các lệnh này
thanh ghi tích luỹ được xác định là “A”, con trỏ dữ liệu là “DPTR”, thanh ghi đếm
chương trình là “PC”, cờ nhớ là “C”, cặp thanh ghi tích luỹ B là “AB”.
1.3.1.2 Địa chỉ trực tiếp
Kiểu đị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ột byte thêm vào tiếp theo opcode dùng để xác định địa chỉ.
Trong chế độ này, các thanh ghi bên trong 8051 được đánh địa chỉ trực tiếp
bằng 8 bit địa chỉ nằm trong byte thứ hai của mã lệnh


Mã lệnh

Địa chỉ trực tiếp

Địa chỉ trực tiếp
Dù vậy, trình dịch cho phép gọi tên các thanh ghi chức năng đặc biệt (có địa
chỉ trực tiếp từ 80H đến FFH) ví dụ: P0 cho cổng 0, TMOD cho thanh ghi chế độ
Timer…
1.3.1.3 Địa chỉ gián tiếp
Làm cách nào để nhận biết một biến khi địa chỉ của biến đã được xác định,
được tính toán hoặc được sửa đổi trong khi một chương trình dạng chạy. Tình
huống này chỉ phát sinh khi ta quản lý các vị trí nhớ liên tiếp, các điểm nhập được
chuỗi kí tự. Các kiểu định địa chỉ thanh ghi hay trực tiếp không sử dụng được cho
các tình huống này, do vậy ta cần có các địa chỉ toán hạng được biết trong thời gian
hợp dịch.
Giải pháp của 8051 là dùng kiểu định địa chỉ gián tiếp. Các thanh ghi R0 và
R1 có thể hoạt động như các con trỏ (pointer) và nội dung của chúng chỉ ra địa chỉ
trong RAM, nơi mà dữ liệu được đọc hay ghi. Bit có ý nghĩa thấp nhất opcode xác
định thanh ghi nào (R0 hay R1) được dùng làm con trỏ. Trong hợp ngữ của 8051,
kiểu định địa chỉ gián tiếp được nhận biết dựa vào ký tự @ đặt trước R0 hay R1.
R0 và R1 được dùng để chứa địa chỉ ô nhớ mà lệnh tác động đến. Người ta
quy ước dùng dấu @ trước R0 và R1.

14


Mã lệnh

i


Địa chỉ gián tiếp
1.3.1.4 Địa chỉ tức thời
Khi toán hạng nguồn là một hằng số thay vì là một biến, hằng số này có thể
đưa vào lệnh và đây là byte dữ liệu tức thời. Các toán hạng tức thời được nhận biết
nhờ vào ký tự # đặt trước chúng. Toán hạng này có thể là một hằng số học, một biến
hoặc một biểu thức số học sử dụng các hằng số.
1.3.1.5 Địa chỉ tương đối
Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một
địa chỉ tương đối (còn được gọi là offset) là một giá trị 8 bit có dấu. Giá trị này
được cộng với bộ đếm chương trình để tạo ra địa chỉ của lệnh tiếp theo cần
được thực thi.
Định địa chỉ tương đối có điểm lợi là cung cấp cho chúng ta mà không
phụ thuộc vào vị trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong
tầm -128 byte đến 127 byte.
1.3.1.6 Địa chỉ tuyệt đối
Kiểu định địa chỉ tuyệt đối chỉ được sử dụng với các lệnh ACALL và
AJMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương trình trong trang 2K
hiện hành của bộ nhớ chương trình bằng cách cấp 11 bit địa chỉ thấp (A0-A10)
để xác định địa chỉ đích trong trang mã. Còn 5 bit cao hiện hành trong thanh
ghi đếm chương trình. Vì vậy địa chỉ của lệnh theo sau lệnh rẽ nhánh và địa
chỉ của lệnh rẽ nhánh cần phải cùng trang mã 2 kbyte. Để không bị giới hạn ta
có thể sử dụng lệnh LCALL, LJMP.
1.3.1.7 Địa chỉ dài
Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP các
lệnh 3 byte này chứa địa chỉ đích 16 bit. Lợi ích của lệnh này là sử dụng hết
toàn bộ không gian nhớ chương trình 64K, nhưng lại có điểm bất lợi là lệnh dài
đến 3 byte.

15



1.3.1.8 Địa chỉ tham chiếu
Địa chỉ tham chiếu dùng một thanh ghi cơ bản (hoặc thanh ghi đếm
chương trình PC hoặc thanh ghi con trỏ dữ liệu DPTR) và địa chỉ Offset (trong
thanh ghi tích luỹ A) để tạo địa chỉ được tác động cho các lệnh JMP hoặc
MOVC. Các bảng nhảy và bảng tìm kiếm dễ dàng được tạo ra để sử dụng địa
chỉ tham chiếu.

Địa chỉ cơ bản
PC hoặc DPTR

Offset
+

ACC

Địa chỉ được tác động
=

1.3.2 Tóm tắt tập lệnh của 8051
Tập lệnh của 8051 được chia làm 5 nhóm lệnh cơ bản:

• 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
Ghi chú:
Rn


: Địa chỉ thanh ghi R0-R7.

Direct

: Địa chỉ 8 bit trong RAM nội (00H-0FH).

@Ri

: Địa chỉ gián tiếp sử dụng thanh ghi R0 hoặc R1.

Source

: Toán hạng nguồn – có thể là Rn, direct hoặc @Ri.

Destination : Toán hạng đích – có thể là Rn, direct hoặc @Ri.
#data

: Hằng số 8 bit.

#data 16

: Hằng số 16 bit.

Bit

: Địa chỉ trực tiếp của một bit.

Rel

: Địa chỉ tương đối (offset) 8 bit.


Addr11

: Địa chỉ 11 bit trong trang hiện hành.

Addr16

: Địa chỉ 16 bit.

1.3.2.1 Nhóm lệnh số học
ADD A,Rn

: Cộng nội dung thanh ghi Rn vào thanh ghi A.

ADD A,data

: Cộng trực tiếp 1 byte vào thanh ghi A.

16


ADD A,@Ri

: Cộng gián tiếp nội dung RAM chứa tại địa chỉ được khai báo
trong Ri vào thanh ghi A.

ADD A,#data

: Cộng dữ liệu tức thời vào A.


ADDC A,@Ri

: Cộng gián tiếp nội dung RAM và cờ nhớ vào A.

ADDC A,#data

: Cộng dữ liệu tức thời và cờ nhớ vào A.

SUBB A,Rn

: Trừ nội dung thanh ghi A cho nội dung thanh ghi Rn và cờ
nhớ.

SUBB A,data

: Trừ trực tiếp A cho một số và cờ nhớ.

SUBB A,@Ri

: Trừ gián tiếp A cho một số và cờ nhớ.

SUBB A,#data

: Trừ nội dung A cho một số tức thời và cờ nhớ.

INC A

: Tăng nội dung thanh ghi A lên 1.

INC Rn


: Tăng nội dung thanh ghi Rn lên 1.

INC data

: Tăng dữ liệu trực tiếp lên 1.

INC @Ri

: Tăng gián tiếp nội dung vùng RAM xuống 1.

DEC A

: Giảm nội dung thanh ghi A xuống 1.

DEC Rn

: Giảm nội dung thanh ghi Rn xuống 1.

DEC data

: Giảm dữ liệu trực tiếp xuống 1

DEC @Ri

: Giảm dữ liệu trực tiếp xuống 1.

INC DPTR

: Tăng nội dung con trỏ dữ liệu lên 1.


MUL AB

: Nhân nội dung thanh ghi A với nội dung thanh ghi B.

DIV AB

: Chia nội dung thanh ghi A cho nội dung thanh ghi B.

DA A

: Hiệu chỉnh thập phân thanh ghi A.

1.3.2.2 Nhóm lệnh logic
ANL A,Rn

: AND nội dung thanh ghi A với nội dung thanh ghi Rn.

ANL A,data

: AND nội dung thanh ghi A với dữ liệu trực tiếp.

ANL A,@Ri

: AND nội dung thanh ghi A với dữ liệu gián tiếp trong RAM.

ANL A,#data

: AND nội dung thanh ghi với dữ liệu tức thời.


ANL data,A

: AND một dữ liệu trực tiếp với A.

ANL data,#data

: AND một dữ liệu trực tiếp với A một dữ liệu tức thời.

ANL C,bit

: AND cờ nhớ với 1 bit trực tiếp.

ANL C,/bit

: AND cờ nhớ với bù 1 bit trực tiếp.

17


ORL A,Rn

: OR thanh ghi A với thanh ghi Rn.

ORL A,data

: OR thanh ghi A với một dữ liệu trực tiếp.

ORL A,@Ri

: OR thanh ghi A với một dữ liệu gián tiếp.


ORL A,#data

: OR thanh ghi A với một dữ liệu tức thời.

ORL data,A

: OR một dữ liệu trực tiếp với thanh ghi A.

ORL data, #data

: OR một dữ liệu trực tiếp với một dữ liệu tức thời.

ORL C,bit

: OR cờ nhớ với một bit trực tiếp.

ORL C,/bit

: OR cờ nhớ với bù của một bit trực tiếp.

XRL A,Rn

: XOR thanh ghi A với thanh ghi Rn.

XRL A,data

: XOR thanh ghi A với một dữ liệu trực tiếp.

XRL A,@Ri


: XOR thanh ghi A với một dữ liệu gián tiếp.

XRL A,#data

: XOR thanh ghi A với một dữ liệu tức thời.

XRL data,A

: XOR một dữ liệu trực tiếp với thanh ghi A.

XRL data,#data

: XOR một dữ liệu trực tiếp với một dữ liệu tức thời.

SETB C

: Đặt cờ nhớ.

SETB bit

: Đặt một bit trực tiếp.

CLR A

: Xoá thanh ghi A.

CLR C

: Xoá cờ nhớ.


CPR A

: Bù nội dung thanh ghi A.

CPL C

: Bù cờ nhớ.

CPL bit

: Bù một bit trực tiếp.

RL A

: Quay trái nội dung thanh ghi A.

RLC A

: Quay trái nội dung thanh ghi A qua cờ nhớ.

RR A

: Quay phải nội dung thanh ghi A.

RRC A

: Quay phải nội dung thanh ghi A qua cờ nhớ.

SWAP


: Quay trái nội dung thanh ghi A 1 nibble (1/2 byte)

1.3.2.3 Nhóm lệnh di chuyển dữ liệu
MOV A,Rn

: Chuyển nội dung thanh ghi Rn với thanh ghi A.

MOV A,data

: Chuyển dữ liệu trực tiếp vào thanh ghi A.

MOV A,@Ri

: Chuyển dữ liệu gián tiếp vào thanh ghi A.

MOV A,#data

: Chuyển dữ liệu tức thời vào thanh ghi A.

18


MOV Rn,data

: Chuyển dữ liệu trực tiếp vào thanh ghi Rn.

MOV Rn,#data

: Chuyển dữ liệu tức thời vào thanh ghi Rn.


MOV data,A

: Chuyển nội dung thanh ghi A vào một dữ liệu trực tiếp.

MOV data,Rn

: Chuyển nội dung thanh ghi Rn vào một dữ liệu trực tiếp.

MOV data,data

: Chuyển một dữ liệu trực tiếp vào một dữ liệu trực tiếp.

MOV data,@Ri

: Chuyển một dữ liệu gián tiếp vào một dữ liệu trực tiếp.

MOV data,#data

: Chuyển một dữ liệu tức thời vào một dữ liệu trực tiếp.

MOV @Ri,A

: Chuyển nội dung thanh ghi A vào một dữ liệu gián tiếp.

MOV @Ri,data

: Chuyển một dữ liệu trực tiếp vào một dữ liệu gián tiếp.

MOV @Ri,#data


: Chuyển một dữ liệu tức thời vào một dữ liệu gián tiếp.

MOV DPTR,#data : Chuyển một hằng 16 bit vào thanh ghi con trỏ dữ liệu.
MOV C,bit

: Chuyển một bit trực tiếp vào cờ nhớ.

MOV bit,C

: Chuyển cờ nhớ vào một bit trực tiếp.

MOV A,@A+DPTR : Chuyển byte bộ nhớ chương trình có địa chỉ là @A+DPTR
vào thanh ghi A.
MOV A,@A+PC

: Chuyển byte bộ nhớ chương trình có địa chỉ là @A+PC vào

thanh ghi A.
MOVX A,@Ri

: Chuyển dữ liệu ngoài (8 bit add) vào thanh ghi A.

MOVX A,@DPTR : Chuyển dữ liệu ngoài (16 bit add) vào thanh ghi A.
MOVX @RI,A

: Chuyển nội dung A ra dữ liệu ngoài (8 bit add).

MOVX @DPTR,A : Chuyển nội dung A ra dữ liệu ngoài (16 bit add).
PUSH data


: Chuyển dữ liệu trực tiếp vào ngăn xếp và tăng SP.

POP data

: Chuyển dữ liệu trực tiếp vào ngăn xếp và giảm SP.

XCH A,Rn

: Trao đổi dữ liệu giữa thanh ghi Rn và thanh ghi A.

XCH A,data

: Trao đổi giữa thanh ghi A và một dữ liệu trực tiếp.

XCH A,@Ri

: Trao đổi giữa thanh ghi A và một dữ liệu gián tiếp.

XCHD A,@R

: Trao đổi giữa nibble thấp (LSN) của thanh ghi A và LSN của

dữ liệu gián tiếp.
1.3.2.4 Nhóm lệnh chuyển điều khiển
ACALL addr11

: Gọi chương trình con dùng địa chỉ tuyệt đối.

LCALL addr16


: Gọi chương trình con dùng điaụ chỉ dài.

19


RET

: Trở về từ lệnh gọi chương trình con.

RET1

: trở về từ lệnh gọi ngắt.

AJMP addr11

: Nhảy tuyệt đối.

LJMP addr16

: Nhảy dài.

SJMP rel

: Nhảy ngắn.

JMP @A+DPTR

: Nhảy gián tiếp từ con trỏ dữ liệu.


JZ rel

: Nhảy nếu A=0.

JNZ rel

: Nhảy nếu A không bằng 0.

JC rel

: Nhảy nếu cờ nhớ được đặt.

JNC rel

: Nhảy nếu cờ nhớ không được đặt.

JB bit,rel

: Nhảy tương đối nếu bit trực tiếp được đặt.

JNB bit,rel

: Nhảy tương đối nếu bit trực tiếp không được đặt

JBC bit,rel

: Nhảy tương đối nếu bit trực tiếp được đặt, rồi xoá bit.

CJNE A,data,rel


: So sánh dữ liệu trực tiếp với A và nhảy nếu không bằng.

CJNE A,#data,rel

: So sánh dữ liệu tức thời với A và nhảy nếu không bằng.

CJNE Rn,#data,rel : So sánh dữ liệu tức thời với nội dung thanh ghi Rn và nhảy
nếu không bằng.
CJNE @Ri,#data,rel : So sánh dữ liệu tức thời với dữ liệu gián tiếp và nhảy nếu
không bằng.
DJNZ Rn,rel

: Giảm thanh ghi Rn và nhảy nếu không bằng.

DJNZ data,rel

: Giảm thanh dữ liệu trực tiếp và nhảy nếu không bằng.

1.3.2.5 Nhóm lệnh rẽ nhánh
Có nhiều lệnh để điều khiển lên chương trình bao gồm việc gọi hoặc trả lại
từ chương trình con hoặc chia nhánh có điều kiện hay không có điều kiện. Tất cả
các lệnh rẽ nhánh đều không ảnh hưởng đến cờ. Ta có thể định nhãn cần nhảy tới
mà không cần rõ địa chỉ, trình biên dịch sẽ đặt địa chỉ nơi cần nhảy tới vào đúng
khẩu lệnh đã đưa ra.
Nhảy có điều kiện:
Bảng 1.2 Các lệnh rẽ nhánh
Condition
C=1
Bit = 1


Jump If Not <Condition>
JNC rel
JNB bit, rel

20

Jump If <Condition>
JC rel
JB bit, rel / JBC bit, rel


A=0
JNZ rel
Rn =0
DJNZ Rn, rel
Direct = 0
DJNZ direct, rel
A # direct
CJNE A, direct, rel
A # data
CJNE A, #data, rel
Rn # data
CJNE Rn, #data, rel
@Ri # #data
CJNE @Ri, #data, rel
Nhảy không điều kiện : ALJMP, LJMP, SJMP.

JZ rel

1.4 Giới thiệu về vi điều khiển AT89C51

Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự
như nhau. ở đây giới thiệu AT89C51 là một bộ vi điều khiển do hãng ATMEL sản
xuất với công nghệ CMOS có tốc độ cao vào công suất thấp với bộ nhớ Flash có thể
lập trình được. Tương thích với chuẩn công nghiệp của 8051 và 8052 về chân ra và
tập lệnh.
Các đặc trưng của AT89C51
- 4 KB EPROM bên trong.
- 128 Byte RAM nội.
- 4 Port xuất /nhập I/O 8 bit.
- Giao tiếp nối tiếp.
- 64 KB vùng nhớ mã ngoài
- 64 KB vùng nhớ dữ liệu ngoại.
- Xử lý Boolean (hoạt động trên bit đơn).
- 210 vị trí nhớ có thể định vị bit.
- 4µs cho hoạt động nhân hoặc chia.
- Hỗ trợ chuẩn giao tiếp SPI
1.4.1 Sơ đồ và chức năng các chân của AT89C51
AT89C51 có tất cả 40 chân có chức năng như các đường xuất nhập. Trong
đó có 24 chân có tác dụng kép (có nghĩa là 1 chân có 2 chức năng), mỗi đường có
thể hoạt động như đường xuất nhập hoặc như đường điều khiển hoặc là thành phần
của các bus dữ liệu và bus địa chỉ.

21


1
2
3
4
5

6
7
8
9
18
19
10
11
12
13
14
15
16
17
20

P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
RESET
XTAL1
XTAL2
RXD
TXD
INT0

INT1
T0
T1
WR
RD
GND

VCC
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
EA/VP
ALE/P
PSEN
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0

40
39

38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21

Hình 1.2 Sơ đồ nguyên lý vi điều khiển AT89C51

Hình 1.3 Sơ đồ khối bộ vi điều khiển AT89C51

22


1.4.1.1 Các cổng xuất nhập
Cổng 0: Cổng 0 là cổng có 2 chức năng ở các chân 32 - 39 của 89C51.
Trong các thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các
đường I/O. Đối với các thiết kế cỡ lớn có bộ nhớ mở rộng, nó được kết hợp giữa

bus địa chỉ và bus dữ liệu.
Cổng 1: Cổng 1 là cổng I/O trên các chân 1-8. Các chân được ký hiệu
P1.0, P1.1, P1.2, ... p1.7 có thể dùng cho giao tiếp với các thiết bị ngoài nếu cần.
Cổng 1 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ị bên ngoài.
Cổng 2: Cổng 2 là 1 cổng có tác dụng kép trên các chân 21- 28 được dùng
như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng
bộ nhớ mở rộng.
Cổng 3: Cổng 3 là cổng có tác dụng kép trên các chân 10-17. Các chân của
cổng 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 8951 như ở bảng sau:
Bảng 1.3 Chức năng các chân port 3
Bit
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Tên
RXT
TXD
INT0\
INT1\
T0
T1
WR\

RD\

Chức năng chuyển đổi
Ngõ vào 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
Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
Tín hiệu đọc bộ nhớ dữ liệu ngoài

1.4.1.2 Các ngõ tín hiệu điều khiển
- Ngõ tín hiệu PSEN (Program store enable):
PSEN là tín hiệu ngõ ra ở chân 29 có tác dụng cho phép đọc bộ nhớ chương
trình mở rộng thường được nối đến chân OE\ (Output Enable) của EPROM cho
phép đọc các byte mã lệnh.
PSEN ở mức thấp trong thời gian Microcontroller 89C51 lấy lệnh. Các mã
lệnh của chương trình được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh

23


ghi lệnh bên trong AT89C51 để giải mã lệnh. Khi 89C51 thi hành chương trình
trong EPROM nội PSEN sẽ ở mức logic 1.
- Ngõ tín hiệu điều khiển ALE (Address Latch Enable):
Khi AT89C51 truy xuất bộ nhớ bên ngoài, cổng 0 có chức năng là bus địa
chỉ và bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở
chân thứ 30 dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ
liệu khi kết nối chúng với IC chốt.

Tín hiệu ra ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai
trò là địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.
Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động trên chip và
có thể được dùng làm tín hiệu đồng bộ (clock) cho các phần khác của hệ thống.
Chân ALE được dùng làm ngõ vào xung lập trình cho EPROM trong AT89C51.
- Ngõ tín hiệu EA\(External Access):
Tín hiệu vào EA\ ở chân 31 thường được mắc lên mức 1 hoặc mức 0. Nếu ở
mức 1, AT89C51 thi hành chương trình từ EPROM nội trong khoảng địa chỉ thấp 4
Kbyte. Nếu ở mức 0, 89C51 sẽ thi hành chương trình từ bộ nhớ mở rộng. Chân EA\
được lấy làm chân cấp nguồn 12V khi lập trình cho EPROM trong AT89C51.
- Ngõ tín hiệu RST (Reset):
Ngõ vào RST ở chân 9 là ngõ vào Reset của AT89C51. Khi ngõ vào tín hiệu
này đưa lên cao ít nhất là 2 chu kỳ máy, các thanh ghi bên trong được nạp những
giá trị thích hợp để khởi động hệ thống. Khi cấp điện mạch tự động khởi động.
Trạng thái của tất cả các thanh ghi của 8051 sau khi khởi động hệ thống được
tóm tắt trong bảng sau:
Bảng 1.4 Nội dung các thanh ghi sau khi Reset
Thanh ghi
Đếm chương trình
Tích luỹ
B
PSW
SP
DPTR
Port 0-3

Nội dung
0000H
00H
00H

00H
07H
0000H
FFH

Thanh ghi
IP
IE
Các thanh ghi định thời
SCON
SBUF
PCON(HMOS)
PCON(CMOS)

24

Nội dung
XXX00000B
0XX00000B
00H
00H
00H
0XXXXXXXB
0XXX0000B


Quan trọng nhất trong các thanh ghi trên là thanh ghi đếm chương trình, nó
đượ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ớ trong chương trình: địa chỉ 0000H. Nội dung
của RAM trên chip không bị thay đổi bởi lệnh Reset.

- Các ngõ vào bộ dao động:
Bộ dao động được được tích hợp bên trong AT89C51, khi sử dụng
AT89C51 người thiết kế chỉ cần kết nối thêm thạch anh và các tụ. Tần số thạch anh
thường sử dụng cho AT89C51 là 12Mhz. Chân 40 (Vcc) được nối lên nguồn 5V.

Hình 1.4 Mạch dao động dùng thạch anh cho AT89C51
1.4.2 Cấu trúc bên trong của AT89C51
Các chip vi điều khiển dùng làm thành phần trung tâm trong các thiết kế
hướng điều khiển. Bộ nhớ thường có dung lượng bé hơn nhiều so với một hệ vi xử lý.
Nó còn không có ổ đĩa và hệ điều hành. Chương trình điều khiển phải thường trú
trong ROM. Chương trình vẫn được lưu giữ ngay cả khi mất điện. Do lý do trên, chip
8051 có không gian bộ nhớ riêng cho chương trình và dữ liệu. Cả bộ nhớ chương
trình và bộ nhớ dữ liệu đều nằm trong chip. Tuy nhiên ta có thể mở rộng bộ nhớ
chương trình và bộ nhớ dữ liệu bằng cách sử dụng các chip nhớ bên ngoài với dung
lượng tối đa là 64K cho bộ nhớ chương trình và 64K cho bộ nhớ dữ liệu.
1.4.2.1 Bộ nhớ chương trình ROM
Bộ nhớ chương trình lưu giữ chương trình điều khiển chip 8051. Sau khi khởi
động, hệ thống bắt đầu thực hiện chương trình từ địa chỉ 0000H. Khi chương
trình lớn quá kích thước bộ nhớ chương trình bên trong chip, chương trình này phải

25


×