Tải bản đầy đủ (.pdf) (75 trang)

Đề cương bài giảng vi điều khiển

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 (3.83 MB, 75 trang )

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT HƯNG YÊN
KHOA CƠ KHÍ ĐỘNG LỰC

BÀI GIẢNG
HỌC PHẦN: VI ĐIỀU KHIỂN
SỐ TÍN CHỈ: 02
LOẠI HÌNH ĐÀO TẠO: ĐẠI HỌC CHÍNH QUY
NGÀNH: CÔNG NGHỆ KỸ THUẬT Ô TÔ

Hưng Yên - 2015


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Chƣơng 1 TỔNG QUAN ................................................................................................................ 4
1.1.

Khái niệm ......................................................................................................................... 4

1.2.

Các dòng vi điều khiển phổ biến trên thị trƣờng .............................................................. 4

1.3 Các hệ thống số ..................................................................................................................... 5
1.3.1. Hệ thống số thập phân ................................................................................................... 5
1.3.2. Hệ thống số nhị phân ..................................................................................................... 5
1.3.3. Hệ thống số bát phân (BCD-Binary Coded Decimal) ................................................... 6
1.3.4. Hệ thống số thập lục (H
Hexadecimal) ............................................................................. 6
1.3.5. Số bù hai ........................................................................................................................ 7
1.3.6. Các phép toán số học đối với hệ nhị phân ..................................................................... 7
1.3.6.1. Phép cộng nhị phân không dấu .............................................................................. 7


1.3.6.2. Phép trừ nhị phân .................................................................................................. 7
1.3.6.3. Phép nhân nhị phân ............................................................................................... 7
1.3.6.4. Phép chia nhị phân ................................................................................................ 8
1.3.7. Chuyển đổi qua lại giữa các hệ thống số ....................................................................... 8
1.3.7.1. Chuyển đổi số thập phân sang nhị phân : ............................................................... 8
1.3.7.2. Chuyển đổi số nhị phân sang thập phân ................................................................. 8
1.3.7.3. Chuyển đổi số nhị phân sang Hexa : ...................................................................... 8
1.3.7.4. Chuyển đổi số Hexa sang nhị phân: ....................................................................... 9
1.3.7.5. Mã ASCII: (American Standard Code for Information Interchange ) ................... 9
Chƣơng 2. CẤU TRÚC PHẦN CỨNG VÀ NGÔN NGỮ LẬP TRÌNH C .................................. 11
2.1 Cấu trúc phần cứng của vi điều khiển 8051 ........................................................................ 11
2.2. Sơ đồ chân .......................................................................................................................... 11
2.2.1. Nhóm chân nguồn, dao động, điều khiển .................................................................... 12
2.2.2. Nhóm chân cổng vào ra .............................................................................................. 13
2.3. Tổ chức không gian bộ nhớ ................................................................................................ 14
2.3.1. Bản đồ bộ nhớ ROM của 8051 .................................................................................... 14
2.3.2. Tổ chức không gian bộ nhớ RAM của 8051 ............................................................... 15
2.4. Thanh ghi............................................................................................................................ 17
2.4.1. Thanh ghi tích luỹ A: .................................................................................................. 18
2.4.2. Thanh ghi từ trạng thái PSW (hay còn gọi là thanh ghi cờ) :..................................... 18
2.4.3. Thanh ghi điều khiển bộ đếm bộ định thời (TCON) .................................................. 18
2.4.4. Thanh ghi điều khiển chế độ bộ định thời/bộ đếm (TMOD) ...................................... 19
2.4.5. Thanh ghi cho phép ngắt IE ....................................................................................... 20
1


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
2.5. Ngôn ngữ lập trình C cho vi điều khiển ............................................................................. 20
2.5.1. Cấu trúc một chƣơng trình trong C ............................................................................. 20
2.5.2. Lời chú thích ............................................................................................................... 21

