Thông báo

Collapse
No announcement yet.

ngắt RB4-RB7 giúp em

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

  • ngắt RB4-RB7 giúp em

    #include <16f877a.h>
    #include <def_877a.h>
    #fuses XT,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=4000000)
    #int_RB
    void ngat_RB()
    {
    if(RB4==0)
    {
    portd=0b00000101;
    }
    if(RB5==0)
    {
    portd=0b11000101;
    }
    if(RB6==0)
    {
    portd=0b11110101;
    }
    if(RB7==0)
    {
    portd=0xff;
    }
    }
    void main()
    {
    trisb=0xff;
    trisd=0x00;
    portd=0x00;
    enable_interrupts(global);
    enable_interrupts(int_RB);
    ext_int_edge(H_to_L);
    while(true)
    {
    portd=0xff;
    }
    }


    tại sao khi 1 trong 4 chân rb4-rb7 xuống mức thấp nó ko xảy ra ngắt nhỉ.ai giúp em với

  • #2
    Hi,
    Bác phải làm như ri: if(!input(PIN_B4)) output_d(0b00000101);

    Nếu muốn mần theo kiểu của bác thì phải có khai báo:
    #byte RD = getenv("SFR: PORTD")
    #byte RB = getenv("SFR: PORTB")
    #bit RB4 = RB.4
    #bit RB5 = RB.5
    ....

    Khi đó bác có thể viết theo kiểu if(RB4 == 0) RD = 0x05;
    Khuyến cáo không nên dùng mấy tên cổng trong lập trình mà nên khai báo chức năng của cổng đó làm gì ví dụ RB4 dùng làm nút Enter thì khai báo:
    #bit Enter = RB.4 thay cho dòng #bit RB4 = RB.4.
    Khi đó đọc source code dễ hiểu hơn với ví dụ trên thì người đọc sẽ hiểu rằng khi bấm nút Enter thì chuyện gì sẽ xảy ra... Với cách viết này đôi khi bác có thể copy code của chip này làm code của loại chip khác mà chỉ cần chỉnh sửa rất ít.
    Thân ái.
    Last edited by Hard; 22-03-2012, 23:26.
    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

    Comment


    • #3
      Để if( RB4==0) cũng đc. Bạn xem luồng này nhé: CCS C for PIC16F877A - Page 2 - PIC Vietnam
      Web:
      ->Nhận thiết kế, hoàn thiện dự án, sản phẩm điện tử<-
      -->Giải pháp GSM/GPRS/GPS - Công nghệ RFID<--

      Comment


      • #4
        Nguyên văn bởi 222222 Xem bài viết
        #include <16f877a.h>
        #include <def_877a.h>
        #fuses XT,NOWDT,NOPROTECT,NOLVP
        #use delay(clock=4000000)
        #int_RB
        void ngat_RB()
        {
        if(RB4==0)
        {
        portd=0b00000101;
        }
        if(RB5==0)
        {
        portd=0b11000101;
        }
        if(RB6==0)
        {
        portd=0b11110101;
        }
        if(RB7==0)
        {
        portd=0xff;
        }
        }
        void main()
        {
        trisb=0xff;
        trisd=0x00;
        portd=0x00;
        enable_interrupts(global);
        enable_interrupts(int_RB);
        ext_int_edge(H_to_L);
        while(true)
        {
        portd=0xff;
        }
        }


        tại sao khi 1 trong 4 chân rb4-rb7 xuống mức thấp nó ko xảy ra ngắt nhỉ.ai giúp em với
        thêm lệnh này vào hàm main:
        port_b_pullups(TRUE);//dung r keo len nguon
        while(true)
        {
        portd=0xff;
        }
        viết thế này ngắt có xảy ra bạn cũng không thấy portd nó thay đổi.
        |

        Comment


        • #5
          cho mình hỏi xíu

          làm sao để thoát ra khỏi ngắt vậy.hay là khi 1 trong 4 chân RB4-RB7 lên mức logic 1 thì thoát ra khỏi ngắt lúcđó portd=0xff phải hok?ai chỉ giúp mình với

          Comment


          • #6
            Nguyên văn bởi 222222 Xem bài viết
            làm sao để thoát ra khỏi ngắt vậy.hay là khi 1 trong 4 chân RB4-RB7 lên mức logic 1 thì thoát ra khỏi ngắt lúcđó portd=0xff phải hok?ai chỉ giúp mình với
            while(true)
            {
            }
            |

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X