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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • thacdtk72
    Thành viên mới
    • Oct 2011
    • 4

    #1

    "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)
    {

    }
    }
  • thacdtk72
    Thành viên mới
    • Oct 2011
    • 4

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

    Comment

    • thinking
      Thành viên chính thức
      • Mar 2010
      • 91

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

      Comment

      • thacdtk72
        Thành viên mới
        • Oct 2011
        • 4

        #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

        • thacdtk72
          Thành viên mới
          • Oct 2011
          • 4

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

          Comment

          • dktdk13
            Thành viên mới
            • Feb 2011
            • 26

            #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

            • handyle
              Thành viên mới
              • Nov 2009
              • 5

              #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...