giao tiếp rs232

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • ndc
    Đệ tử 2 túi
    • Sep 2008
    • 37

    #1

    giao tiếp rs232

    xin chào các bác
    em mới học pic, em có một thắc mắc muốn hỏi các bác:
    em dùng con 877a để nhận dữ liệu từ pc , nhưng em mới chỉ nhận dc 1 kí tự thôi.VD:em truyền kí tự "a"từ pc thì nó nhận dc
    nhưng em muốn nhận dc 1 chuỗi kí tự ,nhưng kho biết phải lập trình cho nó thế nào.
    vd như em muốn truyền chữ "hello" từ pc , thì ở vđk cũng nhận dc từ "hello" rồi sau đó nó truyền lại cho pc.
    Mong các bác sớm giúp em!!!!
    thanku
  • nguyenquoctoan
    Đệ tử 6 túi
    • Nov 2007
    • 136

    #2
    bạn làm như vậy nè(mình đã làm như vậy với vb)
    -trong vb xác định độ dài chuỗi cần truyền, giả sử là 4 ký tự đi,nuế chưa đủ thì thêm 0 trước vô,đủ rồi thì thôi...
    -dưới vi điều khiển xác định số ký tự nhận là 4 nhận đủ thì thôi(dùng vòng lặp for)

    Comment

    • naivatho
      Đệ tử 1 túi
      • Aug 2008
      • 17

      #3
      Bạn toàn ơi.Bạn chỉ giúp mình code viết cho Pic để nó nhận kí tự mà bạn truyền xuống được không?
      Mình cũng dùng truyền nhận VB mà mình mới truyền được thôi chứ mình viết code cho Pic nhận chưa được
      Mình củng học BKTPHCM nhưng mình học bên cơ khí,mà muốn học điện cho biết
      có gì bạn gởi mail cho mình được không
      hhtien192@yahoo.com
      ai biết thì chỉ giúp mình với
      Thanks các bác nhiều!!!!!
      Chúc các bác tuần mới vui vẻ!!!

      Comment

      • nguyenquoctoan
        Đệ tử 6 túi
        • Nov 2007
        • 136

        #4
        đoạn code có thể viết đơn giản như sau:
        void getvalue()
        {
        int16 x;
        int i;
        char s[4]; “khai bao s 4 byte,so luong byte truyen xuong
        for(i=0;i<4;i++)
        s[i]=getc(); “nhan s vao tu tu dang chuoi,so ky tu trong moi chuoi
        x=atol(s); “chuyen chuoi sang so
        y=x;
        printf("%lu",x); “xuat gia tri x ra pc so ko dau
        }
        hàm nhận dữ liệu từ vb đơn giản như sau, số lượng ký tự truyền và nhận phải đồng nhất
        trong hàm chính
        while(1)
        {
        if (y==0)
        getvalue();
        }
        bạn bổ sung mấy khai báo khác, chạy ok thôi

        Comment

        • dvnccbmacbt
          Đệ tử 4 túi
          • May 2007
          • 65

          #5
          các bạn có thể dùng lệnh gets(str) để nhận 1 chuỗi ký tự từ máy tính. sau đó muốn làm j với chỗi đó cũng được. Mình gửi 1 ví dụ mình đã làm và đã chạy ok:
          Code:
          #INT_RDA
          void ngat_serial()
          { 
            gets(str); \\ NHAN CHUOI KY TU
          
            printf("%s\r",str); \\GUI TRA CHUOI KY TU
          
           //-------THAO TAC VOI CAC PHAN TU CUA CHUOI----//
          
            if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='p'))          fini = 1;
            else if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='i'))     fini = 2;
            else if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='d'))     fini = 3;
            else if ((str[strlen(str)-2]=='1')&&(str[strlen(str)-1]=='v'))     fini = 4;
            else if ((str[strlen(str)-2]=='2')&&(str[strlen(str)-1]=='p'))     fini = 5;
            else if ((str[strlen(str)-2]=='2')&&(str[strlen(str)-1]=='i'))     fini = 6;
            else if ((str[strlen(str)-2]=='2')&&(str[strlen(str)-1]=='d'))     fini = 7;
            else if ((str[strlen(str)-2]=='3')&&(str[strlen(str)-1]=='p'))     fini = 8;
            else if ((str[strlen(str)-2]=='3')&&(str[strlen(str)-1]=='i'))     fini = 9;
            else if ((str[strlen(str)-2]=='3')&&(str[strlen(str)-1]=='d'))     fini = 10;
            else if ((str[strlen(str)-2]=='v')&&(str[strlen(str)-1]=='m'))     fini = 11;
            else if ((str[strlen(str)-2]=='a')&&(str[strlen(str)-1]=='m'))     fini = 12;
            else if ((str[0]=='o')&&(str[1]=='n'))     on = 1;
            strncpy(value,str,strlen(str)-2);
          
           // ----------------
          }
          Hi vọng giúp được các bạn.

          Comment

          • naivatho
            Đệ tử 1 túi
            • Aug 2008
            • 17

            #6
            Bác Toàn ơi! sao em viết code như bác thế mà pic vẫn không nhận và xuất lên máy tính được
            em viết code của bác khi dịch vẫn dịch được
            và chương trình VB của em cũng send và nhận được khi e nối chân 2 và 3 lại với nhau
            Nhưng khi kết hợp lại thì k được.
            Mong bác sớm giúp đỡ
            Last edited by naivatho; 22-10-2008, 04:55 PM.

            Comment

            • naivatho
              Đệ tử 1 túi
              • Aug 2008
              • 17

              #7
              Bác dvnccbmacbt
              code của bác e đọc chưa hiểu hết nơi,nhất là đoạn code sau if.
              bác chú thích giúp em được k ạ,e cũng muốn pic nhận chuỗi kí tự mà trên VB em truyền xuất sau đó xuất ra led ma trận mà chưa làm được,em đã có mạch và chương trình trên vb truyền được rồi ạ
              vì em mới học nên mong bác sớm giúp đỡ

              Comment

              • maiduy082
                Đệ tử 4 túi
                • Apr 2008
                • 66

                #8
                Nguyên văn bởi naivatho View Post
                Bác dvnccbmacbt
                code của bác e đọc chưa hiểu hết nơi,nhất là đoạn code sau if.
                bác chú thích giúp em được k ạ,e cũng muốn pic nhận chuỗi kí tự mà trên VB em truyền xuất sau đó xuất ra led ma trận mà chưa làm được,em đã có mạch và chương trình trên vb truyền được rồi ạ
                vì em mới học nên mong bác sớm giúp đỡ

                phần trên là nhận ký tự từ pc gửi ra ,còn sau đó là thao tác bạn dùng cho chuỗi ký tự đó thôi .
                đoạn if chỉ la ví dụ thôi .
                hay là bạn muốn biết chính xác đoạn code đó có chức nạng gì ???

                Comment

                • nguyenquoctoan
                  Đệ tử 6 túi
                  • Nov 2007
                  • 136

                  #9
                  mình truyền giá trị 0<X<1000 cho bạn xem như sau
                  khi truyền và nhận tất cả phải ở dạng chuỗi
                  code vb:
                  rstr = txttruyen.Text 'dữ liệu cần truyền
                  If (Val(rstr) < 1000) And (Val(rstr) > 0) Then
                  l = Len(rstr) ‘gan l cho do dai c
                  If (l = 1) Then
                  rstr = "000" + rstr
                  End If
                  If (l = 2) Then
                  rstr = "00" + rstr
                  End If
                  If (l = 3) Then
                  rstr = "0" + rstr
                  End If
                  End If
                  If rstr = "" Then
                  ' do anything if u want
                  Else
                  Call MoPort_Click 'goi hàm mở port khai báo thông số cần truyền
                  MSComm1.Output = rstr 'truyền dữ liệu xuống
                  End If
                  code c
                  #include<16f877a.h>
                  #device PIC16F877a*=16 ADC=10
                  #use delay(clock=20000000)
                  #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
                  //hàm nhận dữ liệu
                  void getvalue()
                  {
                  int16 x;
                  int i;
                  char s[1]; //khai báo số lượng chuỗi truyền
                  for(i=0;i<4;i++) //số ký tự truyền xuống
                  s[i]=getc(); //nhan s vao tu tu dang chuoi
                  x=atol(s); //chuyen chuoi sang so
                  y=x; //số bạn cần truyền đây
                  printf("%lu",x); “xuat gia tri x ra pc so ko dau
                  }
                  //hàm main
                  void main()
                  {
                  while(1)
                  {
                  if (y==0)
                  getvalue();
                  }

                  }
                  hi vọng giúp được bạn

                  Comment

                  • dvnccbmacbt
                    Đệ tử 4 túi
                    • May 2007
                    • 65

                    #10
                    đoạn code sau if không cần hiểu đâu. Mình chỉ minh họa thao tác với chuỗi thôi mà. Đoạn đó tùy ứng dụng của ban. Còn câu lệnh
                    [code]
                    gets(str);
                    [\code]
                    là nhận 1 chuỗi ký tứ cho đến khi nhận được ký tự kết thúc là "\r".

                    Comment

                    • le.nhatcuong
                      Nhập môn đệ tử
                      • Dec 2007
                      • 6

                      #11
                      #include <16F876A.h>
                      #fuses HS,NOWDT,NOPROTECT,NOLVP
                      #use delay(clock=20000000)
                      #use rs232(baud=9600, xmit=PIN_A2, rcv=PIN_A3)
                      int8 ch;

                      void main(void)
                      {
                      while(true)
                      {
                      ch = getc();
                      if (ch!=0)
                      {
                      putc(ch);
                      }
                      }
                      }
                      Last edited by le.nhatcuong; 25-10-2008, 12:16 AM.
                      Lê Nhật Cường
                      ĐT: 0904937804 - 0623.626249
                      Email: le.nhatcuong@gmail.com

                      Comment

                      • naivatho
                        Đệ tử 1 túi
                        • Aug 2008
                        • 17

                        #12
                        Em cám ơn các bác nhiều!!!
                        Để em thử xem em truyền và nhận được không rồi em liên hệ các bác giúp đỡ!!!
                        Đa tạ các bác

                        Comment

                        • le.nhatcuong
                          Nhập môn đệ tử
                          • Dec 2007
                          • 6

                          #13
                          đoạn mã trên đơn giản nhất, khi nhận được sẽ truyền len PC lai đúng ký t75 vừa nhận
                          Lê Nhật Cường
                          ĐT: 0904937804 - 0623.626249
                          Email: le.nhatcuong@gmail.com

                          Comment

                          • thanhduy_meo
                            Nhập môn đệ tử
                            • Nov 2007
                            • 2

                            #14
                            chào các pác! tui đang gặp khó khăn về giao tiếp vdk với máy tính.cụ thể là giao tiếp AVR với PC điểu khiển bằng VB6 hiển thị nhiệt độ con LM35.các cao thủ xin chỉ giúp với.tui khó khăn ở khâu truyền nhận làm sao VB nó lấy tín hiệu từ con AVR đấy.Xin cảm ơn các bạn trước hen.

                            Comment

                            • namqn
                              Trưởng lão PIC bang
                              • Feb 2006
                              • 3020

                              #15
                              Nguyên văn bởi thanhduy_meo View Post
                              chào các pác! tui đang gặp khó khăn về giao tiếp vdk với máy tính.cụ thể là giao tiếp AVR với PC điểu khiển bằng VB6 hiển thị nhiệt độ con LM35.các cao thủ xin chỉ giúp với.tui khó khăn ở khâu truyền nhận làm sao VB nó lấy tín hiệu từ con AVR đấy.Xin cảm ơn các bạn trước hen.
                              Với những vấn đề liên quan đến AVR, bạn có thể hỏi tại www.dientuvietnam.net và www.avrvietnam.com.

                              Thân,
                              Biển học mênh mông, sức người có hạn.

                              Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
                              http://www.picvietnam.com/forum/showthread.php?t=1263

                              Comment

                              Working...