Thông báo

Collapse
No announcement yet.

Vấn đề về ngắt RB

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

  • Vấn đề về ngắt RB

    Em viết chương trình cho nút bấm RB4-RB7 hiển thị led từ con 1 đến 8 dùng ngắt RB
    Nhưng mô phỏng thì ok nhưng khi nạp vào mạch thật thì không chạy được. Em đã kiểm tra lại các nút bấm bằng cách cho nút bấm vào portD thì lại được. Lần này bí quá mong anh em giúp đỡ với.


    #include <16f887.h>
    #fuses XT,NOLVP,NOWDT
    #use delay(clock=4000000)
    #use fast_io(b)
    #use fast_io(d)
    #byte portB=0x06
    #byte portC=0x07
    #byte portD=0x08
    #byte intcon=0x000B
    #bit RD0=portd.0
    #bit RD1=portd.1
    #bit RD2=portd.2
    #bit RD3=portd.3

    #bit RB4=portB.4
    #bit RB5=portB.5
    #bit RB6=portB.6
    #bit RB7=portB.7
    #bit RBIF=intcon.0 //dinh nghia co ngat RB
    #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
    byte CONST so[] = {1,2,4,8,16,32,64,128,255};
    int8 n=0,dv=0,hc=0;

    #INT_RB
    void ngat_RB()
    {
    if((RBIF)&&(RBIE)) {
    if (RB4==0) {if (n<7) {n=n+1;}}
    if (RB5==0) {if (n>0) {n=n-1;}}
    if (RB6==0) {n=8;}



    }
    RBIF=0;
    }



    void main()
    {
    enable_interrupts(global);
    enable_interrupts(int_RB);//Cho phep ngat RB
    ext_int_edge(H_to_L);
    set_tris_D(0x00);
    set_tris_B(0xFF);
    while (1) {
    output_D(so[n]);
    delay_ms(200);
    output_D(0);
    delay_ms(200);

    }
    }

  • #2
    Nguyên văn bởi emperordx Xem bài viết
    Em viết chương trình cho nút bấm RB4-RB7 hiển thị led từ con 1 đến 8 dùng ngắt RB
    Nhưng mô phỏng thì ok nhưng khi nạp vào mạch thật thì không chạy được. Em đã kiểm tra lại các nút bấm bằng cách cho nút bấm vào portD thì lại được. Lần này bí quá mong anh em giúp đỡ với.
    các chân bạn có nối trở lên Vcc ko
    email:
    chỉ được liên lạc từ 19h00 - 21h30



    Comment


    • #3
      Nguyên văn bởi sang_dientu Xem bài viết
      các chân bạn có nối trở lên Vcc ko
      Các chân port B đều có pull up nội (bit 7 <RBPU> của thanh ghi OPTION). Bạn nên set cái đó.
      Còn không bạn có thể dùng polling thay cho ngắt.
      Computer Science major - Vietnamese-German University
      Sponsored by

      Comment


      • #4
        coi đúng dao động với mạch thật chưa nếu đúng rùi coi lại coi RB treo trở chưa!
        email
        nick: bangbigboy_bigboy
        sdt :01203380789

        Comment


        • #5
          Nguyên văn bởi hieuthai2011 Xem bài viết
          coi đúng dao động với mạch thật chưa nếu đúng rùi coi lại coi RB treo trở chưa!
          Em đã kiểm tra kỹ lắm rồi.Mô phỏng em test thì đúng, nút bấm trong mạch thật ko có gì sai vì đã đem thử ở portD


          Các chân port B đều có pull up nội (bit 7 <RBPU> của thanh ghi OPTION). Bạn nên set cái đó.
          Còn không bạn có thể dùng polling thay cho ngắt.
          là sao bác?? cái này em chưa hiểu lắm và cũng chưa từng nghe tới, bác giải thích hộ em với nhé, em làm hoài cái ngắt mà ko đc, chán quá

          Comment


          • #6
            Nguyên văn bởi emperordx Xem bài viết
            Em đã kiểm tra kỹ lắm rồi.Mô phỏng em test thì đúng, nút bấm trong mạch thật ko có gì sai vì đã đem thử ở portD

            ngăt nó khoang hoang toàn với input bình thường bạn à. bạn xem thử khai báo đầy đủ ngắt chưa. và PIC có chạy không. hay bị đứng ở đâu đó. coi thử cờ ngắt có được bật xuống không.

            (vì mình dùng HTpic nên không rỏ code ni lắm)
            email:
            chỉ được liên lạc từ 19h00 - 21h30



            Comment


            • #7
              Đây là một trong nhiều lý do khiến việc mô phỏng chả có ý nghĩa gì : một thiết kế có thể chạy mô phỏng tốt nhưng khác xa datasheet, khác xa thực tế, tất nhiên không chạy thực.

              Thứ nhất, nếu vẫn cắm mạch nạp ở RB7 và RB6 thì 2 sợi này không chạy input được, phải rút hẳn mạch nạp ra.

              Thứ nhì, RB5 và RB4 có tính năng AN, khi đặt cổng B là input thì tự động chúng trở thành analog input. Phải đặt chúng là digital input bằng cách can thiệp vào thanh ghi ANSELH tắt chức năng analog ở sợi cổng đi.

              Thứ ba, phải treo trở bên ngoài cổng lên VCC hoặc bật tính năng weak pull up cho cổng thì chạy mới đúng được.
              Phần mềm tự do hoặc không dùng máy tính nữa !.

              Comment


              • #8
                Nguyên văn bởi bqviet Xem bài viết
                Đây là một trong nhiều lý do khiến việc mô phỏng chả có ý nghĩa gì : một thiết kế có thể chạy mô phỏng tốt nhưng khác xa datasheet, khác xa thực tế, tất nhiên không chạy thực.

                Thứ nhất, nếu vẫn cắm mạch nạp ở RB7 và RB6 thì 2 sợi này không chạy input được, phải rút hẳn mạch nạp ra.

                Thứ nhì, RB5 và RB4 có tính năng AN, khi đặt cổng B là input thì tự động chúng trở thành analog input. Phải đặt chúng là digital input bằng cách can thiệp vào thanh ghi ANSELH tắt chức năng analog ở sợi cổng đi.

                Thứ ba, phải treo trở bên ngoài cổng lên VCC hoặc bật tính năng weak pull up cho cổng thì chạy mới đúng được.
                Vấn đề thứ nhất và thứ 3 thì em làm đúng. Mạch em thì em đã kiểm tra kỹ và chắc là ko sai đc.
                Còn về thanh ghi ANSELH là sao ạ? anh nói vấn đề này giúp em và tắt nó như thế nào thì được.Vì em cũng chỉ mới tập tành viết thôi. Em cảm ơn

                Comment


                • #9
                  Nguyên văn bởi emperordx Xem bài viết
                  Vấn đề thứ nhất và thứ 3 thì em làm đúng. Mạch em thì em đã kiểm tra kỹ và chắc là ko sai đc.
                  Còn về thanh ghi ANSELH là sao ạ? anh nói vấn đề này giúp em và tắt nó như thế nào thì được.Vì em cũng chỉ mới tập tành viết thôi. Em cảm ơn
                  ngoài các vấn đề đã nêu ở trên để ngắt RB của 16f887 làm việc được dùng thêm lệnh sau: enable_interrupts(int_RBx);
                  code:
                  Code:
                  #include <16f887.h>
                  #fuses XT,NOLVP,NOWDT
                  #use delay(clock=4000000)
                  #use fast_io(b)
                  #use fast_io(d)
                  #byte portB=0x06
                  #byte portC=0x07
                  #byte portD=0x08
                  #byte intcon=0x000B
                  #bit RD0=portd.0
                  #bit RD1=portd.1
                  #bit RD2=portd.2
                  #bit RD3=portd.3
                  
                  #bit RB4=portB.4
                  #bit RB5=portB.5
                  #bit RB6=portB.6
                  #bit RB7=portB.7
                  #bit RBIF=intcon.0 //dinh nghia co ngat RB
                  #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
                  byte CONST so[] = {1,2,4,8,16,32,64,128,255};
                  int8 n=0,dv=0,hc=0;
                  
                  #INT_RB
                  void ngat_RB()
                  {
                  if((RBIF)&&(RBIE)) {
                  if (RB4==0) {if (n<7) {n=n+1;}}
                  if (RB5==0) {if (n>0) {n=n-1;}}
                  if (RB6==0) {n=8;}
                  }
                  RBIF=0;
                  }
                  
                  
                  
                  void main()
                  {
                  
                  set_tris_D(0x00);
                  set_tris_B(0xFF);
                  SETUP_ADC_PORTS(NO_ANALOGS);//giải quyết Vấn đề thứ 2
                  enable_interrupts(global);
                  enable_interrupts(int_RB);//Cho phep ngat RB
                  enable_interrupts(int_RB4);
                  enable_interrupts(int_RB5);
                  enable_interrupts(int_RB6);
                  ext_int_edge(H_to_L);
                  while (1) {
                  output_D(so[n]);
                  delay_ms(200);
                  output_D(0);
                  delay_ms(200);
                  
                  }
                  }
                  |

                  Comment


                  • #10
                    Xin chân thành cảm ơn các bác đã giúp em, vấn đề của em đã được giải quyết xong, tuy nhiên em thấy cần phải thêm delay sau khi kiểm tra nút bấm để nút bấm hoạt động tốt hơn.

                    Comment


                    • #11
                      Nguyên văn bởi emperordx Xem bài viết
                      Xin chân thành cảm ơn các bác đã giúp em, vấn đề của em đã được giải quyết xong, tuy nhiên em thấy cần phải thêm delay sau khi kiểm tra nút bấm để nút bấm hoạt động tốt hơn.
                      thêm delay hoặc tiếng bep để chống rung phím
                      email:
                      chỉ được liên lạc từ 19h00 - 21h30



                      Comment


                      • #12
                        dùng vòng lặp while để chống rung phím tốt hơn và dễ hơn dùng delay

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        • tuyennhan
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi tuyennhan
                          Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                          Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                          hôm nay, 07:44
                        • vi van pham
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi vi van pham
                          Cám ơn những lời chúc tốt đẹp của em.

                          Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                          Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                          hôm nay, 02:00
                        • nhathung1101
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi nhathung1101
                          Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                          Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                          Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                          Hôm qua, 22:18
                        • dinhthuong80
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi dinhthuong80
                          Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                          Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                          Hôm qua, 14:51
                        • dinhthuong80
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi dinhthuong80
                          Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                          Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                          Hôm qua, 14:39
                        • dinhthuong80
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi dinhthuong80
                          Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                          Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                          Hôm qua, 14:28
                        • bqviet
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi bqviet
                          Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                          21-02-2025, 20:26
                        • mèomướp
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi mèomướp
                          Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                          21-02-2025, 12:32
                        • vi van pham
                          Trả lời cho Tiếng Anh cho người Việt
                          bởi vi van pham
                          Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                          Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                          20-02-2025, 21:31
                        • bqviet
                          Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )
                          bởi bqviet
                          Thiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.
                          20-02-2025, 17:22
                        Đang tải...
                        X