MCS-51 có bộ nhớ theo cấutrúc Harvard: phân biệt bộ nhớ chương trìnhvàdữ liệu. Chương trình và dữ liệu có thể chứa bên trong nhưng vẫn có thể kết nối với 64KB chương trình và 64KB dữ liệu. Bộ nhớ chương trình được truy xuất thông qua chân PSEN còn bộnhớ dữ liệuđươc truy xuất thông qua chân WR hay RD.
Lưu ý rằng việc truy xuất bộ nhớ chương trình luôn luôn sử dụng địa chỉ 16 bit còn bộ nhớ dữ liệu có thểlà 8 bit hay 16 bit tuỳ theo câu lệnh sử dụng. Khi dùng bộ nhớ dữ liệu 8 bit thì có thể dùng Port 2 như là Port I/O thông thường còn khi dùng ở chếđộ 16 bit thì Port 2 chỉdùng làmcác bit địa chỉ cao.
Port 0 được dùng làm địa chỉ thấp/dữ liệu đa hợp. Tín hiệu/ALE để tách byte địa chỉvà đưa vào bộchốtngoài.Trong chu kỳ ghi, byte dữ liệu sẽ tồn tạiở Port 0 vừa trước khi /WR tích cực và đượcgiữ cho đến khi /WR không tích cực. Trong chu kỳđọc, byte nhậnđược chấp nhận vừa trước khi /RD không tích cực.
Bộnhớ chương trình ngoài được xửlý 1 trong 2 điều kiện sau:
Tínhiệu EA tích cực ( = 0).
Giá trị của bộ đếm chương trình(PC- Program Counter) lớn hơn kích thước bộ nhớ.( hình 2.8)
Hình 2.11. Thực thi bộ nhớ chương trình ngoài PCH: Program Counter High – PCL: Program Counter Low DPH: Data Pointer High – DPL: Data Pointer Low
6.1. Truy xuất bộ nhớ chương trình ngoài
Quá trình thực thi lệnh khi dùng bộ nhớ chương trình ngoài có thể mô tả như hình 2.8: Thực thi bộ nhớ chương trình ngoài”. Trong quátrình này, Port 0 và Port 2 khôngcòn là các Port xuất nhập mà chứa địachỉvà dữliệu.
Trong một chu kỳ máy, tínhiệu ALE tích cực 2 lần. Lần thứ nhất cho phép 74HC573 mở cổng chốt địa chỉ byte thấp, khi /ALE xuống 0 thì byte thấp và byte cao của bộ đếm chươngtrình đềucó nhưng ROM chưa xuất vì PSEN chưa tích cực, khi tín hiệu ALE lên 1 trở lại thì Port 0 đã có dữ liệu là mã lệnh. ALE tích cực lần
thứ hai được giải thích tương tự và byte 2 được đọc từ bộ nhớ chương trình. Nếu lệnh đang thực thi là lệnh 1 byte thì CPU chỉđọc Opcode, còn byte thứ hai bỏ qua.
6.2. Truy xuất bộ nhớdữ liệu ngoài
Bộnhớdữ liệu ngoàiđược truy xuất bằng lệnh MOVX thông qua các thanh ghi xácđịnhđịachỉ DPTR (16 bit) hay R0, R1 (8 bit).
Quá trình thực hiện đọc hay ghi dữ liệu được cho phép bằng tín hiệu RD hay WR (chân P3.7 và P3.6).
6.3.Giải mãđịa chỉ
Trong cácứng dụng dựa trên8051, ngoài giao tiếp bộnhớdữliệu, vi điều khiển còn thực hiện giao tiếp với các thiết bị khác như bàn phím, led, động cơ,. Cácthiếtbị này có thể giao tiếp trực tiếp thông qua các Port. Tuy nhiên, khi số lượng thiết bị lớn, các Port sẽ không đủ để thực hiện điều khiển. Giải pháp đưa ra là xem các thiết bị này giống nhưbộ nhớ dữ liệu. Khi đó, cần phải thực hiện quátrình giải mãđịa chỉđể phân biệtcác thiết bị ngoại vi khác nhau. Quá trình giải mã địachỉ thường được thực hiện thông qua các IC giải mãnhư 74139, 74138, 74154. Ngõ ra củacác IC giải mãsẽ đượcđưa tới chân chọn chip hay bộđệm khi điều khiểnngoại vi.