Thông báo

Collapse
No announcement yet.

Tại sao lại là ORG xxH ?

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

  • Tại sao lại là ORG xxH ?

    Trong tất cả các chương trình viết cho VDK bằng assembler bao giờ cũng có giả lệnh ORG để khai báo vị trí đặt chương trình trong bộ nhớ.

    Ngoại trừ địa chỉ của các vécto ngắt như 0003h, 0013h, 000BH, 001BH.... thì chương trình chính thường được bắt đầu từ 30h hoặc 40h. Vậy bạn nào có thể giải thích cho tôi ý nghĩa của những con số trên, cách tính toán và ảnh hưởng của chúng đến chương trình được không? Khai báo như thế nào là hợp lý vậy?

    Cảm ơn các bạn nhiều, đừng cười vì câu hỏi của newbie nhé

  • #2
    Thường thì địa chỉ từ 0-33h là địa chỉ của ngắt. Do vậy người ta đặt chương trình chính ở địa chỉ lớn hơn để tiện nâng cấp sau này đồng thời cũng tránh chèn vào địa chỉ ngắt.
    AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
    Xem thêm tại Online Store ---> Click here
    Mob: 0982.083.106

    Comment


    • #3
      Tiện nâng cấp nghĩa là có thể chèn code sau này hả bạn? nếu từ 0-33h là địa chỉ ngắt thì đặt ORG 30h là đè lên địa chỉ ngắt rồi
      Last edited by zeroFILL; 09-10-2007, 15:51.

      Comment


      • #4
        Ví dụ như bạn dùng lệnh:
        ORG 0x30h
        LJMP Ngắt
        thì khi ngắt xảy ra chương trình sẽ nhãy về dòng lệnh có địa chỉ là 0x30H để thực thi lệnh.Mà dòng lệnh ở 0x30H là LJMP Ngắt thì nó lại nhảy đến nhãn "Ngắt" .
        Tâm trí ta say nhưng lòng ta đâu có say
        Bởi trái tim tôi đã trót say người

        Comment


        • #5
          Ủa hay nhỉ, chứ viết ctrinh với ORG 00h thì có sao đâu nào?

          Comment


          • #6
            ORG 00H
            LJIMP Main
            dùng ngắt thì viết như thế còn ko dùng đến em ngắt nào thì cứ viết tại địa chỉ ORG 00H ^^
            Tâm trí ta say nhưng lòng ta đâu có say
            Bởi trái tim tôi đã trót say người

            Comment


            • #7
              Thường thì địa chỉ từ 0-33h là địa chỉ của ngắt. Do vậy người ta đặt chương trình chính ở địa chỉ lớn hơn để tiện nâng cấp sau này đồng thời cũng tránh chèn vào địa chỉ ngắt.
              theo mình hiểu thì nếu dùng ngắt thì các địa chỉ đó là các địa chỉ của các vecto ngắt,
              còn nếu ko dùng đến nó thì phần đó ta có "sài" dc ko???
              một câu hỏi nữa đó là nếu chương trình ngắt của mình có dung lượng lớn hơn khoảng không gian của ngắt thì thế nào đây.
              Một vài câu hỏi dám hỏi các cao nhân.

              Comment


              • #8
                Nguyên văn bởi NANO PRO Xem bài viết
                theo mình hiểu thì nếu dùng ngắt thì các địa chỉ đó là các địa chỉ của các vecto ngắt,
                còn nếu ko dùng đến nó thì phần đó ta có "sài" dc ko???
                một câu hỏi nữa đó là nếu chương trình ngắt của mình có dung lượng lớn hơn khoảng không gian của ngắt thì thế nào đây.
                Một vài câu hỏi dám hỏi các cao nhân.
                Nếu không dùng đến nó thì dùng thoải mái.
                org 00h
                main:
                ;không được cho ngắt nào hoạt động
                .
                .
                .
                end

                Ít có ai viết chương trình ngắt tại vecto ngắt, nếu chỉ có 1 ngắt thì được, tại đia chỉ ngắt bao giờ cũng chỉ có 1 lệnh nhẩy đến chương trình con của ngắt đó -> Nên chương trình ngắt có lớn cũng không sao.
                mẫu cho 89C52:
                org 00h
                sjmp Main
                org 03h
                ljmp ngatngoai0
                org 0Bh
                ljmp Ngattime0
                org 1Bh
                ljmp Ngattime1
                org 23h
                ljmp Comport

                Main:
                ;viet chuong trình chính
                ;nhớ: dùng ngắt nào thì cho phép ngắt đó hoạt thôi
                .
                .
                .

                ngatngoai0:
                ..
                reti

                Ngattime0:
                ..
                reti

                Ngattime1:
                .....
                reti

                Comport:
                ........
                reti

                end

                email:mahaco@fpt.vn

                Comment


                • #9
                  Nguyên văn bởi VNarmy Xem bài viết
                  Thường thì địa chỉ từ 0-33h là địa chỉ của ngắt. Do vậy người ta đặt chương trình chính ở địa chỉ lớn hơn để tiện nâng cấp sau này đồng thời cũng tránh chèn vào địa chỉ ngắt.
                  Như vậy là từ 00h đến 30h là địa chỉ của các ngắt, nếu có dùng ngắt thì đặt chương trình từ sau 30h trở đi (ORG 30h) còn nếu không có thể bắt đầu từ 00h nhưng phải nhớ cấm tất cả các ngắt phải không bác VNarmy?
                  Còn đặt chương trình từ 40h trở đi thì càng thoải mái nhỉ?!

                  Comment


                  • #10
                    Còn đặt chương trình từ 40h trở đi thì càng thoải mái nhỉ?!
                    Đúng thế. Nhưng tại sao phải lãng phí thế nhỉ?
                    Đóng góp cho nền Điện Tử Việt Nam là hoàn thiện bản thân.

                    Comment


                    • #11
                      theo em nghĩ thì chẳng mấy khi viết chương trình chiếm hết cả bộ nhớ flash đến thế nên từ trươc viết em toàn nhảy cho thật "sướng đôi chan". Có những khi viết những ứng dụg dài dài lòi cả mắt mà mới được có vài trăm byte, như hạt muối bỏ bể ấy.
                      Phone: 0978536011

                      Comment


                      • #12
                        Nguyên văn bởi bk_future Xem bài viết
                        ORG 00H
                        LJIMP Main
                        dùng ngắt thì viết như thế còn ko dùng đến em ngắt nào thì cứ viết tại địa chỉ ORG 00H ^^
                        Bậy nào, nếu chỉ dùng 1 ngắt thì không sao cả, nhưng nếu dùng 2 ngắt trở lên thì ngắt nào viết trước sẽ chạy hết cho đến lúc gặp RETI là trở về luôn, các ngắt sau sẽ không bao giờ được kích hoạt, không ổn, không ổn!
                        Ngắt nào cũng có địa chỉ của nó cả, bảng vector ngắt bác 89X đã nói rồi đấy, khi xảy ra ngắt tương ứng thì CPU sẽ nạp địa chỉ của vector ngắt tương ứng và nhảy đến thực hiện ngắt đó(đến lúc gặp RETI - Return from Interrupt thì trở về).

                        Còn một điều nữa là vì sao ngay tại địa chỉ vector ngắt chỉ dùng 1 lệnh nhảy đến 1 chương trình con phục vụ ngắt nằm ở vị trí khác, là vì mỗi vector ngắt chỉ cho phép chiếm 8 byte kể từ địa chỉ bắt đầu của nó, nếu dài hơn 8 byte sẽ xâm phạm vào vùng vector ngắt của các ngắt tiếp theo, nếu ta không sử dụng các ngắt đó thì không sao, nếu sử dụng thì những hiện tượng khó hiểu sẽ xảy ra liên tục đấy nhé. Do vậy người ta thường chứa chương trình con phục vụ ngắt tại 1 địa chỉ khác rộng rãi hơn. (Lệnh LJMP LABEL là lệnh 3 byte nên nằm gọn trong vùng 8 byte dành cho nó tại vector ngắt)!
                        Last edited by natra2k2; 10-10-2007, 09:39.

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X