Thông báo

Collapse
No announcement yet.

Những thắc mắc khi đọc tài liệu Vđk 8051

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Những thắc mắc khi đọc tài liệu Vđk 8051

    Chào mọi người, em đang học môn vxl, và tất nhiên là "chơi" bắt đầu học con 8051, nhưng mà khi đọc tài liệu, lại thấy vài chỗ vô lý và khó hiểu, chắc là tại kiến thức của em còn hơi yếu. Vậy qua topic này, em và những ai đang tìm hiểu 8051 có thể hỏi tập trung vào đây. Vì để ko loãng box này (mọi người có nhiều câu hỏi sẽ post nhiều topic khác nhau),và cũng vì topic "Danh cho nguoi moi tim hieu 8051 " đã full (khó khi mọi người tìm những câu trả lời mới).
    ><><><><><
    Mở đầu nè, câu đầu tiên em hỏi là:
    Trong tài liệu ghi tóm tắt đặc điễm 8051 có câu:
    8051 có thể mở rộng 64kb ko gian bộ nhớ chương trình ngoài và 64kb ko gian bọ nhớ dữ liệu ngoài. Ý câu này là sao ah??? Vì 8051 có 16 chân địa chỉ mà, nhưng ko bik là mã hóa 64kb nào???

  • #2
    Ý bạn hỏi cụ thể thế nào?

    Comment


    • #3
      Nguyên văn bởi rainbowsmile Xem bài viết
      8051 có thể mở rộng 64kb ko gian bộ nhớ chương trình ngoài và 64kb ko gian bọ nhớ dữ liệu ngoài
      Em hỏi là tại sao có thể mở rộng dc như vậy? Việc mở rộng có liên quan đến 16 chân địa chỉ của 8051 ko?

      Comment


      • #4
        Nguyên văn bởi rainbowsmile Xem bài viết
        8051 có thể mở rộng 64kb ko gian bộ nhớ chương trình ngoài và 64kb ko gian bọ nhớ dữ liệu ngoài. Ý câu này là sao ah???
        Mình nói qua chút về 8051: * 4 Kbyte ROM nội
        * 128 byte RAM nội
        Khi chương trình của bạn cần RAM và ROM lớn hơn mức mà 8051 có thì buộc bạn phải sử dụng thêm RAM ngoại và ROM ngoại.
        Và dung lượng bộ nhớ ROM ngoại và RAM ngoại lớn nhất mà 8051 có thể kết nối được là 64 Kbyte.
        Còn về câu hỏi
        Vì 8051 có 16 chân địa chỉ mà, nhưng ko bik là mã hóa 64kb nào???
        ROM là nơi chứa chương trình. Vì thế bạn chỉ có thể lưu mà không truy xuất được vào đó đâu. Có thể ví ROM = "tù chung thân", có vào mà không có ra. Vì thê 16 chân địa chỉ theo bạn nói là mã hóa cho 64 Kbyte RAM.
        __]\/[|2. |3()]\/[__

        Comment


        • #5
          Nguyên văn bởi rainbowsmile Xem bài viết
          Em hỏi là tại sao có thể mở rộng dc như vậy?
          Câu hỏi này của bạn hóc búa đây! Cái này phải hỏi nhà sản xuất thui.
          __]\/[|2. |3()]\/[__

          Comment


          • #6
            hay hay!!! Cho em hỏi tiếp các sếp là RAM nội của 8051 là 128 bytes, mà sao coi cai sơ đồ lại có 2 cột;cột 1 00-7F cho lưu trữ, rồi có phần thanh ghi đặc biệt thêm 128 byte nữa (80-FF).
            Vậy em hỏi là RAM nội (tức chứa dữ liệu hay chưa chương trình) không có tính phần thanh ghi đặc biệt phải không?

            Comment


            • #7
              RAM nội bao gồm cả phần SFR ,nhưng vùng SFR không thể dùng 1 cách tùy tiện như vùng RAM đa mục đích được.
              8051 có 16 đường địa chỉ thì có thể quản lý được 2^16 kB bộ nhớ. 64kB đó có thể là RAM hay ROM, tùy người dùng thôi (như MR BOM nói thì con 8031 khong có ROM nội thì sao)

              Comment


              • #8
                Việc đầu tiên mình chỉnh sai cho bạn rainbowsmile là con 8051 này là con Vi điều khiển chứ không phải là con vi xử lý. Còn con VXL thì tiêu biểu là họ 8086.

                Đúng như các bác nói ở trên, bạn có thể hình dung RAM và ROM trong con 89 có chức năng gần giống như RAM và ROM trong máy PC vậy. Ngoài ra vì con 89 nhỏ nên người ta đâu cần hardisk làm chi, dùng ROM để chứa chương trình luôn. Khi bạn biên dịch ra file hex và add vào con 89 tức là bạn down tất cả vào vùng ROM của nó đó. VDK lưu lại cho dù tắt điện.

                RAM là vùng bộ nhớ khi hoạt động của con 89. Tắt điện là tối thui luôn tức là tất cả trong RAM tự động được set lên FFFF. 128kb RAM này người sử dụng được can thiệp vào 1/2 thì phải (lâu quá rồi không nhớ rõ lắm).

                +1/2 vùng can thiệp được và trong vùng này người ta quản lý theo chế độ 8bit (mà thật ra 8bit là basic rồi k cần nói làm chi) hoặc theo từng bit (có chia khu đàn hoàn bác coi kỹ lại nhé).

                +1/2 vùng còn lại là Các thanh ghi đa chức năng (cũng đơn giản hiểu là 1 thanh ghi là 1 hoặc 2 byte thôi) chúng ta không can thiệp được theo nghĩa đen. Nhưng có thể can thiệp theo cách "gián tiếp" nếu bạn muốn set 1 bit của nó on-off theo câu lệnh, theo cách trạng thái ngắt..v.v nói chung là khá phức tạp. Phải hiểu thật rõ các chức năng của từng thanh ghi để làm gì, con trỏ....v.v.... thì có thể "gián tiếp" điều khiển, vì nếu không nắm rõ bạn sẽ dẫn đến chương trình overfloat dễ dàng.

                Mình lấy ví dụ để khái niệm chúng ta có thể can thiệp vùng thanh ghi đa chức năng là như thế nào nhé? chứ đừng nên hiểu NONE là không hoàn toàn vì theo mình cái gì mà không can thiệp được, không sờ được, không mó được thì tức lắm chịu không nổi. Ngoài ra lại sẽ không hiểu rõ được nó là cái quái gì thì sẽ không thú vị ............ Ques: cờ nhớ C và 1 bit khác nhau chổ nào? Ans: về mặt logic học thì chả khác nhau gì cả, vì cả 2 đều là 1 bit và có giá trị 1/0. Khác nhau là cờ nhớ C nằm trong 1 thanh ghi đa chức năng. Còn 1 bit thì chỉ là 1 bit thôi. Cờ nhớ C bị ràng buộc theo trạng thái chương trình, theo các thanh ghi nào đó, nói chung là nó có thể thay đổi bất cứ lúc nào theo ông chủ VDK ra lệnh vì đó là đặc tính của nó....... NHƯNG CHÚNG TA CÓ THỂ SET ON/OFF CHO NÓ ĐƯỢC BẰNG CODE CHƯƠNG TRÌNH. Như vậy nếu nói là vùng thanh ghi đa chức năng chúng ta không can thiệp thì hoàn toàn hơi "cứng nhắc" về định nghĩ.

                Mình có thể lấy thêm 1 ví dụ minh họa chúng ta có thể can thiệp vào vùng này. Bạn có bao giờ làm 1 ngắt mềm linh động hay 1 ngắt cứng chưa? VDK rất hay cho phép chúng ta tạo ra 1 ngắt TÙY Ý điều này giúp cho chúng ta linh động trong việc lập trình. Nói cụ thể hơn khi viết Timer thì thường người ta đợi timer đếm xong và tràn thì sẽ khởi phát 1 ngắt đúng không. Đây là mình tạm định nghĩa là auto ngắt mềm. Tức auto set cờ ngắt lên 1, con trỏ chỉ vào vùng chương trình ngắt, sau khi kết thúc vùng chương trình ngắt con trỏ lại trở về nơi xuất phát trước đó của nó và người lặp trình phải set cờ ngắt về 0 lại sau khi kết thúc 1 ngắt (nếu bạn dùng timer 16bit). Nhưng liệu hỏi nếu ta đang làm 1 cái gì đó và "thèm" set cờ ngắt chơi được hay không? hoàn toàn được. Bạn thích ngắt thì cứ ngắt chả ai cấm bạn gì cả cứ set cờ ngắt bằng câu lệnh. MỘT LẦN NỮA CHÚNG TA THẤY RẰNG CÓ THỂ CAN THIỆP VÀO CỜ NGẮT. Còn đối với ngắt cứng thì thường phải wait tín hiệu nào đó bên ngoài, khi gặp tín hiệu đó thì set cờ lên 1 theo kiểu auto của thanh ghi ngắt ngoài hoặc là code bạn viết...vô tư kiểu nào cũng được. lập tức con trỏ chạy vào vùng ngắt làm việc.

                Như vậy rõ ràng chúng ta có thể "gián tiếp" can thiệp vùng thanh ghi đa chức năng rồi còn gì. Cờ C, cờ ngắt, các thanh ghi đa chức năng, muốn gán nó bao nhiêu thì bạn cứ gán, nhưng gán để làm gì mới quan trọng . Chính vì để không đá lộn sân giữa người lập trình và con VDK nên nhà sản xuất mới chia làm 2 vùng trong RAM để chúng ta dễ lập trình. Chứ không phải nói tuyệt nhiên chúng ta không can thiệp được vào nó là rất "cứng nhắc" về định nghĩa

                Câu hỏi đặt ra là chúng ta can thiệp như thế nào vào 2 vùng RAM này và để làm cái gì? hay chỉ sài 1/2 vùng kia thôi còn vùng thanh ghi đa chức năng thì hãy mặc kệ nó?

                Vấn đề này thì theo lực học của mình (hổng biết đúng sai) về vùng 1/2 RAM đầu thì nếu chúng ta rành về con trỏ, rành về stack thì có đất dụng võ cho việc nâng cao ứng dụng trong phạm vi khả năng của con 89 ở vùng RAM này..... Còn vùng thanh ghi đa chức năng thì đối với mình thì chỉ cần hiểu rõ nó và biết dùng nó đúng lúc và hạn chế "gián tiếp" can thiệp nó.... Vì như mình nói ở trên can thiệp vào nó là bất đắc dĩ lắm mới can thiệp, là rắc rối to, là đá lộn sân với VDK đó.

                Đàn em có gì sai a e bỏ qua nhé
                Học hoài sao thấy mình vẫn cứ ngu

                Comment

                Về tác giả

                Collapse

                rainbowsmile Tìm hiểu thêm về rainbowsmile

                Bài viết mới nhất

                Collapse

                Đang tải...
                X