2.5.3. Các loại kiểu dữ liệu trong C...................................................................................... 21
2.5.4. Các hàm trong C ......................................................................................................... 23
2.5.5. Các toán tử ................................................................................................................. 24
2.5.6. Phép toán lấy địa chỉ biến (&) .................................................................................... 26
2.5.7. Phép toán chuyển đổi kiểu (bắt buộc) ........................................................................ 26
2.5.8. Các định dạng ............................................................................................................. 26
2.5.9. Cấu trúc điều khiển ..................................................................................................... 27
2.5.9.1. Cấu trúc rẽ nhánh ................................................................................................ 27
2.5.9.2. Cấu trúc lựa chọn switch ...................................................................................... 27
2.5.9.3. Vòng lặp có hạn for ............................................................................................. 28
2.5.9.4. Vòng lặp không xác định while............................................................................ 28
2.5.9.5. Một số thƣ viện chuẩn của C ............................................................................... 28
2.5.9.6. Các từ khóa trong C ............................................................................................. 29
2.5.9.10. con trỏ và mảng .................................................................................................. 29
2.6. Thuật toán và lƣu đồ thuật toán .......................................................................................... 33
2.6.1. Khái niệm .................................................................................................................... 33
2.6.2. Biểu diễn thuật toán bằng sơ đồ khối .......................................................................... 33
CHƢƠNG 3. LẬP TRÌNH ỨNG DỤNG ..................................................................................... 34
3.1. Các bƣớc tạo một Project mới ............................................................................................ 34
3.2. Lập trình ứng dụng. ............................................................................................................ 40
3.2.1. Chƣơng trình tạo trễ ................................................................................................... 40
3.2.2. Ứng dụng điều khiển LED đơn .................................................................................. 40
3.2.3. Ứng dụng điều khiển 8 LED đơn ................................................................................ 41
3.2.4. Ứng dụng điều khiển LED 7 thanh ............................................................................. 43
3.2.5. Ứng dụng điều khiển LED ma trận ............................................................................. 47
3.2.6. Ứng dụng sử dụng nút nhấn ........................................................................................ 48
3.2.7 Ứng dụng sử dụng ngắt ngoài ...................................................................................... 51
3.2.8. Lập trình cho Timer..................................................................................................... 55
3.2.8.1. Các thanh ghi cơ sở của bộ định thời ................................................................... 55
3.2.8.2. Lập trình cho timer ở chế độ 1 ............................................................................. 57

3.2.8.3. Lập trình cho Timer ở chế độ 2 ............................................................................ 59
2


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
3.2.8.4. Lập trình cho bộ đếm ........................................................................................... 60
3.2.9. Lập trình ngắt timer ..................................................................................................... 62
3.2.10. Lập trình với bộ biến đổi A/D ................................................................................... 65
3.2.11. Lập trình giao tiếp máy tính ...................................................................................... 67
3.2.11.1. Chế độ thu phát .................................................................................................. 67
3.2.11.2. Giao thức (protocol) ........................................................................................... 68
3.2.11.3. Tốc độ truyền ..................................................................................................... 69
3.2.11.4. Bố trí chân của RS232 ........................................................................................ 69
3.2.11.5. Ghép nối 8051 với RS232 .................................................................................. 71
3.2.11.6. Lập trình truyền thông nối tiếp cho 8051 ........................................................... 71
3.2.11.7. Lập trình 8051 truyền dữ liệu nối tiếp ................................................................ 73
3.2.11.8. Lập trình 8051 nhận dữ liệu nối tiếp .................................................................. 73
3.2.11.9. Truyền dữ liệu bằng ngắt ................................................................................... 74

3


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

Chƣơng 1 TỔNG QUAN
1.1.

Khái niệm

Hình 1.1. Cấu trúc chung của vi xử lí, vi điều khiển

-

Vi xử lý: theo nghĩa rộng hơn chính là CPU, các khối chức năng nhƣ bộ nhớ và các thiết
bị ngoại vi khác phải đƣợc ghép từ bên ngoài tới chíp vi xử lý để hình thành một bản
mạch (board) vi xử lý hoàn chỉnh. Hệ thống đƣợc thực hiện theo cách này đƣợc gọi là
máy vi tính một bản mạch (single board). Thí dụ 8085, 8086, 80486 và các vi xử lý.

-

Vi điều khiển: là thiết bị mà tất cả các khối chức năng (RAM, ROM, CPU) nằm bên
trong một vi mạch đơn lẻ. Hay còn gọi là máy tính “đơn chíp”.

-

Bộ nhớ: là một phần của vi điều khiển, có chức năng lƣu trữ dữ liệu.

-

Đơn vị xử lý trung tâm: Khối này có chức năng thực hiện các phép tính số học, logic và
di chuyển dữ liệu từ ô nhớ này tới ô nhớ khác.

-

BUS: Các đƣờng dẫn để di chuyển dữ liệu từ một khối này sang một khối khác đƣợc gọi
là BUS. Về mặt vật lý, bus là một nhóm các đƣờng dẫn, thƣờng gồm 8, 16 đƣờng dẫn
hoặc có thể nhiều hơn. Các bus chia làm 2 loại: bus địa chỉ và bus dữ liệu. bus địa chỉ bao
gồm số đƣờng dẫn tƣơng ứng với dung lƣợng bộ nhớ mà ta muốn định địa chỉ. Bus dữ
liệu có độ rộng bằng độ rộng dữ liệu, thƣờng vi điều khiển là 8 bit hoặc 8 đƣờng kết nối.

-


Khối vào ra: có chức năng giao tiếp với các thiết bị ngoại vi.

-

Chuyển đổi tƣơng tự sang số (ADC): Khối này có nhiệm vụ chuyển đổi thông tin dƣới
dạng một vài giá trị tƣơng tự thành một số nhị phân và đƣa tới đơn vị xử lí trung tâm.

-

