

|
# |
|
Muốn kiếm tiền, trước hết hăy cho đi những ǵ đang có |
1. Kiến trúc vi điều khiển 8051
1.3 Truy xuất địa chỉ
8051 có các kiểu truy xuất địa chỉ khác nhau: · Thanh ghi (Register) · Trực tiếp (Direct) · Gián tiếp (Indirect) · Tức thời (Immediate) · Tương đối (Relative) · Tuyệt đối (Absolute) · Dài (Long) · Chỉ số (Indexed) Truy xuất địa chỉ thanh ghi
|
|
Họ vi điều khiển 8051 |
|
8051 cho phép truy xuất 8 thanh ghi “làm việc”, được đánh số từ R0 → R7. Các lệnh sử dụng kiểu định địa chỉ thanh ghi được mă hóa bằng các dùng 3 bit thấp nhất của opcode( của lệnh) để chỉ ra 1 thanh ghi bên trong không gian địa chỉ logic này. Vậy : 1 mă chức năng + địa chỉ toán hạng → 1 lệnh ngắn 1 byte. Truy xuất địa chỉ kiểu trực tiếp
|
|
Kiểu định địa chỉ trực tiếp được sử dụng để truy xuất các biến nhớ hoặc các thanh ghi trên chip. Một byte thêm vào tiếp theo opcode dùng để xác định địa chỉ. Trong 8051 có 128 byte bộ nhớ RAM. Bộ nhớ RAM được gán địa chỉ từ 00H đến FFH và được phân chia như sau: · Các ngăn nhớ từ 00H đến 1FH được gán cho các băng thanh ghi và ngăn xếp · Các ngăn nhớ từ 20H đến 2FH được dành cho không gian định địa chỉ bít để lưu dữ liệu theo từng bit · Các ngăn nhớ từ 30H đến 7FH là không gian để lưu dữ liệu có kích thước 1 byte Chế độ định địa chỉ trực tiếp có thể truy cập toàn bộ không gian của bộ nhớ RAM. Tuy nhiên, chế độ này thường được dùng để truy cập các ngăn nhớ RAM từ 30H đến 7FH, v́ thực tế đối với không gian nhớ danh cho băng thanh ghi th́ đă được truy cập bằng tên thanh ghi như R0- R7. ở chế độ định địa chỉ trực tiếp , địa chỉ ngăn nhớ RAM chứa dữ liệu là toán hạng của lệnh. Ví dụ: MOV R0, 40 ; sao nội dung ngăn nhớ 40H của RAM vào R0 MOV R4, 7FH ; chuyển nội dung ngăn nhớ 7FH vào R4. Một ứng dụng quan trọng của chế độ định địa chỉ trực tiếp là ngăn xếp. Trong họ 8051, chỉ có chế độ định địa chỉ trực tiếp là được phép cất và lấy dữ liệu từ ngăn xếp Truy xuất địa chỉ kiểu gián tiếp
|
|
Ở chế độ này, thanh ghi được dùng để trỏ đến dữ liệu có trong bộ nhớ. Nếu dữ liệu có trên chip CPU th́ chỉ các thanh ghi R0 và R1 mới được sử dụng, và như vậy cũng có nghĩa là không thể dùng các thanh ghi R2-R7 để trỏ đến địa chỉ của toán hạng ở chế độ định địa chỉ này. Nếu R0 và R1 được dùng làm con trỏ, nghĩa là chúng lưu địa chỉ của ngăn nhớ RAM th́ trước các thanh ghi cần đặt dấu " @" như các ví dụ sau: MOV A, @R0 ; chuyển ngăn nhớ RAM có địa chỉ ở R0 vào A MOV @R1, B ; chuyển B vào ngăn nhớ RAM có địa chỉ ở R1 Chú ư: ở đây R0 cũng như R1 đều có dấu "@" đứng trước. Nếu không có dấu "@" đứng trước th́ đó là lệnh chuyển nội dung thanh ghi R0 và R1 chứ không phải dữ liệu ngăn nhớ có địa chỉ trong R0 và R1. Một trong những ưu diểm của chế độ định địa chỉ gián tiếp là cho phép truy cập dữ liệu linh hoạt hơn so với chế độ định địa chỉ trực tiếp. Tuy nhiên R0 và R1 là các thanh ghi 8 bit, nên chúng chỉ được phép truy cập đến các ngăn nhớ RAM trong, từ địa chỉ 30H đến 7FH và các thanh ghi SFR. Trong thực tế, có nhiều trường hợp cần truy cập dữ liệu được cất ở RAM ngoài hoặc không gian ROM trên chip. Trong những trường hợp đó chúng ta cần sử dụng thanh ghi 16 bit DPTR. Truy xuất địa chỉ kiểu tức thời
|
|
Khi toán hạng là một hằng số thay v́ là một biến, hằng số này có thể đưa vào lệnh và đây là byte dữ liệu tức thời. Trong hợp ngữ, các toàn hạng tức thời được nhận biết nhờ vào kư tự ‘# ‘ đặt trước chúng. Toán hạng này có thể là một hằng số học, một biến hoặc một biểu thức số học sử dụng các hằng số, các kư hiệu và các toán tử. Tŕnh dịch hợp ngữ tính giá trị và thay thế dữ liệu tức thời vào trong lệnh. Ví dụ lệnh : MOV A, #12 ;Nạp giá trị 12(OCH) vào thanh chứa A Tất cả các lệnh sử dụng kiểu định địa chỉ tức thời đều sử dụng hằng dữ liệu 8 bit làm dữ liệu tức thời. Có một ngoại lệ khi ta khởi động con trỏ dữ liệu 16-bit DPTR, hằng địa chỉ 16 bit được cần đến. Truy xuất địa chỉ kiểu tương đối
|
|
Kiểu định địa chỉ này được sử dụng với các lệnh ACAll và AJMP. Đây là các lệnh 2 byte cho phép rẽ nhánh chương tŕnh trong trang 2k hiện hành của bộ nhớ chương tŕnh bằng cách cung cấp 11 bit thấp của địa chỉ đích. Trong đó có 3 bit cao (A8-A10) và 8 bit thấp (A0-A7) thành lập byte thứ 2 của lệnh Truy xuất địa chỉ kiểu dài
|
|
Kiểu định địa chỉ tương đối chỉ được sử dụng cho các lệnh nhảy. Một địa chỉ tương đối là một giá trị 8 bit có dấu. Giá trị này được cộng với một bộ đếm chương tŕnh để tạo ra địa chỉ của lệnh tiếp theo cần thực thi. Định địa chỉ tương đối có điểm lợi là cung cấp cho ta mă không phụ thuộc vào vị trí, nhưng lại có điểm bất lợi là các đích nhảy bị giới hạn trong tầm. Truy xuất địa chỉ kiểu tuyệt đối
|
|
Kiểu định địa chỉ dài chỉ được dùng cho các lệnh LCALL và LJMP. Các lệnh 3 byte này chứa địa chỉ đích 16 bit. Lợi ích của kiểu định địa chỉ này là sử dụng hết toàn bộ không gian nhớ chương tŕnh 64K, nhưng lại có điểm bất lợi là lệnh dài đến 3-byte và phụ thuộc vào vị trí. Truy xuất địa chỉ kiểu chỉ số
|
|
Chế độ định địa chỉ chỉ số được sử dụng rộng răi khi truy cập các phần tử dữ liệu của bảng trong không gian ROM chương tŕnh của 8051. Lệnh được dùng cho mục đích này là "MOVC A, @A+DPTR". Thanh ghi 16 bit DPTR và thanh ghi A được dùng để tạo ra địa chỉ của phần tử dữ liệu được lưu trong ROM trên chip. ở lệnh này, nội dung của A được cộng với nội dung thanh ghi 16- bit DPTR để tạo ra địa chỉ 16 bit. |