Giáo trình Vi điều khiển với mục tiêu giúp các bạn có thể 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ế. Mời các bạn cùng tham khảo nội dung phần 1 giáo trình!
-1- UỶ BAN NHÂN DÂN TỈNH ĐỒNG THÁP TRƯỜNG CAO ĐẲNG NGHỀ ĐỒNG THÁP GIÁO TRÌNH MƠ ĐUN: VI ĐIỀU KHIỂN NG NH NGHỀ: ĐI N T CÔNG NGHI P TRÌNH ĐỘ: CAO ĐẲNG, TRUNG CẤP (Ban hành kèm theo Quyết định Số: /QĐ-TCĐNĐT ngày 13 tháng năm 2017 Hiệu trưởng Trường Cao đẳng Nghề Đồng Tháp) Đồng Tháp, năm 2017 -2- -3- TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm -4- LỜI GIỚI THI U Để thực biên soạn giáo trình đào tạo nghề Điện tử cơng nghiệp trình độ CĐN TCN, giáo trình Mơ đun Vi điều khiển giáo trình mơ đun đào tạo chun ngành biên soạn theo nội dung chương trình khung Bộ Lao động - Thương binh Xã hội Tổng cục Dạy nghề ban hành dành cho hệ Cao Đẳng Nghề 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 kỹ 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 kiến thức có liên quan đến nội dung chương trình đào tạo phù hợp với mục tiêu đào tạo, nội dung lý thuyết thực hành biên soạn gắn với nhu cầu thực tế sản xuất đồng thời có tính thực tiễn cao Nội dung giáo trình biên soạn với dung lượng thời gian đào tạo 150 gồm có: Bài MĐ25-01: Sơ lược lịch sử hướng phát triển vi điều khiển Bài MĐ25-02: Cấu trúc họ vi điều khiển 8051 Bài MĐ25-03: Tập lệnh 8051 Bài MĐ25-04: Bộ định thời Bài MĐ25-05: Cổng nối tiếp Bài MĐ25-06: Ngắt Bài MĐ25-07: Phần mềm hợp ngữ Trong trình sử dụng giáo trình, tuỳ theo yêu cầu khoa học cơng nghệ phát triển điều chỉnh thời gian bổ sung kiên thức cho phù hợp Trong giáo trình, chúng tơi có đề nội dung thực tập để người học cố áp dụng kiến thức phù hợp với kỹ Tuy nhiên, tùy theo điều kiện sở vật chất trang thiết bị, 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 mục tiêu đào tạo không tránh khiếm khuyết Rất mong nhận đóng góp ý kiến thầy, giáo, bạn đọc để nhóm biên soạn hiệu chỉnh hồn thiện Các ý kiến đóng góp xin gửi Trường Cao đẳng nghề Đồng Tháp Đồng Tháp, ngày tháng năm 2017 Tham gia biên soạn -5- MỤC LỤC TRANG LỜI GIỚI THI U - B I SƠ LƯỢC VỀ LỊCH S V HƯỚNG PHÁT TRIỂN CỦA VI ĐIỀU KHIỂN - 15 Nội dung chính: - 15 Lịch sử xuất vi điều khiển 8051 - 15 Vi điều khiển (microcontroller) - 18 2.1 Nguyên lý, cấu tạo - 18 3.1 Sản phẩm dân dụng - 22 3.2 Trong thiết bị y tế - 22 3.3 Các sản phẩm công nghiệp - 22 Hướng phát triển - 23 B I CẤU TRÚC CỦA HỌ VI ĐIỀU KHIỂN 805 - 25 Nội dung chính: - 25 Tổng quan - 25 Sơ đồ chân vi điều khiển 8051: - 29 2.1 Port - 31 2.2 Port - 31 2.3 Port - 31 2.4 Port - 31 2.5 Chân cho phép nhớ chương trình PSEN - 32 2.6.Chân cho phép chốt địa ALE - 32 2.7 Chân truy xuất ROM EA - 33 2.8 Chân RESET ( RST ) - 33 2.9 Các chân XTAL1, XTAL2 - 34 Cấu trúc Port I/O - 35 3.1 Chức Port I/O (hình 2.8) - 35 3.2 Kết nối Port với led - 36 Tổ chức nhớ - 38 4.1 Tổng quan tổ chức nhớ (h nh 2.12) - 38 4.2 Vùng RAM đa - 42 4.3 Vùng RAM định địa bit - 42 Các ghi chức đặc biệt (SFR) - 42 5.1 Từ trạng thái chương trình PSW (program status word) - 42 5.3 Con trỏ Stack - 44 5.4 Con trỏ liệu DPTR - 44 5.5 Các ghi Port nối tiếp - 44 5.6 Các ghi định thời - 44 5.7 Các ghi port nối tiếp (Serial Data Buffer) - 45 5.8 Các ghi ngắt - 45 5.9.Thanh ghi điều khiển nguồn PCON - 45 Tổ chức nhớ - 46 - -6- 6.1 Truy xuất nhớ chương trình ngồi - 48 6.2 Truy xuất nhớ liệu - 48 6.3.Giải mã địa - 48 Các cải tiến 8032/8052 - 48 Hoạt động Reset - 49 B I TẬP L NH 805 - 55 Mở đầu - 55 1.1 Cú pháp lệnh - 55 1.2 Khai báo liệu - 56 Các phương pháp định địa - 57 2.1 Định địa ng ghi (h nh - 58 2.2 Định địa trực tiếp(h nh 3.2 - 58 2.3 Định địa gián tiếp (Indirect Addressing) (h nh 3.3 - 59 2.4 Định địa tức thời (Immediate Addressing) - 60 2.5 Định địa tương đối (h nh - 60 2.6 Định địa tuyệt đối (h nh 3.5 - 61 2.7 Định địa dài (Long Addressing) ( hình 3.6) - 61 2.8 Định địa chỉ số (Index Addressing) - 61 Các nh lệnh - 62 3.1 Nh lệnh số h c - 64 3.2 Nh lệnh logic - 73 3.3 Nh lệnh truyền liệu - 82 3.4 Nh lệnh oolean - 87 3.5.Nh lệnh rẽ nhánh chương trình - 89 B I B ĐỊNH THỜI - 103 Nội dung chính: - 103 2.Thanh ghi S R ti er - 106 Các chế độ việc - 108 Nguồn cung cấp xung cho Ti er - 109 4.1 Chức định thời - 110 Khởi động dừng điều khiển Ti er - 110 Khởi tạo truy xuất ghi Ti er - 111 Đọc định thời hoạt động - 112 6.2 Thời gian ngắn thời gian dài - 114 Các ghi điều khiển Ti er - 115 7.2 Chế độ capture - 117 7.3 Chế độ tự động nạp lại - 118 Chế độ tạo xung clock - 119 7.5 Chế độ tạo tốc độ baud - 120 B I C NG NỐI TI P (SERIAL PORT - 124 Mở đầu - 124 Thanh ghi điều khiển - 127 2.2 Thanh ghi BDRCON (Baud Rate Control Register) - 128 - -7- Chế độ việc - 129 Thanh ghi dịch bit (chế độ 0) - 130 3.2 Chế độ UART bit có tốc độ baud thay đổi ( chế độ 1) - 132 3.3 Chế độ 2: UART bit với tốc độ Baud cố định - 134 3.4 Chế độ 3: UART bit với tốc độ Baud thay đổi - 134 Khởi tạo truy xuất ghi PORT nối tiếp - 135 Bit điều khiển cho phép nhận liệu (Receive Enable) - 135 4.2 Bit liệu thứ - 135 Thê vào bit chẵn lẻ Parity - 135 Các cờ ngắt - 136 Truyền thông đa xử lý (Multiprocessor Communications) - 136 Tốc độ baud - 138 6.1 Sử dụng định thời xung clock tốc độ baud - 139 6.2 Tạo tốc độ baud Timer - 140 6.3 Tạo tốc độ baud Timer - 143 6.4 Bộ tạo tốc độ baud nội - 144 B I NGẮT - 152 Mở đầu - 152 2.1 Cho phép 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 - 160 3.2 Ngắt (External Interrupt) - 161 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 - 163 Ngắt cổng nối tiếp - 165 Các cổng ngắt - 167 Đồ thị thời gian ngắt - 167 B I PH N MỀM HỢP NG - 181 Mở đầu - 181 1.1 Khái niệ - 181 1.2 Một số khái niệ - 182 Hoạt động tr nh biên dịch Asse bler - 183 Cấu trúc chung chương trình hợp ngữ cho 8051 - 184 3.1 Các thành phần ngôn ngữ Assembly - 184 3.2 Cấu trúc chương trình liệu - 184 Tính biểu thức 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) - 192 4.5 Các toán tử khác - 193 4.6 Thứ tự ưu tiên toán tử - 193 - -8- Các điều khiển ASSEMBLER - 193 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ị ộ nhớ - 196 Định địa nhớ - 197 5.5 Liên kết chương trình - 198 5.6 Cách ch n seg ent - 199 Hoạt động liên kết (Linker - 199 Macro - 200 7.1 Truyền tha số cho Macro - 201 7.2 Macro với nhãn cục ộ - 201 7.3 Tác động lặp lại (Repeat) - 202 7.4 Các tác vụ điều khiển - 202 T I LI U THAM KHẢO……………………………………… .-240- -9- MÔ ĐUN VI ĐIỀU KHIỂN Mã đun: MĐ 25 Vị trí tính chất ý nghĩa vai trị đun: - Vị trí mơ đun: Mơ đun bố trí dạy sau học xong môn học mô đun: Kỹ thuật xung số điện tử bản, điện tử nâng cao, điện tử công suất, học trước môn vi mạch số lập trình - Tính chất mơ đun: Là mô đun chuyên môn nghề ngh a mô đun: mơ đun giúp ngườu học có kiến thức điều khiển hệ thống va thiết bị b ng Vi khiển - Vai tr 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 Vi xử lý Mục tiêu ô đun: - Vận hành thiết bị dây chuyền sản xuất dùng vi điều khiển - Xác định nguyên nhân gây hư hỏng xảy thực tế - Kiểm tra viết chương trình điều kiển Về kiến thức: - Trình bày cấu trúc, ứng dụng vi điều khiển công nghiệp - Kiểm tra viết chương trình điều khiển Về kỹ năng: - Vận hành thiết bị dây chuyền sản xuất dùng vi điều khiển - Xác định nguyên nhân gây hư hỏng xảy thực tế Về thái độ: - Rèn luyện cho học sinh thái độ nghiêm túc, cẩn thận, xác học tập thực công việc Nội dung mô đun: Thời gian Mã Tên mô đun Tổng số Lý thuyết Thực Kiểm Hành tra - 10 - MĐ2501 MĐ2502 Sơ lược lịch sử hướng phát triển vi điều khiển 4 1 1 1 1 10 1 1 1 1 1 Lịch sử phát triển Vi điều khiển L nh vực ứng dụng Hướng phát triển Cấu trúc họ vi điều khiển 8051 Tổng quan Sơ đồ chân Cấu trúc Port I/O Tổ chức nhớ Các ghi chức đặc biệt - 88 - - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Xóa cờ nhớ C - tức đưa giá trị cờ nhớ C 3.4.2 Lệnh x a it - Cú pháp: CLR bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Xóa giá trị bit nhớ có địa xác định - tức đưa giá trị bit 3.4.3 Lệnh thiết đặt cờ nhớ C - Cú pháp: SetB C - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: thiết đặt cờ nhớ C - tức đưa giá trị cờ nhớ C lên - kit kit Cú pháp: SetB bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Thiết đặt giá trị bit nhớ có địa xác định - tức đưa giá trị bit lên 3.4.5 Lệnh ù cờ nhớ C - Cú pháp: CPL C - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: đổi giá trị cờ nhớ C, trước C có giá trị chuyển thành 1, ngược lại trước C có giá trị chuyển thành 3.4.6 Lệnh ù it - Cú pháp: CPL bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: đổi giá trị bit có địa xác định, trước bit có giá trị chuyển thành 1, ngược lại trước bit có giá trị chuyển thành 3.4.7 Lệnh And cờ nhớ C với it - Cú pháp: ANL C,bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Thực phép And cờ nhớ C bit có địa xác định, - 89 - kết lưu C 3.4.8 Lệnh And cờ nhớ C với bit lấy bù - Cú pháp: ANL C,/bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Công dụng: Thực phép And cờ nhớ C bit có địa xác định lấy bù, kết lưu C 3.4.9 Lệnh OR cờ nhớ C với it - Cú pháp: ORL C,bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Công dụng: Thực phép And cờ nhớ C bit có địa xác định, kết lưu C 3.4.10 Lệnh OR cờ nhớ C với it lấy ù - Cú pháp: ORL C,/bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Công dụng: Thực phép And cờ nhớ C bit có địa xác định lấy bù, kết lưu C 3.4.11 Lệnh chuyển giá trị it c địa xác định vào cờ nhớ C - Cú pháp: MOV C,bit - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Thực chuyển giá trị bit có địa xác định vào cờ nhớ C 3.4.12 Lệnh chuyển giá trị cờ nhớ C vào it c địa xác định - Cú pháp: MOV bit,C - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Thực chuyển giá trị cờ nhớ C vào bit có địa xác định 3.5.Nh lệnh rẽ nhánh chương tr nh Phần liên quan đến câu lệnh lưu giữ ROM, cần xem lại phần nhớ ROM trước xem phần Phần phụ chú: Nhãn: Kí hiệu: rel Nhãn chuỗi kí tự người dùng tự đặt dùng để đánh dấu - 90 - đoạn chương trình, nhãn biểu thị địa lệnh lưu ROM Nhãn bắt đầu b ng kí tự chữ dấu "_",khơng bắt đầu b ng số,khơng có khoảng trắng kết thúc b ng dấu hai chấm ":" Trong chương trình nhãn khơng đặt trùng tên với nhau, không trùng với từ khóa mà chương trình sử dụng Ví dụ: Các nhãn X1: ;S_2: ;_5:s10: ; Các nhãn sai 1X: ; S_2 ;S 5: ;DW: ,LPT : Chương trình con: đoạn chương trình thực số lệnh viết ngồi chương trình chính, chương trình đặt tên b ng nhãn kết thúc b ng lệnh RET, chương trình gọi chương trình khác Chương trình chương trình sử dụng cần thiết b ng lệnh gọi chương trình con; có lệnh gọi chương trình con, Vi điều khiển chuyển thực đoạn chương trình chương trình con, sau thực chương trình Vi điều khiển tiếp tục trở thực câu lệnh chương trình Chương trình giúp cho chương trình mạch lạc, dễ hiểu hơn, chương trình có đoạn chương trình lặp lặp lại nhiều lần đoạn chương trình thường viết thành chương trình truy xuất b ng câu lệnh gọi chương trình Việc sử dụng chương trình giúp cho việc tìm lỗi chỉnh sửa chương trình dễ hơn, chương trình sử dụng nhiều lần chương trình con, cần sửa đổi cần thay đổi câu lệnh chương trình Chương trình bắt đầu b ng nhãn kết thúc b ng lệnh Reti, chương trình đặt đầu cuối chương trình 3.5.1 Lệnh g i chương trình dùng địa tuyệt đối - Cú pháp: ACall addr11 - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Khi lệnh thực hiện, Vi điều khiển chuyển thực câu lệnh chương trình địa addr11 Rom, địa addr11 thay b ng nhãn bắt đầu chương trình Câu lệnh thực địa addr11 cách lệnh gọi khơng q KByte Ví dụ: ACall 45A6H 3.5.2 Lệnh g i chương trình dùng địa tuyệt đối - Cú pháp: ACall addr16 - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy Cơng dụng: Khi lệnh thực hiện, Vi điều khiển chuyển thực - 91 - câu lệnh chương trình địa addr16 Rom, địa addr16 có thay b ng nhãn bắt đầu chương trình Câu lệnh gọi chương trình vị trí Rom khoảng cách từ lệnh gọi đến chương trình 64 KByte 3.5.3 Lệnh kết thúc chương trình - Cú pháp: Ret - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Lệnh dùng kết thúc chương trình con, gặp lệnh Vi điều khiển quay thực lệnh chương trình 3.5.4 Lệnh kết thúc chương trình phục vụ ngắt - Cú pháp: Reti - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Lệnh dùng kết thúc chương trình ngắt, gặp lệnh Vi điều khiển quay thực lệnh chương trình 3.5.5 Lệnh nhảy ngắn đến địa tuyệt đối - Cú pháp: AJMP addr11 - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy Cơng dụng: Khi lệnh thực hiện, Vi điều khiển chuyển thực câu lệnh chương trình bắt đầu địa addr11 Rom, địa addr11 thay b ng nhãn Câu lệnh thực vị trí lưu chương trình cần thực cách lệnh gọi không Kbyte 3.5.6 Lệnh nhảy dài đến địa tuyệt đối - Cú pháp: LJMP addr16 - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy Cơng dụng: Khi lệnh thực hiện, Vi điều khiển chuyển thực câu lệnh chương trình bắt đầu địa addr11 Rom, địa addr11 thay b ng nhãn Câu lệnh gọi chương trình vị trí Rom khoảng cách từ lệnh gọi đến chương trình 64 Kbyte 3.5.7 Lệnh nhảy tương đối - Cú pháp: SJMP rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy Cơng dụng: Khi lệnh thực hiện, Vi điều khiển chuyển đến thực câu lệnh chương trình đánh dấu b ng nhãn Câu lệnh thực - 92 - địa nhãn cách lệnh gọi không 128 Byte(cả tới lùi) 3.5.8 Lệnh nhảy gián tiếp - Cú pháp: JMP @A+DPTR - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Khi lệnh thực hiện, Vi điều khiển chuyển đến thực câu lệnh chương trình có địa ROM b ng giá trị A cộng với giá trị lưu giữ DPTR 3.5.9 Lệnh nhảy thuận với cờ Zero - Cú pháp: JZ rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu cờ Zero có giá trị 1(tức ghi A có giá trị 0), Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt + Nếu cờ Zero có giá trị 0(tức ghi A có giá trị khác 0), Vi điều khiển thực lệnh (không thực lệnh nhảy) 3.5.10 Lệnh nhảy nghịch với cờ Zero - Cú pháp: JNZ rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu cờ Zero có giá trị 0(tức ghi A có giá trị khác 0), Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt + Nếu cờ Zero có giá trị 1(tức ghi A có giá trị 0), Vi điều khiển thực lệnh (không thực lệnh nhảy) 3.5.11 Lệnh nhảy thuận với cờ C - Cú pháp: JC rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu cờ C có giá trị 1, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt + Nếu cờ C có giá trị 0, Vi điều khiển thực lệnh (không thực lệnh nhảy) 3.5.12 Lệnh nhảy nghịch với cờ Zero - Cú pháp: JNC rel - 93 - - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu cờ C có giá trị 0, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt + Nếu cờ C có giá trị 1, Vi điều khiển thực lệnh (không thực lệnh nhảy) 3.5.13 Lệnh nhảy thuận với giá trị bit nhớ - Cú pháp: JB bit,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu bit nhớ có giá trị 1, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt + Nếu bit nhớ có giá trị 0, Vi điều khiển thực lệnh kế tiếp(không thực lệnh nhảy) 3.5.14 Lệnh nhảy nghịch với giá trị it nhớ - Cú pháp: JNC bit,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu bit nhớ có giá trị 0, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt + Nếu bit nhớ có giá trị 1, Vi điều khiển thực lệnh (không thực lệnh nhảy) 3.5.15 Lệnh nhảy thuận với giá trị it nhớ x a it - Cú pháp: JBC bit,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Nếu bit nhớ có giá trị 1, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt, đồng thời xóa giá trị chứa bit nhớ tức đưa bit nhớ giá trị + Nếu bit nhớ có giá trị 0, Vi điều khiển thực lệnh (không thực lệnh nhảy) 3.5.16 Lệnh nhảy c điều kiện(so sánh giá trị ghi A Rn) - Cú pháp: CJNE A,direct,rel - Lệnh chiếm dung lượng nhớ ROM Byte - 94 - - Thời gian thực hiện: chu kì máy - Cơng dụng: + Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt giá trị ghi A khác giá trị nhớ có địa direct, b ng Vi điều khiển không nhảy thực lệnh kế + Ảnh hưởng lệnh đến cờ nhớ C: Nếu giá trị ghi A ≥ giá trị nhớ có địa direct bit C có giá trị Nếu giá trị ghi A < giá trị ô nhớ có địa direct bit C có giá trị 3.5.17 Lệnh nhảy c điều kiện(so sánh giá trị ghi A liệu cho trước) - Cú pháp: CJNE A,#data,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt, giá trị ghi A khác giá trị liệu cho trước, b ng Vi điều khiển không nhảy thực lệnh kế + Ảnh hưởng lệnh đến cờ nhớ C: Nếu giá trị ghi A ≥ giá trị liệu cho trước bit C có giá trị Nếu giá trị ghi A < giá trị liệu cho trước bit C có giá trị 3.5.18 Lệnh nhảy c điều kiện(so sánh giá trị ghi Rn liệu cho trước) - Cú pháp: CJNE Rn,#data,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: + Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt giá trị ghi Rn khác giá trị liệu cho trước, b ng Vi điều khiển không nhảy thực lệnh kế + Ảnh hưởng lệnh đến cờ nhớ C: Nếu giá trị ghi A ≥ giá trị liệu cho trước bit C có giá trị Nếu giá trị ghi A < giá trị liệu cho trước bit C có giá trị - 95 - 3.5.19 Lệnh nhảy c điều kiện(so sánh giá trị ô nhớ c địa gián tiếp liệu cho trước) - Cú pháp: CJNE @Ri,#data,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt giá trị ô nhớ có địa b ng giá trị Ri khác giá trị liệu cho trước, b ng Vi điều khiển không nhảy thực lệnh kế Ảnh hưởng lệnh đến cờ nhớ C: Nếu giá trị nhớ có địa gián tiếp ≥ giá trị liệu cho trước bit C có giá trị Nếu giá trị nhớ có địa gián tiếp < giá trị liệu cho trước bit C có giá trị 3.5.20 Lệnh nhảy c điều kiện kết hợp với lệnh giả ghi Rn - Cú pháp: DJNZ Rn,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Giảm giá trị ghi Rn xuống đơn vị, giá trị ghi Rn khác 0, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt Nếu giá trị ghi Rn b ng 0, Vi điều khiển thực lệnh 3.5.21 Lệnh nhảy c điều kiện kết hợp với lệnh giả ô nhớ c địa direct - Cú pháp: DJNZ direct,rel - Lệnh chiếm dung lượng nhớ ROM Byte - Thời gian thực hiện: chu kì máy - Cơng dụng: Giảm giá trị nhớ có địa direct xuống đơn vị Nếu giá trị nhớ có địa direct khác 0, Vi điều khiển nhảy đến thực chương trình địa mà nhãn đặt Nếu giá trị ô nhớ có địa direct b ng 0, vi điều khiển thực lệnh 3.5.22 Lệnh delay chu kì áy - Cú pháp: NOP - Lệnh chiếm dung lượng nhớ ROM Byte - 96 - - Thời gian thực hiện: chu kì máy - Cơng dụng: delay chu kì máy CÁC B I TẬP MỞ R NG NÂNG CAO V GIẢI QUY T VẤN ĐỀ Làm mạch nạp - Để đưa chương trình viết máy vi tính vào ROM vi điều khiển, cần có phần mềm riêng (hay cịn gọi phần mềm nạp) mạch giao tiếp tương ứng với phần mềm (hay c n gọi mạch nạp) Có nhiều phần mềm nạp mạch nạp dành cho vi điều khiển, loại vi điều khiển có phần mềm nạp mạch nạp dành riêng cho vi điều khiển - Cũng có nhiều chương trình nạp cho vi điều khiển AT89Sxx (xx: hai số sau mã vi điều khiển, ví dụ: AT89S52, AT89S53 ), phần mềm nạp ISP "Mohammad Asim Khan" xây dựng sử dụng phổ biến giới Việt Nam Mạch nạp kèm theo với phần mềm ISP đơn giản thiết kế theo kiểu nạp nối tiếp (các chương trình nạp trước thường chương trình nạp song song, mạch nạp phức tạp,khó chế tạo) ISP nạp chương trình cho vi điều khiển board mạch hoạt động mà không cần phải chuyển vi điều khiển từ mạch hoạt động sang mạch khác để nạp chương trình nạp trước ( hình 3.3) - 97 - Hình 3.3 Mạch nạp dùng 74HCT541 - PRN PORT: đường kết nối đến cổng máy in, số tương ứng ngoặc số chân cổng máy in ( hình 3.6) + Nối ngắn mạch chân chân 12 cổng máy in + 74HCT245 cấp nguồn 5V vào chân 10 chân 20 Hình 3.6: Sơ đồ chân cổng máy in Sơ đồ dùng cho mạch thực cơng việc nạp chương trình cho vi điều khiển Để nạp trực tiếp cho mạch hoạt động, dùng sơ đồ sau ( hình 3.7): Hình 3.7 Mạch nạp dùng 74HCT541 Nguồn cấp cho 74HTC541 lấy từ mạch ổn áp board mạch vi điều khiển, điện dương 5V đưa vào chân 20, chân 10 nối với điện 0V (Ground) LED dùng báo hiệu trạng thái hoạt động mạch.( hình 3.7) Trên SPR PORT: chân số nối với chân số vi điều khiển T89Sxx, chân số nối với chân số vi điều khiển AT89Sxx chân số nối với chân số vi điều khiển AT89Sxx chân số nối với chân số vi điều khiển AT89Sxx - 98 - chân số nối với chân - từ ngõ OUT mạch ổn áp chân số nối với chân + từ ngõ OUT mạch ổn áp Ngồi dùng 74HC245 theo sơ đồ (hình 3.6): Hình 3.6 Mạch nạp dùng 74HC245 Bài 1: Viết đoạn chương trình đọc nội dung ô nhớ 30h Nếu giá trị đọc lớn hay b ng 10 xuất 10 P0, ngược lại xuất giá trị vừa đọc P0 Gợi ý giải: ORG 0000H MAIN: MOV A,30H CJNE A,#10,KT_C KT_C: JC NHO_10 MOV P0,A NHO_10: MOV P0,A ; JMP $ END Bài 2: Viết đoạn chương trình xuất giá trị ô nhớ 30h – 3Fh P1 (giữa lần xuất có thời gian trì hỗn) Gợi ý giải:ORG 0000H MAIN: MOV P1,30H CALL DELAY_1S (Những ô nhớ sau viết tương tự) - 99 - DELAY_1S: MOV R0,#20 DELAY: MOV TMOD,#01H MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) SET TR0 JNB TF0,$ CLR TR0 CLR TF0 DJNZ R0,DELAY RET END Bài 3: Tạo đồng thời sóng vng, sử dụng ngắt timer iải: Chương trình mẫu ORG LJMP ORG LJMP ORG L JMP T0ISR: T1ISR: 0000H MAIN 0BH T0ISR 1BH T1ISR ORG 30H MAIN: MOV TMOD,#12H MOV TH0,#-71 ; 7kHz sử dụng ngắt Timer1 SETB TR0 SETB TF1 MOV IE,#8AH SJMP $ ;****************************************************** ************* ; TIMER ISR, MODE AUTORELOAD CPL P1.7 RETI ;****************************************************** ************* ; TIMER ISR, MODE CLR TR1 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) SETB TR1 CPL P1.6 RETI END Bài : Viết đoạn chương trình sử dụng ngắt trạng thái - 100 - Gợi ý: Viết đoạn chương trình sử dung ngắt ORG 0H MAIN: LJMP MAIN ; nhảy tới Main ORG 03H ; external interrupt JMP EXINTER0 ORG 0BH ; timer interrupt JMP COUNTER0 ORG 13H ; external interrupt JMP EXINTER1 ORG 1BH ;timer interrupt JMP COUNTER1 MAIN: EXINTER0 ; chương trình phục vụ ngắt RETI EXINTER1 ; chương trình phục vụ ngắt RETI COUNTER0 ; chương trình phục vụ đếm RETI COUNTER1 ; chương trình phục v ụ đếm RETI END Bài 5: Giả sử có cảm biến cổng P2, viết chương trình đọc nhiệt độ so sánh với giá trị 60 Dựa vào kết kiểm tra đặt giá trị nhiệt độ vào ghi sau: N ếu T=60 A=T N ếu T>60 R1=T N ếu T