Hầu hết câc bộ nhớ câc vi xử lý đều dựa theo cấu trúc Von Neuman về phđn chia vùng nhớ cho chương trình vă dữ liệu. Điều năy cho phĩp chương trình được lưu giữ trong đĩa vă chỉ load văo bộ nhớ mỗi khi thi hănh. Do đó dữ liệu vă chương trình đều nằm trong RAM. Đối với vi điều khiển thì khâc, CPU được coi lă hệ thống mây tính. Nó lă trung tđm của thiết bị điều khiển. Nó bị giới hạn về bộ nhớ. Chương trình điều khiển nằm trong ROM.
Vì lý do năy mă bộ nhớ của vi điều khiển 8051 dựa theo cấu trúc Harvard để phđn chia vùng chương trình (code mê lệnh) vă dữ liệu. Như đê mô tả ở bảng 4.2 cả hai vùng mê lệnh vă dữ liệu đều nằm ở bộ nhớ nội. Tuy nhiín cả hai cũng có thể mở rộng ra bộ nhớ ngoăi, có thể lín đến 64Kb cho vùng địa chỉ.
Bộ nhớ nội gồm có ROM nội (chỉ đối với 8051/8052) vă RAM ngoại. RAM chia thănh nhiều vùng: vùng dănh cho mục đích năo đó, vùng có thể truy xuất bit, câc khối (bank) thanh ghi, vă câc thanh ghi đặc biệt.
Có hai điều đâng lưu ý ở đđy: (a) câc thanh ghi vă câc cổng xuất nhập đều được phđn chia địa chỉ vă có thể truy xuất chúng như những vùng khâc. (b) stack thường được phđn chia văo RAM nội hơn lă vùng nhớ ngoăi. Đđy lă một đặc điểm của vi điều khiển.
Hình 4.4 mô tả bộ nhớ của 8031 (không có ROM nội)
Hình 4.5 mô tả chi tiết về vùng nhớ dữ liệu nội. Câc vùng nhớ được mô tả dưới đđy.
Vùng tổng quât
Vùng RAM năy chiếm 80 bytes từ địa chỉ 30H đến địa chỉ 7FH. Vùng nhớ 32 bytes bín dưới cũng có thể được dùng như vùng năy mặc dù nó được dùng cho mục đích khâc.
Bất kỳ vị trí năo trong vùng năy đều có thể truy xuất tự do bằng địa chỉ trực tiếp hoặc giân tiếp. Ví dụ để đọc nội dung byte nhớ nội của địa chỉ 5FH văo thanh ghi ACC, ta dùng lệnh sau:
MOV A, 5FH ;
Lệnh năy chuyển một byte dữ liệu sử dụng địa chỉ trực tiếp để xâc định địa chỉ nguồn (5FH).
RAM nội cũng có thể được truy xuất bằng địa chỉ giân tiếp thông qua R0 vă R1 (chỉ hai thanh ghi năy mă thôi). Ví dụ lính sau sẽ thực hiện công việc giống như ví dụ trín
MOV R0, 5FH ; MOV A, @R0 ;
Lệnh đầu tiín nạp giâ trị 5FH cho thanh ghi R0. Lệnh thứ hai dùng chuyển dữ liệu được chỉ ra bởi R0 vă thanh ghi tích luỹ (ACC).
FFFF FFFF
Vùng Vùng
mê lệnh dữ liệu
FF Truy xuất Truy xuất
thông qua RD vă WR
PSEN
0000 0000
Vùng nhớ nội Vùng nhớ ngoăi
Vùng nhớ có khả năng truy xuất bit:
8051 có tất cả 210 vị trí có thể truy xuất bit. Trong đó có 128 bits (16 bytes) từ địa chỉ 20H đến 2FH vă câc bit thuộc câc thanh ghi chức năng. Khả năng truy xuất bit bằng câc phần mềm lă một điểm mạnh của vi điều khiển. Bits có thể được set, clear, and, or, v.v… bằng một lệnh đơn.
Vùng nhớ năy có thể truy xuất như bytes hoặc bit. Ví dụ để set bit 67H ta dùng lệnh sau:
SETB 67H ;
So với bộ nhớ bit lă bit có trọng số lớn nhất của bytes 2CH, do đó ta cũng có thể set nó bằng lệnh sau:
MOV A, 2CH ; ORL A, #10000000B ; MOV 2CH, A ;
Hơn thế nữa câc I/O ports của 8051 có thể truy xuất bit, lăm đơn giản việc xuất nhập từng bit. Vùng nhớ năy có thể xuất nhập từng byte tùy theo lệnh.
Câc ngăn thanh ghi (Register banks):
32 butyes nằm ở cuối vùng RAM nội lă câc ngăn thanh ghi. Tập lệnh của 8051 chỉ truy xuất 8 thanh ghi trong vùng năy, từ R0 đến R7.
Tại một thời điểm chỉ truy xuất được một ngăn thanh ghi mă thôi. Câc thanh ghi năy có địa chỉ mặc định 00H đến 07H khi reset hệ thống (bank 0). Lệnh sau đđy đọc nội dung byte nhớ có địa chỉ 05H văo thanh ghi tích luỹ.
MOV A, R5 ;
Lệnh trín chỉ chiếm một bute sử dụng địa chỉ thanh ghi. Dĩ nhiín công việc trín có được thực hiện bằng một lệnh hai bytes sử dụng địa chỉ trực tiếp:
MOV A, 05H ;
Rõ răng lệnh sử dụng thanh ghi R0 đến R7 ngắn hơn vă nhanh hơn so với lệnh tương đương sử dụng địa chỉ trực tiếp.
Câc ngăn thanh ghi có thể thay đổi bằng câch set lại thanh ghi trạng thâi chương trình (PSW.3 PSW.4) trong chương trình. Giả sử sau khi cho phĩp sử dụng bank 3 thanh ghi R5 lúc năy có địa chỉ 20H. Lệnh sau ghi nội dung thanh ghi ACC văo vị trí 18H(R3)
MOV R3, A;