81 không được địa chỉ hóa bit SP
1.2.3.6 Bộ nhớ ngoà
AT89C52 có khả năng mở rộng bộ nhớ lên đến 64K bộ nhớ chương trình và 64K bộ nhớ dữ liệu ngoài. Do đó, có thể dùng thêm ROM và RAM bên ngoài nếu cần.
Khi dùng bộ nhớ ngoài, Port 0 không còn là một port I /O thuần túy nữa. Nó được hợp kênh giữa bus địa chỉ (A0 – A7) và bus dữ liệu (D0 – D7) với tín hiệu ALE để chốt byte thấp của địa chỉ khi bắt đầu mỗi chu kì bộ nhớ. Port 2 thông thường được dùng cho byte cao của bus địa chỉ.
Trong nửa đầu của mỗi chu kì bộ nhớ, byte thấp của địa chỉ được cấp trong Port 0 và được chốt bằng xung ALE. Một IC chốt 74HC373 (hoặc tương đương) sẽ giữ byte địa chỉ thấp trong phần còn lại của chu kì bộ nhớ.
Trong nửa sau của chu kì bộ nhớ Port 0 được dùng như bus dữ liệu và được đọc hoặc ghi tùy theo lệnh.
Truy xuất bộ nhớ chương trình ngoài:
Bộ nhớ chương trình ngoài là một IC ROM được cho phép bởi tín hiệu
PSEN Hình H.1-9 sau mô tả cách nối một EPROM vào 8952:
EAPSEN PSEN PORT 2 ALE PORT 0 A8 - A15 D0 - D7 A0 - A7 OE D G Q 74HC373 EPROM 8952 H-1-9: Giao tiếp giữa AT89C52 và EPROM.
Một chu kì máy của AT89C52 có 12 chu kì xung nhịp. Nếu bộ dao động trên chip được lái bởi một thạch anh 12 Mhz thì một chu kì máy kéo dài 1 µs.
Trong một chu kì máy, sẽ có hai xung ALE và hai byte được đọc từ bộ nhớ chương trình (nếu lệnh hiện hành là lệnh 2 bytes thì byte thứ hai sẽ được loại bỏ). Giản đồ thời gian của một lần lấy lệnh được vẽ ở hình H1-10 sau:
H.1-10: Giản đồ thời gian đọc bộ nhớ chương trình ngoài.
Truy xuất bộ nhớ dữ liệu ngoài:
EA PSENWR RD PORT 2 ALE PORT 0 A8 -A15 D0 - D7 A0 - A7 OE CS WR NC D G Q 74HC373 RAM 8952
Bộ nhớ dữ liệu ngoài là một bộ nhớ RAM được cho phép ghi /đọc bằng các tín hiệu WR\ và RD\ (các chân P3.6 và P3.7 thay đổi chức năng).
Chỉ có một cách truy xuất bộ nhớ dữ liệu ngoài là với lệnh MOVX dùng con trỏ dữ liệu (DPTR) 16 bits hoặc R0 và R1 xem như thanh ghi địa chỉ.
Kết nối bus địa chỉ và bus dữ liệu giữa RAM và 8952 cũng giống như EPROM và do đó cũng có thể lên đến 64 Kbytes bộ nhớ RAM.
Ngoài ra, chân RD\ của 8952 được nối tới chân cho phép xuất (OE\) của RAM và chân WR\ được nối tới chân ghi (WR\) của RAM.
H.1-12: Giản đồ thời gian của lệnh MOVX.
Giản đồ thời gian cho lệnh ghi (MOVX @DPTR, A) cũng tương tự chỉ khác đường WR\ sẽ thay vào đường RD\ và dữ liệu được xuất ra trên chân Port 0 (RD\
Giải mã địa chỉ:
Nếu có nhiều EPROM và /hoặc nhiều RAM được giao tiếp với 8952, thì cần phải giải mã địa chỉ.
Mạch giải mã cũng tương tự như các hệ vi xử lí khác. Ví dụ, nếu dùng nhiều EPROM và RAM 8Kbytes thì bus địa chỉ cần phải được giải mã để xác định IC nhớ nào được chọn.
Người ta thường dùng IC giải mã 74HC138 với các ngõ ra được nối tới các ngõ vào chọn chip (CS) trên các IC nhớ. Hình H.1-13 vẽ một hệ thống với nhiều EPROM 8K 2764 và RAM 8K 6264:
Xếp chồng bộ nhớ chương trình và dữ liệu bên ngoài:
Vì bộ nhớ chương trình là ROM, nên nảy sinh một vấn đề bất tiện khi phát triển phần mềm cho 8051/8031. Đối với 8952 đã cải tiến bằng cách thay thế bằng EEPROM, hoặc dùng một cách để khắc phục nhược điểm trên là xếp chồng các vùng nhớ chương trình và dữ liệu.
Một IC RAM có thể chứa cả chương trình và dữ liệu bằng cách nối đường
OE\ của RAM vào một mạch logic AND của PSEN\ và RD\.
Mạch trên hình sau cho phép một IC RAM được dùng làm bộ nhớ chương trình và dữ liệu:
Vậy một chương trình có thể được tải vào RAM (bằng cách ghi nó như bộ nhớ dữ liệu) và thi hành (bằng cách truy xuất nó như bộ nhớ chương trình).