Chƣơng trình: Sử dụng các câu lệnh đƣợc sắp xếp theo một quy tắc chặt chẽ, nhằm
truyền tải mong muốn của con ngƣời tới vi điều khiển.

1.2.

Các dòng vi điều khiển phổ biến trên thị trƣờng

-

Họ vi điều khiển 8051

-

Vi điều khiển PIC

-

Vi điều khiển AVR
4



Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

1.3 Các hệ thống số
1.3.1. Hệ thống số thập phân
Hệ đếm thập phân còn gọi là hệ đếm cơ số mƣời và nó đƣợc biểu diễn bởi 10 con số từ
(0,1,2,3,4,5,6,7,8,9 ) những con số này đƣợc sử dụng rất nhiều trong khoa học kỹ thuật cũng nhƣ
trong đời sống hàng ngày, khi biểu diễn số thập phân thì dứng sau dãy số thƣờng có chữ D.
Ví dụ: Ba nghìn Chin trăm Bảy mƣơi Tám đƣợc biểu diễn nhƣ sau
3978

= 3x103 + 9x102 + 7x101 + 8x100
= 3000 + 900 + 70 + 8

1.3.2. Hệ thống số nhị phân
Hệ đếm nhị phân còn gọi là hệ đếm cơ số hai và nó đƣợc biểu diễn bởi 2 con số là 0 và 1,
trong kỹ thuật điện tử số thì số 0 gọi là mức logic thấp ứng với điện áp thấp, số 1gọi là mức logic
cao tƣơng ứng với điện áp cao nhất. Mỗi ký hiệu 0 hoặc 1 đƣợc gọi là 1 Bit (Binary Digit), khi
biểu diễn số nhị phân thì dứng sau dãy số phải có chữ B.
Ví dụ:
1100b

gọi là 1 nibble

1001 1001b

gọi là 1 Byte

1010 1011 1100 1101b


gọi là 1 Word

Trong dãy số nhị phân đƣợc biểu diễn thì số nhị phân sát phải gọi là bít LSB còn số nhị
phân sát trái gọi là bít MSB
Số nhị phân thƣờng đƣợc biểu diễn ở 2 dạng là số nhị phân có dấu và số nhị phân không
dấu, nếu số nhị phân không dấu sẽ chỉ biểu diễn các số không âm (0) còn số nhị phân có dấu thì
biểu diễn đƣợc cả giá trị âm
Ví dụ : (1101) = 1x2^3 + 1x2^2 + 0x2^1 + 1x2^0
= 8 + 4 + 0 + 1 = 13
Giải giá trị của các số có dấu 8 bit là: -128 đến 127
Giải giá trị của các số có dấu 16 bit là: -32768 đến 32767
Trong khi biểu diễn dãy số nhị phân có dấu thì ngƣời ta sử dụng bít MSB để quy ƣớc cho
bít dấu, với bít 0 cho dãy số nhị phân dƣơng còn bít 1 cho dãy số nhị phân âm.

5


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

1.3.3. Hệ thống số bát phân (BCD-Binary Coded Decimal)
Số đếm BCD đƣợc định nghĩa là số thập phân nhƣng đƣợc biểu diễn dƣới dạng nhị phân
4 bít, nhƣng dãy số nhị phân 4 bít này khi quy sang hệ thập phân thì giá trị của nó phải  9
.Trong kỹ thuật điện tử nói chung thì mã BCD đƣợc sử dụng để giải mã hiển thị LED bảy
thanh…
Ví dụ: (0011), (0100), (0101), (0110), …(1001) ; đây gọi là số BCD không nén
Ví dụ: (00110100), (01010110), … (01111000) ; đây gọi là số BCD nén
Dƣới đây là bảng các mã BCD
Thập phân

BCD


0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7


0111

8

1000

9

1001

Ví dụ: số 15 biểu diễn dƣới dạng BCD: 0001 0101

1.3.4. Hệ thống số thập lục (Hexadecimal)
Hệ đếm thập phân còn gọi là hệ đếm cơ số mƣời sáu và nó đƣợc biểu diễn bởi 16 ký số
(0,1,2,3,4,5,6,7,8,9,B,C,D,E,F) những con số này đƣợc sử dụng rất nhiều trong khoa học kỹ thuật
đặc biệt là khoa học máy tính vì biểu diễn mã Hexa rất ngắn gọn, khi biểu diễn số thập lục phân
thì sau dãy số phải có chữ H.
Ví dụ: 3978h , 12CCh, 1998h, ABCDh, 2008h …

6


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

1.3.5. Số bù hai
Trong kỹ thuật Vi xử lý để biểu diễn một con số nào đó dƣới dạng dãy số nhị phân thì ngoài
việc biểu diễn số không dấu, số có dấu thì ngƣời ta còn sử dụng cách biểu diễn số bù 2. Vậy số
bù 2 sẽ biểu diễn nhƣ thế nào?
Ví dụ: Hãy biểu diễn dãy số A = 10011001 sang số bù 2 của nó:

