1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng Vi điều khiển: Phần 1 ĐH Phạm Văn Đồng

77 38 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Bài giảng Vi điều khiển: Phần 1 được biên soạn nhằm cung cấp cho các bạn những kiến thức về lịch sử phát triển của vi xử lý, cấu trúc bên trong và lệnh của vi xử lý, giới thiệu vi điều khiển, khảo sát tập lệnh của vi điều khiển.

TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA KỸ THUẬT CÔNG NGHỆ BÀI GIẢNG VI ĐIỀU KHIỂN Bậc học: Cao đẳng (Bộ LĐ-TB&XH) Giảng viên: Võ Trường Tiến Bộ môn Điện - Điện tử Khoa Kỹ thuật - Công nghệ Quảng Ngãi, năm 2018 TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA KỸ THUẬT CÔNG NGHỆ BÀI GIẢNG VI ĐIỀU KHIỂN Bậc học: Cao đẳng (Bộ LĐ-TB&XH) Số tín chỉ: 02 Giảng viên: Võ Trường Tiến Bộ môn Điện - Điện tử Khoa Kỹ thuật - Công nghệ Quảng Ngãi, năm 2018 LỜI NÓI ĐẦU Bài giảng “Vi điều khiển” biên soạn dùng làm tài liệu học tập cho sinh viên bậc Cao đẳng quy ngành Cơng nghệ Kỹ thuật Điện - Điện tử trường Đại học Phạm Văn Đồng Bài giảng gồm chương cung cấp cho sinh viên kiến thức Vi điều khiển như: nhắc lại khái niệm Vi xử lý, khảo sát cấu trúc, tập lệnh tổ chức nhớ Vi điều khiển, khảo sát hoạt động TimerCounter, khảo sát ngắt lập trình hợp ngữ cho Vi điều khiển Bài giảng sử dụng Vi điều khiển 89C51 để minh họa chi tiết cho khái niệm Đây kiến thức tảng để mở rộng tìm hiểu nghiên cứu dòng Vi điều khiển tiên tiến cho môn học đồ án sau Trong trình biên soạn, tài liệu khơng thể tránh khỏi thiếu sót Mọi góp ý vui lòng gửi Bộ mơn Điện-Điện tử - Khoa Kỹ thuật Công nghệ - Trường Đại học Phạm Văn Đồng thư điện tử: vttien@pdu.edu.vn Tác giả xin chân thành cảm ơn MỤC LỤC PHỤ LỤC HÌNH ẢNH iii PHỤ LỤC BẢNG v Chương 1: TỔNG QUAN 1.1 Lịch sử phát triển Vi xử lý 1.2 Các khái niệm cấu trúc Vi xử lý Chương 2: CẤU TRÚC BÊN TRONG VÀ LỆNH CỦA VI XỬ LÝ 2.1 Cấu trúc bên Vi xử lý 2.2 Giới thiệu lệnh Vi xử lý 17 Chương 3: GIỚI THIỆU VI ĐIỀU KHIỂN 23 3.1 Giới thiệu vi điều khiển 23 3.2 Giới thiệu vi điều khiển MCS-51 24 3.3 Tóm tắt phần cứng vi điều khiển MCS-51 25 3.4 Khảo sát cấu trúc bên vi điều khiển MCS-51 26 3.5 Tổ chức nhớ vi điều khiển MCS-51 32 Chương 4: KHẢO SÁT TẬP LỆNH CỦA VI ĐIỀU KHIỂN 42 4.1 Các khái niệm 42 4.2 Các kiểu định địa truy xuất nhớ vi điều khiển 43 4.3 Khảo sát tập lệnh vi điều khiển MCS-51 46 4.4 Tóm tắt lệnh vi điều khiển MCS51 63 Chương 5: KHẢO SÁT TIMER - COUNTER CỦA VI ĐIỀU KHIỂN 70 5.1 Giới thiệu 70 5.2 Thanh ghi chọn chế kiểu làm việc cho Timer 73 5.3 Thanh ghi điều khiển Timer 74 5.4 Các kiểu hoạt động Timer cờ tràn 75 i 5.5 Các nguồn xung đếm 76 5.6 Điều khiển Timer đếm, ngừng đếm 78 5.7 Khởi tạo truy xuất ghi Timer/Counter 79 5.8 Timer/Counter T2 MCS52 80 Chương 6: KHẢO SÁT NGẮT CỦA VI ĐIỀU KHIỂN 85 6.1 Giới thiệu 85 6.2 Tổ chức ngắt 86 6.3 Xử lý ngắt 89 Chương 7: LẬP TRÌNH HỢP NGỮ CHO VI ĐIỀU KHIỂN MCS51 92 7.1 Giới thiệu 92 7.2 Hoạt động trình biên dịch Assembler 93 7.3 Cấu trúc chương trình hợp ngữ 94 7.4 Tính tốn biểu thức trình dịch 98 7.5 Các dẫn cho Assembler 102 7.6 Các điều khiển trình biên dịch Assembler 105 7.7 Hoạt động liên kết – linker 106 7.8 Sử dụng macro 107 7.9 Cách viết chương trình hợp ngữ 110 TÀI LIỆU THAM KHẢO 117 ii PHỤ LỤC HÌNH ẢNH Hình 2.1 - Sơ đồ khối cấu trúc bên Vi xử lý .5 Hình 2.2 - Sơ đồ minh họa ghi bên Vi xử lý tô đậm Hình 2.3 - Các bit ghi trạng thái .10 Hình 2.4 - Trước cộng liệu 15 Hình 2.5 - Dữ liệu ghi A đưa đến ghi TEMP1 .15 Hình 2.6 - Dữ liệu ghi D đưa đến ghi TEMP2 .16 Hình 2.7 - Kết lưu trở lại ghi A 16 Hình 2.8 - Các ghi trở lại trạng thái ban đầu 17 Hình 2.9 - Chu lệnh Vi xử lý 18 Hình 2.10 - Cấu trúc lệnh bao gồm mã lệnh địa .18 Hình 3.1 - So sánh hệ thống Vi xử lý với hệ thống vi điều khiển 24 Hình 3.2 - Sơ đồ cấu trúc họ vi điều khiển 89C51 .27 Hình 3.3 - Sơ đồ chân vi điều khiển 89C51 .28 Hình 3.4 - Sơ đồ ghép nối vi điều khiển 8951 với IC chốt, mạch Reset 30 Hình 3.5 - Sơ đồ ghép nối vi điều khiển 89C51 mạch Reset, tụ thạch anh 32 Hình 3.6 - Bảng tóm tắt vùng nhớ 89C51 33 Hình 3.7 - RAM nội 8032/8052 41 Hình 5.1 - Sơ đồ khối tổng quan Bộ đếm/ định thời 70 Hình 5.2 - Một chu trình đếm Timer0 71 Hình 5.3 - Các ứng dụng tiêu biểu Bộ đếm 72 Hình 5.4 - Các ứng dụng tiêu biểu Bộ định thời 72 Hình 5.5 - Thanh ghi TMOD 73 Hình 5.6 - Thanh ghi TCON .74 Hình 5.7 - Thanh ghi TH TL chế độ 75 Hình 5.8 - Thanh ghi TH TL chế độ 75 Hình 5.9 - Thanh ghi TH TL chế độ 75 Hình 5.10 - Thanh ghi TH TL chế độ 76 Hình 5.11 - Các nguồn xung đếm .76 Hình 6.12 - Tần số Bộ đếm/Bộ định thời 77 iii Hình 5.13 - Điều khiển đếm, ngừng Timer .78 Hình 5.14 - Sơ đồ chân 89C52 với ngõ vào T2 P1.0 T2EX P1.1 82 Hình 5.15 - Hoạt động timer T2 chế độ tự động nạp lại 82 Hình 5.16 - Hoạt động timer T2 chế độ thu nhận liệu .83 Hình 6.1 - Vi điều khiển thực chương trình hai trường hợp 86 Hình 6.2 - Cấu trúc ngắt 8051 89 Hình 7.1 - Biên dịch chương trình nguồn 93 Hình 7.2 - Hoạt động chương trình linker có tên RL51 .106 iv PHỤ LỤC BẢNG Bảng 1.1 - Lịch sử phát triển Vi xử lý Bảng 1.2 - Tốc độ làm việc Vi xử lý Bảng 3.1 - Các đặc tính kỹ thuật họ MCS-51 MCS-52 25 Bảng 3.2 - Bảng mô tả bit Port 29 Bảng 3.3 - Tóm tắt trạng thái tất ghi 89C51 31 Bảng 3.4 - Cấu trúc nhớ liệu bên vi điều khiển 89C51 33 Bảng 3.5 - Bảng tóm tắt ghi trạng thái chương trình địa D0H .38 Bảng 3.6 - Bảng chọn bank ghi truy xuất 39 Bảng 3.7 - Các ghi Timer 41 Bảng 5.1 - Bảng tóm tắt bit ghi TMOD 73 Bảng 5.2 - Chế độ hoạt động Timer/Counter .73 Bảng 5.3 - Bảng mô tả bit ghi TCON 74 Bảng 5.4 - Một số tần số thông dụng 77 Bảng 5.5 - Bảng mô tả bit ghi T2CON 81 Bảng 6.1 - Thanh ghi IE 87 Bảng 6.2 - Thanh ghi IP 88 Bảng 6.3 - Khả tạo ngắt bit cờ 89 Bảng 6.4 - Các vec tơ ngắt 90 Bảng 7.1 - Các kiểu toán hạng 95 Bảng 7.2 - Thứ tự ưu tiên toán tử .102 Bảng 7.3 - Các từ khoá điều khiển biên dịch 106 v Chương 1: TỔNG QUAN 1.1 Lịch sử phát triển Vi xử lý 1.1.1 Vi xử lý vi điều khiển Vi xử lý (Microprocessor) (viết tắt µP hay uP) linh kiện điện tử chế tạo từ tranzitor (transistor) thu nhỏ tích hợp vi mạch tích hợp đơn (single Integrated Circuit - IC) Bộ xử lý trung tâm (Central Processing Unit CPU) xử lý, thường người biết đến bên máy vi tính, ngồi số thành phần khác máy vi tính có xử lý riêng nó, ví dụ card đồ họa (Graphic Processing Unit - GPU) Vi điều khiển (Microcontroller) (viết tắt µC) máy tính tích hợp chíp (System on Chip - SoC), dùng để điều khiển thiết bị điện tử Vi điều khiển, thực chất, hệ thống bao gồm Vi xử lý (Microprocessor) có hiệu suất đủ dùng giá thành thấp (khác với Bộ Vi xử lý đa dùng máy tính), kết hợp với khối ngoại vi nhớ, mô đun (module) vào/ra, mô đun chuyển đổi số sang tương tự (Digital to Analog Converter) tương tự sang số (Analog to Digital Converter) … Còn máy tính module xây dựng các chip mạch Vi điều khiển thường dùng để xây dựng hệ thống nhúng (Embedded system) Nó tìm thấy nhiều dụng cụ điện tử, thiết bị điện gia dụng, điện thoại, dây chuyền tự động thiết bị ngoại vi cho hệ thống máy tính Về bản, Vi xử lý thuật ngữ dùng để đề cập đến kỹ thuật ứng dụng công nghệ vi điện tử (Microelectronics), cơng nghệ tích hợp (Integrated) khả xử lý theo chương trình (Programmable) vào mục đích khác Trong giai đoạn đầu phát triển công nghệ Vi xử lý, chip (hay Vi xử lý) tích hợp phần cứng thiết yếu CPU, số mạch giao tiếp CPU phần cứng khác Về sau, nhờ phát triển vượt bậc cơng nghệ tích hợp lẫn cơng nghệ vi điện tử, ngoại vi tích hợp vào bên chip, người ta gọi Vi xử lý tích hợp thêm ngoại vi vi điều khiển Vi xử lý có khối chức cần thiết để lấy liệu, xử lý liệu xuất liệu sau xử lý Chức Vi xử lý xử lý liệu, chẳng hạng cộng (add), trừ (subtract), nhân (multiply), chia (divide), so sánh (compare), (or), (and)… Để làm điều này, Vi xử lý phải có mạch logic cho việc xử lý điều khiển liệu Để điều khiển mạch logic, Vi xử lý hoạt động cần có chương trình kèm theo Chương trình tập hợp lệnh để xử lý liệu, thực lệnh lưu trữ nhớ Vi xử lý thực lệnh với trình tự sau: đón lệnh từ nhớ, sau mạch logic điều khiển giải mã lệnh để xem lệnh yêu cầu Vi xử lý thực cơng việc gì, tiếp đến Vi xử lý thực công việc lệnh yêu cầu, trình gọi chu kỳ đón thực lệnh (fetch - execute cycle) 1.1.2 Lịch sử phát triển Vi xử lý Bảng 1.1 - Lịch sử phát triển Vi xử lý Intel Năm Số lượng processor mắt Transistor Nhịp xung Quy trình sản xuất Intel 4004 1971 2300 740 KHz 10 µm Intel 8086 1978 29,000 Mhz µm Intel 80286 1982 134,000 25 MHz 1.5 µm Intel 80486 1989 1,180,235 50 MHz 0.8 µm Pentium Pro 1995 5,500,000 200 MHz 0.35 µm Pentium III 1999 9,500,000 600 MHz 0.25 µm Pentium 2000 42,000,000 1.5 GHz 180 nm Core Duo 2006 291,000,000 3.0 GHz 65 nm Quad-Core + 2011 1,160,000,000 3.5 GHz 32 nm Six-Core i7/ 8- 2011 – 2,270,000,000 4.0 GHz 32 nm Core Xeon E5 22 nm GPU Core i7 (Sandy Bridge- 14 nm E/EP) MOV direct, A ;Chuyển nội dung ghi A vào nhớ Ram nội có địa direct MOV direct, Rn ;Chuyển nội dung ghi Rn vào nhớ Ram nội có địa direct MOV direct1, direct2 ;Chuyển nội dung ô nhớ Ram nội có địa direct2 vào nhớ có địa direct1 MOV direct, @Ri ;Chuyển nội dung nhớ có địa chứa ghi Ri vào nhớ có địa direct MOV direct, #data ;Nạp liệu data bit (d0 đến d7) vào nhớ có địa direct MOV @Ri, A ;Chuyển nội dung ghi A vào ô nhớ Ram nội có địa chứa ghi Ri MOV @Ri, direct ;Chuyển nội dung nhớ có địa direct vào nhớ có địa chứa ghi Ri MOV @Ri, #data ;Nạp liệu data bit (d0 đến d7) vào nhớ có địa chứa ghi Ri MOV dptr, #data1 ;Nạp liệu data 16 bit vào ghi dptr Lệnh MOVC MOVC A, @A+DPTR ;Chuyển nội dung nhớ ngồi, có địa chứa dptr cộng với giá trị chứa A, chuyển vào ghi A MOVC A, @A+PC ;Chuyển nội dung ô nhớ ngồi có địa chứa PC cộng với giá trị chứa A chuyển vào ghi A Lệnh MOVX MOVX A, @Ri ;Chuyển nội dung ô nhớ ngồi có địa chứa ghi Ri vào ghi A MOVX A, @DPTR ;Chuyển nội dung nhớ ngồi có địa chứa ghi dptr vào ghi A 55 MOVX @ Ri, A ;Chuyển nội dung ghi A ô nhớ ngồi có địa chứa ghi Ri MOVX @DPTR, A ;Chuyển nội dung ghi A nhớ ngồi có địa chứa ghi dptr Lệnh cất nội dung ô nhớ trực tiếp vào ngăn xếp PUSH direct Ý nghĩa: cất nội dung nhớ có địa direct vào nhớ ngăn xếp Con trỏ ngăn xếp SP tăng lên trước lưu nội dung Lệnh lấy liệu từ ngăn xếp trả ô nhớ trực tiếp POP direct Ý nghĩa: lấy nội dung ô nhớ ngăn xếp trả cho nhớ có địa direct Con trỏ ngăn xếp SP giảm sau lấy liệu Lệnh trao đổi liệu XCH A, Rn XCH A, Direct ;Trao đổi nội dung ghi Rn với ghi A ;Trao đổi nội dung ghi A với nộ dung ô nhớ có địa direct XCH A, @Ri ;Trao đổi nội dung nhớ có địa chứa ghi Ri với ghi A Lệnh trao đổi bit liệu ô nhớ gián tiếp với ghi A XCHD A, @Ri ;Trao đổi liệu bit thấp nhớ có địa chứa ghi Ri với liệu bit thấp A 4.3.4 Nhóm lệnh xử lý bit Lệnh xóa bit carry Cú pháp: CLR C Ý nghĩa: Xóa bit C Lệnh xóa bit Cú pháp: CLR bit 56 Ý nghĩa: Xóa bit Ví dụ: CLR P1.0 ;xoa P1.0=0 Lệnh đặt bit carry Cú pháp: SETB C Ý nghĩa: Đặt bit C = Lệnh đặt bit Cú pháp: SETB bit Ý nghĩa: Đặt bit lên Ví dụ: SETB P1.0 ;dat P1.0=1 Lệnh bù bit carry Cú pháp: CPL C Ý nghĩa: Bù bit carry, trước C = C = 0, ngược lại C = C = Lệnh bù bit Cú pháp: CPL bit Ý nghĩa: Bù bit Nếu trước bit = kết bit ngược lại trước Lệnh and bit carry với bit Cú pháp: ANL C, bit Ý nghĩa: Bit C and với bit có địa xác định, kết chứa bit C Lệnh and bit carry với bù bit Cú pháp: ANL C, /bit Ý nghĩa: Bit C and với bù bit có địa xác định, kết chứa bit C Lệnh or bit carry với bit 57 Cú pháp: ORL C, bit Thời gian thực hai chu kỳ máy Ý nghĩa: Bit C or với bit có địa xác định, kết chứa bit C 10 Lệnh or bit carry với bù bit Cú pháp: ORL C, /bit Ý nghĩa: Bit C or với bù bit có địa xác định, kết chứa bit C 11 Lệnh di chuyển bit vào bit carry Cú pháp: MOV C, bit Ý nghĩa: Bit có địa xác định chuyển vào bit C 12 Lệnh di chuyển bit carry vào bit Cú pháp: MOV bit, C Ý nghĩa: Bit C chuyển vào bit có địa xác định 4.3.5 Nhóm lệnh rẽ nhánh Nhóm lệnh nhóm lệnh chuyển quyền điều khiển có nghĩa vi điều khiển thực lệnh địa nhảy đến chuyển đến thực lệnh địa khác Trong nhóm gồm có lệnh gọi chương trình con, lệnh kết thúc chương trình trở chương trình chính, lệnh nhảy khơng điều kiện lệnh nhảy có điều kiện Các lệnh nhảy bao gồm lệnh nhảy tương đối, lệnh nhảy tuyệt đối, lệnh nhảy dài Các lệnh nhảy có điều kiện thỏa điều kiện lệnh nhảy khơng thỏa điều kiện thực lệnh kế sau lệnh nhảy Lệnh gọi chương trình v Lệnh gọi chương trình dùng địa tuyệt đối Cú pháp: ACALL addr11 Mã lệnh: 58 a10 a9 a8 0 a7 a6 a5 a4 a3 a2 a1 a0 Lệnh chiếm byte thời gian thực lệnh chu kỳ máy Ý nghĩa: Khi lệnh thực vi điều khiển thực chương trình địa addr11 Chương trình khơng cách lệnh gọi kbyte Addr11 chương trình thay nhãn (tên chương trình con) Chú ý: Trước nạp địa vào ghi PC địa lệnh kế chương trình cất vào nhớ ngăn xếp v Lệnh gọi chương trình dùng địa dài 16 bit Cú pháp: LCALL addr16 Mã lệnh: - 0 0 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0 Lệnh chiếm byte thời gian thực lệnh chu kỳ máy Ý nghĩa: Khi lệnh thực vi điều khiển thực chương trình địa addr16 Lệnh gọi chương trình đâu vùng 64kbyte Addr16 chương trình thay nhãn (tên chương trình con) - 16 bit địa A15 – A0 nạp vào PC, vi điều khiển thực chương trình địa vừa nạp vào PC Chú ý: Trước nạp địa vào ghi PC địa lệnh kế chương trình cất vào nhớ ngăn xếp Lệnh trở từ chương trình Cú pháp: RET Ý nghĩa: Lệnh kết thúc chương trình con, vi điều khiển trở lại chương trình để tiếp tục thực chương trình 59 Chú ý: lệnh lấy địa lệnh kế lưu nhớ ngăn xếp (khi thực lệnh gọi) trả lại cho ghi PC để tiếp tục thực chương trình Khi viết chương trình phải luôn kết thúc lệnh ret Lệnh trở từ chương trình phục vụ ngắt Cú pháp: RETI Ý nghĩa: Lệnh kết thúc chương trình phục vụ ngắt, vi điều khiển trở lại chương trình để tiếp tục thực chương trình Lệnh nhảy không điều kiện v Lệnh nhảy dùng địa tuyệt đối Cú pháp: AJMP addr11 Ý nghĩa: Vi điều khiển nhảy đến đến địa addr11 để thực chương trình Addr11 thay nhản Nhản hay địa nhảy đến không kbyte 11 bit địa A10 – A0 nạp vào PC, bit cao PC không thay đổi, vi điều khiển nhảy đến thực lệnh địa PC vừa nạp Lệnh khác với lệnh gọi chương trình khơng cất địa trở Nơi nhảy đến không kbyte so với lệnh nhảy v Lệnh nhảy dùng địa dài 16 bit Cú pháp: LJMP addr16 Ý nghĩa: Vi điều khiển nhảy đến địa addr16 để thực chương trình Nơi nhảy đến tùy ý nằm vùng 64 kbyte v Lệnh nhảy tương đối Cú pháp: SJMP rel ;rel [relative: tương đối] Ý nghĩa: Vi điều khiển nhảy đến lệnh có địa tương đối (rel) để thực tiếp Có thể thay rel nhãn Lệnh nhảy tầm vực 256 byte: nhảy tới 128 byte nhảy lùi 128 byte Khi tầm vực nhảy xa ta nên dùng lệnh AJMP hay LJMP 60 v Lệnh nhảy gián tiếp Cú pháp: JMP @A + DPTR Lệnh nhảy đến nơi có địa nội dung A cộng với dptr để tiếp tục thực chương trình Lệnh nhảy có điều kiện v Lệnh nhảy cờ Z =1 (nội dung ghi A 0) Cú pháp: JZ rel (jump zero) Ý nghĩa: Nếu bit Z = vi điều khiển nhảy đến thực chương trình địa rel v Lệnh nhảy cờ Z = (nội dung ghi A khác 0) Cú pháp: JNZ rel Ý nghĩa: Nếu Z = vi điều khiển nhảy đến thực chương trình địa rel v Lệnh nhảy bit carry = Cú pháp: JC rel Ý nghĩa: Nếu bit carry C = vi điều khiển nhảy đến thực chương trình địa rel v Lệnh nhảy bit carry = Cú pháp: JNC rel Ý nghĩa: bit carry C = vi điều khiển nhảy đến thực chương trình địa rel v Lệnh nhảy bit = Cú pháp: JB bit, rel Ý nghĩa: Nếu nội dung bit có địa bit xác định vi điều khiển nhảy đến thực chương trình địa rel v Lệnh nhảy bit = Cú pháp: JNB bit, rel 61 Ý nghĩa: Nếu nội dung bit có địa bit xác định vi điều khiển nhảy đến thực chương trình địa rel v Lệnh nhảy bit = xóa bit Cú pháp: JBC bit, rel Ý nghĩa: bit xác định bit xóa vi điều khiển nhảy đến thực chương trình địa rel Lệnh so sánh nhảy không v So sánh ghi A với ô nhớ nhảy không Cú pháp: CJNE A, direct, rel (compare jump if not equal) Ý nghĩa: Nếu nội dung A khác nội dung nhớ có địa direct lệnh nhảy đến thực lệnh địa rel v So sánh ghi A với liệu tức nhảy khơng Cú pháp: CJNE A, #data, rel Ý nghĩa: Nếu nội dung A khác nội dung data 8bit lệnh nhảy đến thực lệnh địa rel v So sánh ghi Rn với liệu tức nhảy khơng Cú pháp: CJNE Rn, #data, rel Ý nghĩa: Nếu nội dung Rn khác nội dung data 8bit lệnh nhảy đến thực lệnh địa rel v So sánh nhớ có địa Ri với liệu tức nhảy không Cú pháp: CJNE @Ri, #data, rel Ý nghĩa: Nếu nội dung nhớ có địa lưu ghi Ri khác data bit lệnh nhảy đến thực lệnh địa rel Lệnh giảm ghi nhảy Cú pháp: DJNZ Rn, rel (decrement and jump if not zero) 62 Ý nghĩa: Nội dung ghi Rn giảm kết ghi Rn sau giảm khác vi điều khiển thực chương trình địa rel, kết vi điều khiển tiếp tục thực lệnh kế Lệnh giảm ô nhớ trực tiếp nhảy Cú pháp: DJNZ direct, rel Ý nghĩa: Nếu nội dung nhớ có địa direct giảm kết sau giảm khác vi điều khiển thực chương trình địa rel, ngược lại kết vi điều khiển tiếp tục thực lệnh kế Lệnh Nop Cú pháp: NOP Ý nghĩa: Khi gặp lệnh vi điều khiển không làm gì, mục đích lệnh làm tăng khoảng thời gian trễ 4.4 Tóm tắt lệnh vi điều khiển MCS51 Nhóm lệnh số học Cú pháp Mã lệnh D7 D6 D5 D D3 D2 D1 D0 ADD A,Rn ADD A,direct 0 1 n n1 n0 0 0 1 a7 a6 a5 a a3 a2 a1 a0 ADD A,@Ri ADD A,#data 0 0 1 i 0 0 0 d7 d6 d5 d4 d3 d2 d1 d0 ADDC A, Rn ADDC A, direct 0 1 n n1 n0 0 1 1 a7 a6 a5 a a3 a2 a1 a0 ADDC A, @Ri ADDC A, #data 0 1 1 i 0 1 0 d7 d6 d5 d4 d3 d2 d1 d0 SUBB A,Rn SUBB A,direct 0 1 n n1 n0 0 1 a7 a6 a5 a a3 a2 a1 a0 SUBB A,@Ri SUBB A,#data 0 1 i 0 1 0 d7 d6 d5 d4 d3 d2 d1 d0 INC A INC Rn 0 0 0 0 0 n n1 n0 63 Hexa Decimal 28 ⎟ 2F 25 Byte 26 ⎟ 27 24 Byte 38 ⎟ 3F 35 Byte 36 ⎟ 37 34 Byte 98 ⎟ 9F 95 Byte 96 ⎟ 97 94 Byte 04 08 ⎟ 0F Diễn giải (A) ← (A) + (Rn) (A) ← (A) + (direct) (A) ← (A) + ((Ri)) (A) ← (A) + #data (A) ← (A) + (Rn) + (C) (A) ← (A) + (direct) + (C) (A) ← (A) + ((Ri)) + (C) (A) ← (A) + #data +(C) (A) ← (A) - (Rn) - (C) (A) ← (A) - (direct) - (C) (A) ← (A) - ((Ri)) - (C) (A) ← (A) - #data -(C) (A) ← (A) + (Rn) ← (Rn) + 05 Byte 06 ⎟ 07 A3 14 18 ⎟ 1F INC direct 0 0 1 a7 a6 a5 a a3 a2 a1 a0 INC @Ri INC dptr DEC A DEC Rn DEC direct 0 a7 0 0 a6 DEC @Ri MUL AB 0 1 0 1 i 15 Byte 16 ⎟ 17 A4 DIV AB DA A 1 0 1 0 0 84 D4 (A15-8),(B7-0) ← (A)/(B) Content of A BCD Mã lệnh D7 D6 D5 D D3 D2 D1 D0 Hexa Decimal Diễn giải ANL A,Rn ANL A,direct 1 n n1 n0 1 1 a7 a6 a5 a a3 a2 a1 a0 ANL A,@Ri ANL A,#data 1 1 I 1 0 d7 d6 d5 d4 d3 d2 d1 d0 ANL direct, A 1 0 a7 a6 a5 a a3 a2 a1 a0 ANL direct, #data a7 d7 0 a7 58 ⎟ 5F 55 Byte 56 ⎟ 57 54 Byte 52 Byte 53 Byte Byte 48 ⎟ 4F 45 Byte 46 ⎟ 47 44 Byte 42 Byte 43 Byte Byte 68 ⎟ 6F 65 Byte 66 ⎟ 67 0 a5 0 1 a4 0 a3 1 n2 a2 i 1 0 n1 n0 a1 a0 (direct) ← (direct) + ((Ri)) ← ((Ri)) + (dptr) ← (dptr) + (A) ← (A) - (Rn) ← (Rn) - (direct) ← (direct) - ((Ri)) ← ((Ri)) - (B15-8),(A7-0) ← (A)⋅(B) Nhóm lệnh logic Cú pháp ORL A, Rn ORL A, direct a6 d6 1 a6 a5 d5 0 a5 a4 d4 0 a4 a3 d3 a3 a2 d2 n2 a2 a1 d1 n1 a1 a0 d0 n0 a0 ORL A, @Ri ORL A, #data 0 1 I 0 0 d7 d6 d5 d4 d3 d2 d1 d0 ORL direct, A 0 0 a7 a6 a5 a a3 a2 a1 a0 ORL direct, #data a7 d7 0 a7 a6 d6 1 a6 a5 d5 1 a5 a4 d4 0 a4 a3 d3 a3 a2 d2 n2 a2 a1 d1 n1 a1 a0 d0 n0 a0 1 0 1 i XRL A, Rn XRL A, direct XRL A, @Ri 64 (A) ← (A) AND (Rn) (A) ← (A) AND (direct) (A) ← (A) AND ((Ri)) (A) ← (A) AND #data (direct)←(direct) and (A) (direct)←(direct) and #data (A) ← (A) OR (Rn) (A) ← (A) OR (direct) (A) ← (A) OR ((Ri)) (A) ← (A) OR #data (direct)←(direct) OR (A) (direct)←(direct) OR #data (A) ← (A) XOR (Rn) (A) ← (A) XOR (direct) (A) ← (A) XOR ((Ri)) XRL A, #data 1 0 0 d7 d6 d5 d4 d3 d2 d1 d0 XRL direct, A 1 0 a7 a6 a5 a a3 a2 a1 a0 XRL direct, #data a7 d7 1 a6 d6 1 a5 d5 1 a4 d4 a3 d3 0 a2 d2 1 a1 d1 0 a0 d0 0 64 Byte 62 Byte 63 Byte Byte E4 F4 RL A 0 0 1 23 RLC A 0 1 0 1 33 The contents of the accumulator and carry are rotated left by one bit RR A 0 0 0 1 03 The contents of the accumulator are rotated right by one bit RRC A 0 0 1 13 The contents of the accumulator and carry are rotated right by one bit SWAP A 1 0 0 C4 (A3-0) ↔ (A7-4) CLR A CPL A (A) ← (A) XOR #data (direct)←(direct) XOR (A) (direct)←(direct) XOR #data (A) ← (A) ← ( 𝐴) lệnh not hay bù The contents of the accumulator are rotated left by one bit Nhóm lệnh di chuyển liệu Cú pháp MOV A,Rn MOV A,direct MOV A,@Ri MOV A, #data Mã lệnh D7 D6 D5 D D3 D2 D1 D0 1 a7 d7 1 a6 1 d6 1 a5 1 d5 0 a4 d4 a3 0 d3 n2 a2 1 d2 n1 a1 d1 n0 a0 I d0 MOV Rn, A MOV Rn,direct 1 1 n n1 n0 1 n n1 n0 a7 a6 a5 a a3 a2 a1 a0 MOV Rn #data 1 1 n n1 n0 d7 d6 d5 d4 d3 d2 d1 d0 MOV direct,A 1 1 1 a7 a6 a5 a a3 a2 a1 a0 MOV direct,Rn 0 n n1 n0 a7 a6 a5 a a3 a2 a1 a0 65 Hexa decimal E8 ⎟ EF E5 Byte E6 ⎟ E7 74 Byte F8 ⎟ FF A8 ⎟ AF Byte 78 ⎟ 7F Byte F5 Byte 88 ⎟ 8F Byte Diễn giải (A) ← (Rn) (A) ← (direct) (A) ← ((Ri)) (A) ← #data (Rn) ← (A) (Rn) ← (direct) (Rn) ← #data (direct) ← (A) (direct) ← (Rn) MOV direct,direct MOV @Ri, #data 1 1 i d7 d6 d5 d4 d3 d2 d1 d0 MOV dptr,#data16 d15 d7 d14 d6 0 d13 d5 d12 d4 d11 d3 0 d10 d9 d2 d1 d8 d0 85 Byte Byte 86 ⎟ 87 Byte 75 Byte Byte F6 ⎟ F7 A6 ⎟ A7 Byte 76 ⎟ 77 Byte 90 Byte Byte 93 0 0 1 83 MOVX A, @Ri 1 0 i E2 ⎟ E3 MOVX A,@dptr 1 0 0 E0 MOVX @Ri, A 1 1 0 i F2 ⎟ F3 MOVX @ dptr, A 1 1 0 0 F0 PUSH direct a7 a7 1 a6 a6 a5 a5 0 a4 a4 0 a3 a3 a2 a2 n2 a1 a1 n1 a0 a0 n0 C0 Byte D0 Byte MOV direct,@Ri MOV direct,#data MOV @Ri, A MOV @Ri, direct MOVC A, @A + dptr MOVC A, @A + PC POP direct XCH A, Rn XCH A, direct a7 a7 a7 a6 a6 a6 a5 a5 a5 a4 a4 a4 a3 a3 a3 a2 a2 a2 a1 a1 a1 a0 a0 I a0 a7 d7 1 a7 a6 d6 a6 a5 d5 1 a5 a4 d4 a4 a3 d3 0 a3 a2 d2 1 a2 a1 d1 1 a1 a0 d0 I I a0 C8 ⎟ CF C5 Byte (direct) ← (direct) (source) (destination) (direct) ← ((Ri)) (direct) ← #data ((Ri)) ← (A) ((Ri)) ← (direct) ((Ri)) ← (data) (dptr) ← #data 15-0 (dpH) ← #data 15-8 (dpL) ← #data 7-0 (A) ← ((A) + (dptr)) External Ram (A) ← ((A) + (PC)) External Ram (A)←((Ri)) External Ram (A)←((dptr)) External Ram ((Ri)) ← (A) ((dptr)) ← (A) (SP) ← (SP) + ((SP)) ← (direct) (direct) ← ((SP)) (SP) ← (SP) - (A) ↔ (Rn) XCH A, @Ri 1 0 1 a7 a6 a5 a a3 a2 a1 a0 1 0 1 i C6 ⎟ C7 (A) ↔ ((Ri)) XCHD A, @Ri D6 ⎟ D7 (A3-0) ↔ ((Ri3-0)) 1 1 i (A) ↔ (direct) Nhóm lệnh xử lý bit Cú pháp CLR C CLR bit D7 Mã lệnh D6 D5 D4 D3 D2 D D0 1 0 0 1 1 0 0 b7 b6 b5 b b3 b2 b1 b0 66 Hexa decimal C3 C2 Byte Diễn giải (C) ← (bit) ← SETB C SETB bit 1 0 1 1 0 b7 b6 b5 b b3 b2 b1 b0 CPL C CPL bit 1 0 1 1 0 b7 b6 b5 b b3 b2 b1 b0 ANL C,bit 0 0 b7 b6 b5 b b3 b2 b1 b0 ANL C,/bit 1 0 0 b7 b6 b5 b b3 b2 b1 b0 ORL C,bit 1 0 b7 b6 b5 b b3 b2 b1 b0 ORL C,/bit 1 0 0 b7 b6 b5 b b3 b2 b1 b0 MOV C,bit 1 0 b7 b6 b5 b b3 b2 b1 b0 MOV bit,C 0 0 b7 b6 b5 b b3 b2 b1 b0 D3 D2 Byte B3 B2 Byte 82 Byte B0 Byte 72 Byte A0 Byte A2 Byte 92 Byte (C) ← (bit) ← (C) ← (𝐶) (bit) ← ( bit ) (C) ← (C) AND (bit) (C) ←(C) AND ( bit ) (C) ← (C) OR (bit) (C) ←(C) OR (C) ← (bit) ( bit ) (bit) ← (C) Nhóm lệnh rẽ nhánh Cú pháp ACALL addr 11 Mã lệnh D7 D6 D5 D4 D3 D2 D D0 A10 a9 a8 0 a7 a6 a5 a a3 a2 a1 a0 Hexa decimal Byte Byte Diễn giải (PC) ← (PC) + (SP) ← (SP) + ((SP)) ← (PC7-0) (SP) ← (SP) + ((SP)) ← (PC15-8) (PC) ← page address LCALL addr 16 0 0 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a a3 a2 a1 a0 12 Byte Byte (PC) ← (PC) + (SP) ← (SP) + ((SP)) ← (PC7-0) (SP) ← (SP) + ((SP)) ← (PC15-8) (PC) ← addr15-0 RET 0 0 22 (PC15-8) ← ((SP)) (SP) ← (SP) - (PC7-0) ←((SP)) (SP) ← (SP) - RETI 0 1 0 32 (PC15-8) ← ((SP)) (SP) ← (SP) - (PC7-0) ←((SP)) (SP) ← (SP) - 67 AJMP addr 11 a10 a9 a8 0 0 a7 a6 a5 a a3 a2 a1 a0 0 0 0 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a a3 a2 a1 a0 0 0 0 r7 r6 r5 r4 r3 r2 r1 r0 1 0 1 1 0 0 r7 r6 r5 r4 r3 r2 r1 r0 Byte Byte 02 Byte Byte 80 Byte 73 60 Byte JNZ rel 1 r7 r6 r5 r4 r3 0 r2 r1 r0 70 Byte JC rel 0 r7 r6 r5 r4 r3 0 r2 r1 r0 40 Byte JNC rel 1 r7 r6 r5 r4 r3 0 r2 r1 r0 50 Byte (PC) ← (PC) + IF (C) = then (PC)←(PC) + rel JB bit, rel b7 r7 b7 r7 b7 r7 b0 r0 b0 r0 b0 r0 20 Byte Byte 30 Byte Byte 10 Byte Byte (PC) ← (PC) + IF (bit) =1 then (PC)←(PC) + rel (PC) ← (PC) + IF (bit) = then (PC)←(PC) + rel (PC) ← (PC) + IF (bit)= then (bit) ← (PC)←(PC) +rel CJNE A, direct, rel 1 1 a7 a6 a5 a a3 a2 a1 a0 r7 r6 r5 r4 r3 r2 r1 r0 B5 Byte Byte CJNE A, #data, rel 1 1 0 d d d d d d d d0 r7 r6 r5 r4 r3 r2 r1 r0 B4 Byte Byte (PC) ← (PC) + IF (direct) < (A) then (C)←0 and (PC)←(PC) + rel IF (direct) > (A) then (C)←1 and (PC)←(PC) + rel (PC) ← (PC) + IF #data < (A) then (C)←0 and (PC)←(PC) + rel IF #data > (A) then (C)←1 and (PC)←(PC) + rel LJMP addr 16 SJMP rel JMP @A + dptr JZ rel JNB bit, rel JBC bit, rel b6 r6 b6 r6 b6 r6 b5 r5 b5 r5 b5 r5 b4 r4 b4 r4 b4 r4 0 b3 b2 r3 r2 0 b3 b2 r3 r2 0 b3 b2 r3 r2 b1 r1 b1 r1 b1 r1 68 (PC) ← (PC) + (PC) ← page address (PC) ← addr15-0 2 (PC) ← (PC) + (PC) ← (PC) + rel (PC) ← (A) + (dptr) (PC) ← (PC) + IF (A) = then (PC)←(PC) + rel (PC) ← (PC) + IF (A) ≠ then (PC)←(PC) + rel (PC) ← (PC) + IF (C) = then (PC)←(PC) + rel CJNE Rn,#data, rel 1 n2 n1 n0 d d d d d d d d0 r7 r6 r5 r4 r3 r2 r1 r0 B8 ⎟ BF Byte Byte CJNE CJNE @Ri,#data, rel 1 1 d d d d d d d d0 r7 r6 r5 r4 r3 r2 r1 r0 B6 ⎟ B7 Byte Byte DJNZ Rn, rel n2 n1 n0 D8 ⎟ DF DJNZ direct, rel 1 1 a7 a6 a5 a a3 a2 a1 a0 D5 Byte Byte NOP 1 r7 r6 r5 r4 r3 r2 r1 r0 0 0 0 0 00 (PC) ← (PC) + IF #data < (Rn) then (C)←0 and (PC)←(PC) + rel IF #data > (Rn) then (C)←1 and (PC)←(PC) + rel (PC) ← (PC) + IF #data ((Ri)) then (C)←1 and (PC)←(PC) + rel (PC) ← (PC) + (Rn) ← (Rn) – IF ((Rn)) ≠ then (PC)←(PC) + rel (PC) ← (PC) + (direct) ← (direct) – IF (direct) ≠ then (PC)←(PC) + rel (PC) ← (PC) + CÂU HỎI ÔN TẬP Nêu khái niệm chương trình, lệnh, tập lệnh? Nêu kiểu định địa truy xuất nhớ vi điều khiển cho ví dụ? Hãy cho biết có lệnh dài byte, byte kể tên chúng? 69 ... bên Vi xử lý hoạt động, cho Vi xử lý thực lệnh cộng số nhị phân chứa ghi: ghi Accumulator (gọi tắt A) = 11 01 111 02 ghi D = 11 01 1 010 2 Phép cộng hai số nhị phân: + 11 01 111 0 11 01 1 010 10 11 1000... 21 Hãy thực phép cộng số nhị phân bit Sau cộng xong số này, xác định ảnh hưởng phép cộng đến bit Zero (Z), bit Negative (N), bit Carry (C) 0000 11 11 0 011 10 11 + 11 11 0000 + 11 00 010 1 10 011 1... hưởng đến ghi trạng thái, ví dụ thực lệnh cộng liệu bit, kết lớn 11 111 111 2 bit carry mang giá trị Ngược lại kết phép cộng nhỏ 11 111 111 2 bit carry Ví dụ lệnh tăng hay giảm giá trị ghi, kết ghi khác

Ngày đăng: 08/06/2020, 19:13

TỪ KHÓA LIÊN QUAN