Thông báo

Collapse
No announcement yet.

Ngắt onchange RB với PIC16F877A

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

  • Ngắt onchange RB với PIC16F877A

    E làm ngắt Rb bằng con Pic16f877a thì nó bị ngắt liên tục mặc dù đã xóa cờ ngắt, cứ ấn nút cái là nó xảy ra ngắt liên tục, ko hiểu cách khắc phục kiều gì. theo e là chip nó ngắt liên tục do nó thầy RB có sự thay đổi liên tục. các bác giúp em với

    Code:
    #include <16f877A.h>
    #device *= 16  ADC = 8
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #byte intcon=0x000B
    #bit RBIF=intcon.0 //dinh nghia co ngat RB
    #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #INT_RB
    void ngat_RB()
    {
    if((RBIF)&&(RBIE)) 
    {
    output_e(0b001);
    output_e(0b101);
    }
    RBIF=0;
    }
    
    void main() 
    { 
    SET_TRIS_B(0b11111111);
    SET_TRIS_A(0b111111);
    SET_TRIS_E(0b000);
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RB|H_TO_L);
    while(1) 
       {
       output_e(0b000);
       }
    }

  • #2
    Nguyên văn bởi exellence Xem bài viết
    E làm ngắt Rb bằng con Pic16f877a thì nó bị ngắt liên tục mặc dù đã xóa cờ ngắt, cứ ấn nút cái là nó xảy ra ngắt liên tục, ko hiểu cách khắc phục kiều gì. theo e là chip nó ngắt liên tục do nó thầy RB có sự thay đổi liên tục. các bác giúp em với

    Code:
    #include <16f877A.h>
    #device *= 16  ADC = 8
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #byte intcon=0x000B
    #bit RBIF=intcon.0 //dinh nghia co ngat RB
    #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #INT_RB
    void ngat_RB()
    {
    if((RBIF)&&(RBIE)) 
    {
    output_e(0b001);
    output_e(0b101);
    }
    RBIF=0;
    }
    
    void main() 
    { 
    SET_TRIS_B(0b11111111);
    SET_TRIS_A(0b111111);
    SET_TRIS_E(0b000);
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RB|H_TO_L);
    while(1) 
       {
       output_e(0b000);
       }
    }
    bạn nên cho nó chống rung nữa
    email:
    chỉ được liên lạc từ 19h00 - 21h30



    Comment


    • #3
      Bạn lấy đầu vào ngắt qua 1 phím bấm nhưng không có phần xử lý chống rung cho phím,search trên forum về cách xử lý chống rung cho phím bấm nhá.

      Comment


      • #4
        Bạn thử code này xem
        Code:
        #use delay(clock=20000000)
        #use rs232(baud=115200,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
        #include <def_877A.h>
        
        /*** Khai bao cac ngat ***/
        //Ngat Ngoai - RB0
        #int_EXT
        void EXT_isr(void) 
        {
        
        }
        //Ngat RB - Ngat tu ban phim 
        #int_RB
        void RB_isr(void) 
        {
           if(!rb4) //Chan RB4
           {
        
              return;
           }
           if(!rb5)//RB5
           {
        
              return;
           }
           if(!rb6)//RB6
           {
        
              return;
           }
           if(!rb7)//RB7
           {
        
           }
        }
        
        
        /*** Chuong trinh chinh ***/
        //Chuong trinh khoi tao
        void init(void)
        {
           
           EXT_INT_EDGE(H_TO_L);      //Ngat ngoai khi co suon xuong
           enable_interrupts(INT_RB); //Cho phep ngat RB4:RB7
           enable_interrupts(INT_EXT);//Cho phep ngat ngoai RB0
           enable_interrupts(GLOBAL); //Cho phep ngat
        }
        
        /*** Khai bao chuong trinh con ***/
        void main()
        {     
           init();
           while(true)
           { 
            
           }
        }

        Comment


        • #5
          Bạn nên đọc PORTB khi có ngắt.

          Comment


          • #6
            Nguyên văn bởi duong_act Xem bài viết
            Bạn nên đọc PORTB khi có ngắt.
            e không hiểu. đọc đề làm gì hả a. a nó rõ hơn dc ko

            Comment


            • #7
              Nguyên văn bởi e_fan Xem bài viết
              Bạn lấy đầu vào ngắt qua 1 phím bấm nhưng không có phần xử lý chống rung cho phím,search trên forum về cách xử lý chống rung cho phím bấm nhá.
              m nghĩ đây là ngắt cứng chứ ko phải ngắt mềm nên ko cần chống rung phím

              Comment


              • #8
                Một nút bấm khi bạn bấm ko phải là tạo ra 1 xung, có thể tạo ra hàng chục xung vì nút nhấn khi nhấn xuống cũng ko phải tiếp xúc hoàn toàn, nó cũg gồ ghề, lồi lõm, có lúc dẫn có lúc ko (nhưng phần lớn là dẫn), nên phải phải chống rung nữa, chỉ khi ngắt RB của bạn nối vs các lk điện tử ko phải là nút nhấn thì lúc đó ngắt RB mới chíng xác.
                Computer Science major - Vietnamese-German University
                Sponsored by

                Comment


                • #9
                  mình đã thử chống rung rồi vẫn ko dc. nó bị chết trong chương trình ngắt ko thoát ra dc

                  Comment


                  • #10
                    sao lại xóa cờ ngắt vì mấy cái ngắt cứng nó tự xóa mà ! bạn xóa hết những lệnh tào lao trong ngắt xem sao
                    còn nữa
                    while(1)
                    {
                    output_e(0b000);
                    }
                    bạn luôn xóa Porte mà ;
                    nên như thế lày xem
                    output_e(0b000);
                    while(1)
                    {

                    }
                    lập trình vi điều khiển 8051 - avr - pic- thiết kế mạch điện tử

                    Học Hiểu Nguyên Tắc - Tuân Theo Nguyên Tắc - Giải Trừ Nguyên Tắc

                    Comment


                    • #11
                      còn trong ngắt thì nên như này
                      void ngat_RB()
                      {
                      static int8 test;
                      output_e(test++);

                      }
                      lập trình vi điều khiển 8051 - avr - pic- thiết kế mạch điện tử

                      Học Hiểu Nguyên Tắc - Tuân Theo Nguyên Tắc - Giải Trừ Nguyên Tắc

                      Comment


                      • #12
                        Nguyên văn bởi exellence Xem bài viết
                        mình đã thử chống rung rồi vẫn ko dc. nó bị chết trong chương trình ngắt ko thoát ra dc
                        1.Bệnh này không phải do rung. Giả sử có rung thì rung 1 lúc rồi cũng phải thoát ra khỏi ngắt chứ đúng không?.

                        2. chương trình của bạn chết dí trong ngắt -> hãy đặt câu hỏi tại sao?. chỉ có 1 lý do duy nhất đó là luôn có sự thay đổi trên 1 trong các chân từ RB4 -> RB7.

                        3. thuốc chữa rất đơn giản là trên các chân từ RB4 -> RB7 bạn hãy nối 1 con trở 10K với dương nguồn, hoặc nối xuống đất.
                        (^_^) hoangnv.3i@gmail.com

                        Comment


                        • #13
                          Bạn xem file này nhé, mình mô phỏng và chạy thật rội
                          rb.rar

                          Comment


                          • #14
                            Đây là 1 đoạn chương trình mình viết bằng CCS với chức năng đếm số lần ấn nút rồi hiển thị ra PORTD:
                            Code:
                            #include <16F877A.h>
                            #fuses hs
                            #ocs 20M
                            
                            int m=0;
                            
                            #int_rb
                            void rb_isr(int temp)
                            {
                               temp=input_b();   // Doc PORTB
                               if(input(PIN_B5)==1){    // Nut duoc nhan se co muc LOGIC la 1.
                               m++;
                               output_d(m);}
                            }
                            
                            void main()
                            {
                               enable_interrupts(global);
                               enable_interrupts(int_rb);
                               set_tris_b(0xF0);
                               set_tris_d(0x00);
                               output_d(0x00);
                               while(true)
                               {
                               }
                            }

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            • Ng.Phuong.5
                              Khi in lỗ khoan ra pdf ở Orcad 9.2
                              bởi Ng.Phuong.5
                              Khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau.
                              Không biết có ai sửa được vấn đề này không ạ? Hay đây là mặc định của orcad 9.2 rồi ạ ?
                              Các cách em xem trên diễn đàn thử rồi nhưng không được ạ...
                              hôm nay, 19:47
                            • Ng.Phuong.5
                              Khi in lỗ khoan ra pdf ở Orcad 9.2
                              bởi Ng.Phuong.5
                              Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                              Không biết...
                              hôm nay, 19:45
                            • Ng.Phuong.5
                              Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                              bởi Ng.Phuong.5
                              Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                              Không biết...
                              hôm nay, 19:45
                            • Ng.Phuong.5
                              Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                              bởi Ng.Phuong.5
                              Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                              Mấy con...
                              hôm nay, 19:44
                            • viettinh
                              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                              bởi viettinh
                              Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                              Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                              hôm nay, 18:12
                            • nguyendinhvan
                              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                              bởi nguyendinhvan
                              Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                              Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                              Cách đơn giản...
                              hôm nay, 00:04
                            • Ng.Phuong.5
                              Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                              bởi Ng.Phuong.5
                              Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                              Mấy con...
                              Hôm qua, 22:44
                            • mèomướp
                              Trả lời cho Sửa bộ nguồn DC 60V 45A
                              bởi mèomướp
                              Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                              Hôm qua, 19:02
                            • tuyennhan
                              Trả lời cho Sửa bộ nguồn DC 60V 45A
                              bởi tuyennhan
                              Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                              Hôm qua, 15:43
                            • tuyennhan
                              Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                              bởi tuyennhan
                              Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                              Hôm qua, 15:28
                            Đang tải...
                            X