b1: Tìm số bù 1 của A(bằng cách lấy bù tất cả các bit của A): 01100110
b2: Tìm số bù 2 của A (bằng cách lấy số bù 1 cộng cho 1)

: 01100111

đến đây ta nhận thấy rằng số bù 2 của một số nào đó nó chính là số đối của nó và tổng =0

1.3.6. Các phép toán số học đối với hệ nhị phân
1.3.6.1. Phép cộng nhị phân không dấu
Quy ƣớc:
0+0=0
0+1=1
1 + 1 = 0 nhớ 1
Ví dụ: Cho 2 số nhị phân nhƣ sau A = 10010011 ; B = 00111001 hãy tìm tổng Y
của 2 số nhị phân đã cho
1.3.6.2. Phép trừ nhị phân
Quy ƣớc:
0–0=0
0 – 1 = 1 mƣợn 1
1–0=1
1–1=0
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 10010011 ; B = 00111001 hãy tìm hiệu Z
của 2 số nhị phân đã cho (Lưu ý rằng phép trừ có thể thực hiện bằng cách biến thành phép cộng
bằng cách cộng với số bù 2 )
1.3.6.3. Phép nhân nhị phân
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 00100101 ; B = 00000100 hãy tìm tích F

7



Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Khi nhân 2 dãy số nhị phân với nhau thì ta đặt phép toán nhân giống nhƣ nhân số
thập phân, kết quả của phép nhân 2 dãy số nhị phân 8 bít sẽ thu đƣợc dãy số nhị phân là 16 bít,
nhƣ vậy ta có F = A*B = 0000000010010100b
1.3.6.4. Phép chia nhị phân
Ví dụ : Cho 2 số nhị phân nhƣ sau A = 10010110 ; B = 00000100 hãy tìm thƣơng
Khi chia 2 dãy số nhị phân với nhau thì ta đặt phép toán chia cũng giống nhƣ khi chia
2 số thập phân, kết quả của phép chia cũng nhƣ phần dƣ (nếu có) thu đƣợc tƣơng tự nhƣ khi làm
phép chia đối với số thập phân, nhƣ vậy ta có M = A/B = 00100101b dƣ 0010b

1.3.7. Chuyển đổi qua lại giữa các hệ thống số
1.3.7.1. Chuyển đổi số thập phân sang nhị phân :
Để chuyển đổi số thập phân sang số nhị phân ngƣời ta thƣờng dùng phƣơng pháp lấy
số thập phân cần chuyển rồi chia 2 liên tiếp đến khi không thể chia đƣợc nữa thì dừng
Ví dụ : Chuyển số thập phân 25 sang số nhị phân không dấu
Thƣơng số

Chia 2

Dƣ số

25/2

=

12

1

12/2


=

6

0

6/2

=

3

0

3/2

=

1

1

1/2

=

0

1


LSB

MSB

Kết quả thu đƣợc là: 11001 với số dƣ lần thứ nhất là bít có trọng số nhỏ nhất
1.3.7.2. Chuyển đổi số nhị phân sang thập phân
Để chuyển đổi số nhị phân sang số thập phân ngƣời ta thƣờng dùng phƣơng pháp lấy
tổng của tích n các số nhị phân cần chuyển nhân với 20 đến 2N-1 hay theo biểu thức tổng quát nhƣ
sau: A = B(N-1)* 2(N-1) + B(N-2)* 2(N-2) + B(N-3)* 2(N-3) + … + B(1)* 2(1) + B(0)* 2(0)
Ví dụ : Chuyển số nhị phân không dấu 01011110b sang số thập phân
A = 0*27 + 1*26 +0*25 + 1*24+ 1*23 + 1*22 + 1*21 + 0*20 = 94
nhƣ vậy ta có 01011110b = 94
1.3.7.3. Chuyển đổi số nhị phân sang Hexa :
Ví dụ : Chuyển số nhị phân 1100101011111110 sang số hexa

8


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Trƣớc hết ta chia số nhị phân đã cho thành các nhóm 4-bit tính từ bít có trọng số nhỏ
nhất, sau đó thay thế mỗi nhóm 4-bit bằng ký hiệu hexa tƣơng ứng với nó ta sẽ thu đƣợc kết quả
nhƣ sau:
1100

1010

1111

1110


C

A

F

E

Kết quả
CAFEh

