Bài giảng Vi điều khiển

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

1

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 (Hexadecimal) .6

1.3.5. Số bù hai

pdf 75 trang phuongnguyen 10740
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi điều khiển", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Vi điều khiển

Bài giảng Vi điều khiển
 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 
 1 
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 (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 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 2 
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 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 3 
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 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 4 
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 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 5 
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. 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 6 
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  ... ác mẫu bít ở lối ra. Với điện áp toàn dải là +5V, bộ 
biến đổi có độ phân giải là 5/256 = 19,53mV. Ví dụ mẫu bít ở lối ra là “00010000” (nghĩa là 16 
trong hệ thập phân) tƣơng ứng với 312,48mV. Tƣơng tự mẫu bít lối ra là “10100000” (nghĩa là 
160 trong hệ thập phân) tƣơng ứng 3124,8mV hay 3,124V. 
+ RD: là chân điều khiển đọc dữ liệu và khi RD ở mức thấp dữ liệu xuất hiện trên 8 chân lối ra. 
Khi RD ở mức cao dữ liệu không tồn tại ở lối ra. 
+ WR: lối vào WR bình thƣờng ở mức logic cao và lối vào này sẽ đƣợc kéo xuống mức logic 
thấp, sau đó lại trở về mức cao để bắt đầu quá trình chuyển đổi. 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 66 
+ INTR: là lối ra ngắt của bộ biến đổi ADC, một sƣờn xung xuống (từ mức cao xuống mức thấp) 
đƣợc tạo ra trên chân này khi quá trình chuyển đổi kết thúc. Lối ra này thƣờng đƣợc sử dụng để 
tạo ra một ngắt trong vi điều khiển sao cho dữ liệu chuyển đổi có thể đƣợc đọc. 
+ ADC0804 chứa một bộ dao động bên trong và cần có một tụ điện và điện trở bên ngoài nối với 
chân CLKR và CLKIN để khởi động bộ dao động. 
+ VIN+: chân lối vào của điện áp tƣơng tự. 
- Để thực hiện một quá trình chuyển đổi, hoạt động của bộ A/D có thể tóm tắt theo các bƣớc sau: 
 + Thiết lập WR và RD lên mức HIGH. 
 + Bắt đầu quá trình chuyển đổi bằng cách đặt WR xuống mức LOW. 
 + Đặt WR trở về mức HIGH. 
 + Phát hiện điểm kết thúc của quá trình biến đổi khi INTR xuống mức LOW (thƣờng 
đƣợc sử dụng bởi ngắt). 
 + Đặt RD xuống mức LOW và đọc dữ liệu từ DB0~DB7. 
 + Đặt RD lên mức cao. 
 + Quá trình xử lý này đƣợc lặp lại khi cần đọc lien tục tín hiệu đƣa vào vi điều khiển. 
RD
WR
INTR
RD
INTR
WR
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
D0
D1
D2
D3
D4
D5
D6
D7
XTAL2
18
XTAL1
19
ALE
30
EA
31
PSEN
29
RST
9
P0.0/AD0
39
P0.1/AD1
38
P0.2/AD2
37
P0.3/AD3
36
P0.4/AD4
35
P0.5/AD5
34
P0.6/AD6
33
P0.7/AD7
32
P1.0
1
P1.1
2
P1.2
3
P1.3
4
P1.4
5
P1.5
6
P1.6
7
P1.7
8
P3.0/RXD
10
P3.1/TXD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.7/RD
17
P3.6/WR
16
P3.5/T1
15
P2.7/A15
28
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
U1
AT89C51
VIN+
6
VIN-
7
VREF/2
9
CLK IN
4
A GND
8
RD
2
WR
3
INTR
5
CS
1
D GND
10
DB7(MSB)
11
DB6
12
DB5
13
DB4
14
DB3
15
DB2
16
DB1
17
DB0(LSB)
18
CLK R
19
VCC
20
U2
ADC0804
C1
150p
R1
10k
U2(VIN+)
5
0
%
RV1
1k
D1
LED-YELLOW
D2
ED-YELLOW
D3
ED-YELLOW
D4
ED-YELLOW
D5
ED-YELLOW
D6
ED-YELLOW
D7
ED-YELLOW
D8
ED-YELLOW
#include 
// Khai bao bien 
sbit ADC_RD = P3^2; 
sbit ADC_WR = P3^4; 
unsigned char t; 
// chuong trinh con tao tre 
void delay (long time) 
{ 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 67 
 long k; 
 for(k=0;k<time;k++) 
 {}; 
} 
// Chuong trinh con thiet lap chuyen doi ADC va ngat ngoai 1 
void init () 
{ 
 ADC_RD = 1; 
 ADC_WR = 1; 
 IT1 = 1; // Ngat ngoai theo suon xuong 
 EX1 = 1; // cho phep ngat ngoai 1 
 EA = 1; // Cho phep ngat 
} 
// Chuong trinh con bat dau chuyen doi ADC 
void start_con () 
{ 
 ADC_WR = 0; 
 ADC_WR = 1; 
} 
// Chuong trinh con ngat ngoai 1 
void int_EX1 () interrupt 2 
{ 
 ADC_RD = 0; 
 t = P1; 
 //t = t*19; 
 P2 = t; 
 ADC_RD = 1; 
 delay (5); 
 start_con(); 
} 
// Chuong trinh chinh================================== 
 main() 
{ 
 init(); 
 start_con(); 
 while(1)// vong lap vo han 
 { } ; 
} 
3.2.11. Lập trình giao tiếp máy tính 
3.2.11.1. Chế độ thu phát 
- Truyền dữ liệu nối tiếp, song song 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 68 
- Các chế độ thu phát dữ liệu 
3.2.11.2. Giao thức (protocol) 
Truyền thông nối tiếp không đồng bộ và định khung dữ liệu: 
Dữ liệu tới đầu thu của đƣờng truyền nối tiếp là tín hiệu 0 và 1. Việc xác định nội dung 
của dữ liệu sẽ khó khăn nếu giữa phần đầu phát và đầu thu không có một quy tắc thống nhất còn 
đƣợc gọi là giao thức (protocol) nhƣ: dữ liệu đƣợc xắp xếp nhƣ thế nào, có bao nhiêu bít tạo 
thành một ký tự, khi nào bắt đầu và khi nào kết thúc dữ liệu 
 Bít khởi động và bít dừng: Truyền tin nối tiếp không đồng bộ đƣợc sử dụng rộng rãi 
trong truyền ký tự, còn truyền dữ liệu định hƣớng khối sử dụng phƣơng pháp đồng bộ. Ở phƣơng 
pháp không đồng bộ, mỗi ký tự đƣợc bố trí vào giữa bít khởi động và bit dừng. Ngƣời ta gọi 
cách thức này là định khung. Nhƣ vậy, đối với truyền tin không đồng bộ, để định khung, dữ liệu 
ký tự đƣợc nén giữa bít khởi động và bít dừng. Bit khởi động luôn chỉ có một bít, còn bít dừng 
có thể có 1 hoặc 2 bit. Bit khởi động luôn có giá trị 0 (mức thấp), còn bít dừng thì có giá trị 1 
(cao). Ví dụ, nhƣ hình 3, trong đó ký tự “A” ASCII có mã nhị phân là 0100 0001, đƣợc định 
khung giữa một bít khởi động và 2 bít dừng. chú ý là bit trọng số thấp LSB đƣợc gửi đi trƣớc. 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 69 
Hình 3.1. Định khung ký tự “A” mã ASCII – 41h 
 Ở hình 3, khi không truyền thì tín hiệu là 1, gọi là dấu (mark). Tín hiệu không đƣợc gọi là 
khoảng trống (space). Lƣu ý là trình tự truyền bắt đầu với bít khởi động, tiếp theo là bít D0, bit 
LSB, tiếp nữa là các bít còn lại cho đến bít có trọng số lớn nhất MSB là D7, và cuối cùng là bit 
dừng để báo rằng đã kết thúc ký tự “A”. 
 Trong truyền tin nối tiếp không đồng bộ, các thiết bị ngoại vi và modem đƣợc lập trình 
để có độ dài dữ liệu là 7 bít hoặc 8 bít, đó là chƣa kể các bít dừng có thể chiếm 1 hoặc 2 bít. 
Trƣớc đây, ký tự ASCII là 7 bít, hiện nay ký tự ASCII mở rộng có 8 bít. Trong một số hệ thống 
trƣớc đây, do thiết bị thu không nhanh nên cần sử dụng 2 bít dừng để thiết bị có đủ thời gian cho 
truyền byte tiếp theo. Tuy nhiên, trong máy tính PC hiện đại phổ biến sử dụng một bit dừng. 
 Nếu chúng ta truyền một tệp văn bản ký tự ASCII sử dụng một bit dừng thì ta có tổng 
cộng 10 bít cho mỗi ký tự, gồm: 8 bít ký tự ASCII chuẩn, 1 bít khởi động và 1 bít dừng. do đó, 
cứ 8 bít thì có them 2 bít chiếm 25% tổng phí. 
 Ở một số hệ thống, nhằm tăng khả năng bảo toàn của dữ liệu, ngƣời ta còn thêm vào 
khung dữ liệu 1 bít chẵn lẻ. Bít này có thể là bít chẵn hoặc bit lẻ. Trong hệ thống cơ bít chẵn lẻ 
(bít bậc) thì bít này đƣợc gửi đi sau bit MSB và trƣớc bít dừng. 
3.2.11.3. Tốc độ truyền 
 Tốc độ truyền tin nối tiếp đƣợc tính bằng bit/giây (bps – bit per second). Một thuật ngữ 
khác cũng thƣờng đƣợc sử dụng là baud. Tuy nhiên, khái niệm bps và baud không hoàn toàn 
giống nhau. Baud là đơn vị đo dùng cho modem và đƣợc định nghĩa là số lần thay đổi trong một 
giây. Đối với modem, mỗi lần thay đổi tín hiệu có thể truyền đƣợc nhiều bit dữ liệu. Còn đối với 
đƣờng truyền thì tốc độ baud và bps là một. Do đó, trong tài liệu này ta không phân biệt hai thuật 
ngữ trên. 
3.2.11.4. Bố trí chân của RS232 
Hình 3.2. Sơ đồ đầu nối DB9 của RS232 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 70 
 Ngƣời ta phân biệt thiết bị truyền thông dữ liệu thành thiết bị đầu cuối dữ liệu DTE (Data 
Terminal Equipment) hoặc thiết bị truyền thông dữ liệu DCE (Data Comunication Equipment). 
DTE chủ yếu là máy tính và các thiết bị đầu cuối gửi và nhận dữ liệu, còn DCE là thiết bị truyền 
thông, chẳng hạn nhƣ các modem chịu trách nhiệm về truyền dữ liệu. Lƣu ý rằng tất cả mọi định 
nghĩa về chức năng các chân RS232 đều nhìn từ góc độ DTE. 
 Kết nối đơn giản nhất giữa một PC và bộ vi điều khiển yêu cần tối thiểu những chân sau: 
TxD, RxD và đất. 
 Để đảm bảo truyền dữ liệu nhanh và tin cậy, giữa hai thiết bị thì việc truyền dữ liệu phải 
đƣợc phối hopự tốt. Nhƣ trong trƣờng hợp của máy in, do thực tế là truyền tin nối tiếp, thiết bị 
thu có thể không đủ chỗ để chứa dữ liệu, khi đó phải có cách để báo cho bên phát dừng gửi dữ 
liệu. Có một số chân của RS232 đƣợc dùng làm chân tín hiệu bắt tay. 
- DTR (data terminal ready) thiết bị đầu cuối sẵn sàng, sau khi đƣợc cấp nguồn, và sau khi 
kết thúc quá trình tự kiểm tra, thiết bị đầu cuối hoặc cổng COM của máy tính gửi tín hiệu 
DTR để báo rằng thiết bị đã sẵn sàng để truyền tin. Nếu có lỗi ở cổng COM, tín hiệu này 
sẽ không đựợc kích hoạt. Đây là tín hiệu tích cực thấp và có thể đƣợc dùng để thông báo 
cho modem biết rằng máy tính đang hoạt động. Đây là chân ra từ DTE (cổng COM máy 
tính đƣa vào modem). 
- DSR (data set ready): dữ liệu sẵn sàng, khi thiết bị truyền thông DCE (ví dụ modem) 
đƣợc cấp nguồn và thực hiện xong quá trình tự kiểm tra, tín hiệu DSR đƣợc sử dụng để 
xác nhận dữ liệu đã sẵn sàng để truyền tin. Nhƣ vậy DSR là chân ra từ modem (DCE) và 
vào máy tính (DTE). Tín hiệu này có mức tích cực thấp. Nếu vì một lý do nào đó mà 
modem không thể kết nối đƣợc vào mạng điện thoại thì tín hiệu này sẽ không đƣợc kích 
hoạt để báo cho máy tính hoặc thiết bị đầu cuối rằng nó không thể nhận hoặc gửi dữ liệu. 
- RTS (request to send): Yêu cầu gửi dữ liệu. Tín hiệu RTS đƣợc sử dụng để báo cho 
modem biết thiết bị DTE (ví dụ máy tính) có một byte cần gửi. RTS là đầu ra tích cực 
thấp từ thiết bị DTE và vào thiết bị DCE. 
- CTS (clear to send): Tín hiệu thông: Để trả lời tín hiệu RTS, và khi đã sẵn sàng, modem 
gửi tín hiệu CTS đến thiết bị DTE (ví dụ máy tính) báo máy tính biết modem đang sẵn 
sàng nhận dữ liệu. CTS là tín hiệu vào thiết bị DTE và đƣợc DTE sử dụng để bắt đầu 
truyền dữ liệu. 
- CD (carrier detect)- dò sóng mang hoặc DCD (data carrier detect)- dò sóng mang dữ liệu. 
Modem gửi tín hiệu DCD để báo cho thiết bị DTE (PC) rằng đã phát hiện đƣợc sóng 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 71 
mang và sự kết nối giữa thiết bị DTE với modem đã đƣợc thiết lập. DCD là tín hiệu ra từ 
modem và đƣa vào DTE (PC). 
- RI (ring indicator) chỉ thị chuông- Đây là tín hiệu ra từ modem (DCE) đƣa vào PC (DTE) 
để báo rằng điện thoại đang réo chuông. Tín hiệu này tắt hoặc mở đồng bộ với tiếng 
chuông. Trong 6 tín hiệu bắt tay, đây là tín hiệu ít đƣợc sử dụng nhất. 
- Từ những trình bày trên có thể tóm tắt quá trình truyền tin giữa PC và modem nhƣ sau: 
khi có các tín hiệu DTR và DSC của PC và modem, chúng báo hiệu là PC và modem làm 
việc tốt, các tín hiệu RTS và CTS điều khiển luồng dữ liệu. khi PC muốn gửi dữ liệu thì 
nó gửi tín hiệu RTS cho modem và để trả lời lại nếu modem đã sẵn sàng (có chỗ chứa dữ 
liệu) để nhận dữ liệu từ PC thì nó gửi lại cho PC tín hiệu CTS. 
- Nếu modem bận thì nó không phát tín hiệu CTS, PC sẽ hủy tín hiệu DTR và sẽ thử lặp lại 
quá trình này. Tín hiệu CTS và RTS còn gọi là tín hiệu điều khiển luồng phần cứng. Còn 
nếu thiếu chỗ chứa dữ liệu thì modem không kích hoạt CTS và PC thôi không yêu cầu 
DTR và tiến hành thử lại lần nữa. các tín hiệu RTS và CTS cũng đƣợc coi là tín hiệu 
luồng điều khiển phần cứng. 
3.2.11.5. Ghép nối 8051 với RS232 
MAX232 dùng điện áp nguồn nuôi 5V cùng với điện áp nguồn của 8051. MAX232 cần 4 
tụ điện giá trị từ 1 đến 22uF. Giá trị thƣờng dùng là 22uF. 
 Max232 có hai cặp TxD, RxD (T1, R1; T2, R2) trong nhiều ứng dụng thì chỉ có một cặp 
đƣợc dùng, ví dụ T1, R1 đƣợc dùng với nhau cho trƣờng hợp TxD và RxD của 8051. 
3.2.11.6. Lập trình truyền thông nối tiếp cho 8051 
 8051 phát và thu dữ liệu nối tiếp theo nhiều tốc độ khác nhau. Tốc độ truyền có thể lập 
trình đƣợc thông qua bộ định thời timer 1. 
Bảng Giá trị thanh ghi TH1 của Timer1 với các tốc độ Baud khác nhau 
Tốc độ Baud Xung nhịp SMOD Giá trị TH1 Sai số 
9600 11.0592MHz 0 0xFD 0% 
4800 11.0592MHz 0 0xFA 0% 
2400 11.0592MHz 0 0xF4 0% 
1200 11.0592MHz 0 0xE8 0% 
9600 12MHz 1 0xF9 7% 
4800 12MHz 0 0xF9 7% 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 72 
2400 12MHz 0 0xF3 0.16% 
1200 12MHz 0 0xE6 0.16% 
Thanh ghi SBUF: là thanh ghi 8 bít đƣợc dùng cho truyền nối tiếp của 8051. Để byte dữ 
liệu đƣợc truyền qua đƣờng TxD thì cần đặt dữ liệu trong thanh ghi SBUF. Tƣơng tự, SBUF lƣu 
một byte dữ liệu khi nó đƣợc nhận qua đƣờng RxD của 8051. SBUF có thể đƣợc mọi thanh ghi 
của 8051 truy cập 
 Khi byte dữ liệu đƣợc ghi vào thanh ghi SBUF thì byte sẽ đƣợc định khung với bít Start 
và Stop và đƣợc truyền nối tiếp qua chân TxD. Tƣơng tự nhƣ vậy, khi các bít đƣợc nhận nối tiếp 
từ RxD thì 8051 mở khung, tức là loại trừ các bít Start, Stop để lấy ra một byte từ dữ liệu nhận 
đƣợc và đặt vào thanh ghi SBUF. 
 Thanh ghi điều khiển nối tiếp SCON: là thanh ghi 8 bít đƣợc dùng cho một số công 
việc, trong đó có lập trình bit khởi động Start, bit dừng Stop và các bít dữ liệu kiểu định khung 
dữ liệu . 
- Hai bít SM0, SM1 đây là các bít D6, D7 của thanh ghi SCON. Các bít này đƣợc dùng để xác 
định chế độ định khung dữ liệu bằng cách xác định số bít của một ký tự và các bít Start, Stop các 
tổ hợp của chúng là: 
SM0 SM1 Chế độ 
0 0 Chế độ nối tiếp 0 
0 1 Chế độ nối tiếp 1, 8 bít dữ liệu, Start, Stop 
1 0 Chế độ nối tiếp 2 
1 1 Chế độ nối tiếp 3 
 Trong bốn chế độ trên, ta chỉ quan tâm tới chế độ 1, chế độ này cho phép tốc đọ Baud 
thay đổi và do timer1 của 8051 thiết lập. Nhƣ vậy, ở chế độ nối tiếp 1, mỗi ký tự gồm có 10 bít 
đƣợc truyển, trong đó có bít đầu tiên là bít Start, sau đó là 8 bít dữ liệu và cuối cùng là bít Stop. 
Chú ý: 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 73 
- SM2 = 0 vì ta không dùng 8051 cho hệ đa xử lý. 
- REN = 1 thì 8051 vừa có thể phát và thu dữ liệu (SETB SCON.4) 
- REN = 0 thì bộ thu bị khóa (CLR SCON.4) 
- TB8 = 0; RB8 = 0 : vì không sử dụng chế độ nối tiếp 2,3. 
- TI và RI: Ngắt phát và ngắt thu là các bít D1 và D0 của thanh ghi SCON. Khi 8051 kết 
thúc phát một ký tự 8 bít thì cờ TI đƣợc bật để báo rằng bộ vi điều khiển đã sẵn sàng phát 
byte tiếp theo. Bít TI đƣợc bật khi bắt đầu nút Stop 
Khi 8051 nhận đƣợc dữ liệu nối tiếp qua chân RxD thì tiến hành tách các bít Start và Stop để 
lấy ra 8 bít dữ liệu và đặt vào thanh ghi SBUF. Sau khi quá trình này hoàn tất, cờ RI đƣợc bật 
để báo rằng bộ vi điều khiển đã nhận xong một byte và cần phải đƣợc cất đi nếu không sẽ bị 
mất. Cờ RI đƣợc bất khi đang tách bít Stop 
3.2.11.7. Lập trình 8051 truyền dữ liệu nối tiếp 
3.2.11.8. Lập trình 8051 nhận dữ liệu nối tiếp 
Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 
 74 
3.2.11.9. Truyền dữ liệu bằng ngắt 
 Nhƣ đã nêu ở phần trên, cờ ngắt phát TI đƣợc bật lên 1 khi bít cuối cùng của khung dữ 
liệu, bít Stop đƣợc phát đi báo rằng thanh ghi SBUF sẵn sàng phát byte tiếp. Trái lại, cờ ngắt thu 
RI đƣợc bật lên 1 khi toàn bộ khung dữ liệu kể cả bít Stop đã đƣợc nhận. Nói cách khác, thanh 
ghi SBUF đang lƣu một byte, thì cờ RI bật lên báo rằng byte dữ liệu thu đƣợc cần cất đi vào nơi 
an toàn trƣớc khi bị mất (bị ghi đè) bởi dữ liệu tiếp theo sẽ đƣợc nhận. 
 Ở 8051 chỉ có một ngắt dành riêng cho truyền thông nối tiếp. Ngắt này đƣợc dùng cho cả 
phát và thu dữ liệu. Nếu bít ngắt trong thanh ghi IE (là bít IE.4) đƣợc phép khi RI và TI bật lên, 
thì 8051 nhận đƣợc ngắt và nhảy đến địa chỉ trình phục vụ ngắt dành cho truyền thông nối tiếp 
0023H trong bảng vectơ ngắt và thực hiện nó. Lúc đó, chúng ta cần kiểm tra cờ TI và RI để xem 
cờ nào gây ngắt để có đáp ứng phù hợp. 
Hình 3.3. Thu và phát dùng một ngắt 
Ví dụ 1: Gửi dữ liệu từ vi điều khiển lên máy tính 

File đính kèm:

  • pdfbai_giang_vi_dieu_khien.pdf