Thông báo

Collapse
No announcement yet.

"HELP" giao tiếp rs232 với pic16f877A với máy tính

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

  • "HELP" giao tiếp rs232 với pic16f877A với máy tính

    em có viết đoạn chương trình giao tiếp pc với pic 16f877 qua rs232 nhưng không biết lỗi chỗ nào mà kí tự truyền xuống pic rùi nhưng pic ko thực hiện chương trình tiếp theo các huynh giúp đệ với .sủa lỗi sai giúp đệ với ! đây là đoạn chương chình nạp vào pic :
    #include <16f877.h>
    #fuses hs,put,noprotect,nolvp,nowdt
    #use delay(clock=20000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
    #byte portd=0x08
    #byte PORTa=0x05
    #byte portb=0x06
    char c;
    #int_RDA
    void RDA_INT()
    {
    c = getchar();
    if (c=="t")
    {
    setup_ccp1(CCP_PWM);
    set_pwm1_duty(512);
    }

    }

    void main()
    {
    setup_timer_2(T2_DIV_BY_16,255,1);
    enable_interrupts(INT_EXT);
    enable_interrupts(INT_RDA);
    enable_interrupts(GLOBAL);



    while(1)
    {

    }
    }

  • #2
    các huynh đài giúp đệ với !thank các huynh nhìu lắm !

    Comment


    • #3
      sửa if (c=="t") thành if (c=='t') là được

      Comment


      • #4
        Nguyên văn bởi thinking Xem bài viết
        sửa if (c=="t") thành if (c=='t') là được
        huynh cho đệ hỏi một chút đc ko ! em truyền các kí tự từ trên VB xuống VDK để điều khiển động cơ,giả sử như 't' là để động cơ quay thuận và 'n' để động cơ quay ngược và 's' để dừng động cơ ! nhưng khi VB truyền hết các kí tự đó xuống hết rùi nhưng VDK không đúng đây là code huynh xem hộ em sai chỗ nào đc ko thanh huynh nhìu nhìu :
        #include <16f877.h>
        #fuses hs,put,noprotect,nolvp,nowdt
        #use delay(clock=20000000)
        #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
        #byte portd=0x08
        #byte PORTa=0x05
        #byte portb=0x06
        char c;
        #int_RDA
        Receive_isr()
        {
        c = getc();
        if (c=='t')//quay thuan
        {

        setup_ccp1(CCP_OFF);
        setup_ccp2(CCP_PWM);
        set_pwm1_duty(512);
        }
        else if (c=='n') //quay nguoc
        {

        setup_ccp2(CCP_OFF);
        setup_ccp1(CCP_PWM);
        set_pwm1_duty(512);
        }

        if (c='s')//dung dong co
        {
        setup_ccp2(CCP_OFF);
        setup_ccp1(CCP_OFF);
        }
        }

        void main()
        {

        setup_timer_2(T2_DIV_BY_16,255,1);
        enable_interrupts(int_rda); //cho phep ngat noi tiep nhan.
        enable_interrupts(GLOBAL);
        while(1)
        {

        }

        }

        Comment


        • #5
          huynh cho em email để em hỏi cho tiện !

          Comment


          • #6
            mô phỏng phải thêm cổng not vào Tin, Tout của Max232 thì mới truyền nhận được(mạch thật thì phải bỏ đi) tôi cũng chả biết tại sao như thế, nhưng làm thật thì là thế...

            Comment


            • #7
              Nguyên văn bởi thacdtk72 Xem bài viết
              huynh cho đệ hỏi một chút đc ko ! em truyền các kí tự từ trên VB xuống VDK để điều khiển động cơ,giả sử như 't' là để động cơ quay thuận và 'n' để động cơ quay ngược và 's' để dừng động cơ ! nhưng khi VB truyền hết các kí tự đó xuống hết rùi nhưng VDK không đúng đây là code huynh xem hộ em sai chỗ nào đc ko thanh huynh nhìu nhìu :
              #include <16f877.h>
              #fuses hs,put,noprotect,nolvp,nowdt
              #use delay(clock=20000000)
              #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
              #byte portd=0x08
              #byte PORTa=0x05
              #byte portb=0x06
              char c;
              #int_RDA
              Receive_isr()
              {
              c = getc();
              if (c=='t')//quay thuan
              {

              setup_ccp1(CCP_OFF);
              setup_ccp2(CCP_PWM);
              set_pwm1_duty(512);
              }
              else if (c=='n') //quay nguoc
              {

              setup_ccp2(CCP_OFF);
              setup_ccp1(CCP_PWM);
              set_pwm1_duty(512);
              }

              if (c='s')//dung dong co => else if ('s' ==c)
              {
              setup_ccp2(CCP_OFF);
              setup_ccp1(CCP_OFF);
              }
              }

              void main()
              {

              setup_timer_2(T2_DIV_BY_16,255,1);
              enable_interrupts(int_rda); //cho phep ngat noi tiep nhan.
              enable_interrupts(GLOBAL);
              while(1)
              {

              }

              }
              Bạn xem lại chỗ bold đậm nha. code này luôn luôn dừng động cơ bạn à,

              Kinh nghiệm của mình là khi dùng điều kiện mình hay để ngược lại, ví dụ ('s' == c) , nếu lở gõ thiếu ký tự = là trình biên dịch báo lỗi liền.

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X