(NB) Giáo trình Lập trình vi điều khiển (Nghề: Cơ điện tử): Phần 1 cung cấp cho người học những kiến thức như: Cấu trúc của hệ vi xử lý và máy vi tính; cấu trúc họ vi điều khiển 8051; tập lệnh 8051. Mời các bạn cùng tham khảo!
1 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 nguyên 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 LỜI GIỚI THIỆU Để thực biên soạn giáo trình đào tạo nghề Cơ Điện tử trình độ Cao đẳng Trung cấp, giáo trình Mơ đun Lập trình 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 chi tiết mơ đun lập trình vi điều khiển 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 60 gồm có: Bài 1: Cấu trúc hệ vi xử lý máy vi tính Bài 2: Cấu trúc họ vi điều khiển 8051 Bài 3: Tập lệnh 8051 Bài 4: Bộ định thời Bài 5: Cổng nối tiếp Bài 6: Ngắt 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 Rất mong nhận đóng góp ý kiến q 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 Khoa Điện tử điện lạnh – Trường Cao đẳng nghề kỹ thuật công nghệ - Tổ 27 thị trấn Đông Anh - Hà Nội Hà Nội, ngày tháng năm 2019 BAN CHỦ NHIỆM BIÊN SOẠN GIÁO TRÌNH NGHỀ: CƠ ĐIỆN TỬ TRƯỜNG CAO ĐẲNG NGHỀ KỸ THUẬT CÔNG NGHỆ MỤC LỤC TRANG LỜI GIỚI THIỆU BÀI 1: CẤU TRÚC CỦA HỆ VI XỬ LÝ VÀ MÁY TÍNH 10 Lịch sử phát triển trung tâm vi xử lý 10 Cấu trúc hệ vi xử lý 11 Từ hệ Vi xử lý đến máy vi tính PC 13 3.1 Máy tính xử lý liệu 14 3.2 Máy tính xử lý số 14 3.3 Máy tính đo lường điều khiển 15 3.4 Căn vào tính kỹ thuật tiêu kích thước 15 BÀI 2: CẤU TRÚC HỌ VI ĐIỀU KHIỂN 8051 17 Tổng quan 18 Sơ đồ chân 21 Cấu trúc Port I/O 23 3.1 Chức Port I/O 23 3.1.1 Port 23 3.1.2 Port 23 3.1.3 Port 23 3.1.4 Port 23 3.2 Kết nối Port với led 24 Tổ chức nhớ 26 4.1.Tổng quan tổ chức nhớ 26 4.2 Vùng RAM đa 29 4.3 Vùng RAM định địa bit 29 Các ghi chức đặc biệt 29 5.1 Từ trạng thái chương trình PSW (program status word) 29 5.2 Thanh ghi B 30 5.3 Con trỏ Stack 30 5.4 Con trỏ liệu DPTR 31 5.5 Các ghi Port nối tiếp 31 5.6 Các ghi định thời 31 5.7 Các ghi port nối tiếp (Serial Data Buffer) 31 5.8 Các ghi ngắt 32 5.9.Thanh ghi điều khiển nguồn PCON 32 Bộ nhớ 33 6.1 Truy xuất nhớ chương trình ngồi 34 6.2 Truy xuất nhớ liệu 35 6.3.Giải mã địa 35 Các cải tiến 8032/8052 35 Hoạt động Reset 35 Thực hành ứng dụng 36 BÀI 3: TẬP LỆNH 8051 38 Mở đầu 38 1.1 Cú pháp lệnh 38 1.2 Khai báo liệu 39 Các cách định địa 41 2.1 Định địa bằng ghi 41 2.2 Định địa trực tiếp 41 2.3 Định địa gián tiếp (Indirect Addressing) 42 2.4 Định địa tức thời (Immediate Addressing) 43 2.5 Định địa tương đối 44 2.6 Định địa tuyệt đối 44 2.7 Định địa dài (Long Addressing) 45 2.8 Định địa chỉ số (Index Addressing) 45 Các nhóm lệnh 46 3.1 Nhóm lệnh số học 47 3.2 Nhóm lệnh logic 59 3.3 Nhóm lệnh truyền liệu 69 3.4 Nhóm lệnh boolean 75 3.5.Nhóm lệnh rẽ nhánh chương trình 77 Luyện tập 84 BÀI 4: BỘ ĐỊNH THỜI 86 Mở đầu 86 Thanh ghi SFR timer 89 Các chế độ làm việc 91 3.1 Chế độ định thời 13 bit (chế độ 0) 91 3.2 Chế độ định thời 16 bit (chế độ 1) 91 3.3 Chế độ tự nạp lại bit (chế độ 2) 92 3.4 Chế độ định thời tách biệt timer (chế độ 3) 92 Nguồn cung cấp xung cho Timer 93 4.1 Chức định thời 93 4.2.Đếm kiện 93 Khởi động, dừng, điều khiển Timer 93 Khởi tạo truy xuất ghi Timer 94 6.1 Đọc định thời hoạt động 96 6.2 Thời gian ngắn thời gian dài 97 Timer 8052 98 7.1 Các ghi điều khiển Timer 99 7.2 Chế độ capture 101 7.3 Chế độ tự động nạp lại 101 7.4 Chế độ tạo xung clock 102 7.5 Chế độ tạo tốc độ baud 104 BÀI 5: CỔNG NỐI TIẾP 106 Mở đầu 106 Thanh ghi điều khiển 108 2.1 Thanh ghi SCON (Serial port controller) 108 2.2 Thanh ghi BDRCON (Baud Rate Control Register) 110 Chế độ làm việc 110 3.1 Thanh ghi dịch bit (chế độ 0) 112 3.2 Chế độ UART bit có tốc độ baud thay đổi ( chế độ 1) 114 3.3 Chế độ 2: UART bit với tốc độ Baud cố định 115 3.4 Chế độ 3: UART bit với tốc độ Baud thay đổi 115 Khởi tạo truy suất ghi PORT nối tiếp 116 4.1 Bit điều khiển cho phép nhận liệu (Receive Enable) 116 4.2 Bit liệu thứ 116 4.3 Thêm vào bit chẵn lẻ Parity 116 4.4 Các cờ ngắt 117 Truyền thông đa xử lý 118 Tốc độ BAUD 119 6.1 Sử dụng định thời xung clock tốc độ baud 121 6.2 Tạo tốc độ baud bằng Timer 122 6.3 Tạo tốc độ baud bằng Timer 125 6.4 Bộ tạo tốc độ baud nội (INT_BRG–Internal Baud Rate Renerator)125 Luyện tập 126 BÀI 6: NGẮT 128 Mở đầu 128 Tổ chức ngắt 8051 130 2.1 Cho phép không cho phép ngắt: 131 2.2 Ưu tiên ngắt 132 2.3 Chuỗi 134 Xử lý ngắt 136 3.1 Các vector ngắt 137 3.2 Ngắt (External Interrupt) 138 Thiết kế chương trình dùng ngắt 138 4.1 Các trình phục vụ ngắt kích thước nhỏ 140 4.2 Các trình phục vụ ngắt kích thước lớn 140 Luyện tập 142 TÀI LIỆU THAM KHẢO 145 GIÁO TRÌNH MƠ ĐUN Tên mơ đun: Lập trình vi điều khiển Mã mơn học/mơ đun: MĐ CĐT32 Vị trí, tính chất, ý nghĩa vai trị mơn học/mơ đun: - Vị trí: Trước học mơ đun cần hồn thành mơn học sở số môn học chuyên môn, mơn học nên học cuối khóa học - Tính chất: Là mơ đun tích hợp lý thuyết với thực hành - Ý nghĩa vai trị mơn học/mơ đun: +Ý nghĩa: 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ị: Là mơ đun chun 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 môn học/mô đun: - Về kiến thức: + Trình bày khái niệm, kiến thức cấu trúc hệ vi xử lý, vi điều khiển + Mô tả cấu trúc họ vi điều khiển chuẩn công nghiệp - Về kỹ năng: + Lập trình tập ứng dụng yêu cầu kỹ thuật - Về thái độ: + Chủ động, sáng tạo đảm bảo an tồn q trình học tập Nội dung mô đun: Thời gian (giờ) Thực hành, Số Tên mơ đun TT Tổng Lý thí nghiệm, Kiểm số thuyết thảo luận, tra tập Bài 1: Cấu trúc hệ vi xử lý 2 10 máy vi tính Lịch sử phát triển trung tâm vi xử lý: Cấu trúc hệ vi xử lý Từ hệ Vi xử lý đến máy vi tính PC Bài 2: 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 Bộ nhớ Các cải tiến 8032/8052 Hoạt động Reset Thực hành ứng dụng Bài 3: Tập lệnh 8051 Mở đầu Các cách định địa Các nhóm lệnh Luyện tập Bài 4: Bộ định thời 12 12 12 Mở đầu Thanh ghi SFR timer Các chế độ làm việc Nguồn cung cấp xung cho Timer Khởi động, dừng, điều khiển Timer Khởi tạo truy xuất ghi Timer Timer 8052 Bài 5: Cổng nối tiếp Mở đầu Thanh ghi điều khiển Chế độ làm việc Khởi tạo truy suất ghi PORT nối tiếp Truyền thông đa xử lý Tốc độ BAUD Luyện tập Bài 6: Ngắt Mở đầu Tổ chức ngắt 8051 Xử lý ngắt Thiết kế chương trình dùng ngắt Luyện tập Thi kết thúc mô đun Cộng 60 21 33 10 BÀI 1: CẤU TRÚC CỦA HỆ VI XỬ LÝ VÀ MÁY TÍNH Mã bài: MĐ CĐT32-01 Giới thiệu: Trong thập niên cuối kỷ XX, từ đời công nghệ bán dẫn, kỹ thuật điện tử có phát triển vượt bậc Các thiết bị điện tử sau tích hợp với mật độ cao cao diện tích nhỏ,nhờ thiết bị nhỏ nhiều chức Các thiết bị điện tử ngày nhiều chức giá thành ngày rẻ hơn, điện tử có mặt khắp nơi Bước đột phát kỹ thuật điện tử tạo thiết bị điện tử Vi xử lý Trong học giới thiệu lịch sử phát triển trung tâm vi xử lý, cấu trúc hệ vi xử lý từ hệ Vi xử lý đến máy vi tính PC Mục tiêu: - Trình bày lịch sử phát triển trung tâm vi xử lý - Phân tích Cấu trúc hệ vi xử lý - Chủ động, sáng tạo đảm bảo an toàn trình học tập Nội dung chính: Lịch sử phát triển trung tâm vi xử lý Vi xử lý chế tạo từ tranzito tích hợp vi mạch tích hợp đơn Xuất lần vào năm đầu thập kỷ 70 kỷ 20 Sử dụng mã BCD bit Các vi xử lý bit bit sử dụng thiết bị đầu cuối, máy in, hệ thống tự động Đến năm 1970 lần vi xử lý bit với 16 bit địa sử dụng máy tính đa mục đích Các hãng sản xuất vi xử lý thời điểm Intel, Texas Instruments Garrett AiResearch với ba dòng chip tương ứng: Intel 4004, TMS 1000 Central Air Data Computer Đây vi xử lý bit Sau đời vi xử lý bit hãng cho đời dòng bit, 12 bit, 16 bit, 32 bit, 64 bit Intel 8008 vi xử lý bit giới sản xuất năm 1972 Tiếp sau thành công 8008 phiên 8080 (1974), Zilog Z80 (1976) Các vi xử lý Motorola 6800 phát hành tháng năm 1974 MOS technology đời năm 1975 Intersil 6100 vi xử lý 12 bit, từ sản xuất 71 Sau lệnh thực A mang giá trị 37H 3.3.8 Lệnh chuyển liệu từ ghi A vào ô nhớ có địa direct Cú pháp: MOV direct,A 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: chuyển liệu từ ghi A vào nhớ có địa direct Ví dụ: MOV A,#77H MOV 69H,A Sau lệnh thực ô nhớ 69H mang giá trị 77H (giá trị bit thiết lập ô nhớ 69H 01110111B ) 3.3.9 Lệnh chuyển liệu từ ghi Rn vào ô nhớ có địa direct Cú pháp: MOV direct,Rn 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: chuyển liệu từ ghi A vào nhớ có địa direct Ví dụ: MOV Rn,#78H MOV 7AH,Rn Sau lệnh thực ô nhớ 7AH mang giá trị 78H 3.3.10 Lệnh chuyển liệu từ ô nhớ có địa direct vào ô nhớ có địa direct khác Cú pháp: MOV direct,direct 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: chuyển liệu từ nhớ có địa direct vào nhớ có địa direct khác Ví dụ: Giả sử ghi 20H mang liệu có giá trị FFH MOV 22H,20H Sau lệnh thực ghi 22H mang giá trị FFH 3.3.11 Lệnh đưa liệu vào ô nhớ có địa direct Cú pháp: MOV direct,#data Lệnh chiếm dung lượng nhớ ROM Byte Thời gian thực hiện: chu kì máy 72 Cơng dụng: thiết lập liệu cho nhớ có địa direct Ví dụ: MOV 52H,#43H Sau lệnh thực ô nhớ 52H mang giá trị 43H 3.3.12 Lệnh chuyển liệu từ ô nhớ có địa gián tiếp vào ô nhớ có địa direct Cú pháp: MOV direct,@Ri 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: Chuyển liệu nhớ có địa bằng giá trị ghi Ri vào nhớ có địa direct Ví dụ: MOV 30H,#46H MOV R0,#30H MOV 23H, @R0 Sau lệnh thực ô nhớ 23H mang giá trị 46H 3.3.13 Lệnh chuyển liệu từ ghi A vào ô nhớ có địa gián tiếp Cú pháp: Mov @Ri,A 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: Chuyển liệu ghi A vào nhớ có địa bằng giá trị ghi Ri Ví dụ: MOV A,#33H MOV R1,#22H MOV @R0,A Sau lệnh thực ô nhớ 22H mang giá trị 33H 3.3.14 Lệnh chuyển liệu từ ô nhớ có địa direct vào ô nhớ có địa gián tiếp Cú pháp: MOV @Ri,direct Lệnh chiếm dung lượng nhớ ROM Byte Thời gian thực hiện: chu kì máy 73 Cơng dụng: Chuyển liệu nhớ có địa direct vào nhớ có địa bằng giá trị ghi Ri Ví dụ: MOV 4BH,#2AH MOV R0,#2AH MOV @R0,4BH Sau lệnh thực ô nhớ 2AH mang giá trị 2AH 3.3.15 Lệnh đưa liệu vào ô nhớ có địa gián tiếp Cú pháp: MOV @Ri,#data 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 liệu cho nhớ có địa bằng giá trị ghi Ri Ví dụ: MOV R0,#3BH MOV @R0,#27H Sau lệnh thực ô nhớ 3BH mang giá trị 27H 3.3.16 Lệnh đưa liệu vào trỏ liệu DPTR Cú pháp: MOV DPTR,#data16 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 liệu cho trỏ liệu với liệu 16 bit, thực chất liệu lưu hai ghi DPL (byte thấp-địa byte 82H) DPH (byte cao-địa byte 83H) Ví dụ: MOV DPTR,#3A5FH Sau lệnh thực DPTR mang giá trị 3A5FH DPL mang giá trị 5FH DPL mang giá trị 3AH 3.3.17 Lệnh trao đổi liệu ô nhớ có địa direct với ghi A Cú pháp: XCH A,direct Lệnh chiếm dung lượng nhớ ROM Byte Thời gian thực hiện: chu kì máy 74 Cơng dụng: Trao đổi liệu ghi A với nhớ có địa direct, tức sau thực lệnh ô nhớ có địa direct mang liệu ghi A trước ghi A mang liệu nhớ có địa direct Ví dụ: MOV A,#0FAH MOV 50H,#60H XCH A,50H Kết :A mang giá trị 60H 50H mang giá trị 0FAH 3.3.18 Lệnh trao đổi liệu ghi Rn ghi A Cú pháp: XCH A,Rn 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: Trao đổi liệu ghi A với ghi Rn 3.3.19 Lệnh trao đổi liệu ghi có địa gián tiếp ghi A Cú pháp: XCH A,@Ri 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: Trao đổi liệu ghi A với nhớ có địa bằng giá trị lưu giữ ghi Ri 3.3.20 Lệnh trao đổi liệu bit ghi có địa gián tiếp ghi A Cú pháp: XCHD A,@Ri 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: Trao đổi liệu bit thấp ghi A với liệu bit thấp nhớ có địa bằng giá trị lưu giữ ghi Ri 3.3.21 Lệnh truy xuất liệu từ ROM nội Cú pháp: MovC A,@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: Chuyển liệu từ nhớ ROM có địa bằng giá trị A cộng với DPTR vào ghi A 75 Các lệnh cịn lại nhóm lệnh di chuyển MOVC A,@A+PC MOVC A,@i MOVX A,@DPTR MOVX A,@Ri MOVX @DPTR,A PUSH direct POP direct 3.4 Nhóm lệnh boolean Quy ước: câu lệnh "bit" đại diện cho địa bit nhớ 3.4.1 Lệnh xóa cờ nhớ C Cú pháp: CLR 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: Xóa cờ nhớ C - tức đưa giá trị cờ nhớ C 3.4.2 Lệnh xóa bit 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 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 76 3.4.5 Lệnh bù 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 bù bit 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 bit 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, 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 bit 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 bit lấy bù Cú pháp: ORL C,/bit Lệnh chiếm dung lượng nhớ ROM Byte 77 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ị bit 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 bit 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óm 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 đ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 78 đ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 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 79 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 q 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 địa nhãn cách lệnh gọi không 128 Byte(cả tới lùi) 80 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 81 + 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 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ị bit 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ị bit nhớ xóa bit Cú pháp: JBC bit,rel Lệnh chiếm dung lượng nhớ ROM Byte 82 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 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 83 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ị 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ảm 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ảm ô 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 84 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ì máy Cú pháp: NOP 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: delay chu kì máy Luyện tập - Luyện tập tập lệnh vi vi điều khiển - Kết hợp lệnh lập trình chuyển liệu vùng nhớ Bài tập 1: viết chương trình chuyển liệu 35h vào vùng nhớ từ 30h đến 40h ram nội Bài tập 2: viết chương trình chuyển liệu 66h vào vùng nhớ từ 30h đến 40h ram nội; sau chuyển liệu vùng nhớ từ 30h đến 40h ram nội vào vùng nhớ 50h Bài tập 3: viết chương trình chuyển liệu từ 30h đến 40h vào vùng nhớ từ 30h đến 40h ram nội Bài tập 4: viết chương trình chuyển liệu từ 30h đến 40h vào vùng nhớ từ 30h đến 40h ram nội sau chuyển liệu vùng nhớ vào vùng nhớ 1000h ram CÁC BÀI TẬP MỞ RỘNG, NÂNG CAO VÀ GIẢI QUYẾT VẤN ĐỀ Câu 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 Câu 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) u cầu đánh giá kết học tập: Nội dung: + Về kiến thức: Phân biệt kiểu định địa liệu; 85 Trình bày đặc tính cơng dụng lệnh 8051; + Về kỹ năng: Xác định độ lớn thời gian thực chương trình; Kết hợp lệnh riêng lẻ để thực thao tác cho trước kỹ thuật; + Thái độ: Đánh giá phong cách, thái độ học tập Chủ động, sáng tạo an tồn q trình 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ỹ thực hành Mỗi sinh viên, nhóm học viên thực công việc theo yêu cầu giáo viên Tiêu chí đánh giá theo nội dung: - Độ xác cơng việc - Thời gian thực cơng việc - Độ xác theo u cầu kỹ thuật + Thái độ: Tỉ mỉ, cẩn thận, xác ... 9FH 15 9 10 011 111 b - 6CH 10 8 011 011 00b 51 0 011 0 011 b 6CH 10 8 011 011 00b Số trừ - 9FH 15 9 10 011 111 b Kết CDH - 51 110 011 01b Cờ nhớ C 33H Số bị trừ Cờ nhớ C 1 phép trừ có số muợn 3 .1. 1 Lệnh cộng liệu... 11 111 111 b), lúc C =1 Ví dụ: Phép cộng khơng tràn Số cộng 38H 56 0 011 1000b Số cộng +3AH 58 0 011 1 010 b Kết 72H 11 4 011 10 010 b Cờ nhớ C 0 48 Phép cộng tràn Số cộng 6CH 10 8 011 011 00b Số cộng +9FH 15 9 10 011 111 b... 80C 51 32 80C31BH ROMLESS 12 8 12 ,16 32 80C51BH 4K ROM 12 8 12 ,16 32 80C31BHP 4K ROM 12 8 12 ,16 32 87C 51 128 12 ,16 ,20,24 32 80C32 ROMLESS 256 12 ,16 ,20,24 32 80C52 8K ROM 256 12 ,16 ,20,24 32 8K 256 12 ,16 ,20,24