Thông báo

Collapse
No announcement yet.

Xin hỏi các anh vài điều về Ngắt ngoài AVR

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

  • Xin hỏi các anh vài điều về Ngắt ngoài AVR

    Theo em biết thì thanh ghi MCUC để xác định chế độ cho ngắt ngoài, thanh ghi MCUCR để cho phép ngắt nào hoạt động
    E có một câu hỏi là em muốn khi ngắt 0 làm việc thì không nhận ngăt1 và ngược lại khi ngắt 1 làm việc thì không nhận ngắt 0.
    Em đã thử tác động vào cả thanh ghi MUCR bit 6,7 và cả bit Global Interrupt Enable mà khi mô phỏng vẫn không được.
    Khi chương trình của ngắt 0 chạy mà ta tác động vào nút bấm ngắt 1 thì lệnh ngắt vẫn được nhận.
    Xin các anh chị bỏ chút thời gian chỉ giáo cho em, em xin cảm ơn!

  • #2
    khi vào chương trình phục vụ ngắt 0 thì xóa ko cho ngắt 1 xảy ra gần thoát ra thì cho phép nhận ngắt 1 và ngược lại với cái chương trình phục vụ ngắt 1

    Comment


    • #3
      Em đã thử rồi anh chung1608 ạ. Nhưng mà khi tác động bằng cả những cách trên thì đều không ổn
      Cụ thể là:
      Nếu ngắt 0 đang chạy, mà nhấn ngắt 1 thì chương trình của ngắt 1 không chạy ngay mà sau khi chạy xong chương trình ở ngắt 0 thì tiếp tục chạy CT ngắt 1
      Em đã mô phỏng trên ISIS. Chính vì vậy em mới nhờ tới các anh chị chỉ giáo cho

      Comment


      • #4
        Nguyên văn bởi tuanvjpro Xem bài viết
        Em đã thử rồi anh chung1608 ạ. Nhưng mà khi tác động bằng cả những cách trên thì đều không ổn
        Cụ thể là:
        Nếu ngắt 0 đang chạy, mà nhấn ngắt 1 thì chương trình của ngắt 1 không chạy ngay mà sau khi chạy xong chương trình ở ngắt 0 thì tiếp tục chạy CT ngắt 1
        Em đã mô phỏng trên ISIS. Chính vì vậy em mới nhờ tới các anh chị chỉ giáo cho
        Khi vào chương trình ngắt thì gọi CLI và trước khi ra khỏi ngắt thì xóa cờ báo ngắt INTF0 INTF1 của thanh ghi GIFR và gọi SEI.
        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


        • #5
          Ý của anh là thế này đúng không ạ:
          // External Interrupt 0 service routine
          interrupt [EXT_INT0] void ext_int0_isr(void)
          {
          // Place your code here

          #asm("cli")
          out1=1;
          out2=0;
          delay_ms(2000);
          GICR=0x00;
          #asm("sei")
          }
          Em đã thử anh ạ, không thành công
          Nguyên văn bởi VNarmy Xem bài viết
          Khi vào chương trình ngắt thì gọi CLI và trước khi ra khỏi ngắt thì xóa cờ báo ngắt INTF0 INTF1 của thanh ghi GIFR và gọi SEI.

          Comment


          • #6
            hì là được oy` :v
            GIFR chứa hai cờ ngắt INTF1,0 bit 7,6. AVR cho phép xóa cờ ngắt bằng cách set bit 1 lên cờ ngắt
            nên trong các hàm thực hiện ngắt chỉ cần set 2 bit 6,7 của GIFR lên 1 là nó sẽ không thực hiện ngắt kia sau khi xong ngắt đang thực hiện nữa (không biết đây có phải ý bạn muốn thực hiện ko?).
            Nghick cái này hiểu thêm đc về ngắt, mọi khi vẫn làm nhưng ko hiểu. haha :v

            Comment


            • #7
              Ý của bạn là:
              Muốn vô hiệu hóa ngắt thì ta set bit 6(7) lên "1" thay vì xóa bit đó về "0"?
              Right?
              Và mình đã nhầm ở chỗ:
              Thay vì lập lên "1" thì mình lại xóa về "0" hai bit đó?

              Comment


              • #8
                Mình đã thử. very goooooooooooood
                Rất cảm ơn bạn, chơi với người thông minh biết ngay. he
                Cảm ơn nhiều nhé.
                Nếu có thể cho mình xin yahoo or facebook để tiện trao đổi nhé ^^

                Comment


                • #9
                  Em xin lỗi vì chưa hiểu hết ý của anh. ^^ Em đã thử và đã hiểu rồi anh ạ. Anh cho em hỏi là cờ ngắt mình xóa bằng cách ghi bit "1" lên nó ạ?

                  Comment


                  • #10
                    Nguyên văn bởi tuanvjpro Xem bài viết
                    Em xin lỗi vì chưa hiểu hết ý của anh. ^^ Em đã thử và đã hiểu rồi anh ạ. Anh cho em hỏi là cờ ngắt mình xóa bằng cách ghi bit "1" lên nó ạ?
                    Trích datasheet

                    Bit 7 – INTF1: External Interrupt Flag 1
                    When an event on the INT1 pin triggers an interrupt request, INTF1 becomes set (one). If the I-bit in SREG and the INT1 bit in GICR are set (one), the MCU will jump to the corresponding Interrupt Vector. The flag is cleared when the interrupt routine is executed. Alternatively, the flag can be cleared by writing a logical one to it. This flag is always cleared when INT1 is configured as a level interrupt.
                    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


                    • #11
                      Em cảm ơn anh!
                      Nếu có thể anh cho em xin Yh! hoặc Fb của anh để kết bạn được không ạ?

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X