Giúp về hàm delay...

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thuanbk1989
    Thành viên chính thức
    • Feb 2012
    • 87

    #1

    Giúp về hàm delay...

    các anh chị cho e hỏi là e dung Pic 16f684 nhưng sao viết lệnh e sử dụng lệnh Delay_ms ....mà sao k có tác dụng vậy???cụ thể là khi thay đổi biến trở e muốn trễ 5s sau đó mới thay đổi giá trị ra led nhưng sao nó cứ thay đôi ngay luôn.hic.các anh xem lệnh rồi giúp e nhé.e cảm ơn
    http://www.youtube.com/watch?v=CPptXWInNH4&feature=youtu.be

    int8 adc;


    set_adc_channel(0);
    delay_us(10);
    set_tris_c(0);
    set_tris_a(0000001);


    while(1){

    ADC=READ_ADC();
    if(adc<21){
    output_c(0x06);
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<42){

    output_c(0x00); //XUAT 0
    Output_bit(pin_a2,1);
    DELAY_MS(5000);
    }
    else if(adc<63){
    output_c(0x39); //XUAT1
    Output_bit(pin_a2,1);
    DELAY_MS(5000);
    }
    else if(adc<84){
    output_c(0x24); // xuat 2
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<105){
    output_c(0x30); // xuat 3
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<127){
    output_c(0x19); // xuat 4
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<148){
    output_c(0x12); // xuat 5
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<169){
    output_c(0x02); // xuat 6
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<190){
    output_c(0xF8); // xuat 7
    Output_bit(pin_a2,1);
    DELAY_MS(5000);
    }
    else if(adc<211){
    output_c(0x00); // xuat 8
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    else if(adc<232){
    output_c(0x10); // xuat 9
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }
    ELSE {
    output_c(0x0E); // xuat f
    Output_bit(pin_a2,0);
    DELAY_MS(5000);
    }

    }

    }
    ghi chú: e đã khai báo đầy đủ #use delay ........ e cung đã thử đặt lệnh delay ngay sau lệnh while nhưng vẫn k dc hic
  • superhieu1
    Thành viên tích cực
    • Jul 2010
    • 1884

    #2
    thu kiểu này xem
    while(1){

    ADC=READ_ADC();
    DELAY_MS(5000);
    if(adc<21)
    {
    output_c(0x06);
    Output_bit(pin_a2,0);
    }
    TamPhieuLuuKy@yahoo.com
    092 2838 712 --->>

    Comment

    • thuanbk1989
      Thành viên chính thức
      • Feb 2012
      • 87

      #3
      Nguyên văn bởi superhieu1 Xem bài viết
      thu kiểu này xem
      E cảm ơn anh.e làm như a nói nhưng k được mà đèn led sáng số 8 k thay đổi luôn.nhưng khi e đưa lệnh delay 5s xuống cuối vòng lặp while thi co trễ dc 1s....e tăng thời gian lên hoặc dùng 2 lệnh delay liên tiếp nó vẫn trễ 1s thui.hic.cơ bản là lệnh delay k có tác dụng nhưng e k bít tại sao??

      Comment

      • superhieu1
        Thành viên tích cực
        • Jul 2010
        • 1884

        #4
        bạn mô phỏng hay mạch thực
        và chú ý khi báo thạch anh giữa code và thạch anh thực
        nếu đc bạn có thể gói gọn file code và file mô phỏng quăng lên đây tui chữa giúp, chứ tra hỏi kiểu này lâu lắm, có thể liên hệ yahoo
        TamPhieuLuuKy@yahoo.com
        092 2838 712 --->>

        Comment

        • tranhieu_ece
          Thành viên tích cực
          • Oct 2009
          • 272

          #5
          Mình không biết là bạn sử dụng chường trình dịch gì & giá trị 5000 trong hàm DELAY_MS(5000) trình dịch có hiểu ko (một số trình dịch cũ nó chỉ giới hạn tới khoảng 150 thôi)
          bạn thay DELAY_MS(5000) bằng dòng này thử xem sao:
          for (int i = 0; i < 50; i++)
          {
          DELAY_MS(100)
          }

          Comment

          • chung1608
            Thành viên tích cực
            • Sep 2009
            • 4160

            #6
            khai báo thêm #ocs ?M

            Comment

            • caovanhuong
              Thành viên tích cực
              • Oct 2008
              • 1800

              #7
              Nguyên văn bởi thuanbk1989 Xem bài viết
              các anh chị cho e hỏi là e dung Pic 16f684 nhưng sao viết lệnh e sử dụng lệnh Delay_ms ....mà sao k có tác dụng vậy???cụ thể là khi thay đổi biến trở e muốn trễ 5s sau đó mới thay đổi giá trị ra led nhưng sao nó cứ thay đôi ngay luôn.hic.các anh xem lệnh rồi giúp e nhé.e cảm ơn
              http://www.youtube.com/watch?v=CPptXWInNH4&feature=youtu.be

              Code:
              int8 adc;
               
               
                 set_adc_channel(0);
                 delay_us(10);
                 set_tris_c(0);
                 set_tris_a(0000001);
                     
                  
                while(1){   
                        
                       ADC=READ_ADC();
                          if(adc<21){
                          output_c(0x06);
                          Output_bit(pin_a2,0);
                          DELAY_MS(5000);
                          }
                          else if(adc<42){
                       
                          output_c(0x00); //XUAT 0
                          Output_bit(pin_a2,1);
                           DELAY_MS(5000);
                          }
                          else if(adc<63){
                            output_c(0x39); //XUAT1
                            Output_bit(pin_a2,1);
                            DELAY_MS(5000);
                          }
                          else if(adc<84){
                             output_c(0x24);      // xuat 2
                             Output_bit(pin_a2,0);
                           DELAY_MS(5000);
                          }
                          else if(adc<105){
                              output_c(0x30);     // xuat 3
                              Output_bit(pin_a2,0);
                              DELAY_MS(5000);
                          }
                          else if(adc<127){
                              output_c(0x19);     // xuat 4
                              Output_bit(pin_a2,0);
                               DELAY_MS(5000);
                          }
                          else if(adc<148){
                              output_c(0x12);     // xuat 5
                              Output_bit(pin_a2,0);
                              DELAY_MS(5000);
                          }
                          else if(adc<169){
                              output_c(0x02);     // xuat 6
                              Output_bit(pin_a2,0);
                              DELAY_MS(5000);
                          }
                          else if(adc<190){
                              output_c(0xF8);     // xuat 7
                              Output_bit(pin_a2,1);
                              DELAY_MS(5000);
                          }
                          else if(adc<211){
                              output_c(0x00);     // xuat 8
                              Output_bit(pin_a2,0);
                              DELAY_MS(5000);
                          }
                          else if(adc<232){
                              output_c(0x10);     // xuat 9
                              Output_bit(pin_a2,0);
                              DELAY_MS(5000);
                          }
                          ELSE {
                              output_c(0x0E);     // xuat f
                              Output_bit(pin_a2,0);
                              DELAY_MS(5000);
                          }
                      
                }
                
              }
              ghi chú: e đã khai báo đầy đủ #use delay ........ e cung đã thử đặt lệnh delay ngay sau lệnh while nhưng vẫn k dc hic
              đoạn code này thấy đúng rồi, không biết đoạn trên thì sao. bạn xem lại cài thạch anh trong proteus đúng chưa.
              bạn nói bạn khai báo #use delay đầy đủ, vậy biết là nó như thế nào, nó có đúng không. bạn nên post toàn bộ code và file mô phỏng, nếu ai đó rảnh rỗi sẽ sửa code và mô phỏng giúp bạn luôn.

              Comment

              • thuanbk1989
                Thành viên chính thức
                • Feb 2012
                • 87

                #8
                Cảm ơn các anh....e làm dc rùi hjhj Lý do là e dùng lệnh Set_tris_a(00000001) là k đúng mà phải là Set_tris_a(0b00000001).nhưng không hiểu sao e biên dịch k báo lỗi...e dùng Pic C cmpiler .cảm ơn mọi người

                Comment

                • Lenh Ho
                  Thành viên tích cực
                  • Mar 2010
                  • 378

                  #9
                  đôi khi là lỗi vu vơ hehe
                  Be quan. Plz contact through email:

                  Comment

                  • superhieu1
                    Thành viên tích cực
                    • Jul 2010
                    • 1884

                    #10
                    bạn nên xem lại về chuyển đổi các hệ số nhé, 00000001 tức là 1 trong decimer tương đương ob00000001
                    TamPhieuLuuKy@yahoo.com
                    092 2838 712 --->>

                    Comment

                    • thuanbk1989
                      Thành viên chính thức
                      • Feb 2012
                      • 87

                      #11
                      Vâng.cảm ơn anh

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...