Thông báo

Collapse
No announcement yet.

Trở về địa chỉ định sẵn từ chuơng trình ngắt!!!

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

  • Trở về địa chỉ định sẵn từ chuơng trình ngắt!!!

    Chào các pro!!!
    Các bạn cho mình hỏi vấn đề như sau:
    Mình sử dụng ngắt để nhận dữ liệu. Vậy sau khi thực hiện xong chuơng trình ngắt mình muốn nó chạy đến địa chỉ định sẵn nao đó mà không phải là địa chỉ trước khi nhảy vào chuơng trình ngắt. Mình phảil làm thế nào vậy??? Mình có nhớ là dùng bộ nhớ ngăn xếp hay gì đó!!! Nhưng mình không rõ code phải như thế nào!!! dùng ngôn ngữ assembly.
    Cảm ơn tất cả các bạn!!!

  • #2
    Nguyên văn bởi ronaldodtvt Xem bài viết
    Chào các pro!!!
    Các bạn cho mình hỏi vấn đề như sau:
    Mình sử dụng ngắt để nhận dữ liệu. Vậy sau khi thực hiện xong chuơng trình ngắt mình muốn nó chạy đến địa chỉ định sẵn nao đó mà không phải là địa chỉ trước khi nhảy vào chuơng trình ngắt. Mình phảil làm thế nào vậy??? Mình có nhớ là dùng bộ nhớ ngăn xếp hay gì đó!!! Nhưng mình không rõ code phải như thế nào!!! dùng ngôn ngữ assembly.
    Cảm ơn tất cả các bạn!!!



    Bạn phải hiểu vấn đề là,bạn sử dụng ngắt nghĩa là ngắt cho phép ở đâu thì nó sẽ trỡ về thực hiện công việc tại địa điểm ngắt ở đó,nếu vẫn ở trong vòng lặp thì ý tưởng của bạn ko thể,còn nếu sau đó thực hiện 1 công viẹc khác thì bạn chỉ việc cho nó nhảy đến vị trí mà bạn muốn thôi,có thể dùng ljmp hoặc ajmp tùy bạn,Chúc bạn thành công,mình nói sai ở đâu bạn góp ý nhé,

    Comment


    • #3
      vâng, mình cũng gặp vấn đề chỗ này, sau khi ngắt mình ko muốn quay lại vị trí cũ mà quay lại void main(), nhưng khổ nổi chương trình đang chạy trong vòng lặp lun đúng, vậy có cách nào ko ?
      TamPhieuLuuKy@yahoo.com
      092 2838 712 --->>

      Comment


      • #4
        Nguyên văn bởi anh_hung_21 Xem bài viết
        Bạn phải hiểu vấn đề là,bạn sử dụng ngắt nghĩa là ngắt cho phép ở đâu thì nó sẽ trỡ về thực hiện công việc tại địa điểm ngắt ở đó,nếu vẫn ở trong vòng lặp thì ý tưởng của bạn ko thể,còn nếu sau đó thực hiện 1 công viẹc khác thì bạn chỉ việc cho nó nhảy đến vị trí mà bạn muốn thôi,có thể dùng ljmp hoặc ajmp tùy bạn,Chúc bạn thành công,mình nói sai ở đâu bạn góp ý nhé,
        Nếu bạn sử dụng lệnh JMP thì chương trình ngắt chưa được thoát bằng lệnh RETI nên mình nghĩ không phải.
        Trước khi vào chương trình ngắt, địa chỉ chương trình sẽ được lưu vào bộ nhớ ngăn xếp. sau khi thực hiện xong ngắt thì chương trình sẽ lấy địa chỉ đó để thực hiện tiếp công việc sau khi thực hiện ngắt.

        Nhưng mình không muốn như vậy, mà muốn nó phải thực hiện tại 1 đại chỉ khác. Mình biết hình như là thay đổi địa chỉ trong bộ nhớ ngăn xếp trước lệnh RETI nhưng mình không biết phải làm sao??? và trong chương trình chính có cần lệnh nào nữa không???

        MỘt số suy nghĩ của mình. cảm ơn các bạn đã đọc!!!

        Comment


        • #5
          khai báo org điểm cần nhảy tới. VD:
          org 0020h
          main:
          mov 30h,#00h
          mov 31h,#0fch
          ..............
          org 00fch
          chỗ cần nhảy tới:
          ...................
          chương trính ngắt:
          ..........................
          pop 32h
          pop 32h
          push 31h
          push 30h
          reti

          xong rồi, chỗ push 31h và 30h hok nhớ cái nào push trước, ai làm nhớ thử lại .
          Chương trình sau khi phát hiện ngắt và làm tới chỗ pop, giải thích tại sao pop là vì để làm trống SP. Push vào là địa chỉ nơi cần thực hiện sau khi hoàn tất ngắt.

          Comment


          • #6
            ; Doan code trong chuong trinh nhat

            POP ACC
            POP ACC ; bo dia chi luc bi ngat

            MOV DPTR,#DCHI ; dia chi moi can tro ve sau khi ngat
            PUSH DPL ;
            PUSH DPH ; tao dia chi nhay den DCHI

            ;doan code cua chuong trinh ngat

            RETI ; thoat khoi chuong trinh ngat tro ve dia chi dinh truoc DCHI

            Comment


            • #7
              Cảm ơn các bạn để mình làm thử!!!

              Comment


              • #8
                Nguyên văn bởi chung1608 Xem bài viết
                khai báo org điểm cần nhảy tới. VD:
                org 0020h
                main:
                mov 30h,#00h
                mov 31h,#0fch
                ..............
                org 00fch
                chỗ cần nhảy tới:
                ...................
                chương trính ngắt:
                ..........................
                pop 32h
                pop 32h
                push 31h
                push 30h
                reti

                xong rồi, chỗ push 31h và 30h hok nhớ cái nào push trước, ai làm nhớ thử lại .
                Chương trình sau khi phát hiện ngắt và làm tới chỗ pop, giải thích tại sao pop là vì để làm trống SP. Push vào là địa chỉ nơi cần thực hiện sau khi hoàn tất ngắt.
                Cho mình hỏi tại sao phải POP và PUSH 2 lần vậy bạn. Theo mình hiểu code của bạn thì chỉ cần PUSH 31h thui mà.

                Comment


                • #9
                  Nguyên văn bởi animo Xem bài viết
                  ; Doan code trong chuong trinh nhat

                  POP ACC
                  POP ACC ; bo dia chi luc bi ngat

                  MOV DPTR,#DCHI ; dia chi moi can tro ve sau khi ngat
                  PUSH DPL ;
                  PUSH DPH ; tao dia chi nhay den DCHI

                  ;doan code cua chuong trinh ngat

                  RETI ; thoat khoi chuong trinh ngat tro ve dia chi dinh truoc DCHI
                  Tại sao lại dùng POP ACC vậy bạn??? Theo mình biết thì đại chỉ chương trinh đang chứa trong thanh ghi SP. vậy bằng cách nào đó minh sẽ thay đổi địa chỉ trong thanh ghi SP này trước lệnh RETI thì mình sẽ nhảy dc đến địa chỉ mong muốn. KHông biết phải không nữa???

                  Comment


                  • #10
                    Nguyên văn bởi ronaldodtvt Xem bài viết
                    Cho mình hỏi tại sao phải POP và PUSH 2 lần vậy bạn. Theo mình hiểu code của bạn thì chỉ cần PUSH 31h thui mà.
                    địa chỉ khi ngắt đc ấn vào 2 lần thì phải lấy ra 2 lần, còn push vào cũng vậy phòng trường hợp địa chỉ chương trình con lớn hơn ffh

                    Comment


                    • #11
                      Địa chỉ con trỏ chương trình PC là 16bit, địa chỉ con trỏ ngăn xếp SP là 8bit, do đó khi ngắt thì địa chỉ trong PC sẻ chuyển vào 2 ô nhớ trong SP, ta dùng thủ thuật để thay đổi địa chỉ 2 ô nhớ này. Khi thực hiện xong chương trình ngắt VĐK sẻ bị ta đánh lừa, nó sẻ không trở về địa chỉ củ được

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X