Giáo trình 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.
Tóm tắt nội dung tài liệu: Giáo trình 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 lục phân thì sau dãy số phải có chữ H. Ví dụ: 3978h , 12CCh, 1998h, ABCDh, 2008h Khoa Cơ khí Động lực – Trường ĐHSPKT Hưng Yên 7 1.3.5. Số bù hai Trong kỹ thuật Vi xử lý để biểu diễn một ... Chức năng của các chân đƣợc giải thích chi tiết nhƣ sau: + DB0~DB7: là các lối ra số, dữ liệu đã chuyển đổi xuất hiện trên 8 đƣờng này. Bộ biến đổi 8 bít có 256 khả năng kết hợp ( từ 0 đến 255) cá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:
- giao_trinh_vi_dieu_khien.pdf