Bài giảng Vi điều khiển 8051 - Bài 3: Lập trình hợp ngữ cho bộ vi điều khiển 8051
lượt xem 0
download
Bài giảng Vi điều khiển 8051 - Bài 3: Lập trình hợp ngữ cho bộ vi điều khiển 8051 gồm có những nội dung chính sau: Mã máy; các chế độ định địa chỉ của 8051; các lệnh Jump, Loop, Call; chương trình con; các vòng lặp tạo thời gian giữ chậm đơn giản. Mời các bạn cùng tham khảo để biết thêm nội dung chi tiết!
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Vi điều khiển 8051 - Bài 3: Lập trình hợp ngữ cho bộ vi điều khiển 8051
- Lập trình hợp ngữ cho bộ VĐK 8051 Bài 3 Bộ môn TĐ Khoa KTĐK
- Các chủ đề • Mã máy • Các chế độ định địa chỉ của 8051 • Các lệnh Jump, Loop, Call • Chương trình con • Các vòng lặp tạo thời gian giữ chậm đơn giản
- Mã đối tượng của 8051 • Trình hợp dịch sẽ chuyển mã hợp ngữ sang mã máy/mã đối tượng • Mã đối tượng là một dãy dài các lệnh của máy • Mỗi lệnh của máy có thể là một hoặc nhiều byte • Mỗi lệnh của máy có thể là giá trị nhị phân và được viết dưới dạng ký hiệu của số Hex
- Mã đối tượng của 8051 • Trình hợp dịch cung cấp một tệp .lst trong khi hợp dịch • Lệnh được dịch sang mã máy theo từng dòng đã viết
- Mã đối tượng của 8051
- Các chế độ định địa chỉ của 8051 • CPU có thể truy cập dữ liệu theo một số cách sau – Dữ liệu xác định trực tiếp trong câu lệnh – Sử dụng các chế độ định địa chỉ khác nhau để lưu giữ dữ liệu vào bộ nhớ mã lệnh và bộ nhớ dữ liệu • Có 5 chế độ định địa chỉ – Tức thời – Thanh ghi – Trực tiếp – Gián tiếp qua thanh ghi – chỉ số
- 1. Chế độ định địa chỉ tức thời • Toán hạng (dữ liệu) được xác định trực tiếp trong câu lệnh (mã lệnh) • Toán hạng là một hằng số, nhận được trong khi hợp dịch • Trước dữ liệu tức thời phải có dấu “#” • Ví dụ:
- 2.Chế độ định địa chỉ qua thanh ghi • Bao gồm các thanh ghi được sử dụng để lưu dữ liệu • Đưa toán hạng trong thanh ghi và chuyển nó vào thanh ghi đã chỉ ra trong câu lệnh • Thanh ghi nguồn và đích phải phù hợp về kích thước • Do đó không thể có lệnh chuyển từ một thanh ghi bất kỳ tới một thanh ghi – Mov R4, R7 ; không hợp lệ – Kiểm tra danh sách lệnh trước khi sử dụng – Hợp dịch sẽ gây lỗi trong các trường hợp (…)
- 3.Chế độ định địa chỉ trực tiếp • Thực hiện với các dữ liệu được lưu giữ trong RAM và các thanh ghi – Mọi vị trí bộ nhớ có thể truy cập được thông qua các địa chỉ – Tương tự với các thiết bị ngoại vi (SFR), các thanh ghi, các cổng ở 8051 • Sử dụng trực tiếp địa chỉ của toán hạng trong lệnh – Mov a, 40H ; A ← mem[40H] (không có dấu # trước 40H) • Địa chỉ thanh ghi là địa chỉ trực tiếp – Mov A, 4H ; 4H là địa chỉ của R4 – Mov A, R4 ; giống lệnh trước nhưng có sự khác nhau về ; mã lệnh • Mọi thanh ghi và SFR đều có địa chỉ • Ngăn xếp ở 8051 chỉ sử dụng trong các chế độ định địa chỉ trực tiếp
- 4.Chế độ gián tiếp qua thanh ghi • Thanh ghi được sử dụng như là con trỏ – Thanh ghi lưu địa chỉ của dữ liệu • Chỉ có R0, R1 và DPTR có thể được sử dụng cho mục đích này • R0 và R1 có thể được sử dụng cho bộ nhớ trong (256 byte bao gồm cả SFR) hoặc từ 00H tới FFH của bộ nhớ ngoài – Mov A, @R0 ; A←internal_mem[R0] – Mov @R1, A ; A←internal_mem[R1] – Movx A, @R0 ; A←external_mem[R0] • DPTR có thể được sử dụng cho bộ nhớ ngoài, cho cả bộ nhớ – Movx A, @DPTR ; A←external_mem[DPTR] – Movx @DPTR, A ; ngược lại
- 5.Chế độ định địa chỉ chỉ số • Sử dụng một thanh ghi để lưu con trỏ cơ sở và một thanh ghi lưu giá trị offset • Địa chỉ thực là sum=base+offset – Chuyển byte mã lệnh có liên quan tới DPTR vào A. Địa chỉ thực là DPTR +A • Movc A, @A+DPTR ;A← ext_code_mem[(A+PC)] • Được sử dụng phổ biến để truy cập các dữ liệu của bảng, các mảng dữ liệu, tạo tham số … trong bộ nhớ chương trình (ROM)
- Ví dụ về chế độ định địa chỉ chỉ số • Lập trình để đọc giá trị x từ P1 và gửi x 2 tới P2 ORG 0 ; assembler directive mov DPTR, #LUT ; 300H is the LUT address mov A, #0FFH mov P1, A ; program the port P1 to input data Again: mov A, P1 ; read x movc A, @A+DPTR ; get x2 from LUT mov P2, A ; output x2 to P2 sjmp again ; for (1) loop ORG 300H ;Look-up Table starts at 0x0300 LUT: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
- Lệnh điều khiển chương trình • Rẽ nhánh không điều kiện – Ajmp addr11 ; nhảy tuyệt đối – Ljmp addr16 ; nhảy dài (3 byte = 1byte code + 2byte địa chỉ đích) – Sjmp rel ; nhảy ngắn tới địa chỉ thực – Jmp @A+DPTR ; nhảy gián tiếp • Rẽ nhánh có điều kiện – Jz, jnz rel ; nhảy ngắn có điều kiện tới địa chỉ thực – Djnz rel ; giảm và nhảy nếu khác 0 – Cjne rel ; so sánh và nhảy nếu không bằng nhau • Gọi chương trình con – Acall addr11 ; gọi chương trình con tuyệt đối – Lcall addr16 ; gọi chương trình con dài – Ret ; trở về từ lệnh gọi chương trình con – Reti ; trở về từ ISV
- Rẽ nhánh của chương trình - Địa chỉ đích • Địa chỉ đích có thể là: – Tuyệt đối: một địa chỉ vật lý đầy đủ • Addr16: địa chỉ 16 bit, địa chỉ bất kỳ trong 64K • Addr11: địa chỉ 11 bit, địa chỉ bất kỳ trong 2K – Thực: địa chỉ thực (tăng hoặc giảm) -128 byte tới 127 byte từ vị trí mã lệnh hiện tại • Tính địa chỉ đích để nhảy – PC của lệnh kế tiếp + địa chỉ thực – Đối với nhảy lùi, bỏ qua cờ nhớ • PC=15H, SJMP 0FEH • Địa chỉ là 15+FE = 13H • Về cơ bản nhảy tới lệnh kế tiếp trừ 2 (so với lệnh hiện thời)
- Các lệnh nhảy có điều kiện • jz, jnz: điều kiện là A==0 – Kiểm tra để biết A có bằng 0 – Jz nhảy nếu A=0 và jnz nhẩy nếu A≠0 • djnz: giảm 1 và nhảy nếu không bằng 0 – dinz Rn, rel – djnz direct, rel • jnc: điều kiện là cờ nhớ CY – jc rel – Jnc rel • Cjne: so sánh và nhảy nếu không bằng nhau – Cjne A, direct, rel – Cjne Rn, #data, rel – cjne @Rn, #data, rel
- Vòng lặp sử dụng lệnh djnz • Cộng 3 vào A 10 lần mov A, #0 ; xoá A mov R2, #10 ; R2 ← 10 AGAIN: add A, #03 ; cộng 3 vào thanh ghi A djnz R2, AGAIN ; lặp lại cho đến khi R2==0 mov R5, A ; lưu kết quả vào R5 • Lặp với vòng lặp sử dụng djnz mov R3, #100 loop1: mov R2, #10 ; lặp lại 1000 lần loop2: nop ; không thực hiện djnz R2, loop2 ; lặp lại loop2 cho đến khi R2==0 djnz R3, loop1 ; lặp lại loop1 cho đến khi R3==0
- Các lệnh nhảy không điều kiện • LJMP addr16 – Lệnh nhảy dài. Nhảy tới địa chỉ đich 2 byte – Lệnh 3 byte • SJMP rel – Nhảy tới địa chỉ thực từ PC+127 tới PC-128 – Nhảy tới PC+127 (00H – 7FH) – Nhảy tới PC-128 (80H - FFH)
- Các lệnh gọi • Chương trình con – Có thể sử dụng lại các đoạn lệnh • LCALL addr16 – Lệnh gọi dài. Đây là lệnh 3 byte – Gọi bất kỳ một chương trình con nằm trong không gian mã lệnh 64K – PC được lưu trong ngăn xếp • ACALL addr11 – Lệnh 2 byte – Gọi bất kỳ một chương trình con trong không gian mã lệnh 2K – Giống nội dung của LCALL – Tiết kiệm bộ nhớ ROM cho các thiết bị có bộ nhớ ROM nhỏ hơn 64K • RET – Trở về từ vị trí gọi chương trình con, Nạp lại PC từ ngăn xếp
- Chu kỳ máy • Số chu kỳ clock cần sử dụng để thực hiện một lệnh • Với 8051, một chu kỳ lệnh cần ít nhất 12 chu kỳ clock • Thời gian trên một chu kỳ máy – Tmc=số clock trên chu kỳ máy/ tần số clock – Với 8051 sử dụng tần số clock là 11.0592MHz • Tmc=12/11.0592 = 1,085µs • Thời gian để thực hiện một lệnh – Tinstr=chu kỳ máy cần thực hiện một lệnh * Tmc – Với lệnh trống, chu kỳ máy =1. Do đó • Tinstr = 1*1.085 =1,085µs
- Các vòng lặp giữ chậm đơn giản • Tìm thời gian giữ chậm của chương trình con DELAY: mov R3, #200 ; 1 chu kỳ máy HERE: djnz R3, HERE ; 2 chu kỳ máy RET ; 1 chu kỳ máy • Tính – Tổng số chu kỳ máy =200*2+1+1=402 – Thời gian =402*1,085µs (clk=11.0592) = 436,17µs • Tương tự như vậy, thời gian giữ chậm có thể nhận được bất kỳ với cách tổ chức các vòng lặp tương ứng • Để có thời gian giữ chậm lâu hơn, sử dụng các bộ định thời
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Vi điều khiển 8051
30 p | 569 | 207
-
Đề cương bài giảng: Ứng dụng lập trình C cho vi điều khiển 8051
81 p | 452 | 205
-
Bài 5: Mạch vi điều khiển
8 p | 510 | 179
-
Bài giảng Vi xử lý – Vi điều khiển
222 p | 165 | 26
-
BÀI 7.1: LẬP TRÌNH HỢP NGỮ
44 p | 134 | 18
-
Bài giảng Lập trình Assembly: Chương 7 - Nguyễn Văn Thọ
14 p | 151 | 18
-
Bài giảng Vi xử lí: Chương 3 - Hồ Trung Mỹ
50 p | 62 | 15
-
Bài giảng Vi xử lý: Chương 3.1 - Bùi Minh Thành
101 p | 119 | 11
-
Bài giảng Vi xử lý: Chương 3.7 - Bùi Minh Thành
26 p | 104 | 7
-
Bài giảng Vi xử lý: Chương 3.8 - Bùi Minh Thành
49 p | 87 | 6
-
Bài giảng Vi xử lý: Chương 3.9 - Bùi Minh Thành
48 p | 82 | 6
-
Bài giảng Vi xử lý: Chương 3.6 - Bùi Minh Thành
39 p | 79 | 6
-
Bài giảng Hệ nhúng: Chương 3 - Phạm Văn Thuận
163 p | 110 | 3
-
Xây dựng các bài tập thực hành trên Kit phát triển AT89S52 cho môn Hệ thống nhúng
6 p | 58 | 2
-
Bài giảng Hệ nhúng: Chương 3 - Đỗ Công Thuần
66 p | 15 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn