Mình đang học 8051 và có 1 chút thắc mắc là khi dùng lệnh PUSH POP thì nó cất vào ngăn xếp và lấy ra ( vào Sau ra Trước ). Thế nhưng thực chất là cái nội dung cất vào ngăn xếp nó lưu ở đâu, lưu được bao nhiêu bytes ? Và thầy giáo có yêu cầu viết code khởi tạo ngăn xếp có kích thước 8 bytes, 24 bytes, thì thực sự mình không hiểu là tạo ra kiểu gì? Hay cứ MOV các ô nhớ trong vùng RAM đa dụng hc Thanh Ghi lần lượt vào stack rồi lại lần lượt POP ra như vậy thì có vẻ là không hiểu đúng vấn đề. Xin mọi người khai sáng giải đáp giúp mình thắc mắc này. Đặc biệt là cách khởi tạo và sử dụng ngăn xếp có kích thước ?
Thông báo
Collapse
No announcement yet.
NGĂN XẾP 8051. Cần trợ giúp của mọi người. Xin đa tạ !
Collapse
X
-
Nguyên văn bởi xinlancao Xem bài viếtMình đang học 8051 và có 1 chút thắc mắc là khi dùng lệnh PUSH POP thì nó cất vào ngăn xếp và lấy ra ( vào Sau ra Trước ). Thế nhưng thực chất là cái nội dung cất vào ngăn xếp nó lưu ở đâu, lưu được bao nhiêu bytes ? Và thầy giáo có yêu cầu viết code khởi tạo ngăn xếp có kích thước 8 bytes, 24 bytes, thì thực sự mình không hiểu là tạo ra kiểu gì? Hay cứ MOV các ô nhớ trong vùng RAM đa dụng hc Thanh Ghi lần lượt vào stack rồi lại lần lượt POP ra như vậy thì có vẻ là không hiểu đúng vấn đề. Xin mọi người khai sáng giải đáp giúp mình thắc mắc này. Đặc biệt là cách khởi tạo và sử dụng ngăn xếp có kích thước ?
- 1 like
-
Đoạn trích dẫn này có thể hữu ích cho bạn:- Con trỏ ngăn xếp SP (Stack Pointer) là 1 thanh ghi 8-bit ở địa chỉ 81H.
- Nó chứa địa chỉ của dữ liệu hiện đang ở đỉnh của ngăn xếp.
- Hoạt động ngăn xếp bao gồm lệnh cất dữ liệu vào ngăn xếp và lệnh lấy dữ liệu ra khỏi ngăn xếp.
- Việc cất vào ngăn xếp làm tăng SP trước khi ghi dữ liệu và việc lấy dữ liệu ra khỏi ngăn xếp sẽ giảm SP.
- Ngăn xếp của 8051 được giữ trong RAM nội và được giới hạn đến các địa chi truy xuất được bởi kiểu định địa chỉ gián tiếp.
- Vùng RAM nội có 128 byte trên 8031/8051 hoặc 256 byte trên 8032/8052.
- Tùy thuộc giá trị ban đầu của SP ngăn xếp có thể có kích thước khác nhau.
- Ví dụ: nếu ta khởi tạo SP để bắt đầu vùng ngăn xếp ở địa chỉ 60H bằng lệnh: MOV SP,#5FH thì điều này sẽ giới hạn ngăn xếp là 32 byte trên 8031/8051 vì địa chỉ cao nhất của RAM trên chip là 7FH. Giá trị 5FH được dùng ở đây vì SP tăng lên 60H trước khi thao tác cất vào ngăn xếp đầu tiên được thực thi.
- Giá trị mặc định của SP là 07H (sau khi reset) nhằm duy trì sự tương thích với 8048, bộ vi điều khiển tiền nhiệm của 8051. Điều này dẫn đến hoạt động ghi ngăn xếp đầu tiên sẽ lưu dữ liệu vào vị trí nhớ có địa chỉ 08H có nghĩa là dãy thanh ghi 1 (register bank 1 và có thể là 2 và 3) không có sẵn vì vùng này được sử dụng làm ngăn xếp. Người dùng có thể khởi tạo SP để tránh điều này.
- Ngăn xếp được truy xuất trực tiếp bằng các lệnh PUSH và POP để lưu trữ tạm thời và lấy lại dữ liệu hoặc truy xuất ngầm bằng lệnh gọi chương trình con (ACALL, LCALL) và các lệnh trở về (RET, RETI) để lưu trữ giá trị của bộ đếm chương trình khi bắt đầu thực hiện chương trình con và lấy lại khi kết thúc chương trình con.
- 2 yêu thích
Comment
-
Như đoạn trên đã nói 7FH là địa chỉ cao nhất (uppermost) của RAM trên chip cho nên ngăn xếp có kích thước phụ thuộc vào địa chỉ khởi tạo ngăn xếp đến địa chỉ 7FH.
Hoặc ngăn xếp mặc định nếu không khởi tạo là 24 byte từ 08H đến 1FH.
Ví dụ :
MOV SP,#7EH là khởi tạo ngăn xếp có kích thước 1 byte
MOV SP,#74H là khởi tạo ngăn xếp có kích thước 10 byte
MOV SP,#6FH là khởi tạo ngăn xếp có kích thước 16 byte
MOV SP,#5FH là khởi tạo ngăn xếp có kích thước 32 byte
Phân tích thêm về ngăn xếp:
Ngăn xếp là một vùng bộ nhớ RAM được CPU sử dụng để lưu thông tin tạm thời. Thông tin này có thể là dữ liệu, có thể là địa chỉ CPU cần không gian lưu trữ vì số lượng các thanh ghi bị hạn chế.
Nếu ngăn xếp là một vùng của bộ nhớ RAM thì phải có các thanh ghi trong CPU chỉ đến nó, đó chính là SP. Công việc của SP là rất nghiêm ngặt mỗi khi thao tác cất vào PUSH và lấy ra POP được thực thi.
Khi ta cất dữ liệu vào ngăn xếp thì SP được tăng lên 1. Việc lấy nội dung ra từ ngăn xếp trở lại thanh ghi đã cho là quá trình ngược lại. Với mỗi lần lấy ra thì byte trên đỉnh ngăn xếp được sao chép vào thanh ghi được xác định bởi lệnh và SP được giảm xuống 1. Trong 8051 thì việc tăng, giảm tự động của SP là để SP luôn được chỉ đến đỉnh của ngăn xếp.
Giới hạn trên của ngăn xếp có thể hiểu như sau. Trong vùng nhớ 32 byte 00H đến 1FH của RAM dành cho các băng thanh ghi thì ngăn nhớ 08H đến 1FH của RAM trong 8051 có thể được dùng làm ngăn nhớ dành cho ngăn xếp. Nhưng vùng nhớ 16 byte 20H đến 2FH của RAM được dự phòng cho bộ nhớ đánh địa chỉ được theo bit và không thể dùng trước cho ngăn xếp. Nếu trong một chương trình đã cho ta cần ngăn xếp nhiều hơn 24 byte (08H đến 1FH = 24 byte) thì ta có thể chuyển đổi SP chỉ đến các ngăn nhớ 30H đến 7FH.
Xung đột ngăn xếp và băng thanh ghi số 1: thanh ghi SP chỉ đến vị trí RAM hiện thời dành cho ngăn xếp. Khi dữ liệu cất vào ngăn xếp thì SP tăng lên và ngược lại khi dữ liệu lấy ra từ ngăn xếp thì SP giảm xuống. Việc tăng của SP đối với các lệnh PUSH cũng đảm bảo rằng ngăn xếp sẽ không với tới ngăn nhớ 0 của RAM (đáy của RAM) và do vậy sẽ nhảy ra khỏi không gian dành cho ngăn xếp. Tuy nhiên có vấn đề nảy sinh với thiết lập mặc định của ngăn xếp. Ví dụ SP = 07H khi 8051 được bật nguồn nên RAM cũng thuộc về thanh ghi R0 của băng thanh ghi số 1. Hay nói cách khác băng thanh ghi số 1 và ngăn xếp đang dùng chung một không gian của bộ nhớ RAM. Nếu chương trình đã cho cần sử dụng các băng thanh ghi số 1 và số 2 ta có thể đặt lại vùng nhớ RAM cho ngăn xếp.
Ta có thể cấp vị trí ngăn nhớ 60H của RAM hoặc cao hơn cho ngăn xếp như ví dụ: MOV SP,#5FH là đặt ngăn nhớ từ 60H của RAM cho ngăn xếp và giới hạn là 32 byte.
- 2 yêu thích
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho tìm mua đồng hồ vạn năngbởi matnetgia99Ồ, cái này mình cũng có nè, có ai mua không, đồ cũ dùng từ năm 2008, hư 1 2 giai gì đấy bỏ xó hơn năm nay...
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 14:40 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80À, sản phẩm họ thiết kế ra, họ yêu cầu mình chứng minh là sau chỉnh sửa thì 1 là gỡ jump cắm lại không hư mạch, 2 là gỡ jump thì 220Vdc vẫn dùng được led áp thấp 20V mà không hư led như mình báo, nên họ hiểu rõ mà....
-
Channel: Điện tử công suất
Hôm qua, 06:08 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Tôi biết và tôi biết.
Sẽ bắt đầu với cái Sồn La, rồi mấy mạch nguồn vớ vỉn.... Rồi sẽ đèn led...
Cuộc đời là những chuyến xe, nên sẽ có:
Xe đạp điện, xe máy điện, xe ô tô điện, xe cấp cứu điện, xe tang điện.
Rồi xem.-
Channel: Điện tử công suất
Hôm qua, 01:38 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nhathung1101Vấn đề là thu ánh sáng rồi phát ra ánh sáng cơ. Hồi mẫu giáo cô bảo đừng làm, lão không nhớ à?
Tốt nhất im mồm....-
Channel: Điện tử công suất
Hôm qua, 01:26 -
-
Trả lời cho Tiếng Anh cho người Việtbởi bqvietBài học kiểu trực tuyến dù là loại đơn giản bậc nhất cũng vẫn cần chú tâm. Chỉ bật tai nghe lên thì không có loại nào thấm nổi đâu. Cách hay hơn, dễ hơn là kiếm phim tiếng Anh nào đó xem, ban đầu bật phụ đề tiếng Việt, nghe và...
-
Channel: Tâm tình dân kỹ thuật
14-02-2025, 16:15 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nguyendinhvanỞ đtvn này mới biết đến 2 loại mạch
1 step down
2 step up
Bây giờ anh lưu vong làm thuê bên nước lạ còn làm ra cái mach vừa up vùa dow luôn.
Tính chất là:
1 Đầu vào bằn ra cho nối thẳng
2 Đầu vào cao hơn...-
Channel: Điện tử công suất
14-02-2025, 00:51 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nguyendinhvanHa ha !
Thay đổi cách nghĩ thì sẽ nghĩ ra.
.
.
.
Một thứ cần kiểm soát dòng + nhiệt + công suất tiêu tán. Nhưng lại dùng tư duy ổn áp. Làm sao mà giải quyết được.
Nó là mạch ổn dòng.
Vì thế các anh nước lạ không thèm quan tâm là phải....-
Channel: Điện tử công suất
14-02-2025, 00:42 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Vì cứ phải chỉnh sửa cho mỗi dải điện áp, quên chỉnh thì hư chíp phải bảo hành nên em thấy bất tiện, mới cần cái mạch 1 dải áp cao dùng cho tất cả loại đèn đó bác!...
-
Channel: Điện tử công suất
13-02-2025, 17:02 -
-
Trả lời cho Tiếng Anh cho người Việtbởi hankhungdtMình thỉnh thoảng cũng làm việc với người nước ngoài nói tiếng Anh thì toàn ghép nhặt từ, cộng với quơ tay quơ chân để diễn tả, hix. Nỗi khổ là không biết cách để mô tả sự việc. Tôi muốn tìm các bài giảng tiếng anh nào phù hợp...
-
Channel: Tâm tình dân kỹ thuật
13-02-2025, 08:43 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi ti500Chúc mừng bác đã chỉnh sửa thành công, nhưng theo em thì video hơi rối nếu bác muốn gửi cho bên supplier xem.
Nếu là em thì em chỉ cần nối dây để hiển thị liên tục điện áp ở ngõ ra là 220Vdc trước khi gắn LED, kế đến là cắm...-
Channel: Điện tử công suất
13-02-2025, 07:39 -
Comment