Thông báo

Collapse
No announcement yet.

mọi người ai biết giúp mình với!!!!!

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

  • mọi người ai biết giúp mình với!!!!!

    Mjnh đang tự làm con robot dò đường dùng pic 16f877a nhưng cai code ko hiểu sao lại ko chạy dc ai pro vào xem hộ mìn cái !














    #include <16F877A.h>
    #device adc=10

    #FUSES NOWDT //No Watch Dog Timer
    #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
    #FUSES NOPUT //No Power Up Timer
    #FUSES NOPROTECT //Code not protected from reading
    #FUSES NODEBUG //No Debug mode for ICD
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    #FUSES NOCPD //No EE protection
    #FUSES NOWRT //Program memory not write protected
    #FUSES RESERVED //Used to set the reserved FUSE bits

    #use delay(clock=24000000)


    #define dc_t(x) set_pwm1_duty(x)
    #define dc_p(x) set_pwm2_duty(x)
    #define dir_t_l output_low(pin_c2) // dc_1 muc thap
    #define dir_t_h output_high(pin_c3) // dc_1 muc cao
    #define dir_p_l output_low(pin_c0) // dc_2 muc thap
    #define dir_p_h output_high(pin_c1) // dc_2 muc cao
    /////////////////////////////////////////////
    INT8 SENSOR=0xfc;
    INT1 LEFT,RIGHT;
    INT8 SPEED; //toc do dong co
    int8 nguong = 100; // nguong cam bien /////////////////////////////////////////////////////////////////////////
    INT8 DELTA_P=0;
    INT8 DELTA_T=0;

    VOID scan()

    {

    int8 k;
    sensor=0;
    for(k=0;k<=5;k++)
    {
    set_adc_channel(k);
    delay_ms(10);
    if(read_adc()>150) bit_set(sensor,k);

    }

    }

    VOID TU_DONG_TIEN()
    {
    if (sensor==0b00100000){dc_t(10);dc_p(60);}
    if (sensor==0b00010000){dc_t(10);dc_p(50);}
    if (sensor==0b00001000){dc_t(10);dc_p(40);}
    if (sensor==0b00001100){dc_t(50);dc_p(50);}
    if (sensor==0b00000100){dc_t(60);dc_p(10);}
    if (sensor==0b00000010){dc_t(50);dc_p(10);}
    if (sensor==0b00000001){dc_t(40);dc_p(0);}
    }


    void main()
    {

    setup_timer_2(T2_div_by_4,100,1);
    setup_ccp1(ccp_pwm);
    setup_ccp2(ccp_pwm);


    //Dinh huong cong vao ra
    set_tris_a(255); // Cong A vao
    set_tris_c(0); // Cong C ra
    //set_timer0(0xFFFE);


    while(1)
    {
    scan();
    //sensor=0b00000001
    void tu_dong_tien();/////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //sensor=0b00000000;

    }


    }
    chịu khó học hỏi

  • #2
    Bạn fải nói rõ xem code ko chạy hay nạp vào mà pic ko chạy chứ?

    Comment


    • #3
      Nguyên văn bởi xmentpro Xem bài viết
      Mjnh đang tự làm con robot dò đường dùng pic 16f877a nhưng cai code ko hiểu sao lại ko chạy dc ai pro vào xem hộ mìn cái !














      #include <16F877A.h>
      #device adc=10

      #FUSES NOWDT //No Watch Dog Timer
      #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
      #FUSES NOPUT //No Power Up Timer
      #FUSES NOPROTECT //Code not protected from reading
      #FUSES NODEBUG //No Debug mode for ICD
      #FUSES NOBROWNOUT //No brownout reset
      #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
      #FUSES NOCPD //No EE protection
      #FUSES NOWRT //Program memory not write protected
      #FUSES RESERVED //Used to set the reserved FUSE bits

      #use delay(clock=24000000)


      #define dc_t(x) set_pwm1_duty(x)
      #define dc_p(x) set_pwm2_duty(x)
      #define dir_t_l output_low(pin_c2) // dc_1 muc thap
      #define dir_t_h output_high(pin_c3) // dc_1 muc cao
      #define dir_p_l output_low(pin_c0) // dc_2 muc thap
      #define dir_p_h output_high(pin_c1) // dc_2 muc cao
      /////////////////////////////////////////////
      INT8 SENSOR=0xfc;
      INT1 LEFT,RIGHT;
      INT8 SPEED; //toc do dong co
      int8 nguong = 100; // nguong cam bien /////////////////////////////////////////////////////////////////////////
      INT8 DELTA_P=0;
      INT8 DELTA_T=0;

      VOID scan()

      {

      int8 k;
      sensor=0;
      for(k=0;k<=5;k++)
      {
      set_adc_channel(k);
      delay_ms(10);
      if(read_adc()>150) bit_set(sensor,k);

      }

      }

      VOID TU_DONG_TIEN()
      {
      if (sensor==0b00100000){dc_t(10);dc_p(60);}
      if (sensor==0b00010000){dc_t(10);dc_p(50);}
      if (sensor==0b00001000){dc_t(10);dc_p(40);}
      if (sensor==0b00001100){dc_t(50);dc_p(50);}
      if (sensor==0b00000100){dc_t(60);dc_p(10);}
      if (sensor==0b00000010){dc_t(50);dc_p(10);}
      if (sensor==0b00000001){dc_t(40);dc_p(0);}
      }


      void main()
      {

      setup_timer_2(T2_div_by_4,100,1);
      setup_ccp1(ccp_pwm);
      setup_ccp2(ccp_pwm);


      //Dinh huong cong vao ra
      set_tris_a(255); // Cong A vao
      set_tris_c(0); // Cong C ra
      //set_timer0(0xFFFE);


      while(1)
      {
      scan();
      //sensor=0b00000001
      void tu_dong_tien();/////////////////////////////////////////////////////////////////////////////////////////////////////////////

      //sensor=0b00000000;

      }


      }
      trước tiên khoan dò đường , thử băm xung động cơ xem nó chạy chưa? rồi mới tính tính tiếp.
      gọi ctrinh trình con thì không cần void tu_dong_tien();
      Đời không như mình nghĩ. phải tranh thủ thôi ***********

      Comment


      • #4
        Hnhư bạn chưa khai báo cài đặt adc thì fải. trước khi sử dụng adc thì bạn fải khai báo những chân nào cổng A sử dụng cho adc đã. bạn nên tham khao các hàm đó trong help!

        Comment


        • #5
          Nguyên văn bởi chairman_t Xem bài viết
          trước tiên khoan dò đường , thử băm xung động cơ xem nó chạy chưa? rồi mới tính tính tiếp.
          gọi ctrinh trình con thì không cần void tu_dong_tien();
          Đồng ý! bạn nên test ctr nhỏ trước khi thực hiện 1 ctr lớn!

          Comment


          • #6
            mình đang học lập trình nên hơi gà mong mọi người chỉ giáo giúp !
            chịu khó học hỏi

            Comment


            • #7
              Nguyên văn bởi xmentpro Xem bài viết
              mình đang học lập trình nên hơi gà mong mọi người chỉ giáo giúp !
              Bạn cần phải có thêm các dòng khai báo ADC này nữa:
              SETUP_ADC(ADC_CLOCK_INTERNAL)//Clock adc là do hệ thống
              SETUP_ADC_PORTS(ALL_ANALOG)//Tất cả các chân cổng A và E là chân analog
              Sau đó bạn mới sử dụng được ngoại vi ADC

              Comment


              • #8
                vẫn không được bạn ah

                vẫn không được bạn ah
                chịu khó học hỏi

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X