Help!!!!! giúp mình với

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • dragonzzz
    Nhập môn đệ tử
    • Jan 2012
    • 1

    #1

    Help!!!!! giúp mình với

    Mình làm mạch có một nút nhấn. Sử dụng ngắt ngoài RB4-RB7.
    Vấn đề của mình ở đây là không sử dụng được biến toàn cục. Mình muốn ấn nút nhất 4 lần thì led thay đổi trạng thái. Nhưng biến toàn cục sau khi được tăng ở hàm ngắt, khi thoát ra khỏi hàm này nó trở về giá trị ban đầu. Đây là code của mình, mọi người xem và sửa sai dùm. Cảm ơn rất nhiều!

    #include "C:\Users\Admin.Admin-PC\Documents\main.h"
    #USE delay (clock=20000000)
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
    int8 mode;
    #INT_RB
    void RB_isr (void)
    {
    mode=mode+1;
    }
    Void main ()
    {
    set_tris_c (0x00);
    enable_interrupts(INT_RB);
    enable_interrupts(GLOBAL);
    ext_int_edge(H_TO_L);
    while (true)
    {
    if (mode==4)
    {
    output_low (pin_c0);
    }
    }
    }
  • cx039
    Nhập môn đệ tử
    • May 2012
    • 4

    #2
    Hình như ngắt ngoài của bạn không hoạt động thì phải:

    #INT_RB
    void RB_isr (void)
    {
    RBIF=1;
    if(RBIE && RBIF)
    {
    ifIF (rb7==0)
    {
    mode +=1;
    }
    }
    }

    Comment

    • vanminh_ictu
      Đệ tử 1 túi
      • Nov 2011
      • 13

      #3
      enable_interrupts(INT_RB);
      enable_interrupts(GLOBAL);
      ext_int_edge(H_TO_L);
      câu lệnh này nghĩa là gì vậy a ơi

      Comment

      • daosykhoa
        Nhập môn đệ tử
        • Jan 2011
        • 3

        #4
        trước hết bạn biết rằng ngắt rb là ngắt khi có thay đổi ở b4..b7 vậy khi bạn ấn nút sẽ có ngắt và bạn nhả nút cũng tạo thay đổi so với thời điểm trước đó nên cũng ngắt .
        thứ 2 trong while của bạn chẳng có lệnh nào để nhìn thấy mode bằng bao nhiêu.

        tôi thử VD sau:

        nút bấm vào b4, trở kéo lên.
        xuat ra port gia tri mode để test nhé

        #include <16f877a.h>
        #device *=16
        #use delay(clock=20000000)
        #fuses HS, NOWDT, NOLVP, NOBROWNOUT, NOPROTECT, NOPUT


        int8 mode;
        #int_rb
        void interrupts_rb()
        {
        //toi lam nut nhan o b4
        if(!input(pin_b4))mode++;
        }

        void main()
        {
        set_tris_b(0xff);
        set_tris_c(0x00);
        set_tris_d(0x00);
        enable_interrupts(global);
        enable_interrupts(int_rb);

        while(1)
        {
        if(mode==4)output_high(pin_c0);else output_low(pin_c0);
        output_d(mode);
        }
        }
        linhkiendientu24h.vn

        Comment

        Working...