Hệ thống nhúng - Ngân hàng đăng ký / Ngăn xếp
Bộ vi điều khiển 8051 có tổng cộng 128 byte RAM. Chúng ta sẽ thảo luận về việc phân bổ 128 byte RAM này và kiểm tra việc sử dụng chúng dưới dạng ngăn xếp và thanh ghi.
Phân bổ không gian bộ nhớ RAM trong 8051
128 byte RAM bên trong 8051 được gán địa chỉ 00 đến 7FH. Chúng có thể được truy cập trực tiếp dưới dạng vị trí bộ nhớ và được chia thành ba nhóm khác nhau như sau:
32 byte từ các vị trí 00H đến 1FH được dành riêng cho các ngân hàng đăng ký và ngăn xếp.
16 byte từ vị trí 20H đến 2FH được dành cho bộ nhớ đọc / ghi địa chỉ bit.
80 byte từ 30H đến 7FH vị trí được sử dụng để lưu trữ đọc và ghi; nó được gọi làscratch pad. 80 vị trí này RAM được sử dụng rộng rãi cho mục đích lưu trữ dữ liệu và các thông số bởi các lập trình viên 8051.
Đăng ký ngân hàng trong 8051
Tổng cộng 32 byte RAM được dành cho các ngân hàng thanh ghi và ngăn xếp. 32 byte này được chia thành bốn ngân hàng thanh ghi trong đó mỗi ngân hàng có 8 thanh ghi, R0 – R7. Các vị trí RAM từ 0 đến 7 được dành cho ngân hàng 0 của R0 – R7 trong đó R0 là vị trí RAM 0, R1 là vị trí RAM 1, R2 là vị trí 2, v.v., cho đến vị trí bộ nhớ 7, thuộc R7 của ngân hàng 0.
Ngân hàng thứ hai của thanh ghi R0 – R7 bắt đầu tại vị trí RAM 08 và đi đến các vị trí OFH. Ngân hàng thứ ba của R0 – R7 bắt đầu tại vị trí bộ nhớ 10H và chuyển đến vị trí 17H. Cuối cùng, các vị trí RAM 18H đến 1FH được dành cho dải thứ tư của R0 – R7.
Ngân hàng Đăng ký Mặc định
Nếu các vị trí RAM 00–1F được dành riêng cho bốn ngân hàng thanh ghi, thì ngân hàng thanh ghi nào của R0 – R7 mà chúng ta có thể truy cập khi 8051 được cấp nguồn? Câu trả lời là đăng ký ngân hàng 0; nghĩa là, các vị trí RAM từ 0 đến 7 được truy cập với các tên R0 đến R7 khi lập trình 8051. Bởi vì việc tham chiếu các vị trí RAM này bằng các tên như R0 đến R7, thay vì theo vị trí bộ nhớ của chúng sẽ dễ dàng hơn nhiều.
Cách chuyển đổi ngân hàng đăng ký
Ngân hàng đăng ký 0 là mặc định khi 8051 được cấp nguồn. Chúng tôi có thể chuyển sang các ngân hàng khác bằng cách sử dụng đăng ký PSW. Các bit D4 và D3 của PSW được sử dụng để chọn ngân hàng thanh ghi mong muốn, vì chúng có thể được truy cập bằng các lệnh định địa chỉ bit SETB và CLR. Ví dụ, "SETB PSW.3" sẽ đặt PSW.3 = 1 và chọn thanh ghi ngân hàng 1.
RS1 | RS2 | Ngân hàng đã chọn |
---|---|---|
0 | 0 | Ngân hàng0 |
0 | 1 | Ngân hàng1 |
1 | 0 | Bank2 |
1 | 1 | Ngân hàng3 |
Ngăn xếp và các hoạt động của nó
Ngăn xếp trong 8051
Ngăn xếp là một phần của RAM được CPU sử dụng để lưu trữ thông tin như dữ liệu hoặc địa chỉ bộ nhớ trên cơ sở tạm thời. CPU cần vùng lưu trữ này vì số lượng thanh ghi hạn chế.
Cách truy cập ngăn xếp
Vì ngăn xếp là một phần của RAM nên có các thanh ghi bên trong CPU để trỏ tới nó. Thanh ghi được sử dụng để truy cập ngăn xếp được gọi là thanh ghi con trỏ ngăn xếp. Con trỏ ngăn xếp trong 8051 rộng 8 bit và nó có thể nhận giá trị từ 00 đến FFH. Khi 8051 được khởi tạo, thanh ghi SP chứa giá trị 07H. Điều này có nghĩa là vị trí RAM 08 là vị trí đầu tiên được sử dụng cho ngăn xếp. Hoạt động lưu trữ của một thanh ghi CPU trong ngăn xếp được gọi làPUSHvà lấy lại nội dung từ ngăn xếp vào thanh ghi CPU được gọi là POP.
Đẩy vào ngăn xếp
Trong 8051, con trỏ ngăn xếp (SP) trỏ đến vị trí được sử dụng cuối cùng của ngăn xếp. Khi dữ liệu được đẩy vào ngăn xếp, con trỏ ngăn xếp (SP) được tăng lên 1. Khi PUSH được thực thi, nội dung của thanh ghi được lưu trên ngăn xếp và SP được tăng lên 1. Để đẩy các thanh ghi vào ngăn xếp, chúng ta phải sử dụng địa chỉ RAM của chúng. Ví dụ, lệnh "PUSH 1" đẩy thanh ghi R1 vào ngăn xếp.
Xuất hiện từ ngăn xếp
Việc đưa nội dung của ngăn xếp trở lại vào một thanh ghi đã cho là ngược lại với quá trình đẩy. Với mọi thao tác pop, byte trên cùng của ngăn xếp được sao chép vào thanh ghi được chỉ định bởi lệnh và con trỏ ngăn xếp được giảm một lần.