1.3.7.4. Chuyển đổi số Hexa sang nhị phân:
Ví dụ : Chuyển số hexa 2F8h và ABBAh sang số nhị phân
Tƣơng tự nhƣ trƣờng hợp trên ta sẽ thay thế mỗi ký hiệu hexa bằng 4-bit nhị phân tƣơng ứng
với nó và ta sẽ thu đƣợc kết quả nhƣ sau: (tham khảo chuyển đổi nhị phân sang hexa).
1.3.7.5. Mã ASCII: (American Standard Code for Information Interchange )
Quá trình trao đổi thông tin trong máy tính nói chung cũng nhƣ quá trình xử lý thông tin
của các bộ vi xử lý, tất cả các thông tin đều đƣợc biểu diễn dƣới dạng các số 0 và 1. Mỗi tổ hợp
số 0 hoặc 1 đƣợc gán một ký tự chữ cái, chữ số hoặc một ký tự đặc biệt nào đó. Khi thông tin
đƣợc truyền đi, đƣợc lƣu giữ trong bộ nhớ và hiển thị trên màn hình đều ở dƣới dạng ký tự và
tuân theo một loại mã chuẩn đƣợc sử dụng rất rộng rãi gọi là mã ASCII.

9


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

10



Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Chƣơng 2. CẤU TRÚC PHẦN CỨNG VÀ NGÔN NGỮ LẬP TRÌNH C

2.1 Cấu trúc phần cứng của vi điều khiển 8051
- Bộ vi điều khiển 8051 đƣợc Intel cho ra mắt năm 1981, bộ vi điều khiển này có 128 byte RAM,
4KB ROM, 2 bộ định thời, một cổng nối tiếp và 4 cổng 8 bít. Tất cả đều đƣợc tích hợp trên một
chíp.
- 8051 trở nên phổ biến sau khi Intel sau khi 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 với điều kiện phải để mã chƣơng trình tƣơng thích với 8051. Từ
đó dẫn đến sự ra đời nhiều phiên bản của 8051 với tốc độ chíp và dung lƣợng bộ nhớ ROM.

Hình 2.1: Sơ đồ khối bộ vi điều khiển 8051
Bảng 2.1: Đặc điểm kỹ thuật cơ bản của một số thành viên họ 8051

2.2. Sơ đồ chân
- Các thành viên họ 8051 nhƣ 8751, 89C51, DS5000 đều có kiểu đóng vỏ khác nhau nhƣ:
Dạng hai hàng chân DIP (Dual in – line pakage)
Dạng vỏ dẹt vuông QFP (Quad Flat Pakage)
11


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Dạng không có chân đỡ LLC (Leadless Chip Carrier)
Tất cả đều có 40 chân với các chức năng, vào ra I/O. đọc RD, ghi WR, địa chỉ, dữ liệu và ngắt.
Tuy nhiên, để đáp ứng các ứng dụng có yêu cầu hạn chế một số chíp đƣợc đóng gói 20 chân với
số cổng vào ra ít hơn.

Hình 2.2. Sơ đồ chân của vi điều khiển 8051.


2.2.1. Nhóm chân nguồn, dao động, điều khiển
-

Vcc chân 40 cung cấp điện áp +5V cho chíp.

-

GND chân số 20 nối với 0 V

-

XTAL1, XTAL2 hai chân dao động đƣợc nối nhƣ sau:

Hình 2.3. Nối hai chân với nguồn dao động Hình 2.4. Nối hai chân với nguồn phát xung
là thạch anh

ngoài

Chú ý: Khi nối với bộ phát xung ngoài, thì chân 18 (XTAL2) để hở.
12


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
-

RST khởi động lại (reset chân số 9): bình thƣờng chân này đƣợc nối với mass thông qua

điện trở, khi có xung cao đặt tới chân này thì bộ VĐK sẽ kết thúc mọi hoạt động hiện tại và tiến
hành khởi động lại.


Hình 2.5. Mạch nối chân Reset
-

EA: (External Access chân 31) truy cập bộ nhớ ngoài: Đối với họ 8051 có ROM chƣơng

trình trên chíp thì chân EA đƣợc nối với nguồn Vcc. Trƣờng hợp không có ROM trên chíp nhƣ
8031 hoặc 8032 thì mã chƣơng trình thì lƣu cất ở bộ nhớ ROM ngoài, khi đó chân EA đƣợc nối
với mass. Nhƣ vậy, chân EA hoặc đƣợc nối với mass hoặc đƣợc nối với dƣơng nguồn, chứ
không bao giờ để hở.
Ví dụ:
Xác định chu kỳ máy với a) XTAL = 11.059MHz b) XTAL = 16MHz.
Giải:
a) 11.059 MHz/12= 921.6kHz.
Chu kỳ máy = 1/921.6Khz=1.085µs
b) 16MHz/12 = 1.333MHz
Chu kỳ máy = 1/1.333MHz =0.75 µs
-

PSEN (chân 29 – program store enable): là chân cho phép cất chƣơng trình, khi

chƣơng trình đƣợc cất ở ROM ngoài thì chân này đƣợc nối tới chân OE của ROM.
-

ALE (chân 30- Address Latch Enable): là chân có mức tích cực cao, chân này

đƣợc sử dụng để phân kênh địa chỉ và dữ liệu bằng cách nối tới chân G của chíp 74LS373.

2.2.2. Nhóm chân cổng vào ra
-


4 chân P0, P1, P2, P3 đều có 8 chân và tạo thành cổng 8 bít, tất cả các cổng khi Reset thì

