Thông báo

Collapse
No announcement yet.

Vấn đề khi ngắt

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

  • Vấn đề khi ngắt

    Mọi người cho mình hỏi, mình viết chương trình có sử dụng ngắt ngoài. Khi ngắt ngoài thì đi tra bảng. Lúc đầu mình viết đoạn chương trình phục vụ ngắt ngắn thì mạch hoạt động đúng ý đồ thiết kế.
    Nhưng khi mình có nhu cầu CALL thêm vài chương trình con trong đoạn chương trình phục vụ ngắt thì chương trình lại chạy ko theo ý đồ thiết kế.
    Không biết có ai từng bị vấn đề này biết cách nào có thể khắc phục hiện tượng này không, giúp mình với !!!

  • #2
    mình nghĩ, nếu chương trình con trong ngắt ngoài sử dụng trễ nhiều thì sẽ ảnh hưởng đến thời gian thoát ngắt để thực hiện chương trình khác.
    Vũ xuân Lợi
    YM!:

    Comment


    • #3
      Các chương trình con bạn CALL trong chương trình ngắt có hay được chương trình chính CALL không? Vì có thể khi đang ngắt, gặp câu lệnh CALL chương trình con thì vô tình lại nhảy vào thực hiện chương trình MAIN ở vài đoạn nào đó và không thể thoát ngắt được.

      Thân!
      "Cái quý nhất của con người ta là sự sống. Đời người chỉ sống có một lần.Phải sống sao cho khỏi xót xa ân hận..."
      Lê lết, lay lất sống qua ngày! >:)

      Comment


      • #4
        Bạn thứ post đoạn đó lên coi thử đi, chứ giờ có nhiều lý do lắm. Giống như bạn Babykid nói đó, có thể trong chương trình con mà bạn gọi nó chạy đi đâu mất tăm nên ko thể thoát ngắt được, hay cũng có thể bạn vô tình tắt ngắt ngoài đi rồi cũng nên
        Tôn Hữu
        Mail:
        nick yahoo : tonhuupc

        Comment


        • #5
          chương trình mình sửa tùm lum hết giờ chưa chỉnh lại được. Có thể nói thế này:
          Đầu tiên CT chính khởi tạo các giá trị cần thiết sao đó nhảy tại chỗ chờ ngắt.
          Khi có ngắt ngoài, sẽ call 2 chương trình con:
          - CT con 1 tra bảng rồi hiển thị.
          - CT con thứ hai giảm 1 thanh ghi R về 0 khi chưa về 0 thì thoát ra khi về 0 rồi tra bảng để kiểm tra giá trị thôi.
          Mình mô phỏng quá trình chạy của chương trình thì mình thấy. Khi CT con 1 chạy hết, CT hai giảm R khi chưa về 0 thì nó vẫn chạy đúng là nhảy về main và nhảy tại chỗ. Nhưng khi R về 0 rồi thì nó tra bảng kiểm tra làm lệnh RET rồi nhảy ra địa chỉ NOP gần cuối cùng luôn.
          Minh đã thử lại rồi để ý thấy. Có khi ngắt mà tra bảng 1 lần thì ko có vấn đề. Nhưng khi tra bảng thêm 1 làm nữa lại bị lỗi này không hiển vỉ sao.

          Comment


          • #6
            Theo mình thì bạn xem lại trong chương trình có sử dụng RAM ở các địa chỉ 08 trở lên hay không? Nếu có thì bạn khởi tạo lại thanh ghi SP ngoài vùng đó ra; có gì thì trao đổi tiếp.
            Chúc vui!

            Comment


            • #7
              Nguyên văn bởi doanhatphong Xem bài viết
              Theo mình thì bạn xem lại trong chương trình có sử dụng RAM ở các địa chỉ 08 trở lên hay không? Nếu có thì bạn khởi tạo lại thanh ghi SP ngoài vùng đó ra; có gì thì trao đổi tiếp.
              Chúc vui!
              mình cũng nghĩ là do khi ngắt bộ đếm pc cất vào sp .Đa số mình chỉ thao tác các thanh ghi R thôi ít thao tác trên RAM, chỉ có mình thao tác thanh ghi A cũng cất vào SP nên thử chuyển SP đi ra giữa ram và gần cuối ram rồi cũng thấy bị vậy. Không biết có ai có chương trình mô phỏng giá trị nào chi tiết ko cho mình với. Mình ko hiển lám về bộ đếm PC khi ngắt nó cất vào SP rồi sao đó mình thao tác cất vài thứ vào SP nó có ảnh hưởng tới bộ đếm PC ko

              Comment


              • #8
                Khi bạn thao tác cất vào SP trong chương trình ngắt thì phải lấy nó ra trước khi chương trình ngắt gặp lệnh RETI, nếu không thì thay vì lấy lại đúng địa chỉ cần quay về ở chương trình chính thì lại lấy một địa chỉ khác có giá trị bằng với số mà bạn cất vào SP, vì vậy có thể VDK sẽ chạy sai ý đồ của bạn.
                Chúc vui.

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X