Giáo trình mô đun Vi điều khiển

docx 241 trang ngocly 1500
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình mô đun Vi điều khiển", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • docxgiao_trinh_mo_dun_vi_dieu_khien.docx

Nội dung text: Giáo trình mô đun Vi điều khiển

  1. - 2 - BỘ LAO ĐỘNG THƯƠNG BINH VÀ XÃ HỘI TỔNG CỤC DẠY NGHỀ GIÁO TRÌNH Mô đun: VI ĐIỀU KHIỂN NGHỀ: ĐIỆN TỬ CÔNG NGHIỆP TRÌNH ĐỘ : TRUNG CẤP Ban hành kèm theo Quyết định số:120/QĐ-TCDN ngày 25 tháng 02 năm 2013 của Tổng cục trưởng Tổng cục Dạy nghề Năm 2013 TUYÊN BỐ BẢN QUYỀN
  2. - 3 - Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo. Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm.
  3. - 4 - LỜI GIỚI THIỆU Để thực hiện biên soạn giáo trình đào tạo nghề Điện tử công nghiệp ở trình độ CĐN và TCN, giáo trình Mô đun Vi điều khiển là một trong những giáo trình mô đun đào tạo chuyên ngành được biên soạn theo nội dung chương trình khung được Bộ Lao động - Thương binh và Xã hội và Tổng cục Dạy nghề ban hành dành cho hệ Cao Đẳng Nghề và Trung Cấp Nghề Điện tử công nghiệp. Nội dung biên soạn ngắn gọn, dễ hiểu, tích hợp kiến thức và kỹ năng chặt chẽ với nhau, logíc. Khi biên soạn, nhóm biên soạn đã cố gắng cập nhật những kiến thức mới có liên quan đến nội dung chương trình đào tạo và phù hợp với mục tiêu đào tạo, nội dung lý thuyết và thực hành được biên soạn gắn với nhu cầu thực tế trong sản xuất đồng thời có tính thực tiễn cao. Nội dung giáo trình được biên soạn với dung lượng thời gian đào tạo 150 giờ gồm có: Bài MĐ24-01: Sơ lược về lịch sử và hướng phát triển của vi điều khiển. Bài MĐ24-02: Cấu trúc họ vi điều khiển 8051. Bài MĐ24-03: Tập lệnh 8051. Bài MĐ24-04: Bộ định thời. Bài MĐ24-05: Cổng nối tiếp. Bài MĐ24-06: Ngắt. Bài MĐ24-07: Phần mềm hợp ngữ. Trong quá trình sử dụng giáo trình, tuỳ theo yêu cầu cũng như khoa học và công nghệ phát triển có thể điều chỉnh thời gian và bổ sung những kiên thức mới cho phù hợp. Trong giáo trình, chúng tôi có đề ra nội dung thực tập của từng bài để người học cũng cố và áp dụng kiến thức phù hợp với kỹ năng. Tuy nhiên, tùy theo điều kiện cơ sở vật chất và trang thiết bị, các trường có thề sử dụng cho phù hợp. Mặc dù đã cố gắng tổ chức biên soạn để đáp ứng được mục tiêu đào tạo nhưng không tránh được những khiếm khuyết. Rất mong nhận được đóng góp ý kiến của các thầy, cô giáo, bạn đọc để nhóm biên soạn sẽ hiệu chỉnh hoàn thiện hơn. Các ý kiến đóng góp xin gửi về Trường Cao đẳng nghề Lilama 2, Long Thành Đồng Nai Đồng Nai, ngày 10 tháng 06 năm 2013 Tham gia biên soạn 1. Chủ biên :TS. Lê Văn Hiền 2. Kỹ sư Lê Văn Hùng 3. Kỹ sư Nguyễn Văn Tuấn
  4. - 5 - MỤC LỤC TRANG LỜI GIỚI THIỆU - 2 - BÀI 1 SƠ LƯỢC VỀ LỊCH SỬ VÀ HƯỚNG PHÁT TRIỂN CỦA VI ĐIỀU KHIỂN - 13 - Nội dung chính: - 13 - 1. Lịch sử xuất hiện bộ vi điều khiển 8051. - 13 - 2. Vi điều khiển (microcontroller). - 15 - 2.1. Nguyên lý, cấu tạo. - 15 - 3.1. Sản phẩm dân dụng - 20 - 3.2. Trong các thiết bị y tế - 20 - 3.3. Các sản phẩm công nghiệp - 20 - 4. Hướng phát triển. - 21 - BÀI 2 CẤU TRÚC CỦA HỌ VI ĐIỀU KHIỂN 8051 - 23 - Nội dung chính: - 23 - 1. Tổng quan - 23 - 2. Sơ đồ chân vi điều khiển 8051: - 27 - 2.1. Port 0 - 28 - 2.2. Port 1 - 29 - 2.3. Port 2 - 29 - 2.4. Port 3 - 29 - 2.5. Chân cho phép bộ nhớ chương trình PSEN - 30 - 2.6.Chân cho phép chốt địa chỉ ALE - 30 - 2.7. Chân truy xuất ROM ngoài EA - 31 - 2.8. Chân RESET ( RST ) - 31 - 2.9. Các chân XTAL1, XTAL2 - 32 - 3. Cấu trúc Port I/O - 33 - 3.1. Chức năng các Port I/O (hình 2.8). - 33 - 3.2. Kết nối các Port với led. - 35 - 4. Tổ chức bộ nhớ. - 37 - 4.1. Tổng quan tổ chức bộ nhớ (hình 2.12) - 37 - 4.2. Vùng RAM đa năng - 41 - 4.3. Vùng RAM định địa chỉ bit - 41 - 5. Các thanh ghi chức năng đặc biệt (SFR) - 41 - 5.1. Từ trạng thái chương trình PSW (program status word) - 41 - 5.3. Con trỏ Stack - 43 - 5.4. Con trỏ dữ liệu DPTR. - 43 - 5.5. Các thanh ghi Port nối tiếp - 43 - 5.6. Các thanh ghi định thời - 43 - 5.7. Các thanh ghi port nối tiếp (Serial Data Buffer). - 43 - 5.8. Các thanh ghi ngắt - 44 - 5.9.Thanh ghi điều khiển nguồn PCON - 44 - 6. Tổ chức bộ nhớ ngoài. - 45 -
  5. - 6 - 6.1. Truy xuất bộ nhớ chương trình ngoài. - 47 - 6.2. Truy xuất bộ nhớ dữ liệu ngoài - 47 - 6.3.Giải mã địa chỉ - 47 - 7. Các cải tiến của 8032/8052. - 47 - 8. Hoạt động Reset - 48 - BÀI 3 TẬP LỆNH 8051 - 55 - 1. Mở đầu - 55 - 1.1. Cú pháp lệnh. - 55 - 1.2. Khai báo dữ liệu. - 56 - 2. Các phương pháp định địa chỉ - 57 - 2.1. Định địa chỉ bằng thanh ghi (hình 3.1) - 58 - 2.2. Định địa chỉ trực tiếp(hình 3.2) - 58 - 2.3. Định địa chỉ gián tiếp (Indirect Addressing) (hình 3.3) - 59 - 2.4. Định địa chỉ tức thời (Immediate Addressing) - 60 - 2.5. Định địa chỉ tương đối (hình 3.4) - 60 - 2.6. Định địa chỉ tuyệt đối (hình 3.5) - 61 - 2.7. Định địa chỉ dài (Long Addressing) ( hình 3.6) - 61 - 2.8. Định địa chỉ chỉ số (Index Addressing). - 61 - 3. Các nhóm lệnh. - 62 - 3.1. Nhóm lệnh số học. - 64 - 3.2. Nhóm lệnh logic - 73 - 3.3. Nhóm lệnh truyền dữ liệu. - 82 - 3.4. Nhóm lệnh boolean - 88 - 3.5.Nhóm lệnh rẽ nhánh chương trình - 90 - BÀI 4 BỘ ĐỊNH THỜI - 103 - Nội dung chính: - 103 - 2.Thanh ghi SFR của timer - 106 - 3. Các chế độ làm việc - 108 - 4. Nguồn cung cấp xung cho Timer. - 109 - 4.1. Chức năng định thời - 110 - 5. Khởi động, dừng và điều khiển Timer - 110 - 6. Khởi tạo và truy xuất thanh ghi Timer. - 111 - 6.1. Đọc bộ định thời đang hoạt động. - 112 - 6.2. Thời gian ngắn và thời gian dài - 114 - 7.1. Các thanh ghi điều khiển Timer 2 - 115 - 7.2. Chế độ capture. - 117 - 7.3. Chế độ tự động nạp lại. - 118 - 7.4. Chế độ tạo xung clock. - 119 - 7.5 Chế độ tạo tốc độ baud - 120 - BÀI 5 CỔNG NỐI TIẾP (SERIAL PORT) - 124 - 1. Mở đầu - 124 - 2. Thanh ghi điều khiển - 126 - 2.2. Thanh ghi BDRCON (Baud Rate Control Register) - 128 -
  6. - 7 - 3. Chế độ làm việc. - 129 - 3.1. Thanh ghi dịch 8 bit (chế độ 0). - 130 - 3.2. Chế độ UART 8 bit có tốc độ baud thay đổi ( chế độ 1) - 132 - 3.3. Chế độ 2: UART 9 bit với tốc độ Baud cố định. - 134 - 3.4. Chế độ 3: UART 9 bit với tốc độ Baud thay đổi. - 134 - 4. Khởi tạo và truy xuất thanh ghi PORT nối tiếp. - 134 - 4.1. Bit điều khiển cho phép nhận dữ liệu (Receive Enable). - 134 - 4.2. Bit dữ liệu thứ 9. - 134 - 4.3. Thêm vào bit chẵn lẻ Parity - 135 - 4.4. Các cờ ngắt. - 135 - 5. Truyền thông đa xử lý (Multiprocessor Communications). - 136 - 6. Tốc độ baud - 138 - 6.1. Sử dụng bộ định thời 1 là xung clock tốc độ baud - 139 - 6.2. Tạo tốc độ baud bằng Timer 1 - 140 - 6.3. Tạo tốc độ baud bằng Timer 2 - 143 - 6.4. Bộ tạo tốc độ baud nội - 144 - BÀI 6 NGẮT - 152 - 1. Mở đầu - 152 - 2.1 Cho phép và không cho phép ngắt: - 155 - 2.2 Ưu tiên ngắt - 156 - 2.3. Chuỗi - 157 - 3.1 Các vector ngắt - 161 - 3.2. Ngắt ngoài (External Interrupt) - 161 - 4. Thiết kế chương trình sử dụng ngắt. - 162 - 4.1 Các trình phục vụ ngắt kích thước nhỏ - 163 - 4.2 Các trình phục vụ ngắt kích thước lớn - 164 - 5. Ngắt cổng nối tiếp. - 165 - 6. Các cổng ngắt ngoài. - 167 - 7. Đồ thị thời gian của ngắt - 168 - BÀI 7 PHẦN MỀM HỢP NGỮ - 181 - 1. Mở đầu - 181 - 1.1. Khái niệm. - 181 - 1.2. Một số khái niệm. - 182 - 2. Hoạt động của trình biên dịch Assembler. - 183 - 3. Cấu trúc chung chương trình hợp ngữ cho 8051 - 184 - 3.1. Các thành phần cơ bản của ngôn ngữ Assembly - 184 - 3.2. Cấu trúc chương trình dữ liệu. - 184 - 4. Tính biểu thức trong khi hợp dịch - 189 - 4.2. Các toán tử số học (arithetic operation). - 192 - 4.3. Các toán tử logic - 192 - 4.4. Các toán tử quan hệ (relation operators). - 193 - 4.5. Các toán tử khác - 193 - 4.6. Thứ tự ưu tiên các toán tử. - 193 -
  7. - 8 - 5. Các điều khiển của ASSEMBLER. - 194 - 5.1. Điều khiển trạng thái ASSEMBLER - 194 - 5.2. Chỉ dẫn định nghĩa kí hiệu. - 195 - 5.3. Khởi tạo giá trị trong bộ nhớ - 197 - 5.4. Định địa chỉ trong bộ nhớ. - 197 - 5.5. Liên kết chương trình - 198 - 5.6. Cách chọn segment - 199 - 6. Hoạt động liên kết (Linker). - 200 - 7. Macro - 200 - 7.1. Truyền tham số cho Macro. - 201 - 7.2. Macro với nhãn cục bộ - 201 - 7.3. Tác động lặp lại (Repeat) - 202 - 7.4. Các tác vụ điều khiển - 203 - TÀI LIỆU THAM KHẢO -240-
  8. - 9 - MÔ ĐUN VI ĐIỀU KHIỂN Mã mô đun: MĐ 25 Vị trí, tính chất, ý nghĩa và vai trò của mô đun: -Vị trí của mô đun: Mô đun được bố trí dạy sau khi học xong môn học mô đun: Kỹ thuật xung số điện tử cơ bản, điện tử nâng cao, điện tử công suất, và học trước môn vi mạch số lập trình - Tính chất của mô đun: Là mô đun chuyên môn nghề. - Ý nghĩa của mô đun: mô đun giúp ngườu học có kiến thức về điều khiển hệ thống va thiết bị bằng Vi đều khiển. - Vai trò của mô đun: Là mô đun chuyên ngành giúp người học điều Vi khiển hệ thống thông qua các Vi xử lý. Mục tiêu của mô đun: - Vận hành được các thiết bị và dây chuyền sản xuất dùng vi điều khiển. - Xác định được các nguyên nhân gây ra hư hỏng xảy ra trong thực tế. - Kiểm tra và viết được các chương trình điều kiển.  Về kiến thức: - Trình bày được cấu trúc, ứng dụng cả vi điều khiển trong công nghiệp. - Kiểm tra và viết được các chương trình điều khiển.  Về kỹ năng: - Vận hành được các thiết bị và dây chuyền sản xuất dùng vi điều khiển. - Xác định được các nguyên nhân gây ra hư hỏng xảy ra trong thực tế.  Về thái độ: - Rèn luyện cho học sinh thái độ nghiêm túc, cẩn thận, chính xác trong học tập và thực hiện công việc Nội dung của mô đun: Thời gian Mã bài Tên các bài trong mô đun Tổng Lý Thực Kiểm số thuyết Hành tra
  9. - 10 - Sơ lược về lịch sử và hướng MĐ24- phát triển của vi điều khiển 4 4 01 1 1 1. Lịch sử phát triển 1 1 2. Vi điều khiển 1 1 3. Lĩnh vực và ứng dụng 1 1 4. Hướng phát triển 10 7 3 MĐ24- Cấu trúc họ vi điều khiển 8051 02 1 1 1. Tổng quan 1 1 2. Sơ đồ chân 1 1 3. Cấu trúc Port I/O 1 1 4. Tổ chức bộ nhớ 1 1 5. Các thanh ghi chức năng đặc biệt
  10. - 11 - 1 1 6. Bộ nhớ ngoài 0,5 0,5 7. Các cải tiến của 8032/8052 0,5 0,5 8. Hoạt động Reset 3 3 9. Thực hành ứng dụng Tập lệnh 8051 30 7 22 1 MĐ24- 03 1 1 1. Mở đầu 4 2 2 2. Các cách định địa chỉ 5 4 1 3. Các nhóm lệnh 20 20 4. Luyện tập 30 9 20 1 MĐ24- Bộ định thời 04 1 1 1. Mở đầu 1 1 2. Thanh ghi SFR của timer
  11. - 12 - 2 2 3. Các chế độ làm việc 2 2 4. Nguồn cung cấp xung cho Timer 1 5. Khởi động, dừng, điều khiển 1 Timer 2 1 1 6. Khởi tạo và truy xuất thanh ghi Timer 1 1 7. Timer 2 của 8052 20 20 8. Luyện tập 30 6 23 1 MĐ24- Cổng nối tiếp 05 1 1 1. Mở đầu 1 1 2. Thanh ghi điều khiển 2 1 1 3. Chế độ làm việc 2 1 1 4. Khởi tạo và truy suất thanh ghi PORT nối tiếp
  12. - 13 - 2 1 1 5. Truyền thông đa xử lý 1 1 1 6. Tốc độ BAUD 20 20 7. Luyện tập 30 8 21 1 MĐ24- Ngắt 06 1 1 1. Mở đầu 2 2 2. Tổ chức ngắt của 8051 1 1 3. Xử lý ngắt 3 2 1 4. Thiết kế chương trình dùng ngắt 1 1 5. Ngắt cổng nối tiếp 1 1 6. Các cổng ngắt ngoài 1 1 7. Đồ thị thời gian của ngắt 20 20 8. Luyện tập
  13. - 14 - 16 6 9 1 MĐ24- Phần mềm hợp ngữ 07 1 1 1. Mở đầu 1 1 2. Hoạt động của ASSEMBLER 1 1 3. Cấu trúc chương trình dữ liệu 2 1 1 4. Tính biểu thức trong khi hợp dịch 2 0,5 1,5 5. Các điều khiển của ASSEMBLER 2 1 0,5 0,5 6. Hoạt động liên kết 2 1,5 0,5 7. MACRO 5 5 8. Luyện tập 150 45 100 5 Tổng cộng
  14. - 15 - BÀI 1 SƠ LƯỢC VỀ LỊCH SỬ VÀ HƯỚNG PHÁT TRIỂN CỦA VI ĐIỀU KHIỂN Mã bài: MĐ24-01 Giới thiệu: Trong những thập niên cuối thế kỷ XX, từ sự ra đời của công nghệ bán dẫn, kỹ thuật điện tử đã có sự phát triển vượt bậc. Các thiết bị điện tử sau đó đã được tích hợp với mật độ cao và rất cao trong các diện tích nhỏ,nhờ vậy các thiết bị nhỏ hơn và nhiều chức năng hơn. Các thiết bị điện tử ngày càng nhiều chức năng trong khi giá thành ngày càng rẻ hơn, chính vì vậy điện tử có mặt khắp nơi. Bước đột phát mới trong kỹ thuật điện tử là tạo ra một thiết bị điện tử mới là Vi điều khiển. Một bộ vi điều khiển (microcontroller) được xem như là “một máy tính trong một chip” – nó là một mạch điện tích hợp trên một chip, có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống. Vi điều khiển được ứng dụng rất rộng rãi hiện nay. Đa số các lĩnh vực đều có thể ứng dụng vi điều khiển. Và đối với nền cơ khí tự động hoá bây giờ thì có lẽ nó đã gắn liền với vi xử lý. Vi điều khiển là một câu trúc siêu nhỏ, gồm các linh kiện điện tử có kích thước micro hoặc nano kết hợp với nhau, và được nối với các thiết bị bên ngoài qua các chân vi điều khiển. Vì vậy hiểu rõ cấu trúc của nó, ta sẽ hiểu được mình đang làm việc với cái gì? Và nó hoạt động như thế nào? Mục tiêu: - Trình bày được cấu trúc chung của vi điều khiển. - Phát biểu được các ứng dụng của vi điều khiển và hướng phát triển của vi điều khiển. Nội dung chính: 1. Lịch sử xuất hiện bộ vi điều khiển 8051. Mục tiêu: - Trình bày được lịch sử hình thành và quá trình phát triển của họ vi điều khiển 8051. - Trình bày được cấu trúc chung của vi điều khiển. Nội dung: - Năm 1976 Intel giới thiệu bộ vi điều khiển (microcontroller) 8748, một chip tương tự như các bộ vi xử lý và là chip đầu tiên trong họ MCS-48. Độ phức tạp, kích thước và khả năng của Vi điều khiển tăng thêm một bậc quan trọng vào năm 1980 khi intel tung ra chip 8051, bộ Vi điều khiển đầu
  15. - 16 - tiên của họ MCS-51 và là chuẩn công nghệ cho nhiều họ Vi điều khiển được sản xuất sau này. Chip 8051 chứa trên 60000 transistor bao gồm 4K byte ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ định thời 16 bit. Sau đó rất nhiều họ Vi điều khiển của nhiều nhà chế tạo khác nhau lần lượt được đưa ra thị trường với tính năng được cải tiến ngày càng mạnh. - Hiện nay có rất nhiều họ Vi điều khiển trên thị trường với nhiều ứng dụng khác nhau, trong đó họ Vi điều khiển họ MCS-51 được sử dụng rất rộng rãi trên thế giới và ở Việt Nam. - Vào năm 1980 Intel công bố chíp 8051(80C51), bộ vi điều khiển đầu tiên của họ vi điều khiển MCS-51. Nó bao gồm 4KB ROM, 128 byte RAM, 32 đường xuất nhập, 1 port nối tiếp và 2 bộ định thời 16 bit. Tiếp theo sau đó là sự ra đời của chip 8052, 8053, 8055 với nhiều tính năng được cải tiến. - Hiện nay Intel không còn cung cấp các loại Vi điều khiển họ MCS-51 nữa, thay vào đó các nhà sản xuất khác như Atmel, Philips/signetics, AMD, Siemens, Matra&Dallas, Semiconductors được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51. Chip Vi điều khiển được sử dụng rộng rãi trên thế giới cũng như ở Việt Nam hiện nay là Vi điều khiển của hãng Atmel với nhiều chủng loại vi điều khiển khác nhau. - Hãng Atmel có các chip Vi điều khiển có tính năng tương tự như chip Vi điều khiển MCS-51 của Intel, các mã số chip được thay đổi chút ít khi được Atmel sản xuất. Mã số 80 chuyển thành 89, chẳng hạn 80C52 của Intel khi sản xuất ở Atmel mã số thành 89C52 (Mã số đầy đủ: AT89C52) với tính năng chương trình tương tự như nhau. Tương tự 8051,8053,8055 có mã số tương đương ở Atmel là 89C51,89C53,89C55. Vi điều khiển Atmel sau này ngày càng được cải tiến và được bổ sung thêm nhiều chức năng tiện lợi hơn cho người dùng. Bảng 1 Dung lượng RAM Dung lượng ROM Chế độ nạp 89C51 128 byte 4 Kbyte song song 89C52 128 byte 8 Kbyte song song 89C53 128 byte 12 Kbyte song song 89C55 128 byte 20 Kbyte song song - Sau khoảng thời gian cải tiến và phát triển, hãng Atmel tung ra thị trường dòng Vi điều khiển mang số hiệu 89Sxx với nhiều cải tiến và đặc biệt là có thêm khả năng nạp chương trình theo chế độ nối tiếp rất đơn giản và tiện lợi cho người sử dụng.
  16. - 17 - Bảng 2 Dung lượng RAM Dung lượng ROM Chế độ nạp 89S51 128 byte 4 Kbyte nối tiếp 89S52 128 byte 8 Kbyte nối tiếp 89S53 128 byte 12 Kbyte nối tiếp 89S55 128 byte 20 Kbyte nối tiếp - Tất cả các Vi điều khiển trên đều có đặc tính cơ bản giống nhau về phần mềm (các tập lệnh lập trình như nhau), còn phần cứng được bổ sung với chip có mã số ở hai số cuối cao hơn, các Vi điều khiển sau này có nhiều tính năng vượt trội hơn Vi điều khiển thế hệ trước. Các Vi điều khiển 89Cxx như trong bảng 1 có cấu tạo ROM và RAM như 98Sxx trong bảng 2, tuy nhiên 98Sxx được bổ sung một số tính năng và có thêm chế độ nạp nối tiếp. - 8051 là bộ vi điều khiển 8 bit tức là CPU chỉ có thể làm việc với 8 bit dữ liệu. Dữ liệu lớn hơn 8 bit được chia thành các dữ liệu 8 bit để xử lý. - 8051 đã trở nên phổ biến sau khi Intel cho phép các nhà sản xuất khác (Siemens, Atmel, Philips, AMD, Matra, Dallas, Semiconductor ) sản xuất và bán bất kỳ dạng biến thể nào của 8051 mà họ muốn với điều kiện họ phải để mã chương trình tương thích với 8051. Từ đó dẫn đến sự ra đời của nhiều phiên bản của 8051 với các tốc độ và dung lượng ROM trên chip khác nhau. - Tuy nhiên, điều quan trọng là mặc dù có nhiều biến thể của 8051, cũng như khác nhau về tốc độ, dung lượng ROM nhưng tất cả các lệnh đều tương thích với 8051 ban đầu. Điều này có nghĩa là nếu chương trình được viết cho một phiên bản 8051 nào đó thì cũng sẽ chạy được với mọi phiên bản khác không phụ thuộc vào hãng sản xuất. - Các loại vi điều khiển khác: vi điều khiển AVR, vi điều khiển PIC, vi điều khiển MCUs của Philips, Ngoài ra, các loại vi điều khiển chuyên dụng của các hãng sản xuất khác: các loại vi điều khiển này được sử dụng chuyên dụng theo chức năng cần điều khiển. Bảng 3: Địa chỉ của một số hãng sản xuất các thành viên vi điều khiển Hãng Địa chỉ Website intel www.intel.com/design/mcs51 Antel www.atmel.com Philips/Signetis www.semiconductors.philips.com Siemens www.sci.siemens.com Dallas Semiconductor www.dalsemi.com
  17. - 18 - 2. Vi điều khiển (microcontroller). Mục tiêu : Hiểu được cấu trúc bên trong và nguyên lý hoạt động của bộ vi điều khiển 8051. 2.1. Nguyên lý, cấu tạo. 2.1.1. Cấu tạo vi điều khiển. - Vi điều khiển là một máy tính được tích hợp trên một chíp, nó thường được sử dụng để điều khiển các thiết bị điện tử. Vi điều khiển thực chất gồm một vi xử lý có hiệu suất đủ cao và giá thành thấp (so với các vi xử lý đa năng dùng trong máy tính) kết hợp với các thiết bị ngoại vi như các bộ nhớ, các mô đun vào/ra, các mô đun biến đổi từ số sang tương tự và từ tương tự sang số, mô đun điều chế độ rộng xung (PWM) - Vi điều khiển thường được dùng để xây dựng hệ thống nhúng. Nó xuất hiện nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, dây truyền tự động - Hầu hết các loại vi điều khiển hiện nay có cấu trúc Harvard là loại cấu trúc mà bộ nhớ chương trình và bộ nhớ dữ liệu được phân biệt riêng. - Cấu trúc của một vi điều khiển gồm CPU, bộ nhớ chương trình (thường là bộ nhớ ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu (RAM), các bộ định thời, các cổng vào/ra để giao tiếp với các thiết bị bên ngoài, tất cả các khối này được tích hợp trên một vi mạch. Các loại vi điều khiển trên thị trường hiện nay: - VDK MCS-51: 8031, 8032, 8051, 8052, - VDK ATMEL: 89Cxx, AT89Cxx51 - VDK AVR AT90Sxxxx - VDK PIC 16C5x, 17C43 2.1.2. Nguyên lý hoạt động của Vi điều khiển Mặc dù đã có rất nhiều họ vi điều khiển được phát triển cũng như nhiều chương trình điều khiển tạo ra cho chúng, nhưng tất cả chúng vẫn có một số điểm chung cơ bản. Do đó nếu ta hiểu cặn kẽ một họ thì việc tìm hiểu thêm một họ vi điều khiển mới là hoàn toàn đơn giản. Một kịch bản chung cho hoạt động của một vi điều khiển như sau: - Khi không có nguồn điện cung cấp, vi điều khiển chỉ là một con chip có chương trình nạp sẵn vào trong đó và không có hoạt động gì xảy ra. - Khi có nguồn điện, mọi hoạt động bắt đầu được xảy ra với tốc độ cao. Đơn vị điều khiển logic có nhiệm vụ điều khiển tất cả mọi hoạt động. Nó khóa tất cả các mạch khác, trừ mạch giao động thạch anh. Sau vài mili giây đầu tiên tất cả đã sẵn sàng hoạt động.
  18. - 19 - - Điện áp nguồn nuôi đạt đến giá trị tối đa của nó và tần số giao động trở nên ổn định. Các bit của các thanh ghi SFR cho biết trạng thái của tất cả các mạch trong vi điều khiển. Toàn bộ vi điều khiển hoạt động theo chu kỳ của chuỗi xung chính. - Thanh ghi bộ đếm chương trình (Program Counter) được xóa về 0. Câu lệnh từ địa chỉ này được gửi tới bộ giải mã lệnh sau đó được thực thi ngay lập tức. - Giá trị trong thanh ghi PC được tăng lên 1 và toàn bộ quá trình được lặp lại vài triệu lần trong một giây.  Các kiểu cấu trúc bộ nhớ (Hình 1.1) Hình 1.1. Cấu trúc bên trong của vi điều khiển.
  19. - 20 - - Memory (bộ nhớ): là ROM/RAM lưu trữ chương trình hay các kết quả trung gian. Read Only Memory (ROM): Read Only Memory (ROM) là một loại bộ nhớ được sử dụng để lưu vĩnh viễn các chương trình được thực thi. Kích cỡ của chương trình có thể được viết phụ thuộc vào kích cỡ của bộ nhớ này. ROM có thể được tích hợp trong vi điều khiển hay thêm vào như là một chip gắn bên ngoài, tùy thuộc vào loại vi điều khiển. Cả hai tùy chọn có một số nhược điểm. Nếu ROM được thêm vào như là một chip bên ngoài, các vi điều khiển là rẻ hơn và các chương trình có thể tồn tại lâu hơn đáng kể. Đồng thời, làm giảm số lượng các chân vào/ra để vi điều khiển sử dụng với mục đích khác. ROM nội thường là nhỏ hơn và đắt tiền hơn, nhưng có thêm lá ghim sẵn để kết nối với môi trường ngoại vi. Kích thước của dãy ROM từ 512B đến 64KB. Random Access Memory (RAM): Random Access Memory (RAM) là một loại bộ nhớ sử dụng cho các dữ liệu lưu trữ tạm thời và kết quả trung gian được tạo ra và được sử dụng trong quá trình hoạt động của bộ vi điều khiển. Nội dung của bộ nhớ này bị xóa một khi nguồn cung cấp bị tắt. - Electrically Erasable Programmable ROM (EEPROM) (hình 1.2) EEPROM là một kiểu đặc biệt của bộ nhớ chỉ có ở một số loại vi điều khiển. Nội dung của nó có thể được thay đổi trong quá trình thực hiện chương trình (tương tự như RAM), nhưng vẫn còn lưu giữ vĩnh viễn, ngay cả sau khi mất điện (tương tự như ROM). Nó thường được dùng để lưu trữ các giá trị được tạo ra và được sử dụng trong quá trình hoạt động (như các giá trị hiệu chuẩn, mã, các giá trị để đếm, v.v ), mà cần phải được lưu sau khi nguồn cung cấp ngắt. Một bất lợi của bộ nhớ này là quá trình ghi vào tương đối chậm. Hình 1.2. Giao tiếp bộ nhớ
  20. - 21 - - Bộ đếm chương trình (PC:Program Counter): Bộ đếm chương trình chứa địa chỉ chỉ đến ô nhớ chứa câu lệnh tiếp theo sẽ được kích hoạt. Sau mỗi khi thực hiện lệnh, giá trị của bộ đếm được tăng lên 1. C hức năng của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua các lệnh (Instructions). - CPU-Central Processing Unit(Đơn vị xử lý trung tâm): Chức năng của CPU là tiến hành các thao tác tính toán xử lý, đưa ra các tín hiệu địa chỉ, dữ liệu và điều khiển nhằm thực hiện một nhiệm vụ nào đó do người lập trình đưa ra thông qua các lệnh (Instructions). Bộ giải mã lệnh có nhiệm vụ nhận dạng câu lệnh và điều khiển các mạch khác theo lệnh đã giải mã. Việc giải mã được thực hiện nhờ có tập lệnh “instruction set”. Mỗi họ vi điều khiển thường có các tập lệnh khác nhau. Thanh ghi tích lũy (Accumulator) là một thanh ghi SFR liên quan mật thiết với hoạt động của ALU. Nó lưu trữ tất cả các dữ liệu cho quá trình tính toán và lưu giá trị kết quả để chuẩn bị cho các tính toán tiếp theo. Một trong các thanh ghi SFR khác được gọi là thanh ghi trạng thái (Status Register) cho biết trạng thái của các giá trị lưu trong thanh ghi tích lũy. Arithmetical Logical Unit (ALU): Thực thi tất cả các thao tác tính toán số học và logic. - Các thanh ghi chức năng đặc biệt (SFR): Thanh ghi chức năng đặc biệt (Special Function Registers) là một phần của bộ nhớ RAM. Mục đích của chúng được định trước bởi nhà sản xuất và không thể thay đổi được. Các bit của chúng được liên kết vật lý tới các mạch trong vi điều khiển như bộ chuyển đổi A/D, modul truyền thông nối tiếp, Mỗi sự thay đổi trạng thái của các bit sẽ tác động tới hoạt động của vi điều khiển hoặc các vi mạch. - Các cổng vào/ra (I/O Ports): Để vi điều khiển có thể hoạt động hữu ích, nó cần có sự kết nối với các thiết bị ngoại vi. Mỗi vi điều khiển sẽ có một hoặc một số thanh ghi (được gọi là cổng) được kết nối với các chân của vi điều khiển. Chúng có thể thay đổi chức năng, chiều vào/ra theo yêu cầu của người dùng. - Address bus(Bus địa chỉ): Là các đường tín hiệu song song 1 chiều nối từ CPU đến bộ nhớ, CPU gửi giá trị địa chỉ của ô nhớ cần truy nhập (đọc/ghi) trên các đường tín hiệu này. Độ rộng của bus địa chỉ là n (là số các đường tín hiệu, với n có thể là 8, 18, 20, 24, 32 hay 64), khi đó số ô nhớ mà CPU có thể địa chỉ hố được sẽ là 2n. - Data bus(Bus dữ liệu): Là các đường tín hiệu song song 2 chiều,
  21. - 22 - nhiều thiết bị khác nhau có thể được nối với bus dữ liệu, nhưng tại một thời điểm chỉ có 1 thiết bị duy nhất có thể được phép đưa dữ liệu lên bus. Độ rộng Bus dữ liệu là m(với m có thể là 4, 8, 16, 32 hay 64), khi đó số bit mà môi một chu kỳ đọc/ghi có thể truyền trên trên bus là m bits. - Control bus(Bus điều khiển): CPU gửi tín hiệu thông qua bus này để điều khiển mọi hoạt động của hệ thống. Các tín hiệu điều khiển thường là: đọc/ ghi bộ nhớ, đọc/ ghi cổng vào/ra, 3. Lĩnh vực và ứng dụng. Mục tiêu: Biết được các ứng dụng của bộ vi điều khiển 8051. Về cơ bản, vi điều khiển rất đơn giản. Chúng chỉ bao gồm tối thiểu một số thành phần sau: - Một bộ vi xử lý tối giản được sử dụng như bộ não của hệ thống. - Tùy theo công nghệ của mỗi hãng sản xuất, có thể có thêm bộ nhớ, các chân nhập/xuất tín hiệu, bộ đếm, bộ định thời, các bộ chuyển đổi tương tự/số (A/D), - Tất cả chúng được đặt trong một vỏ chíp tiêu chuẩn. - Một phần mềm đơn giản có thể điều khiển được toàn bộ hoạt động của vi điều khiển và có thể dễ dàng cho người sử dụng nắm bắt. Dựa trên nguyên tắc cơ bản trên, rất nhiều họ vi điều khiển đã được phát triển và ứng dụng một cách thầm lặng nhưng mạnh mẽ vào mọi mặt của đời sống của con người. Một số ứng dụng cơ bản thành công có thể kể ra sau đây. 3.1. Sản phẩm dân dụng. Nhà thông minh: Cửa tự động, khóa số, tự động điều tiết ánh sáng thông minh (bật/tắt đèn theo thời gian, theo cường độ ánh sáng, ), điều khiển các thiết bị từ xa (qua điều khiển, qua tiếng vỗ tay, ), điều tiết hơi ẩm, điều tiết nhiệt độ, điều tiết không khí, gió. Hệ thống vệ sinh thông minh. Các máy móc dân dụng: Máy điều tiết độ ẩm cho vườn cây,buồng ấp trứng gà/vịt.Đồng hồ số, đồng hồ số có điều khiển theo thời gian. Các sản phẩm giải trí: Máy nghe nhạc, m áy chơi game, Đầu thu kỹ thuật số, đầu thu set-top-box, 3.2. Trong các thiết bị y tế. Máy móc thiết bị hỗ trợ: máy đo nhịp tim, máy đo đường huyết, máy đo huyết áp, điện tim đồ, điện não đồ, Máy cắt/mài kính. Máy chụp chiếu (city, X-quang, ) 3.3. Các sản phẩm công nghiệp. Điều khiển động cơ
  22. - 23 - Đo lường (đo điện áp, đo dòng điện, áp suất, nhiệt độ, ) Cân băng tải, cân toa xe, cân ô tô, Điều khiển các dây truyền sản xuất công nghiệp Làm bộ điều khiển trung tâm cho Robot 4. Hướng phát triển. - Kết hợp các bộ vi xử lý và vi điều khiển trong các sản phẩm hệ thống nhúng. - Sử dụng tốt nhất các tính năng của vi điều khiển: tốc độ mà bộ vi điều khiển hỗ trợ, dung lượng bộ nhớ RAM và ROM trên chíp, - Tìm hiểu được khả năng phát triển các sản phẩm xung quanh. - Nghiên cứu các bộ vi điều khiển 8051 từ các hãng khác nhau: 8751, AT89C51, DS500, CÁC BÀI TẬP MỞ RỘNG, NÂNG CAO VÀ GIẢI QUYẾT VẤN ĐỀ Câu 1: Nêu cấu trúc của Vi điều khiển họ 8051? Gợi ý: Cấu trúc của một vi điều khiển gồm CPU, bộ nhớ chương trình (thường là bộ nhớ ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu (RAM), các bộ định thời, các cổng vào/ra để giao tiếp với các thiết bị bên ngoài, tất cả các khối này được tích hợp trên một vi mạch. Câu 2: Chức năng của thanh ghi ALU? - Gợi ý: Arithmetical Logical Unit (ALU): Thực thi tất cả các thao tác tính toán số học và logic. Câu 3: Nêu 1 số lĩnh vực ứng của Vi điều khiển. - Gợi ý: Một số ứng dụng cơ bản thành công có thể kể ra sau đây: Sản phẩm dân dụng. Nhà thông minh, các máy móc dân dụng, các sản phẩm giải trí, máy móc thiết bị hỗ trợ, máy cắt/mài kính, máy chụp chiếu (city, X-quang, ) Các sản phẩm công nghiệp. Điều khiển động cơ Đo lường (đo điện áp, đo dòng điện, áp suất, nhiệt độ, ) Cân băng tải, cân toa xe, cân ô tô, Điều khiển các dây truyền sản xuất công nghiệp Làm bộ điều khiển trung tâm cho Robot
  23. - 24 - Yêu cầu về đánh giá kết quả học tập: Nội dung: + Về kiến thức: cấu tạo, đặc điểm,ứng dụng của các loại Viều khiển được học + Về kỹ năng: - Thực hiện viết các chương trình theo yêu cầu cho trứoc + Thái độ: Đánh giá phong cách, thái độ học tập Phương pháp: + Về kiến thức: Được đánh giá bằng hình thức kiểm tra viết + Về kỹ năng: Đánh giá kỹ năng thực hành Mỗi sinh viên, hoặc mỗi nhóm học viên thực hiện công việc theo yêu cầu của giáo viên.Tiêu chí đánh giá theo các nội dung: - Độ chính xác của công việc - Thời gian thực hiện công việc - Độ chính xác theo yêu cầu kỹ thuật + Thái độ: Tỉ mỉ, cẩn thận, chính xác.
  24. - 25 - BÀI 2 CẤU TRÚC CỦA HỌ VI ĐIỀU KHIỂN 8051 Mã bài: MĐ24-02 Giới thiệu: Trong những thập niên cuối thế kỉ XX, từ sự ra đời của công nghệ bán dẫn, kỹ thuật điện tử đã có sự phát triển vượt bậc. Các thiết bị điện tử sau đó đã được tích hợp với mật độ cao và rất cao trong các diện tích nhỏ, nhờ vậy các thiết bị nhỏ hơn và nhiều chức năng hơn. Các thiết bị điện tử ngày càng nhiều chức năng trong khi giá thành ngày càng rẻ hơn, chính vì vậy điện tử có mặt khắp nơi. Bước đột phát mới trong kỹ thuật điện tử là tạo ra một bộ Vi điều khiển. Vi điều khiển(Microcontroller) có khả năng tính toán, xử lý, và thay đổi chương trình linh hoạt theo mục đích người dùng, đặc biệt hiệu quả đối với các bài toán và hệ thống, nhưng cấu trúc phần cứng dành cho người dùng đơn giản. Vi điều khiển ra đời mang lại sự tiện lợi đối với người dùng, họ không cần nắm vững một khối lượng kiến thức quá lớn như người dùng vi xử lý, kết cấu mạch điện dành cho người dùng cũng trở nên đơn giản hơn nhiều và có khả năng giao tiếp trực tiếp với các thiết bị bên ngoài. Vi điều khiển tuy được xây dựng với phần cứng dành cho người sử dụng đơn giản hơn, nhưng thay vào lợi điểm này là khả năng xử lý bị giới hạn. Vì Vi điều khiển có giá thành rẻ hơn nhiều so với vi xử lý, việc sử dụng đơn giản nên nó được ứng dụng rộng rãi vào nhiều ứng dụng có chức năng đơn giản, không đòi hỏi tính toán phức tạp. Do đó, để nắm được hoạt động của các hệ thống dùng vi điều khiển ta phải tìm hiểu cấu trúc của họ vi điều khiển 8051. Mục tiêu của bài: - Mô tả được cấu trúc họ vi điều khiển chuẩn công nghiệp. - Thực hiện truy xuất bộ nhớ dữ liệu, bộ nhớ chương trình đúng qui trình kỹ thuật. - Thực hiện đúng kỹ thuật phương pháp mở rộng bộ nhớ ngoài. - Trình bày được nguyên lý hoạt động của mạch reset. Nội dung chính: 1. Tổng quan Mục tiêu: Mô tả được cấu trúc họ vi điều khiển chuẩn công nghiệp.
  25. - 26 - Hình 2.1. Sơ đồ khối vi điều khiển 8051. Thuật ngữ “8051” được dùng để chỉ rộng rãi các chip của họ MSC-51.Vi mạch tổng quát của họ MSC-51 là chip 8051,linh kiện đầu tiên của họ này được hãng Intel đưa ra thị trường. MCS-51 bao gồm nhiều phiên bản khác nhau, mỗi phiên bản sau tăng thêm một số thanh ghi điều khiển hoạt động của MCS-51. Hiện hay nhiều nhà sản xuất IC như Seimens, Advance Micro Devices ( AMD ), Fujitsu, Philips, Atmel được cấp phép làm nhà cung cấp thứ hai cho các chip của họ MSC-51. Ở Việt Nam các chip và các biến thể họ MSC-51 của hãng Atmel và Philips được sử dụng rộng rãi như : AT89C2051, AT89C4051, AT89C51, AT8C52, AT89S52, AT89S8252, AT89S8253, P89C51RDxx, P89V51RDxx Vi điều khiển 8051có 40 chân, mỗi chân có một kí hiệu tên và có các đặc trưng như sau : - 4KB ROM, 128 byte RAM. - 4 port xuất nhập (I/O port) 8 bit. - 2 bộ định thời 16 bit, mạch giao tiếp nối tiếp. - Không gian nhớ chương trình ngoài 64K, không gian nhớ dữ liệu ngoài 64K. - Bộ xử lý bit 210 vị trí nhớ được định địa chỉ,mỗi vị trí 1 bit nhân/chia trong 4µs. Tuy nhiên, tuỳ thuộc vào từng họ VĐK của từng hãng sản xuất khác nhau mà tính năng cũng như phạm vi ứng dụng của mỗi bộ VĐK là khác nhau, và chúng được thể hiện trong các bảng thống kê sau ( bảng 2.1, 2.2):
  26. - 27 - ROM RAM Tốc độ Các Timer/ Nguồn Họ VĐK UART (bytes) (bytes) (MHz) chân I/O Counter ngắt 8051 8031AH ROMLESS 128 12 32 2 1 5 8051AH 4K ROM 128 12 32 2 1 5 8051AHP 4K ROM 128 12 32 2 1 5 8751H 4K EPROM 128 12 32 2 1 5 8751BH 4K EPROM 128 12 32 2 1 5 8052 8032AH ROMLESS 256 12 32 3 1 6 8052AH 8K ROM 256 12 32 3 1 6 8752BH 8K EPROM 256 12 32 3 1 6 80C51 32 80C31BH ROMLESS 128 12,16 32 2 1 5 80C51BH 4K ROM 128 12,16 32 2 1 5 80C31BH 4K ROM 128 12,16 32 2 1 5 P 87C51 4K EPROM 128 12,16,20,2 32 2 1 5 4 8xC52/54/58 ROMLESS 256 12,16,20,2 32 3 1 6 80C32 4 8K ROM 256 12,16,20,2 32 3 1 6 80C52 4 8K EPROM 256 12,16,20,2 32 3 1 6 87C52 4 16K ROM 256 12,16,20,2 32 3 1 6 80C54 4 16K EPROM 256 12,16,20,2 32 3 1 6 87C54 4
  27. - 28 - ROM RAM Tốc độ Các Timer/ Nguồn Họ VĐK UART (bytes) (bytes) (MHz) chân I/O Counter ngắt 32K ROM 256 12,16,20,2 32 3 1 6 80C58 4 32K EPROM 256 12,16,20,2 32 3 1 6 87C58 4 8xL52/54/58 80L52 8K ROM 256 12,16,20 32 3 1 6 8K OTP 256 12,16,20 32 3 1 6 87L52 ROM 80L54 16K ROM 256 12,16,20 32 3 1 6 16K OTP 256 12,16,20 32 3 1 6 87L54 ROM 80L58 32K ROM 256 12,16,20 32 3 1 6 32K OTP 256 12,16,20 32 3 1 6 87L58 ROM Bảng 2.1. Các thông số của các họ VĐK thuộc hãng Intel (MSC 51) Bộ nhớ chương Bộ nhớ dữ liệu Timer Công Họ VĐK trình (Bytes) (Bytes) 16 bit nghệ AT89C1051 1K Flash 64 RAM 1 CMOS AT89C2051 2K Flash 128 RAM 2 CMOS AT89C51 4K Flash 128 RAM 2 CMOS AT89C52 8K Flash 256 RAM 3 CMOS
  28. - 29 - AT89C55 20K Flash 256 RAM 3 CMOS AT89S8252 8K Flash 256 RAM + 2K 3 CMOS EEPROM AT89S53 12K Flash 256 RAM 3 CMOS Bảng 2.2. Các thông số của các họ VĐK thuộc hãng Atmel 2. Sơ đồ chân vi điều khiển 8051: Mục tiêu: Hiểu chức năng các chân của vi điều khiển Mặc dù các thành viên của họ MSC-51 có nhiều kiểu đóng vỏ khác nhau, chẳng hạn như: hai hàng chân DIP (Dual in-Line Pakage), dạng vỏ dẹp vuông và dạng chíp không có chân đỡ LLC (Leadless Chip Carrier). Họ MSC-51 có 40 chân thực hiện các chức năng khác nhau như: vào ra (I/O), đọc, ghi, địa chỉ, dữ liệu và ngắt. Tuy nhiên, trong khuôn khổ chương trình chỉ khảo sát Vi điều khiển 40 chân dạng DIP ( hình 2.2). P1.0 1 40 Vcc P1.1 2 39 P0.0 (AD0) P1.2 3 38 P0.1 (AD1) P1.3 4 37 P0.2 (AD2) P1.4 5 36 P0.3 (AD3) P1.5 6 35 P0.4 (AD4) P1.6 7 34 P0.5 (AD5) P1.7 8 33 P0.6 (AD6) RST 9 32 P0.7 (AD7) (RxD) P3.0 10 31 /EA/Vpp (TxD) P3.1 11 30 ALE/(/PROG) (/INT0) P3.2 12 29 /PSEN (/INT1) P3.3 13 28 P2.7 (A15) (T0) P3.4 14 27 P2.6 (A14) (T1) P3.5 15 26 P2.5 (A13) (/Wr) P3.6 16 25 P2.4 (A12) (/Rd) P3.7 17 24 P2.3 (A11) XTAL2 18 23 P2.2 (A10) XTAL1 Hình 2.2. 19 S ơ đồ chân c ủa A T 89 22C 51 P2.1 (A9) GND 20 21 P2.0 (A8) Chip 8051 có 40 chân, mỗi chân có một kí hiệu tên và có các chức năng như sau: - Chân 40: nối với nguồn nuôi +5V.
  29. - 30 - - Chân 20: nối với đất (Mass, GND). - Chân 29 (PSEN)(program store enable) là tín hiệu điều khiển xuất ra của 8051, nó cho phép chọn bộ nhớ ngoài và được nối chung với chân của OE (Outout Enable) của EPROM ngoài để cho phép đọc các byte của chương trình. Các xung tín hiệu PSEN hạ thấp trong suốt thời gian thi hành lệnh. Những mã nhị phân của chương trình được đọc từ EPROM đi qua bus dữ liệu và được chốt vào thanh ghi lệnh của 8051 bởi mã lệnh.(chú ý việc đọc ở đây là đọc các lệnh (khác với đọc dữ liệu), khi đó VXL chỉ đọc các bit opcode của lệnh và đưa chúng vào hàng đợi lệnh thông qua các Bus địa chỉ và dữ liệu). - Chân 30 (ALE : Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051, nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0. - Chân 31 (EA : Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoài. Đối với 8051 thì: EA = 5V : Chọn ROM nội. EA = 0V : Chọn ROM ngoại. - 32 chân cònlại chia làm 4 cổng vào / ra: có thể dùng chân đó để để đọc mức logic (0;1 tương ứng với 0V; 5V)vào hay xuất mức logic ra (0;1), (hình 2.3) Port 0 từ chân 39 - 32 tương ứng là các chân P0.0 đến P0.7. Port 1 từ chân 1- 8 tương ứng là các chân P1.0 đến P1.7. Port 2 từ chân 21- 28 tương ứng là các chân P2.0 đến P2.7. Port 1 từ chân 10- 17 tương ứng là các chân P3.0 đến P3.7. Hình 2.3. Sơ đồ kết nối các chân xuất nhập với thiết bị ngoại vi - Chip 8051 có 32 chân xuất / nhập,tuy nhiên có 24 chân trong 32 chân này có 2 mục đích.Mỗi một chân này có thể hoạt động ở chế độ xuất/nhập, hoạt động điều khiển hoặc hoạt động như một đường địa chỉ / dữ liệu của bus
  30. - 31 - địa chỉ / dữ liệu đa hợp. 2.1. Port 0 Port 0 ( các chân từ 32 - 39 ) được ký hiệu là P0.0 – P0.7 có hai công dụng. Trong các thiết kế có tối thiểu thành phần, port 0 được sử dụng làm nhiệm vụ xuất nhập, với các thiết kế lớn hơn có bộ nhớ ngoài, port 0 trở thành bus địa chỉ và bus dữ liệu đa hợp ( byte địa chỉ thấp ). 2.2. Port 1 Port 1 (các chân từ 1 - 8 ) chỉ có một công dụng là xuất/nhập được ký hiệu là P1.0 – P1.7 và dùng để giao tiếp với thiết bị bên ngoài. Với chip 8052 ta có thể sử dụng P1.0 và P1.1 hoặc làm các đường xuất/nhập hoặc làm các ngõ vào cho mạch định thời thứ ba. 2.3. Port 2 Port 2 ( các chân từ 21-28 ) được ký hiệu là P2.0 – P2.7 có hai công dụng,hoặc làm nhiệm vụ xuất/nhập hoặc là byte địa chỉ cao của bus địa chỉ 16 bit cho các thiết kế có bộ nhớ chương trình ngoài hoặc các thiết kế có nhiều hơn 256 byte bộ nhớ dữ liệu. 2.4. Port 3 Port 3 ( các chân từ 10 - 17 ) được ký hiệu là P3.0 – P3.7 có hai công dụng. Khi không hoạt động xuất/nhập, các chân của port 3 có nhiều chức năng riêng. Chức năng các chân của Port 3 và Port 1( bảng 2.3) Bit Tên chân Địa chỉ bit Chức năng P3.0 RxD B0H Chân nhận dữ liệu của port nối tiếp P3.1 TxD B1H Chân phát dữ liệu của port nối tiếp P3.2 /INT0 B2H Ngõ vào ngắt ngoài 0 P3.3 /INT1 B3H Ngõ vào ngắt ngoài 1 P3.4 T0 B4H Ngõ vào bộ định thời hoặc bộ đếm 0 P3.5 T1 B5H Ngõ vào bộ định thời hoặc bộ đếm 1 P3.6 /WR B6H Điều khiển ghi bộ nhớ dữ liệu ngoài
  31. - 32 - P3.7 /RD B7H Điều khiển đọc bộ nhớ dữ liệu ngoài P1.0 T2 90H Ngõ vào bộ đinh thời hoặc bộ đếm 2 P1.1 T2EX 91H Nạp lại hoặc thu nhận của bộ định thời 2 Bảng 2.3. Sơ đồ chân chức năng của Port 3 và Port 1 2.5. Chân cho phép bộ nhớ chương trình PSEN Chân cho phép bộ nhớ chương trình /PSEN (Program store enable) là tín hiệu xuất trên chân 29. Đây là tín hiệu điều khiển cho phép ta truy xuấtbộ nhớ chương trình ngoài.Chân này thường nối với chân cho phép xuất /OE (Output enable) của EPROM hoặc ROM để cho phép đọc các byte lệnh.Tín hiệu /PSEN ở mức logic 0 trong suốt thời gian tìm nạp lệnh. Các mã nhị phân của chương trình hay Opcode được đọc từ EPROM qua bus dữ liệu và được chốt vào thanh ghi lệnh IR của 8051 để được giải mã. Khi thực thi một chương trình chứa ở ROM nội, chân /PSEN được duy trì mức logic không tích cực ( logic 1 ) ( hình 2.4). Hình 2.4. Ghép nối vi điều khiển 8951 với IC chốt, mạch Reset, tụ thạch anh. 2.6.Chân cho phép chốt địa chỉ ALE Ngõ xuất tín hiệu cho phép chốt địa chỉ ALE ( address latch enable ) dùng để giải đa hợp ( demultiplexing ) bus dữ liệu và bus địa chỉ.Khi port 0
  32. - 33 - được sử dụng làm bus địa chỉ/dữ liệu đa hợp,chân ALE xuất tín hiệu để chốt địa chỉ ( byte thấp của địa chỉ 16 bit ) vào một thanh ghi ngoài trong suốt ½ đầu của chu kỳ bộ nhớ ( memory cycle ).Sau khi điều này đã được thực hiện, các chân của port 0 sẽ xuất/nhập dữ liệu hợp hệ trong suốt ½ thứ hai của chu kỳ bộ nhớ.Tín hiệu ALE có tần số bằng 1/6 tần số của mạch dao động bên trong chip vi điều khiển. 2.7. Chân truy xuất ROM ngoài EA Ngõ vào /EA có thể được nối với 5V (logic 1) hoặc với GND (logic 0). Nếu chân này nối lên 5V chip 8051 thực thi chương trình trong ROM nội. Nếu chân này được nối với GND (và chân /PSEN cũng ở logic 0) thì chương trình cần được thực thi chứa ở bộ nhớ ngoài. 2.8. Chân RESET ( RST ) - Ngõ vào RST là ngõ vào xóa chính ( master reset ) của 8051 (hình 2.5) dùng để thiết lập lại trạng thái ban đầu cho hệ thống hay gọi tắt là reset hệ thống. Khi ngõ vào này được treo ở mức logic 1 tối thiểu 2 chu kỳ máy, các thanh ghi bên trong của 8051 được nạp lại các giá trị thích hợp cho việc khởi động lại hệ thống. Hình 2.5 Mạch Reset Việc kết nối chân RESET đảm bảo hệ thống bắt đầu làm việc khi Vi điều khiển được cấp điện, hoặc đang hoạt động mà hệ thống bị lỗi cần tác động cho Vi điều khiển hoạt động trở lại, hoặc do người sử dụng muốn quay về trạng thái hoạt động ban đầu. Vì vậy chân RESET được kết nối như sau: - Với Vi điều khiển sử dụng thạch anh có tần số f zat = 12MHz sử dụng C=10µF và R=10KΩ.Thanh ghi quan trọng nhất là thanh ghi bộ đếm chương trình PC = 0000H. - Sau khi reset, vi điều khiển luôn bắt đầu thực hiện chương trình tại địa chỉ 0000H của bộ nhớ chương trình nên cácchương trình viết cho vi điều khiển luôn bắt đầu viết tại địa chỉ 0000H. Nội dung của RAM trong vi điều khiển không bị thay đổi bởi tác động của ngõ vào reset [có nghĩa là vi điều
  33. - 34 - khiển đang sử dụng các thanh ghi để lưu trữ dữ liệu nhưng nếu vi điều khiển bị reset thì dữ liệu trong các thanh ghi vẫn không đổi]. 2.9. Các chân XTAL1, XTAL2 2.9.1. Kết nối chân XTAL1, XTAL2 -Mạch dao động trên chip được ghép nối với mạch thạch anh bên ngoài ở hai chân XTAL1 và XTAL2 (hình 2.6), các tụ ổn định cũng được yêu cầu kết nối, giá trị tụ do nhà sản xuất quy định (30p – 40p). Tần số thạch anh thường dùng trong các ứng dụng là: 11.0592Mhz ( giao tiếp với cổng Com máy tính ) và 12Mhz. Tần số tối đa 24Mhz. Tần số càng lớn VĐK xử lí càng nhanh. - Mạch dao động được đưa vào hai chân này thông thường được kết nối với dao động thạch anh như sau: Hình 2.6 Mạch dao động Ghi chú: C1,C2= 30pF±10pF (thường được sử dụng với C1,C2 là tụ 33pF) dùng ổn định dao động cho thạch anh. Hoặc có thể cấp tín hiệu xung clock lấy từ một mạch tạo dao động nào đó và đưa vào Vi điều khiển theo cách sau (hình 2.7): Hình 2.7 Lấy tín hiệu dao động bên ngoài
  34. - 35 - 2.9.2. Chu kì máy. Gọi f zat là tần số dao động của thạch anh. Đối với 89Sxx có thể sử dụng thạch anh có tần số fzat từ 2MHz đến 33MHz. Chu kì máy là khoảng thời gian cần thiết được quy định để Vi điều khiển thực hiện hoàn thành một lệnh cơ bản. Một chu kì máy bằng 12 lần chu kì dao động của nguồn xung dao động cấp cho nó. Tck = 12.Toc Với: Tck là chu kì máy Toc là chu kì của nguồn xung dao động cấp cho Vi điều khiển Như vậy: Với: Tck là chu kì máy foc là tần số dao động cấp cho Vi điều khiển. Ví dụ: Ta kết nối Vi điều khiển với thạch anh có tần số f zat là 12MHz, thì chu kì máy 6) -6 Tck=12/(12.10 =10 s =1µs Chính vì lí do thạch anh có tần số f zat là 12MHz tạo ra chu kì máy là 1µs, thuận lợi cho việc tính toán thời gian khi lập trình do đó thạch anh có tần số fzat là 12MHz thường được sử dụng trong thực tế. Khi giao tiếp truyền nối tiếp với máy vi tính dùng thạch anh có tần số fzat là 11.0592MHz. 3. Cấu trúc Port I/O Mục tiêu: Hiểu được cấu trúc các cổng vào ra của vi điều khiển 3.1. Chức năng các Port I/O (hình 2.8). Hình 2.8. Vào ra với thiết bị ngoại vi
  35. - 36 - 3.1.1. Port 0: Port 0 là port có 2 chức năng ở các chân 32 – 39 - Chức năng IO (xuất/nhập): dùng cho các thiết kế nhỏ. Tuy nhiên, khi dùng chức năng này thì Port 0 phải dùng thêm các điện trở kéo lên (pull-up), giá trị của điện trở phụ thuộc vào thành phần kết nối với Port. Khi dùng làm ngõ ra, Port 0 có thể kéo được 8 ngõ TTL. Khi dùng làm ngõ vào, Port 0 phải được set mức logic 1 trước đó. - Chức năng địa chỉ/dữ liệu đa hợp: khi dùng các thiết kế lớn, đòi hỏi phải sử dụng bộ nhớ ngoài thì Port 0 vừa là bus dữ liệu (8 bit) vừa là bus địa chỉ (8 bit thấp). Ngoài ra khi lập trình cho AT89C51, Port 0 còn dùng để nhận mã khi lập trình và xuất mà khi kiểm tra (quá trình kiểm tra đòi hỏi phải có điện trở kéo lên). 3.1.2. Port 1: - Port1 (chân 1 – 8) chỉ có một chức năng là IO, không dùng cho mục đích khác (chỉ trong 8032/8052/8952 thì dùng thêm P1.0 và P1.1 cho bộ định thời thứ 3). Tại Port 1 đã có điện trở kéo lên nên không cần thêm điện trở ngoài. - Port 1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8 bit địa chỉ thấp trong quá trình lập trình hay kiểm tra. - Khi dùng làm ngõ vào, Port 1 phải được set mức logic 1 trước đó. 3.1.3. Port 2: Port 2 (chân 21 – 28) là port có 2 chức năng: - Chức năng IO (xuất/nhập): có khả năng kéo được 4 ngõ TTL. - Chức năng địa chỉ: dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ 16 bit. Khi đó, Port 2 không được dùng cho mục đích I/O. -Khi dùng làm ngõ vào, Port 2 phải được set mức logic 1 trước đó. -Khi lập trình, Port 2 dùng làm 8 bit địa chỉ cao hay một số tín hiệu điều khiển. 3.1.4 . Port 3: Port 3 (chân 10 – 17) là port có 2 chức năng: - Chức năng IO: có khả năng kéo được 4 ngõ TTL. - Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó. 3.2. Kết nối các Port với led. - Các Port khi xuất tín hiệu ở mức logic 1 thường không đạt đến 5V mà dao động trong khoảng từ 3.5V đến 4.9V và dòng xuất ra rất nhỏ dưới 5mA (P0,P2 dòng xuất khoảng 1mA; P1,P3 dòng xuất ra khoảng 1mA đến 5mA) vì vậy dòng xuất này không đủ để có thể làm led sáng. Tuy nhiên khi các Port
  36. - 37 - xuất tín hiệu ở mức logic 0 dòng điện cho phép đi qua lớn hơn rất nhiều: Chân Vi điều khiển khi ở mức 0: Dòng lớn nhất qua P0 : -25mA Dòng lớn nhất qua P1,P2,P3 : -15mA - Do đó khi kết nối với led hoặc các thiết bị khác Vi điều khiển sẽ gặp trở ngại là nếu tác động làm led sáng khi Vi điều khiển xuất ở mức 1, lúc này dòng và áp ra không đủ để led có thể sáng rõ (led đỏ sáng ở điện áp 1.6V- 2.2V và dòng trong khoảng 10mA). Khắc phục bằng các cách sau: 3.2.1. Cho led sáng khi Vi điều khiển ở mức 0 ( hình 2.9): Px.x thay cho các chân xuất của các Port. Ví dụ: Chân P1.1, P2.0, v.v Khi Px.x ở mức 1 led không sáng Khi Px.x ở mức 0 led sáng Hình 2.9. Cho led sáng khi Vi điều khiển xuất ở mức 1 Như đã trình bày vì ngõ ra Vi điều khiển khi xuất ở mức 1 không đủ để cho led sáng, để led sáng được cần đặt thêm một điện trở kéo lên nguồn VCC (gọi là điện trở treo) hình 2.10. Hình 2.10 Mạch dùng Trở kéo lên Tuỳ từng trường hợp mà chọn R2 để dòng và áp phù hợp với thiết bị nhận.
  37. - 38 - Khi Px.x ở mức 0, có sự chênh lệch áp giữa nguồn VCC và chân Px.x -dòng điện đi từ VCC qua R2 và Px.x về Mass, do đó hiệu điện thế giữa hai chân led gần như bằng 0, led không sáng. Khi Px.x ở mức 1 (+5V),dòng điện không chạy qua chân Vi điều khiển để về mass được, có sự lệch áp giữa hai chân led, dòng điện trong trường hợp này qua led về Mass do đó led sáng. R2 thường được sử dụng với giá trị từ 4.7KΩ đến 10KΩ. Nếu tất cả các chân trong 1 Port đều kết nối để tác động ở mức cao thì điện trở R2 có thể thay bằng điện trở thanh 9 chân vì nó có hình dáng và sử dụng dễ hơn khi làm mạch điện. 3.2.2. Ngoài cách sử dụng điện trở treo. Việc sử dụng cổng đệm cũng có tác dụng thay đổi cường độ dòng điện xuất ra khi ngõ ra ở mức 1, cổng đệm xuất ra tín hiệu ở mức 1 với áp và dòng lớn khi có tín hiệu mức 1 đặt ở ngõ vào (hình 2.11). Tùy theo yêu cầu của người thiết kế về dòng và áp cần thiết mà chọn IC đệm cho phù hợp. Chẳng hạn từ một ngõ ra P0.0 làm nhiều led sáng cùng lúc thì việc sử dụng IC đệm được ưu tiên hơn. Có thể sử dụng 74HC244 hoặc 74HC245, tuy nhiên 74HC245 được cải tiến từ 74HC244 nên việc sử dụng 74HC245 dễ dàng hơn trong thiết kế mạch. Hình 2.11. Mạch dùng cổng đệm 4. Tổ chức bộ nhớ. Mục tiêu: Hiểu các chức năng và địa chỉ của bộ nhớ 4.1. Tổng quan tổ chức bộ nhớ (hình 2.12)
  38. - 39 - Hình 2.12. Tổ chức bộ nhớ họ MCS-51 - Bộ nhớ của họ MCS-51 có thể chia thành 2 phần: bộ nhớ trong và bộ nhớ ngoài. Bộ nhớ trong bao gồm 4 KB ROM và 128 byte RAM (256 byte trong 8052). Các byte RAM có địa chỉ từ 00h – 7Fh và các thanh ghi chức năng đặc biệt (SFR) có địa chỉ từ 80h – 0FFh có thể truy xuất trực tiếp. - Các chip vi điều khiển được dùng làm thành phần trung tâm trong các thiết kế hướng điều khiển, trong đó bộ nhớ có dung lượng giới hạn, không có ổ khóa và hệ điều hành. Chương trình điều khiển phải thường trú trong ROM nên 8051 có không gian bộ nhớ riêng cho chương trình và dữ liệu, cả hai bộ nhớ chương trình và dữ liệu đều đặt trong chip, tuy nhiên ta có thể mở rộng bộ nhớ chương trình và bộ nhớ dữ liệu bằng cách sử dụng các chip nhớ bên ngoài với dung lượng tối đa là 64K. -Bộ nhớ nội trong chip bao gồm ROM và RAM. RAM trên chip bao gồm vùng RAM đa chức năng ( general purpose RAM : 30H-7FH ), vùng RAM với từng bit được định địa chỉ (bit address locations gọi tắt là vùng RAM định địa chỉ bit: 20H-2FH ), các dãy thanh ghi (bank : 00H-1FH) và các thanh ghi chức năng đặc biệt SFR (spectial function register : 80H-FFH ). - Bộ nhớ ROM: Bộ nhớ ROM dùng để lưu chương trình do người viết chương trình viết ra. Chương trình là tập hợp các câu lệnh thể hiện các thuật toán để giải quyết các công việc cụ thể, chương trình do người thiết kế viết trên máy vi
  39. - 40 - tính, sau đó được đưa vào lưu trong ROM của vi điều khiển, khi hoạt động, vi điều khiển truy xuất từng câu lệnh trong ROM để thực hiện chương trình. ROM còn dùng để chứa số liệu các bảng, các tham số hệ thống, các số liệu cố định của hệ thống. Trong quá trình hoạt động nội dung ROM là cố định, không thể thay đổi, nội dung ROM chỉ thay đổi khi ROM ở chế độ xóa hoặc nạp chương trình (do các mạch điện riêng biệt thực hiện). Bộ nhớ ROM được tích hợp trong chip Vi điều khiển với dung lượng tùy vào chủng loại cần dùng, chẳng hạn đối với 89S52 là 8KByte, với 89S53 là 12KByte. Bộ nhớ bên trong Vi điều khiển 89Sxx là bộ nhớ Flash ROM cho phép xóa bộ nhớ ROM bằng điện và nạp vào chương trình mới cũng bằng điện và có thể nạp xóa nhiều lần. Bộ nhớ ROM được định địa chỉ theo từng Byte, các byte được đánh địa chỉ theo số hex-số thập lục phân, bắt đầu từ địa chỉ 0000H, khi viết chương trình cần chú ý đến địa chỉ lớn nhất trên ROM, chương trình được lưu sẽ bị mất khi địa chỉ lưu vượt qua vùng này. Ví dụ: AT89S52 có 8KByte bộ nhớ ROM nội, địa chỉ lớn nhất là 1FFFH, nếu chương trình viết ra có dung lượng lớn hơn 8KByte các byte trong các địa chỉ lớn hơn 1FFFH sẽ bị mất. Ngoài ra, Vi điều khiển còn có khả năng mở rộng bộ nhớ ROM với việc giao tiếp với bộ nhớ ROM bên ngoài lên đến 64Kbyte (địa chỉ từ 0000H đến FFFH). -Bộ nhớ RAM: Bộ nhớ RAM dùng làm môi trường xử lý thông tin, lưu trữ các kết quả trung gian và kết quả cuối cùng của các phép toán, xử lí thông tin. Nó cũng dùng để tổ chức các vùng đệm dữ liệu, trong các thao tác thu phát, chuyển đổi dữ liệu. RAM nội trong Vi điều khiển được tổ chức như sau: - Các vị trí trên RAM được định địa chỉ theo từng Byte bằng các số thập lục phân (số Hex). - Các bank thanh ghi có địa chỉ 00H đến 1FH. - 210 vị trí được định địa chỉ bit. - Các vị trí RAM bình thường Các thanh ghi có chức năng đặc biệt có địa chỉ từ 80H đến FFH. Các byte RAM 8 bit của vi điều khiển được gọi là "ô nhớ ", nếu các ô nhớ có chức năng đặc biệt thường được gọi là “thanh ghi”, nếu là bit thì được gọi là “bit nhớ”.
  40. - 41 -
  41. - 42 - 4.2. Vùng RAM đa năng. Vùng RAM đa mục đích có 80 byte đặt ở địa chỉ từ 30H – 7FH. Bất kỳ vị trí nhớ nào trong vùng RAM đa mục đích đều có thể được truy xuất tự do bằng cách sử dụng các kiểu định địa chỉ trực tiếp hoặc gián tiếp. Ví dụ: MOV A,5FH MOV R0,5FH MOV A,@R0 4.3. Vùng RAM định địa chỉ bit. 8051 có 210 vị trí bit được định địa chỉ trong đó 128 bit chứa trong các byte ở địa chỉ từ 20H - 2FH và phần còn lại chứa trong các thanh ghi chức năng đặc biệt. Các dãy thanh ghi: 32 vị trí thấp nhất của bộ nhớ nội chứa các dãy thanh ghi. Các lệnh của 8051 hỗ trợ 8 thanh ghi từ R0 – R7 thuộc dãy 0 (bank 0). Đây là dãy mặc định sau khi reset hệ thống. Các thanh ghi này ở các địa chỉ từ 00H– 07H. Ví dụ: MOV A,R5 = MOV A,05H Các lệnh sử dụng các thanh ghi từ R0 – R7 là các lệnh ngắn và thực hiện nhanh hơn so với các lệnh tương đương sử dụng kiểu định địa chỉ trực tiếp. Các giá trị thường được sử dụng nên chứa ở một trong các thanh ghi này. Dãy thanh ghi đang được sử dụng được gọi là dãy thanh ghi tích cực. Dãy thanh ghi tích cực có thể được thay đổi bằng cách thay đổi các bit chọn dãy trong thanh ghi PSW. 5. Các thanh ghi chức năng đặc biệt (SFR). Mục tiêu:biết được chức năng của các thanh ghi. Các thanh ghi nội của 8051 được cấu hình thành một phần của RAM trên chip, do vậy mỗi thanh ghi cũng có một địa chỉ. Cũng như các thanh ghi từ R0 – R7 ta có 21 thanh ghi chức năng đặc biệt SFR chiếm phần trên của RAM nội từ địa chỉ 80H – FFH. Lưu ý không phải tất cả 128 địa chỉ từ 80H – FFH đều được định nghĩa mà chỉ có 21 địa chỉ được định nghĩa. 5.1. Từ trạng thái chương trình PSW (program status word). Thanh ghi PSW có địa chỉ là D0H chứa các bit trạng thái có chức
  42. - 43 - năng được tóm tắt trong bảng sau: BIT KÝ ĐỊA MÔ TẢ HIỆU CHỈ PSW.7 C hoặc D7H Cary Flag: Cờ nhớ CY PSW.6 AC D6H Auxiliary Cary Flag: Cờ nhớ phụ PSW.5 F0 D5H Flag 0 còngọi là cờ Zero kí hiệu là Z PSW4 RS1 D4H Register Bank Select 1: bit lựa chọn bank thanh ghi. PSW.3 RS0 D3H Register Bank Select 0: bit lựa chọn bank thanh ghi. 00 = Bank 0; ô nhớ có address 00H÷07H gán cho R0-R7 01 = Bank 1; ô nhớ có address 08H÷0FH gán cho R0-R7 10 = Bank 2; ô nhớ có address 10H÷17H gán cho R0-R7 11 = Bank 3; ô nhớ có address 18H÷1FH gán cho R0-R7 PSW.2 OV D2H Overflow Flag: cờ tràn số nhị phân có dấu. PSW.1 - D1H Reserved: chưa thiết kế nên chưa sử dụng được. PSW.0 P D0H Even Parity Flag: cờ chẵn lẻ. 5.2. Thanh ghi B. Thanh ghi B ở địa chỉ F0H được dùng chung với thanh chứa A trong
  43. - 44 - các phép toán nhân (MUL), chia (DIV).Các bit của thanh ghi B được định địa chỉ từ F0H-F7H. 5.3. Con trỏ Stack. Con trỏ Stack SP ( stack pointer ) là một thanh ghi 8 bit ở địa chỉ 81H. SP chứa địa chỉ của dữ liệu hiện đang ở đỉnh của Stack. Các lệnh liên quan đến Stack bao gồm lệnh cất dữ liệu vào Stack ( PUSH ) và lệnh lấy dữ liệu ra khỏi Stack (POP). Việc cất dữ liệu vào Satck làm tăng thanh ghi SP trước khi ghi dữ liệu và việc lấy dữ liệu ra Stack sẽ làm giảm thanh ghi SP.Nếu ta không khởi động SP, nội dung mặc định của thanh ghi này là 07H. Vùng stack của 8051 được giữ trong RAM nội và được giới hạn đến các địa chỉ truy xuất được bởi kiểu định địa chỉ gián tiếp. Các lệnh PUSH và POP sẽ cất dữ liệu vào stack và lấy dữ liệu từ stack, các lệnh gọi chương trình con (ACALL, LCALL) và lệnh trở về (RET, RETI) cũng cất và phục hồi nội dung của bộ đếm chương trình PC (Program counter). 5.4. Con trỏ dữ liệu DPTR. Con trỏ dữ liệu DPTR ( data pointer ) được dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ liệu ngoài. DPTR là thanh ghi 16 bit có địa chỉ là 82H ( DPL, byte thấp ) và 83H ( DPH, byte cao ). Ex: MOV A,#55H MOV DPTR,#1000H MOV @DPTR,A 5.5. Các thanh ghi Port nối tiếp. Các port xuất nhập của 8051 bao gồm port 0 tại địa chỉ 80H, port 1 tại địa chỉ 90H, port 2 tại địa chỉ A0H và port 3 tại địa chỉ 0BH. Các port 0,2 và 3 không được dùng để xuất/nhập nếu ta sử dụng thêm bộ nhớ ngoài hoặc nếu có một số đặc tính của 8051 được sử dụng ( như là ngắt, port nối tiếp ).Tất cả các port đều được định địa chỉ từng bit nhằm cung cấp các khả năng giao tiếp mạnh. 5.6. Các thanh ghi định thời. 8051 có hai bộ đếm định thời (timer/counter) 16 bit để định các khoảng thời gian hoặc để đếm các sự kiện.Bộ định thời 0 có địa chỉ 8AH(TL0,byte thấp) và 8CH (TH0,byte cao), bộ định thời 1 có địa chỉ 8BH (TL1,byte thấp) và 8DH (TH1,byte cao). Họat động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời
  44. - 45 - TMOD ( timer mode register ) ở địa chỉ 89H và thanh ghi điều khiển định thời TCON (timer control regsiter) ở địa chỉ 88H. 5.7. Các thanh ghi port nối tiếp (Serial Data Buffer). - Bên trong 8051 có một port nối tiếp để truyền thông với các thiết bị nối tiếp như các thiết bị đầu cuối hoặc moderm, hoặc để giao tiếp với các IC khác. Một thanh ghi đựơc gọi là bộ đệm dữ liệu nối tiếp SBUF (serial data buffer) ở địa chỉ 99H lưu trữ dữ liệu truyền đi và dữ liệu nhận về. Việc ghi lên SBUF sẽ nạp dữ liệu để truyền và việc đọc SBUF sẽ lấy dữ liệu đã nhận được. Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽ được chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quá trình truyền dữ liệu qua truyền thông nối tiếp kết thúc. Khi thực hiện việc chuyển dữ liệu từ SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu của truyền thông nối tiếp. - Các chế độ hoạt động khác nhau được lập trình thông qua thanh ghi điều khiển port nối tiếp SCON (serial port control register) ở địa chỉ 98H. Chỉ có TCON được định địa chỉ từng bit. 5.8. Các thanh ghi ngắt. 8051 có một cấu trúc ngắt với hai mức ưu tiên và năm nguyên nhân ngắt. Các ngắt bị vơ hiệu hóa sau khi reset hệ thống và sau đó được cho phép ngắt bằng cách ghi vào thanh ghi cho phép ngắt IE (interrupt enable register) ở địa chỉ A8H. Mức ưu tiên ngắt được thiết lập qua thanh ghi ưu tiên ngắt IP (interrupt priority register) ở địa chỉ B8H.Cả hai thanh ghi này đều được định địa chỉ từng bit. 5.9.Thanh ghi điều khiển nguồn PCON. Thanh ghi PCON (power control) có chức năng điều khiển công suất khi vi điều khiển làm việc hay ở chế độ chờ. Khi vi điều khiển không còn xử lý gì nữa thì người lập trình có thể lập trình cho vi điều khiển chuyển sang chế độ chờ để giảm bớt công suất tiêu thụ nhất là khi nguồn cung cấp cho vi điều khiển là pin. Thanh ghi PCON tại địa chỉ 87H không cho phép định địa chỉ bit bao gồm các bit như sau: Bit 7 6 5 4 3 2 1 0 Chức SMOD1 SMOD0 - POF GF1 GF0 PD IDL năng
  45. - 46 - - SMOD1 (Serial Mode 1): = 1 cho phép tăng gấp đơi tốc độ port nối tiếp trong chế độ 1, 2 và 3. - SMOD0 (Serial Mode 0): cho phép chọn bit SM0 hay FE trong thanh ghi SCON ( = 1 chọn bit FE). - POF (Power-off Flag): dùng để nhận dạng loại reset. POF = 1 khi mở nguồn. Do đó, để xác định loại reset, cần phải xóa bit POF trước đó. - GF1, GF0 (General purpose Flag): các bit cờ dành cho người sử dụng. - PD (Power Down): được xóa bằng phần cứng khi hoạt động reset xảy ra. Khi bit PD = 1 thì vi điều khiển sẽ chuyển sang chế độ nguồn giảm. Trong chế độ này: + Chỉ có thể thốt khỏi chế độ nguồn giảm bằng cách reset. +Nội dung RAM và mức logic trên các port được duy trì. +Mạch dao động bên trong và các chức năng khác ngừng hoạt động. + Chân ALE và PSEN ớ mức thấp. + Yêu cầu Vcc phải có điện áp ít nhất là 2V và phục hồi Vcc = 5V ít nhất 10 chu kỳ trước khi chân RESET xuống mức thấp lần nữa. - IDL (Idle): được xóa bằng phần cứng khi hoạt động reset hay có ngắt xảy ra. Khi bit IDL = 1 thì vi điều khiển sẽ chuyển sang chế độ nghỉ. Trong chế độ này: + Chỉ có thể thốt khỏi chế độ nguồn giảm bằng cách Reset hay có ngắt xảy ra. + Trạng thái hiện hành của vi điều khiển được duy trì và nội dung các thanh ghi không đổi. +Mạch dao động bên trong không gởi được tín hiệu đến CPU. + Chân ALE và PSEN mức cao. Lưu ý rằng các bit điều khiển PD và IDL có tác dụng chính trong tất cả các IC họ MSC-51 nhưng chỉ có thể thực hiện được trong các phiên bản CMOS. 6. Tổ chức bộ nhớ ngoài. Mục tiêu: Hiểu được cấu trúc giao tiếp với bộ nhớ ngoài của vi điều khiển. - MCS-51 có bộ nhớ theo cấu trúc Harvard: phân biệt bộ nhớ chương trình và dữ liệu. Chương trình và dữ liệu có thể chứa bên trong nhưng vẫn có thể kết nối với 64KB chương trình và 64KB dữ liệu. Bộ nhớ chương trình được truy xuất thông qua chân PSEN còn bộ nhớ dữ liệu đươc truy xuất thông qua chân WR hay RD.
  46. - 47 - -Lưu ý rằng việc truy xuất bộ nhớ chương trình luôn luôn sử dụng địa chỉ 16 bit còn bộ nhớ dữ liệu có thể là 8 bit hay 16 bit tuỳ theo câu lệnh sử dụng. Khi dùng bộ nhớ dữ liệu 8 bit thì có thể dùng Port 2 như là Port I/O thông thường còn khi dùng ở chế độ 16 bit thì Port 2 chỉ dùng làm các bit địa chỉ cao. - Port 0 được dùng làm địa chỉ thấp/dữ liệu đa hợp. Tín hiệu /ALE để tách byte địa chỉ và đưa vào bộ chốt ngoài.Trong chu kỳ ghi, byte dữ liệu sẽ tồn tại ở Port 0 vừa trước khi /WR tích cực và được giữ cho đến khi /WR không tích cực. Trong chu kỳ đọc, byte nhận được chấp nhận vừa trước khi /RD không tích cực. Bộ nhớ chương trình ngoài được xử lý 1 trong 2 điều kiện sau: - Tín hiệu EA tích cực ( = 0). - Giá trị của bộ đếm chương trình(PC- Program Counter) lớn hơn kích thước bộ nhớ.( hình 2.13) Hình 2.13. Thực thi bộ nhớ chương trình ngoài PCH: Program Counter High – PCL: Program Counter Low DPH: Data Pointer High – DPL: Data Pointer Low
  47. - 48 - 6.1. Truy xuất bộ nhớ chương trình ngoài. - Quá trình thực thi lệnh khi dùng bộ nhớ chương trình ngoài có thể mô tả như hình2.8: Thực thi bộ nhớ chương trình ngoài”. Trong quá trình này, Port 0 và Port 2 không còn là các Port xuất nhập mà chứa địa chỉ và dữ liệu. - Trong một chu kỳ máy, tín hiệu ALE tích cực 2 lần. Lần thứ nhất cho phép 74HC573 mở cổng chốt địa chỉ byte thấp, khi /ALE xuống 0 thì byte thấp và byte cao của bộ đếm chương trình đều có nhưng ROM chưa xuất vì PSEN chưa tích cực, khi tín hiệu ALE lên 1 trở lại thì Port 0 đã có dữ liệu là mã lệnh. ALE tích cực lần thứ hai được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu lệnh đang thực thi là lệnh 1 byte thì CPU chỉ đọc Opcode, còn byte thứ hai bỏ qua. 6.2. Truy xuất bộ nhớ dữ liệu ngoài. - Bộ nhớ dữ liệu ngoài được truy xuất bằng lệnh MOVX thông qua các thanh ghi xác định địa chỉ DPTR (16 bit) hay R0, R1 (8 bit). - Quá trình thực hiện đọc hay ghi dữ liệu được cho phép bằng tín hiệu RD hay WR (chân P3.7 và P3.6). 6.3.Giải mã địa chỉ. - Trong các ứng dụng dựa trên 8051, ngoài giao tiếp bộ nhớ dữ liệu, vi điều khiển còn thực hiện giao tiếp với các thiết bị khác như bàn phím, led, động cơ,. Các thiết bị này có thể giao tiếp trực tiếp thông qua các Port. Tuy nhiên, khi số lượng thiết bị lớn, các Port sẽ không đủ để thực hiện điều khiển. Giải pháp đưa ra là xem các thiết bị này giống như bộ nhớ dữ liệu. Khi đó, cần phải thực hiện quá trình giải mã địa chỉ để phân biệt các thiết bị ngoại vi khác nhau. Quá trình giải mã địa chỉ thường được thực hiện thông qua các IC giải mã như 74139, 74138, 74154. Ngõ ra của các IC giải mã sẽ được đưa tới chân chọn chip hay bộ đệm khi điều khiển ngoại vi. 7. Các cải tiến của 8032/8052. Các vi mạch 8052 (và các phiên bản CMOS) có hai cải tiến so với 8051. Một là có thêm 128 byte RAM trên chip từ địa chỉ 80H-FFH. Điều này không xung đột với các thanh ghi chức năng đặc biệt (có cùng địa chỉ) vì 128 byte Ram thêm vào chỉ có thể truy xuất bằng cách dùng kiểu định địa chỉ gián tiếp. Ví dụ: MOV A,#100 MOV R0,#0F0H ( Trùng với địa chỉ của thanh ghi B )
  48. - 49 - MOV A,@R0 Cải tiến thứ hai là có thêm bộ định thời 16 bit Timer 2. 8. Hoạt động Reset. Mục tiêu: Hiểu được chức năng hoạt động của chân Reset. 8051 được Reset bằng cách giữ chân RST ở mức cao tối thiểu 2 chu kỳ máy và sau đó chuyển về mức thấp. RST có thể được tác động tay hoặc được tác động khi cấp nguồn bằng cách dùng một mạch RC. Trạng thái của các thanh ghi sau khi reset như sau : Thanh ghi Nội dung Bộ đếm chương trình 0000H Thanh chứa A 00H Thanh ghi B 00H PSW 00H SP 07H DPTR 0000H Port 0-3 FFH IP xxx00000B (8051) xx000000B (8052) IE 0xx00000B (8051) 0x000000B (8052) Các thanh ghi định thời 00H SCON 00H SBUF 00H PCON (HMOS) 0xxxxxxxB PCON (CMOS) 0xxx0000B CÁC BÀI TẬP MỞ RỘNG, NÂNG CAO VÀ GIẢI QUYẾT VẤN ĐỀ Bài 1: Giải thích tại sao thường phải có điện trở kéo lên (pull-up) tại Port 0? Trường hợp nào không cần sử dụng điện trở này? Gợi ý: Do Port là dạng cực máng hở dùng mosfet do đó phải dùng điện trở kéo lên khi sử dụng chức năng I/O.
  49. - 50 - Bài 2: Vẽ sơ đồ chân và giải thích chức năng của các chân trong Vi điều khiển 8051? Bài giải: Sơ đồ chân của Vi điều khiển 8051 P1.0 1 40 Vcc P1.1 2 39 P0.0 (AD0) P1.2 3 38 P0.1 (AD1) P1.3 4 37 P0.2 (AD2) P1.4 5 36 P0.3 (AD3) P1.5 6 35 P0.4 (AD4) P1.6 7 34 P0.5 (AD5) P1.7 8 33 P0.6 (AD6) RST 9 32 P0.7 (AD7) (RxD) P3.0 10 31 /EA/Vpp (TxD) P3.1 11 30 ALE/(/PROG) (/INT0) P3.2 12 29 /PSEN (/INT1) P3.3 13 28 P2.7 (A15) (T0) P3.4 14 27 P2.6 (A14) (T1) P3.5 15 26 P2.5 (A13) (/Wr) P3.6 16 25 P2.4 (A12) (/Rd) P3.7 17 24 P2.3 (A11) XTAL2 18 23 P2.2 (A10)  Gi ả i thích XTAL1 chức năng c19ủa các chân trong vi đ 22iề u khi ể P2.1n 8051: (A9) Chíp 8051 có 40 chân, GND mỗi chân20 có m ộ t kí hi ệ u tên 21 và có các P2.0 ch ứ(A8)c năng như sau: - Chân 40: nối với nguồn nuơi +5V. - Chân 20: nối với đất(Mass, GND).
  50. - 51 - - Chân 29 (PSEN)(program store enable) là tín hiệu điều khiển xuất ra của 8051, nó cho phép chọn bộ nhớ ngoài và được nối chung với chân của OE (Outout Enable) của EPROM ngoài để cho phép đọc các byte của chương trình. Các xung tín hiệu PSEN hạ thấp trong suốt thời gian thi hành lệnh. Những mã nhị phân của chương trình được đọc từ EPROM đi qua bus dữ liệu và được chốt vào thanh ghi lệnh của 8051 bởi mã lệnh.(chú ý việc đọc ở đây là đọc các lệnh (khác với đọc dữ liệu), khi đó VXL chỉ đọc các bit opcode của lệnh và đưa chúng vào hàng đợi lệnh thông qua các Bus địa chỉ và dữ liệu). - Chân 30 (ALE : Adress Latch Enable) là tín hiệu điều khiển xuất ra của 8051, nó cho phép phân kênh bus địa chỉ và bus dữ liệu của Port 0. - Chân 31 (EA : Eternal Acess) được đưa xuống thấp cho phép chọn bộ nhớ mã ngoài. Đối với 8051 thì: EA = 5V : Chọn ROM nội. EA = 0V : Chọn ROM ngoại. - 32 chân cònlại chia làm 4 cổng vào / ra: có thể dùng chân đó để để đọc mức logic (0;1 tương ứng với 0V; 5V)vào hay xuất mức logic ra (0;1), (hình 2.3) Port 0 từ chân 39 - 32 tương ứng là các chân P0.0 đến P0.7. Port 1 từ chân 1- 8 tương ứng là các chân P1.0 đến P1.7. Port 2 từ chân 21- 28 tương ứng là các chân P2.0 đến P2.7. Port 1 từ chân 10- 17 tương ứng là các chân P3.0 đến P3.7. - Chip 8051 có 32 chân xuất / nhập,tuy nhiên có 24 chân trong 32 chân này có 2 mục đích.Mỗi một chân này có thể hoạt động ở chế độ xuất/nhập, hoạt động điều khiển hoặc hoạt động như một đường địa chỉ / dữ liệu của bus địa chỉ / dữ liệu đa hợp. Bài 3: Nêu chức năng port I/O? Bài giải: Port 0: Port 0 là port có 2 chức năng ở các chân 32 – 39 - Chức năng IO (xuất/nhập): dùng cho các thiết kế nhỏ. Tuy nhiên, khi dùng chức năng này thì Port 0 phải dùng thêm các điện trở kéo lên (pull-up), giá trị của điện trở phụ thuộc vào thành phần kết nối với Port. Khi dùng làm ngõ ra, Port 0 có thể kéo được 8 ngõ TTL. Khi dùng làm ngõ vào, Port 0 phải được set mức logic 1 trước đó. - Chức năng địa chỉ/dữ liệu đa hợp: khi dùng các thiết kế lớn, đòi hỏi phải sử dụng bộ nhớ ngoài thì Port 0 vừa là bus dữ liệu (8 bit) vừa là bus địa chỉ (8 bit thấp). Ngoài ra khi lập trình cho AT89C51, Port 0 còn dùng để nhận mã
  51. - 52 - khi lập trình và xuất mà khi kiểm tra (quá trình kiểm tra đòi hỏi phải có điện trở kéo lên). Port 1: - Port1 (chân 1 – 8) chỉ có một chức năng là IO, không dùng cho mục đích khác (chỉ trong 8032/8052/8952 thì dùng thêm P1.0 và P1.1 cho bộ định thời thứ 3). Tại Port 1 đã có điện trở kéo lên nên không cần thêm điện trở ngoài. Hình ảnh vào ra với thiết bị ngoại vi Port 1 có khả năng kéo được 4 ngõ TTL và còn dùng làm 8 bit địa chỉ thấp trong quá trình lập trình hay kiểm tra. - Khi dùng làm ngõ vào, Port 1 phải được set mức logic 1 trước đó. Port 2: Port 2 (chân 21 – 28) là port có 2 chức năng: - Chức năng IO (xuất/nhập): có khả năng kéo được 4 ngõ TTL. - Chức năng địa chỉ: dùng làm 8 bit địa chỉ cao khi cần bộ nhớ ngoài có địa chỉ 16 bit. Khi đó, Port 2 không được dùng cho mục đích I/O. - Khi dùng làm ngõ vào, Port 2 phải được set mức logic 1 trước đó. - Khi lập trình, Port 2 dùng làm 8 bit địa chỉ cao hay một số tín hiệu điều khiển. Port 3: Port 3 (chân 10 – 17) là port có 2 chức năng: - Chức năng IO: có khả năng kéo được 4 ngõ TTL.
  52. - 53 - - Khi dùng làm ngõ vào, Port 3 phải được set mức logic 1 trước đó. Bài 3: Các địa chỉ bit nào được lập sau chuỗi lệnh sau: MOV R0,#26h MOV @R0,#7AH Gợi ý: bit 53H Bài 4: Mô tả chuỗi lệnh ghi giá trị 0ABH vào địa chỉ 9A00H của RAM ngoài trong hệ thống 8051. Gợi ý: MOV DPTR,9A00H MOV A,#0ABH MOVX @DPTR,A Bài 5: Tín hiệu điều khiển nào của 8051 sử dụng để chọn các bộ nhớ EPROM và RAM ngoài. Gợi ý: PSEN Bài 6: Viết lệnh lập bít thấp nhất của thanh ghi chứa mà không ảnh hưởng tới các bit khác. Gợi ý: OR A,#01 Bài 7: Viết chuỗi lệnh chép nội dung thanh ghi R7 vào địa chỉ 100H của bộ nhớ RAM ngoài. Gợi ý: MOV R1,#50H MOV A,@R1 Bài 8: Giả sử lệnh đầu tiên thực hiện sau khi reset hệ thống là một lệnh gọi chương trình con, thanh ghi PC sẽ được chứa vào địa chỉ nào của RAM nội trước khi được chuyển tới chương trình con. Gợi ý: Địa chỉ 08H và 09H Bài 9: Lệnh nào chuyển 8051 qua chế độ power-down. Gợi ý: Lệnh ghi bit tương ứng trong thanh ghi PCON. Bài 10: Viết chuỗi lệnh giá trị trong ô nhớ có địa chỉ 50H của RAM nội vào thanh ghi chứa sử dụng định vị địa chỉ gián tiếp. Gợi ý: MOV R1,#50H MOV A,@R1 Bài 11: Tính giá trị offset tương đối cho lệnh SJMP AHEAD, giả sử lệnh này nằm tại địa chỉ A050H và A051H, và nhãn AHEAD biểu diễn cho
  53. - 54 - lệnh nằm tại địa chỉ 9FE0H. Gợi ý: 8FH Điều kiện thực hiện bài học: IC họ 8051 - CMOS, TTL – 555. Sơ đồ, IC họ 8051. Tài liệu vi điều khiển, vi mạch số các loại. Máy vi tính, mỏ hàn, kềm cắt, kềm nhọn. Đồng hồ DVOM/VOM. Yêu cầu về đánh giá kết quả học tập: Nội dung: + Về kiến thức: cấu tạo, đặc điểm,ứng dụng của các loại Vi điều khiển + Về kỹ năng: - Thực hiện viết các chương trình theo yêu cầu cho trước. + Thái độ: Đánh giá phong cách, thái độ học tập Phương pháp: + Về kiến thức: Được đánh giá bằng hình thức kiểm tra viết, trắc nghiệm + Về kỹ năng: Đánh giá kỹ năng thực hành mỗii sinh viên, hoặc mỗi nhóm học viên thực hiện công việc theo yêu cầu của giáo viên.Tiêu chí đánh giá theo các nội dung: - Độ chính xác của công việc - Tính thẩm mỹ của mạch điện - Độ an toàn trên mạch điện - Thời gian thực hiện công việc - Độ chính xác theo yêu cầu kỹ thuật + Thái độ: Tỉ mỉ, cẩn thận, chính xác.
  54. - 55 - BÀI 3 TẬP LỆNH 8051 Mã bài: MĐ24-03 Giới thiệu: -Với kiến thức về cấu trúc bên trong của vi điều khiển và để điều khiển hoạt động khối mạch điện giao tiếp phức tạp của hệ thống. Các khối này bao gồm bộ nhớ để chứa dữ liệu và chương trình thực hiện, các mạch điện giao tiếp ngoại vi để xuất nhập và điều khiển trở lại, các khối này cùng liên kết với vi điều khiển thì mới thực hiện được công việc. Để kết nối các khối này đòi hỏi người thiết kế phải hiểu biết tinh tường về các thành phần vi điều khiển, bộ nhớ, các thiết bị ngoại vi. Sau khi kết nối vi điều khiển với các thiết bị ngoại vi, ta phải tìm hiểu về các tập lệnh của MSC-51 để điều khiển hoạt động hệ thống. - Chương này giới thiệu cách thức lập trình trên MCS-51 cũng như giải thích hoạt động của các lệnh sử dụng cho họ MCS-51 Mục tiêu của bài: - Phân biệt được các kiểu định địa chỉ và dữ liệu. - Trình bày được đặc tính và công dụng của từng lệnh trong 8051. - Xác định được độ lớn và thời gian thực hiện chương trình. - Kết hợp được các lệnh riêng lẻ để thực hiện thao tác cho trước đúng kỹ thuật. Nội dung chính: 1. Mở đầu Mục tiêu : Hiểu được các cú pháp lệnh và cách khai báo dữ liệu trong ngôn ngữ lập trình. 1.1. Cú pháp lệnh. Một lệnh trong chương trình hợp ngữ có dạng như sau: Nhãn Lệnh Toán hạng Chú thích A: MOV A, #10h ; Đưa giá trị 10h vào thanh LED EQU 30h ghi; Đị nhA nghĩa ô nhớ chứa On_Led BIT 00h llr43i’; Cờ trạọngtr4kjofigkltjnfgoi thái led - Trường nhãn định nghĩa các ký hiệujklledllmã (có thể là lđịeda chỉ trong chương trình, các hằng dữ liệu, tên đoạn hay các cấu trúc lập trình). Trường nhãn không bắt đầu bằng số và không trùng với các từ khóa có sẵn. - Trường lệnh chứa các từ gợi nhớ cho các lệnh của MCS-51 hay
  55. - 56 - các lệnh giả dùng cho chương trình dịch. - Trường toán hạng chứa các thông số liên quan đến lệnh đang sử dụng. - Trường chú thích dùng để ghi chú trong chương trình hợp ngữ. - Trường này phải được bắt đầu bằng dấu; và chương trình dịch sẽ bỏ qua các từ đặt sau dấu ;. Lưu ý rằng các chương trình dịch không phân biệt chữ hoa và chữ thường. 1.2. Khai báo dữ liệu. - Khi khai báo hằng số, chữ h cuối cùng xác định hằng số là số thập lục phân; chữ b cuối cùng xác định số nhị phân và chữ d cuối (hay không có) xác định số thập phân. Lưu ý rằng đối với số thập lục phân, khi bắt đầu bằng chữ A → F thì phải thêm số 0 vào phía trước. Ví dụ: 1010b; Số nhị phân 1010h; Số thập lục phân 1010; Số thập phân 0F0h ; Số thập lục phân nhưng bắt đầu bằng chữ F nên phải thêm vào phía trước số 0. - Khi dùng dấu # phía trước một con số, đó chính là dữ liệu tức thời cònnếu không dùng dấu # thì đó là địa chỉ của ô nhớ. Lưu ý rằng khi dùng RAM nội thì chỉ dùng địa chỉ từ 00 – 7Fh còn vùng địa chỉ từ 80h – 0FFh dùng cho các thanh ghi chức năng đặc biệt. Đối với họ 89x52, RAM nội có 256 byte thì các byte địa chỉ cao (từ 80h – 0FFh) không thể truy xuất trực tiếp mà phải truy xuất gián tiếp. Ví dụ: MOV A,30h ; Chuyển nội dung ô nhớ 30h vào A MOV A,#30h ; Chuyển giá trị 30h vào A MOV A,80h ; Chuyển nội dung Port 0 vào A MOV R0,#80h ; Chuyển nội dung ô nhớ 80h vào A (chỉ MOV A,@R0 ; dùng cho họ 89x52) - Để định nghĩa trước một vùng nhớ trong bộ nhớ chương trình, có thể dùng các chỉ dẫn DB (define byte – định nghĩa 1 byte) hay DW (define word – định nghĩa 2 byte). Ví dụ: Định nghĩa trước dữ liệu cho led như sau: Led: DB 01h,02h,04h,08h,10h,20h,40h,80h Đoạn chương trình này xác định tại nhãn Led có chứa các giá trị lần lượt từ 01h đến 80h. Nếu nhãn Led đặt tại địa chỉ 100h thì giá trị tương ứng
  56. - 57 - như sau ( bảng 3.1): Địa chỉ Giá trị 100h 01h 101h 02h 102h 04h 103h 08h 104h 10h 105h 20h 106h 40h 107h 80h Bảng 3.1 - Để dễ nhớ và dễ hiểu khi lập trình, các chương trình dịch cho phép dùng các ký tự thay thế cho các ô nhớ bằng các lệnh giả EQU, BIT. Ví dụ: LED EQU 30h ON_LED BIT 00h Giả sử chương trình hợp ngữ có các lệnh sau: MOV A,LED SETB ON_LED Khi biên dịch, chương trình dịch sẽ tự động chuyển thành dạng lệnh sau: MOV A,30h SETB 00h Các ký hiệu cần chú ý: Rn : các thanh ghi từ R0 – R7 (bank thanh ghi hiện hành). Ri : các thanh ghi từ R0 – R1 (bank thanh ghi hiện hành). @Rn : định địa chỉ gián tiếp 8 bit dùng thanh ghi Rn. @DPTR : định địa chỉ gián tiếp 16 bit dùng thanh ghi DPTR. direct : định địa chỉ trực tiếp RAM nội (00h – 7Fh) hay SFR (80h – FFh) (direct). : nội dung của bộ nhớ tại địa chỉ direct #data8 : giá trị tức thời 8 bit #data16 : giá trị tức thời 16 bit bit : địa chỉ bit của các ô nhớ có thể định địa chỉ bit (00h – 7Fh đối với địa chỉ bit và 20h – 2Fh đối với địa chỉ byte) 2. Các phương pháp định địa chỉ. Mục tiêu : Biết được các cách định địa chỉ cho các bit, byte hoặc thanh ghi.
  57. - 58 - Các kiểu định địa chỉ cho phép định rõ nơi lấy dữ liệu hoặc nơi nhận dữ liệu tùy thuộc vào cách thức sử dụng lệnh của người lập trình. Vi điều khiển 8051 có 8 kiểu định địa chỉ như sau: - Kiểu định địa chỉ dùng thanh ghi. - Kiểu định địa chỉ trực tiếp - Kiểu định địa chỉ gián tiếp. - Kiểu định địa chỉ tức thời. - Kiểu định địa chỉ tương đối. - Kiểu định địa chỉ tuyệt đối. - Kiểu định địa chỉ dài. - Kiểu định địa chỉ chỉ số. 2.1. Định địa chỉ bằng thanh ghi (hình 3.1) Hình 3.1 - Các thanh ghi từ R0 – R7 có thể truy xuất bằng cách định địa chỉ trực tiếp hay gián tiếp như trên. Ngoài ra, các thanh ghi này còn có thể truy xuất bằng cách dùng 3 bit trong mã lệnh để chọn 1 trong 8 thanh ghi (8 thanh ghi này có địa chỉ trực tiếp thay đổi tuỳ theo bank thanh ghi đang sử dụng). - Các lệnh sử dụng kiểu định địa chỉ thanh ghi được mã hóa bằng các dùng 3 bit thấp nhất của opcode (của lệnh) để chỉ ra 1 thanh ghi bên trong không gian địa chỉ logic này. Vậy : 1 mã chức năng + địa chỉ toán hạng → 1 lệnh ngắn 1 byte. - Kiểu này thường được dùng cho các lệnh xử lý dữ liệu mà dữ liệu luôn lưu trong các thanh ghi. Đối với vi điều khiển thì mã lệnh thuộc kiểu này chỉ có 1 byte. 2.2. Định địa chỉ trực tiếp(hình 3.2) Hình 3.2 Định địa chỉ trực tiếp (hình 3.2) chỉ dùng cho các thanh ghi chức năng đặc biệt và RAM nội của 8951. Giá trị địa chỉ trực tiếp 8 bit được thêm vào phía sau mã lệnh. Nếu địa chỉ trực tiếp từ 00h – 7Fh thì đó là RAM nội của 8951 (128 byte), cònđịa chỉ từ 80h – FFh là địa chỉ các thanh ghi chức năng đặc biệt. Các lệnh sau có kiểu định địa chỉ trực tiếp: MOV A, P0 MOV A, 30h
  58. - 59 - - Trong 8051 có 128 byte bộ nhớ RAM. Bộ nhớ RAM được gán địa chỉ từ 00H đến FFH và được phân chia như sau: Các ngăn nhớ từ 00H đến 1FH được gán cho các băng thanh ghi và ngăn xếp. Các ngăn nhớ từ 20H đến 2FH được dành cho không gian định địa chỉ bít để lưu dữ liệu theo từng bit. Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1 byte. Chế độ định địa chỉ trực tiếp có thể truy cập toàn bộ không gian của bộ nhớ RAM. Tuy nhiên, chế độ này thường được dùng để truy cập các ngăn nhớ RAM từ 30H đến 7FH, vì thực tế đối với không gian nhớ danh cho băng thanh ghi thì đã được truy cập bằng tên thanh ghi như R0- R7. ở chế độ định địa chỉ trực tiếp, địa chỉ ngăn nhớ RAM chứa dữ liệu là toán hạng của lệnh. Ví dụ: MOV R0, 40 ; sao nội dung ngăn nhớ 40H của RAM vào R0 MOV R4, 7FH ; chuyển nội dung ngăn nhớ 7FH vào R4. Một ứng dụng quan trọng của chế độ định địa chỉ trực tiếp là ngăn xếp. Trong họ 8051, chỉ có chế độ định địa chỉ trực tiếp là được phép cất và lấy dữ liệu từ ngăn xếp. Lệnh đầu tiên chuyển nội dung từ Port 0 vào thanh ghi A. Khi biên dịch, chương trình sẽ thay thế từ gợi nhớ P0 bằng địa chỉ trực tiếp của Port 0 (80h) và đưa vào byte 2 của mã lệnh. Lệnh thứ hai chuyển nội dung của RAM nội có địa chỉ 30h vào thanh ghi A. 2.3. Định địa chỉ gián tiếp (Indirect Addressing) (hình 3.3). Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong bộ nhớ. Hình 3.3 Nếu dữ liệu có trên chip CPU thì chỉ các thanh ghi R0 và R1 mới được sử dụng, và như vậy cũng có nghĩa là không thể dùng các thanh ghi R2-R7 để trỏ đến địa chỉ của toán hạng ở chế độ định địa chỉ này. Ví dụ: MOV A, @R0 ; chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A MOV @R1, B ; chuyển B vào ngăn nhớ RAM có địa chỉ ở R1 Chú ý: - Kiểu định địa chỉ gián tiếp được tượng trưng bởi ký hiệu @,được đặt trước các thanh ghi R0, R1,SP cho địa chỉ 8 bit (không sử dụng các thanh ghi R2 – R7 trong chế độ địa chỉ này) hay DPTR cho địa chỉ 16 bit. R0 và R1
  59. - 60 - có thể hoạt động như một thanh ghi con trỏ, nội dung của nó cho biết địa chỉ của một ô nhớ trong RAM nội mà dữ liệu sẽ ghi hoặc sẽ đọc. Còn DPTR dùng để truy xuất ô nhớ ngoại. Các lệnh thuộc dạng này chỉ có 1 byte. Tuy nhiên R0 và R1 là các thanh ghi 8 bit, nên chúng chỉ được phép truy cập đến các ngăn nhớ RAM trong, từ địa chỉ 30H đến 7FH và các thanh ghi SFR. Trong thực tế, có nhiều trường hợp cần truy cập dữ liệu được cất ở RAM ngoài hoặc không gian ROM trên chip. Trong những trường hợp đó chúng ta cần sử dụng thanh ghi 16 bit DPTR. Ví dụ: MOV A, @R1 ;copy noi dung o nho co dia chi dat ;trong thanh ghi R1 vao thanh ghi A 2.4. Định địa chỉ tức thời (Immediate Addressing) Khi toán hạng là một hằng số thay vì là một biến, hằng số này có thể đưa vào lệnh và đây là byte dữ liệu tức thời. Trong hợp ngữ, các tồn hạng tức thời được nhận biết nhờ vào ký tự ‘#‘ đặt trước chúng. Toán hạng này có thể là một hằng số học, một biến hoặc một biểu thức số học sử dụng các hằng số, các ký hiệu và các toán tử. Trình dịch hợp ngữ tính giá trị và thay thế dữ liệu tức thời vào trong lệnh. Lệnh này thường dùng để nạp 1 giá trị là 1 hằng số ở byte thứ 2 (hoặc byte thứ 3) vào thanh ghi hoặc ô nhớ . Ví dụ: MOV A, #12 ;Nạp giá trị 12(OCH) vào thanh ghi A MOV A, #30H ;nap du lieu 30H vao thanh ghi A Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bit làm dữ liệu tức thời. Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng địa chỉ 16 bit được cần đến. 2.5. Định địa chỉ tương đối (hình 3.4). Hình 3.4 Kiểu định địa chỉ tương đối chỉ sử dụng với những lệnh nhảy. Nơi nhảy đến có địa chỉ bằng địa chỉ đang lưu trong thanh ghi PC cộng với 1 giá trị 8 bit [còn gọi là giá trị lệch tương đối: relative offset] có giá trị từ – 128 đến +127 nên vi điều khiển có thể nhảy lùi [nếu số cộng với số âm] và nhảy tới [nếu số cộng với số dương]. Lệnh này có mã lệnh 2 byte, byte thứ 2 chính là giá trị lệch tương đối: Nơi nhảy đến thường được xác định bởi nhãn (label) và trình biên
  60. - 61 - dịch sẽ tính toán giá trị lệch. Định vị tương đối có ưu điểm là mã lệnh cố định, nhưng khuyết điểm là chỉ nhảy ngắn trong phạm vi -128÷127 byte [256byte], nếu nơi nhảy đến xa hơn thì lệnh này không đáp ứng được sẽ có lỗi. Ví dụ: SJMP X1 ;nhay den nhan co tên X1 nằm trong ;tam vuc 256 byte 2.6. Định địa chỉ tuyệt đối (hình 3.5). Hình 3.5 Kiểu định địa chỉ tuyệt đối (hình 3.5) được dùng với các lệnh ACALL và AJMP. Các lệnh này có mã lệnh 2 byte. Định địa chỉ tuyệt đối có ưu điểm là mã lệnh ngắn (2 byte), nhưng khuyết điểm là mã lệnh thay đổi và giới hạn phạm vi nơi nhảy đến, gọi đến không. Ví dụ: AJMP X1;nhay den nhan co ten X1 nam trong tam vuc 2Kbyte 2.7. Định địa chỉ dài (Long Addressing) ( hình 3.6) Hình 3.6 Kiểu định địa chỉ dài được dùng với lệnh LCALL và LJMP. Các lệnh này có mã lệnh 3 byte – trong đó có 2 byte (16bit) là địa chỉ của nơi đến. Cấu trúc mã lệnh là 3 byte chứa địa chỉ đích 16 bit. Định địa chỉ dài là có thể gọi 1 chương trình con hoặc có thể nhảy đến bất kỳ vùng nhớ nào vùng nhớ 64KB. Lợi ích của kiểu định địa chỉ này là sử dụng hết toàn bộ không gian nhớ chương trình 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3-byte và phụ thuộc vào vị trí. Ví dụ: LJMP X1 ;nhay den nhan co ten X1 nam trong ;tam vuc 64Kbyte 2.8. Định địa chỉ chỉ số (Index Addressing). Chế độ định địa chỉ chỉ số được sử dụng rộng rãi khi truy cập các phần tử dữ liệu của bảng trong không gian ROM chương trình của 8051. Kiểu định
  61. - 62 - địa chỉ chỉ số “dùng một thanh ghi cơ bản: là bộ đếm chương trình PC hoặc bộ đếm dữ liệu DPTR” kết hợp với “một giá trị lệch (offset) còn gọi là giá trị tương đối [thường lưu trong thanh ghi]” để tạo ra 1 địa chỉ của ô nhớ cần truy xuất hoặc là địa chỉ của nơi nhảy đến. Việc kết hợp được minh họa như sau: Base Registr Offset Effective Address PC (or PDTR) + A = Ví dụ: MOVC A, @A + DPTR ;lay du lieu trong o nho ;DPTR+A de nap vao thanh ghi A Ở lệnh này, nội dung của A được cộng với nội dung thanh ghi 16- bit DPTR để tạo ra địa chỉ 1. 3. Các nhóm lệnh. Mục tiêu : Hiểu được các nhóm lệnh sử dụng trong ngôn ngử lập trình. Tùy thuộc vào cách và chức năng của mỗi lệnh, có thể chia ra thành 5 nhóm lệnh như sau: - Nhóm lệnh số học - Nhóm lệnh logic - Nhóm lệnh vận truyền dữ liệu - Nhóm lệnh Boolean (thao tác bit) - Nhóm lệnh rẽ nhánh chương trình Cấu trúc chung của mỗi lệnh: Mã_lệnh Toán_hạng1, Toán_hạng2, Toán_hạng3 Trong đó: - Mã_lệnh: Tên gợi nhớ cho chức năng của lệnh. (VD như add cho addition) - Toán_hạng1, Toán_hạng2, Toán_hạng3: Là các toán hạnh của lệnh, tùy thuộc vào mỗi lệnh số toán hạng có thể không có, có 1, 2 hoặc 3. Ví dụ: - RET (Kết thúc chương trình con). Lệnh này không có toán hạng - JZ TEMP(Chuyển con trỏ chương trình đến vị trí TEMP). Chỉ có 1 toán hạng. - ADD A, R3; (A = A + R3) Có 2 toán hạng. - CJNE A, #20, LOOP. (So sánh A với 20, nếu không bằng thì chuyển con trỏ chương trình đến nhãn LOOP). Có 3 toán hạng. Các bạn cần nắm rõ phần cứng, đặc biệt là vùng nhớ Ram của vi điều
  62. - 63 - khiển. Chú ý các thuật ngữ sau: Các byte RAM 8 bit của vi điều khiển được gọi là "ô nhớ ", nếu các ô nhớ có chức năng đặc biệt thường được gọi là "thanh ghi", nếu là bit thì được gọi là "bit nhớ". Dữ liệu của một ô nhớ là trạng thái (0 hoặc 1) cần thiết lập cho các bit của ô nhớ (8 bit) Ký hiệu Mô tả A: Thanh ghi chứa (Accumulator). B: Thanh ghi B. Thanh ghi R0 hoặc R1 của bất kỳ băng thanh ghi nào Ri: trong 4 băng thanh ghi trong RAM. Rn: bất kỳ thanh ghi nào của bất kỳ băng thanh ghi Rn: nào trong 4 băng thanh ghi trong RAM. Thanh ghi con trỏ dữ liệu (có độ rộng 16bit được kết hợp Dptr: từ 2 thanh ghi 8 bit là DPH và DPL). Direct: là một biến 8 bit(hay chính là ô nhớ ) bất kỳ trong Direct: RAM (trừ 32 thanh ghi Rn ở đầu RAM). #data: Một hằng số 8 bit bất kỳ. #data16: Một hằng số 16 bit bất kỳ. : Địa chỉ bất kỳ nằm trong khoảng [PC-128; PC+127] Địa chỉ bất kỳ nằm trong khoảng 0 – 2Kbyte tính từ địa : chỉ của lệnh tiếp theo. : Địa chỉ bất kỳ trong không gian 64K (áp dụng cho cả không gian nhớ chương trình và không gian nhớ dữ liệu). Bit bất kỳ có thể đánh địa chỉ được (không dùng cho các : bit không đánh được địa chỉ). Bảng 3.2: Các ký hiệu sử dụng mô tả lệnh (bảng 3.2)
  63. - 64 - 3.1. Nhóm lệnh số học. Cờ nhớ C: C=1 nếu phép toán cộng xảy ra tràn hoặc phép trừ có mượn. C=0 nếu phép toán cộng không tràn hoặc phép trừ không có mượn. Phép cộng xảy ra tràn là phép cộng mà kết quả lớn hơn 255 (hay FFH hay 11111111b), lúc này C=1 Ví dụ:  Phép cộng không tràn Số cộng 38H 56 0 0 1 1 1 0 0 0 b Số cộng +3AH58 0 0 1 1 1 0 1 0 b Kết quả 72H 114 0 1 1 1 0 0 1 0 b Cờ nhớ C 0 0  Phép cộng tràn Số cộng 6CH 108 0 1 1 0 1 1 0 0 b Số cộng +9FH 159 1 0 0 1 1 1 1 1 b Kết quả 10BH 267 1 0 0 0 0 1 0 1 1 b Cờ nhớ C 1 1 Phần bên trái là 8 bit của thanh ghi A sau khi kết quả được thực hiện, phần màu đỏ trong kết quả là giá trị bị tràn, giá trị này không lưu ở thanh ghi A mà lưu ở thanh ghi PSW, tại cờ C. Số trừ 9FH 159 1 0 0 1 1 1 1 1 b Số bị trừ -6CH 108 0 1 1 0 1 1 0 0 b Kết quả 33H 51 0 0 1 1 0 0 1 1 b Cờ nhớ C 0 0 Số trừ 6CH 108 0 1 1 0 1 1 0 0 b Số bị trừ -9FH 159 1 0 0 1 1 1 1 1 b Kết quả CDH -51 1 1 0 0 1 1 0 1 b Cờ nhớ C 1 1 phép trừ trên có số muợn 3.1.1. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn: - Cú pháp: Add A,Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanh ghi Rn, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. - A (A) + (Rn) Ví dụ:
  64. - 65 - Mov A,#20H Mov R1,#08H Add A,R1 Kết quả : A có giá trị là 28H R1 vẫn giữ nguyên giá trị là 08H Cờ C = 0 Ví dụ 2: Mov A,#0E9H Mov R6,#0BAH Add A,R6 Kết quả : A = #0A3h R6 = #0BAh Cờ C = 1 3.1.2. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct: - Cú pháp: Add A,direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên ô nhớ có địa chỉ direct, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. - A (A) + (direct) Ví dụ: Mov 50h,#20H Mov A,#0E8H Add A,50H Kết quả : A = #08H 50H = #20H C = 1 3.1.3. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp: - Cú pháp: Add A,@Ri - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ có địa chỉ bằng giá trị của thanh ghi Ri, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) + (Ri)
  65. - 66 - Ví dụ: AC = 1 ;cờ C đang mang giá trị 1 Mov 50H,#60H Mov R2,#50H Mov A,#01H Add A,@R2 Kết quả : A = #61H R2 = #50H C = 0 ;cờ C mang giá trị 0 3.1.4. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định: - Cú pháp: Add A,#data - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với một giá trị xác định, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) + # data Ví dụ: Mov A,#05h Add A,#06h Kết quả : A = #0Bh C = 0 3.1.5. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn có số nhớ ở cờ C: - Cú pháp: AddC A,Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanh ghi Rn và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) + (C) + (Rn) Ví dụ: C = 1 Mov A,#08h Mov R1,#10h Addc A,R1 Kết quả : A = #19h ;cộng cả cờ C R1 = #10h C =0
  66. - 67 - 3.1.6. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và giá trị số nhớ ở cờ C. - Cú pháp: AddC A,direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ có địa chỉ direct và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) + (C) + (Rn). Ví dụ: C = 0 Mov A,#0A5h Mov 10h,#96h Addc A,10h Kết quả : A = #3Bh 10h = #96h C =1 3.1.7. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C. - Cú pháp: AddC A,@Ri - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ có địa chỉ bằng giá trị của thanh ghi Ri và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. Ví dụ: C = 1 Mov A,#05h Mov 50h,#10h Mov R2,#50h Addc a,@R2 Kết quả : A = #16h C = 0 3.1.8. Lệnh cộng dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C. - Cú pháp: AddC A,#data - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte.
  67. - 68 - - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Cộng giá trị dữ liệu trên thanh ghi A với giá trị xác định và cộng thêm giá trị của số nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) + (C) + #data Ví dụ: C = 1 Mov A,#05h Addc A,#16h Kết quả : A = #1Ch C = 0 3.1.9. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu trên thanh ghi Rn và số nhớ ở cờ C. - Cú pháp: SUBB A,Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu trên thanh ghi Rn và trừ cho giá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) - (C) - (Rn) Ví dụ: C = 1 Mov A,#0E5h Mov R3,#9Fh Subb A,R3 kết quả : A = 45h C = 0 3.1.10. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct và số nhớ ở cờ C. - Cú pháp: SUBB A,direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ có địa chỉ direct và trừ cho giá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh trạng thái PSW. A (A) - (C) - (direct) Ví dụ: C = 0 Mov A,#0E5h
  68. - 69 - Mov 05h,#9Fh Subb A,05h Kết quả : A = 46h C = 0 3.1.11. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ gián tiếp và số nhớ ở cờ C. - Cú pháp: SUBB A,@Ri - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị dữ liệu của ô nhớ có địa chỉ bằng giá trị của thanh ghi Ri và trừ cho giá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) - (C) – ((Ri)) Ví dụ: C = 1 Mov A,#0E5h Mov 4Fh,#50h Mov R3,#4Fh Subb A,@R3 kết quả : A = 94h C = 0 3.1.12. Lệnh trừ dữ liệu trên thanh ghi A với dữ liệu xác định và số nhớ ở cờ C. - Cú pháp: SUBB A,#data - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Trừ giá trị dữ liệu trên thanh ghi A với giá trị xác định và trừ thêm giá trị nhớ trên cờ C, sau khi thực hiện lệnh kết quả được lưu ở thanh ghi A. Lệnh này có ảnh hưởng đến thanh thanh trạng thái PSW. A (A) - (C) - #data Ví dụ: C = 0 Mov A,#05h Subb A,#4Fh kết quả : A = 0B6h C = 1 3.1.13.Lệnh tăng giá trị dữ liệu trên thanh ghi A lên 1 đơn vị. - Cú pháp: INC A
  69. - 70 - - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Tăng giá trị dữ liệu lưu giữ trên thanh ghi A lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. A (A) + 1 Ví dụ: Mov A,#05h Inc A Kết quả : A = #06h 3.1.14.Lệnh tăng giá trị dữ liệu trên thanh ghi Rn lên 1 đơn vị. - Cú pháp: INC Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Tăng giá trị dữ liệu lưu giữ trên thanh ghi Rn lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. A (Rn) + 1 Ví dụ: Mov R7,#0Fh Inc R7 Kết quả : R7 = #10h 3.1.15.Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ direct lên 1 đơn vị. Cú pháp: INC direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Tăng giá trị dữ liệu ở một ô nhớ có địa chỉ direct lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ: Mov 50h,#0FFh Inc 50h Kết quả : 50h = #00 3.1.16.Lệnh tăng giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp lên 1 đơn vị. - Cú pháp: Inc @Ri - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Tăng giá trị dữ liệu ở ô nhớ có địa chỉ bằng giá trị dữ liệu trên Ri lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ: Mov 0Fh,#05h Mov R0,#0Fh Inc @R0 Kết quả : R0 = #06h
  70. - 71 - 0Fh = #05h 3.1.17.Lệnh tăng giá trị của con trỏ dữ liệu DPTR lên 1 đơn vị. - Cú pháp: Inc DPTR. - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 2 chu kì máy. - Công dụng: Tăng giá trị dữ liệu của thanh ghi con trỏ dữ liệu DPTR lên 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ: Mov DPTR,#5Fh Inc DPTR Kết quả : DPTR = #060h 3.1.18. Lệnh giảm giá trị dữ liệu trên thanh ghi A xuống 1 đơn vị. - Cú pháp: DEC A - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Giảm giá trị dữ liệu lưu giữ trên thanh ghi A xuống 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ: Mov A,#05h Dec A Kết quả : A = #04h 3.1.19. Lệnh giảm giá trị dữ liệu trên thanh ghi Rn xuống 1 đơn vị: - Cú pháp: Dec Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Giảm giá trị dữ liệu lưu giữ trên thanh ghi Rn xuống 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ: Mov R6,#0Fh Dec R6 Kết quả : R6 = #0Eh 3.1.20.Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị. - Cú pháp: Dec direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Giảm giá trị dữ liệu ở ô nhớ có địa chỉ direct xuống 1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ:
  71. - 72 - Mov 7Fh,#0 Dec 7Fh Kết quả : 7Fh = #0FFh 3.1.21.Lệnh giảm giá trị dữ liệu ở ô nhớ có địa chỉ gián tiếp xuống 1 đơn vị. - Cú pháp: Dec @Ri - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Giảm giá trị dữ liệu ở ô nhớ có địa chỉ bằng giá trị dữ liệu trên Ri xuống1 đơn vị, không ảnh hưởng đến các cờ nhớ trên PSW. Ví dụ: Mov 60h,#05h Mov R1,#60h Dec @R1 Kết quả : R1 = #04h 60h = #05h 3.1.22.Lệnh nhân thanh ghi A với thanh ghi B. - Cú pháp: Mul AB - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 4 chu kì máy. - Công dụng: Nhân hai dữ liệu là số nguyên không dấu ở thanh ghi A với thanh ghi B, kết quả là một dữ liệu 16 bit. Byte thấp của kết quả lưu ở thanh ghi A và byte cao của kết quả lưu ở thanh ghi B. Nếu tích số lớn hơn 255(0FFH), cờ tràn 0V ở thanh trạng thái PSW được thiết lập lên 1, ngược lại nếu tích số nhỏ hơn 255(0FFH), cờ tràn 0V được thiết lấp về 0. Cờ nhớ C luôn ở giá trị 0. Ví dụ: Mov A,#0B9h Mov B,#F7h Mul AB Kết quả : A = #7Fh , B = #0B2h 3.1.23.Lệnh chia thanh ghi A với thanh ghi B. - Cú pháp: Div AB - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 4 chu kì máy. - Công dụng: Chia hai dữ liệu là số nguyên không dấu ở thanh ghi A với thanh ghi B, dữ liệu ở thanh ghi A là số chia còn ở thanh ghi B là số bị chia, kết quả là một dữ liệu 8 bit được lưu ở thanh ghi A, số dư lưu trữ trong thanh ghi B Cờ nhớ C luôn ở giá trị 0. Cờ tràn 0V được thiết lập giá trị 1 khi thanh ghi B mang giá trị là 00H-
  72. - 73 - phép chia không thể thực hiện. Ví dụ: Mov A,#50h Mov B,#10h DIV AB Kết quả : A = #5h B = #0h 3.1.24.Lệnh hiệu chỉnh thập phân nội dung của thanh ghi A đối với phép cộng. - Cú pháp: DA A - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 4 chu kì máy. - Công dụng: hiệu chỉnh dữ liệu là giá trị lưu giữ ở thanh ghi A từ số Hex (số nhị phân) thành số BCD (số thập phân viết dưới dạng nhị phân). Lí do có lệnh hiệu chỉnh này vì khi cộng hai giá trị là số BCD bằng các lệnh cộng, vi điều khiển chỉ hiểu hai số cộng là số nhị phân bình thường, kết quả sau lệnh cộng là một số nhị phân bình thường, không phải là một số BCD, vì vậy kết quả cần được hiệu chỉnh để dữ liệu cuối là một số BCD. Khi thực hiện lệnh, cờ nhớ C được xác lập lên 1 nếu phép cộng có kết quả vượt qua 99 (số BCD). Kết quả cuối cùng, số BCD có hàng đơn vị nằm ở 4 bit thấp trên thanh ghi A, hàng chục ở 4 bit cao của thanh ghi A, hàng trăm là 1 nếu cờ C mang giá trị 1, là 0 nếu cờ C mang giá trị 0. Ví dụ 1: Mov A,#10h DA A Kết quả : A = #10h Ví dụ 2: Mov A,#0Eh DA A Kết quả : A = #14h 3.2. Nhóm lệnh logic. 3.2.1. Lệnh And dữ liệu ở thanh ghi A với dữ liệu ở thanh ghi Rn. Cú pháp: ANL A,Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là: 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic AND dữ liệu ở thanh ghi A với dữ liệu ở thanh ghi Rn, kết quả được lưu trữ ở thanh ghi A. Ví dụ: MOV A,#0Fh MOV R1,#0F0h ANL A,R1
  73. - 74 - Kết quả : A = #0H 3.2.2. Lệnh And dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct: - Cú pháp: ANL A,direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic AND dữ liệu ở thanh ghi A với dữ liệu ở ô nhớ có địa chỉ direct, kết quả được lưu trữ ở thanh ghi A. Ví dụ: MOV A,#0FFh MOV 10h,#010h ANL A,10h Kết quả : A = #010h 3.2.3. Lệnh And dữ liệu trên thanh ghi A với dữ liệu của ô nhớ gián tiếp: - Cú pháp: ANL A,@Ri - Lệnh này chiếm dung lượng bộ nhớ ROM là 1 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic AND dữ liệu ở thanh ghi A với dữ liệu của ô nhớ có địa chỉ bằng giá trị của thanh ghi Ri, kết quả được lưu trữ ở thanh ghi A. Ví dụ: mov A,#0Fh mov 70h,#0E1h mov R1,#070h ANL A,@R1 Kết quả : A = #01h 3.2.4. Lệnh And dữ liệu trên thanh ghi A với dữ liệu xác định. - Cú pháp: ANL A,#data - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic AND dữ liệu ở thanh ghi A với dữ liệu cho trước, kết quả được lưu trữ ở thanh ghi A. Ví dụ: MOV A,#0Eh ANL A,#11h Kết quả : A = #00 3.2.5. Lệnh And dữ liệu của ô nhớ có địa chỉ direct với dữ liệu trên thanh ghi A.
  74. - 75 - - Cú pháp: ANL direct,A - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic AND dữ liệu ở thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct, kết quả được lưu trữ ở ô nhớ có địa chỉ direct. Ví dụ: MOV A,#08h MOV R1,#0F7h ANL R1,A Kết quả : R1 = #0 3.2.6. Lệnh And dữ liệu trên ô nhớ có địa chỉ direct với dữ liệu xác định. - Cú pháp: ANL direct,#data - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic AND dữ liệu của ô nhớ có địa chỉ direct với dữ liệu cho trước, kết quả được lưu trữ ở ô nhớ có địa chỉ direct. Ví dụ: MOV R1,#0F7h ANL R1,#1Fh Kết quả : R1 = #017h 3.2.7. Lệnh OR dữ liệu ở thanh ghi A với dữ liệu ở thanh ghi Rn: - Cú pháp: ORL A,Rn - Lệnh này chiếm dung lượng bộ nhớ ROM là: 1 Byte - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic OR dữ liệu ở thanh ghi A với dữ liệu ở thanh ghi Rn, kết quả được lưu trữ ở thanh ghi A. Ví dụ: MOV A,#0Fh MOV R1,#0F0h ORL A,R1 Kết quả : A = #0FFh 3.2.8. Lệnh OR dữ liệu trên thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct: - Cú pháp: ORL A,direct - Lệnh này chiếm dung lượng bộ nhớ ROM là 2 Byte. - Thời gian thực hiện: 1 chu kì máy. - Công dụng: Thực hiện phép logic OR dữ liệu ở thanh ghi A với dữ liệu của ô nhớ có địa chỉ direct, kết quả được lưu trữ ở thanh ghi A.