đều đƣợc cấu hình làm cổng ra. Để làm đầu vào thì cần đƣợc lập trình.

13


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
-

Cổng P0: Bình thƣờng là cổng ra, để có thể vừa làm đầu ra vừa làm đầu vào thì mỗi chân
phải nối với điện trở kéo 10K. Vì P0 có dạng cực máng hở.

Hình 2.6: Cổng P0 luôn đƣợc nối với điện trở kéo khi làm cổng vào ra.
Mặc định P0 là cổng ra, để cấu hình P0 là cổng vào thì phải ghi 1 tới tất cả các bít của cổng bằng
câu lệnh: MOV P0,#0FFH
Ngoài ra, khi nối 8051/31 tới bộ nhớ ngoài thì P0 cung cấp cả địa chỉ và dữ liệu bằng
cách dồn kênh để tiết kiệm số chân. Chân ALE sẽ báo P0 có địa chỉ hay dữ liệu. Nếu ALE = 0
thì P0 cấp dữ liệu.
-

Cổng P1: Sử dụng làm cổng vào ra, không cần điện trở kéo nhƣ cổng P0.

-

Cổng P2: Sử dụng làm cổng vào ra giống nhƣ P1. Tuy nhiên ở 8031, khi truy cập 64 KB
bộ nhớ ngoài cần có bus địa chỉ 16 bít, khi đó P0 cung cấp 8 địa chỉ bít thấp qua A0~A7,
còn lại 8 bít địa chỉ cao A8~A15 do P2 cung cấp.

-


Cổng P3: Sử dụng làm cổng vào ra giống nhƣ P0, P1, P2. Ngoài ra P3 còn có một số
chức năng quan trọng khác

2.3. Tổ chức không gian bộ nhớ

2.3.1. Bản đồ bộ nhớ ROM của 8051
- Do bộ đến chƣơng trình của 8051 là 16 bít nên không gian ROM tối đa có thể truy cập đƣợc là
64K.
- Dải địa chỉ của ROM từ 0000h ~FFFFH, lệnh đầu tiên của ROM chƣơng trình đều đặt ở 0000H
còn lệnh cuối cùng phụ thuộc vào dung lƣợng ROM trên chíp của mỗi thành viên họ 8051.
- Ví dụ :
Tìm địa chỉ bộ nhớ ROM của những thành viên họ 8051 sau đây.
a) AT 8951 ( hoặc 8751 ) với 4k byte.
b) DS 500032 với 32K byte.
14


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Giải:
a) Với 4k byte không gian nhớ ROM trên chip, ta có 4096 byte bằng 1000H ở dạng Hexa (
4 x 1024 = 4096D = 1000H ). Bộ nhớ này đƣuọc sắp xếp trong các ngăn nhớ từ 0000 đến
0FFFFH. Lƣu ý 0 luôn là ngăn nhớ đầu tiên.
b) Với 32k byte ta có 32.768 byte, ( 32 x 1024). Chuyển 32.768 về số Hexa ta nhận đƣợc
giá trị 8000H. Do vậy, không gian nhớ là dải từ 0000 đến 7FFFH.

Hình 2.7: Bộ vi xử lý và bộ vi điều khiển.

2.3.2. Tổ chức không gian bộ nhớ RAM của 8051
1. 128 byte RAM thấp

-

Có đị chỉ từ 00~7FH và đƣợc chia thành các vùng sau:

-

Ngăn nhớ từ 00H~1FH tổng cộng là 32 byte, đƣợc dành làm các băng thanh ghi và ngăn
xếp.

-

Ngăn nhớ từ 20H~2FH tổng cộng 16 byte đƣợc dùng làm bộ nhớ đọc ghi định địa chỉ
đƣợc theo bit.

-

Ngăn nhớ từ 30H~7FH tổng cộng 80 byte đƣợc dùng để lƣu thông tin khi đọc và ghi và
thƣờng đƣợc gọi là RAM bảng nháp

15


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

Hình 2.8: Tổ chức RAM của 8051
 Băng thanh ghi của 8051: 32 byte này đƣợc chia làm 4 băng thanh ghi (0,1,2,3). Mỗi
băng thanh ghi có 8 thanh ghi từ R0~R7

Hình 2.9: các băng thanh ghi và địa chỉ RAM
2. 128 byte RAM cao

 Vùng không gian RAM này đƣợc dành cho các thanh ghi đặc biệt

16


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

Hình 2.9. 128 byte RAM cao
2.4. Thanh ghi
- Thanh ghi của 8051 đƣợc dùng để lƣu tạm thời dữ liệu hoặc địa chỉ. Các thanh ghi này chủ
yếu có dữ liệu 8 bít và 8051 cũng chỉ có một kiểu dữ liệu 8 bít. Các bít của thanh ghi đƣợc xắp
xếp nhƣ hình sau:

-

Trong đó bít D7 là bít có trọng số cao nhất (MSB), bít D0 là bít có trọng số thấp nhất

(LSB). Vì chỉ có một kiểu dữ liệu 8 bít, nên mọi dữ liệu lớn hơn 8 bít trƣớc khi xử lý đều đƣợc
chia thành các phần 8 bít. 8051 có nhiều thanh ghi nhƣng ở đây chúng ta chỉ đề cập tới một số
thanh ghi đa năng cơ bản sau

17


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

2.4.1. Thanh ghi tích luỹ A:
-

Là thanh ghi 8 bít đƣợc sử dụng để lƣu giữ liệu tạm thời, thƣờng đƣợc sử dụng trong các

phép toán số học và logic.
D7

D6

D5

D4

D3

D2

D1

D0

2.4.2. Thanh ghi từ trạng thái PSW (hay còn gọi là thanh ghi cờ) :
-

Là một thanh ghi 8 bít dùng để báo trạng thái của chƣơng trình

2.4.3. Thanh ghi điều khiển bộ đếm bộ định thời (TCON)
Tên bít Vị trí bít
TF1

7

Mô tả
Cờ tràn T1, thiết lập và xóa bằng phần cứng


18


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
TR1

6

TR1 = 1 thì T1 chạy
TR1 = 0 thì T1 dừng

TF0

5

Cờ tràn T0, thiết lập và xóa bằng phần cứng

TR0

4

TR0 = 1 thì T0 chạy
TR0 = 0 thì T0 dừng

IE1

3

Cờ ngắt ngoài 1, thiết lập và xóa bằng phần cứng


IT1

2

IT1 = 1 kích hoạt ngắt ngoài 1 theo sƣờn xuống
IT1 = 0 kích hoạt ngắt ngoài 1 theo mức thấp (mặc định)

IE0

1

Cờ ngắt ngoài 0, thiết lập và xóa bằng phần cứng

IT0

0

IT0 = 1 kích hoạt ngắt ngoài 0 theo sƣờn xuống
IT0 = 0 kích hoạt ngắt ngoài 0 theo mức thấp (mặc định)

2.4.4. Thanh ghi điều khiển chế độ bộ định thời/bộ đếm (TMOD)
T/C1
GATE

C/T

T/C0
M1


M0

GATE

C/T

-

GATE = 1: T/Cx (x = 0, 1) chạy chỉ khi chân INTx là HIGHT.

-

GATE = 0: T/Cx (x = 0, 1) chạy chỉ khi TRx = 1.

-

C/T = 0: Chức năng định thời (timer) đƣợc chọn

-

C/T = 1: Chức năng đếm xung ngoài (counter) đƣợc chọn.

-

M1 M0: hai bít lựa chọn chế độ của bộ định thời

M1

M0


M1 M0 Chế độ hoạt động
0

0

Bộ định thời 13 bít

0

1

Bộ định thời/bộ đếm 16 bít

1

0

Bộ định thời/bộ đếm 8 bit tự động nạp lại

1

1

Hai bộ định thời 8 bít
19


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên

2.4.5. Thanh ghi cho phép ngắt IE

EA

-

-

ES

ET1

EX1

ET0

EX0

-

EA = 0: Không ngắt nào đƣợc chấp nhận

-

EA = 1: Mỗi nguồn ngắt đƣợc cho phép hoặc cấm một cách riêng biệt bằng cách thiết lập
hoặc xóa bit tƣơng ứng đƣợc cho ra dƣới đây.

ES: Bit cho phép ngắt truyền thông nối tiếp
ET1: Bit cho phép ngắt T1
EX1: Bit cho phép ngắt ngoài 1
ET0: Bit cho phép ngắt T0
EX0: Bit cho phép ngắt ngoài 0


2.5. Ngôn ngữ lập trình C cho vi điều khiển
2.5.1. Cấu trúc một chƣơng trình trong C
// khai báo thƣ viện
#include <file.h>
#include<file.c>
//================================================
// Khai báo biến toàn cục
unsigned char x,y;
int z;
long n = 0;
//=================================================
// khai báo và định nghĩa các hàm
void HAM1 (void)
{
// viết các câu lệnh
}
//=================================================
20


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
void HAM2 (unsigned char x)
{
// viết các câu lệnh
}
//==================================================
// Hàm chính bắt buộc chƣơng trình nào cũng phải có
void main (void)
{

// viết các câu lệnh
}

2.5.2. Lời chú thích
-

Nếu lời giải thích trên một dòng thì có thể dùng dấu: “//”
Nếu lời giải thích trên nhiều dòng thì có thể dùng dấu: mở đầu bằng /* và kết thúc bằng
*/

Ví dụ:
/* - đây là chƣơng trình điều khiển LED đơn viết cho vi điều khiển
-

Sử dụng vi điều khiển 8051

*/

2.5.3. Các loại kiểu dữ liệu trong C
Bảng 1: Các kiểu dữ liệu trong C.
Tên kiểu dữ liệu (Data type)
char

