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

Tài liệu Lập trình hợp ngữ cho bộ VĐK 8051 pptx

21 842 2

Đ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

Thông tin cơ bản

Tiêu đề Lập Trình Hợp Ngữ Cho Bộ VĐK 8051
Trường học Khoa Kỹ Thuật Điện Tử
Chuyên ngành Lập Trình Hợp Ngữ
Thể loại Bài Giảng
Định dạng
Số trang 21
Dung lượng 158,77 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 •

Trang 1

Lập trình hợp ngữ cho bộ

VĐK 8051

Bài 3

Bộ môn TĐ Khoa KTĐK

Trang 3

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 y g

và được viết dưới dạng ký hiệu của số Hex

Trang 4

Mã đối tượng của 8051

Trang 5

Mã đối tượng của 8051

Trang 6

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

Trang 8

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ỳ

ới ộ h h hi

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 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 (…)

Trang 9

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 t ới á thiết bị i i (SFR) á th h hi á ổ

– 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)

– 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ề

– 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 địaNgăn xếp ở 8051 chỉ sử dụng trong các chế độ định địa chỉ trực tiếp

Trang 10

ế ế

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 Movx A, @R0 ; A←external mem[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 A, @DPTR ; A←external_mem[DPTR]

– Movx @DPTR, A ; ngược lại

Trang 11

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 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)

Trang 12

Ví dụ về chế độ định địa chỉ chỉ số

• Lập trình để đọc giá trị x từ P1 và gửi x2 tới P2

ORG 0 ; assembler directive

ORG 300H ;Look-up Table starts at 0x0300

LUT: DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81

Trang 13

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 j p ; nhảy dài (3 byte = 1byte code + 2byte địa chỉ đích) y ( y y y ) – 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

– Jz, jnz rel ; nhảy ngắn có điều kiện tới địa chỉ thực

• 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

– Reti Reti ; trở về từ ISV ; trở về từ ISV

Trang 14

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

b t từ ị t í ã lệ h hiệ t i

• Tính địa chỉ đích để nhảy

– PC của lệnh kế tiếp + địa chỉ thựcệ p ị ự

– Đố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)

Trang 15

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

– 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

• 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

Trang 16

djnz R2, AGAIN ; lặp lại cho đến khi R2==0

R5 A l kết ả à R5

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 j , p ; ặp ạ p djnz R3, loop1 ; lặp lại loop1 cho đến khi R3==0

Trang 17

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 nhảy dài Nhảy tới địa chỉ đich 2 byte

Trang 18

Các lệnh gọi

• Chương trình cong

– 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ọ y ệ y

– 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ố ội d ủ LCALL

– 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

Trang 19

• Thời gian trên một chu kỳ máy

– Tmc=số clock trên chu kỳ máy/ tần số clockỳ y

– 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

Trang 20

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

RET ; 1 chu kỳ máy

• Để có thời gian giữ chậm lâu hơn sử dụng các

• Để có thời gian giữ chậm lâu hơn, sử dụng các

bộ định thời

Trang 21

Ví dụ về tạo thời gian trễ

• Thời gian thực hiện vòng lặp L3:

acall DELAY CPL A

• Thời gian thực hiện lệnh C1 và C2 ở dầu và cuối L2:

T3 = 3*240*1,085

CPL A sjmp Start DELAY: ; giu cham 1s

mov R5, #4 L1: mov R6, #240 ; C0

• Tổng thời gian do L2, L3 thực hiện

• L1 thực hiện lại L2, L3 4 lần:

T5 = 4* T4

DJNZ R7, L3 DJNZ R6, L2 ; C2 DJNZ R5, L1 ; C3 RET

END

Ngày đăng: 23/12/2013, 20:15

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w