Số byte
1

Khoảng dữ liệu (Range)
–127 to 127 or 0 to 255

unsigned char


1

0 to 255

signed char

1

–127 to 127

int

2

–32,767 to 32,767

unsigned int

2

0 to 65,535

signed int

2

Nhƣ kiểu int

short int


2

Nhƣ kiểu int

unsigned short int

2

0 to 65,535

signed short int

2

Nhƣ kiểu short int

long int

4

–2,147,483,647 to
2,147,483,647

signed long int

4

Nhƣ kiểu long int
21



Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
Tên kiểu dữ liệu (Data type)
unsigned long int

Số byte
4

Khoảng dữ liệu (Range)
0 to 4,294,967,295

long long int

8

–(263–1) to 263–1 (C99 only)

signed long long int

8

same as long long int (C99
only)

unsigned long long int

8

0 to 264–1 (C99 only)


float

4

6 digits of precision

double

8

10 digits of precision

long double

12

10 digits of precision

- Cách khai báo biến: Kiểu_dữ_liệu Tên_biến;
Ví dụ:
unsigned char x;
hoặc
unsigned char x =0; // khai báo cộng khởi tạo giá trị ban đầu
- Cũng có thể khai báo nhiều biến cùng một kiểu dữ liệu trên một dòng:
unsigned char x, y, z;
-

Ngoài ra để dùng cho vi điều khiển trình dịch chuyên dụng còn hỗ trợ các loại biến sau:


Dạng biến
Số bít
Số byte
Miền giá trị
bit
1
0
0;1
sbit
1
0
0;1
sfr
8
1
0 đến 255
sf16
16
2
0 đến 65535
- sbit: Kiểu dữ liệu này đƣợc đƣa ra để dung cho họ 8051 và đƣợc dùng để khai báo một bít
riêng lẻ bên trong SFR của họ 8051. Thí dụ, khi ta sử dụng kiểu dữ liệu này ta có thể truy nhập
lên các bít riêng biệt của một cổng I/O.
- ví dụ: sbit switch = P3^1; // biến switch đƣợc gán tới bít 3 của cổng 1.
- sfr: kiểu dữ liệu này tƣơng tự với sbit nhƣng đƣợc sử dụng để khai báo các biến kiểu 8 bít.
- ví du: sfr P1 = 0x09; // địa chỉ 0x90 đƣợc gán cho P1
Sfr P2 = 0xA0;// địa chỉ 0xA0 đƣợc gán cho P2
Unsigned char my_data;
My_data = P1;
P2 = my_data++;

- sfr16: kiểu dữ liệu này tƣơng tự với sfr nhƣng đƣợc sử dụng để khai báo các biến 16 bit. Khi sử
dụng kiểu dữ liệu này, byte thấp sẽ đi trƣớc byte cao.
22


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
- thí dụ bộ định thời T2 của vi điều khiển 8052 sử dụng các địa chỉ 0xCC và 0xCD cho các byte
thấp (LOW) và cao (HIGH). Ta có thể khai báo biến T2 để truy cập:
- sfr16 T2 = 0xCC; // Timer 2, T2L = CC, T2H = CD
- T2 = 0xAE01; // ghi giá trị 0xAE01 vào timer 1;

2.5.4. Các hàm trong C
Có hai loại hàm trong C và có cấu trúc nhƣ sau:
- Hàm trả lại giá trị
Kiểu giá trị hàm trả lại Tên hàm (biến truyền vào hàm)
{
// các lệnh xử lý ở đây
}
Ví dụ:
Unsigned int Cong (unsigned int x, unsigned int y, unsigned int z)
{
z = x + y;
return z;
}
- Hàm không trả lại giá trị
void Tên hàm (biến truyền vào hàm)
{
//
}
- Hàm có thể truyền vào biến hoặc không

Ví dụ
unsigned char TenHam(void)
{
//viết các câu lệnh trong than này
}
- Hàm có biến truyền vào
void TenHam(unsigned char x)
23


Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên
{
//viết các câu lệnh trong thân này
}
Ngoài ra riêng cho vi điều khiển phần mềm KeilC còn có một hàm phụ phụ ngắt có cấu
trúc nhƣ sau:
void TenHam(void)interrupt Nguồn_Ngắt using băng_thanh_ghi
-

{
// viết các lệnh ở đây
}
- Chú ý:
+ Hàm ngắt không đƣợc phép trả lại giá trị hay truyền tham biến vào hàm
+ Tên hàm có thể đặt bất kỳ
+ interrupt là từ khóa chỉ hàm ngắt

2.5.5. Các toán tử
Toán tử là những ký hiệu báo cho trình biên dịch các nhiệm vụ cần thực hiện, các bảng bên
dƣới tóm tắt các toán tử C dùng cho lập trình:

Bảng 1. Toán tử đại số

Bảng 2. Toán tử truy cập và kích thước

24


×