Từ 1 tới 1 trên tổng số 1 kết quả

Đề tài: Lấy chuỗi gởi lên từ thiết bị giao tiếp với Vi điều khiển trong C, chạy không đúng

  1. #1
    Ngày gia nhập
    02 2012
    Bài viết
    1

    Mặc định Lấy chuỗi gởi lên từ thiết bị giao tiếp với Vi điều khiển trong C, chạy không đúng

    Chào mọi người.
    E đang làm Project về điện tử có liên quan đến việc nhận chuỗi được gởi từ thiết bị bên ngoài.
    Công việc của e là lập trình cho vi điều khiển tách ra 1 trong số các chuỗi được gởi lên từ thiết bị để xử lý ạ.
    Các chuỗi từ thiết bị của em gởi lên có dạng như sau ạ

    $GPGGA,143405.000,1605.2436,N,10814.4025,E,1,06,1. 5,23.9,M,-5.5,M,,0000*72
    $GPGSA,A,3,07,13,32,01,03,23,,,,,,,2.2,1.5,1.7*37
    $GPRMC,143405.000,A,1605.2436,N,10814.4025,E,0.05, 113.50,100312,,,A*65
    $GPVTG,113.50,T,,M,0.05,N,0.1,K,A*0F
    $GPGGA,143406.000,1605.2436,N,10814.4026,E,1,06,1. 5,24.0,M,-5.5,M,,0000*7C
    yêu cầu của em là tách lấy chuỗi $GPRMC..... để xử lý ạ, các chuỗi đều kết thúc bằng kí tự <CR><LF>.
    và đây là đoạn code của em viết :

    Code:
    Code:
    char user_str[11]="test,test,";
    char gps_str[70];
    char gps_str_send[80];
    char gps_buffer[100];
    
    int8 chk_gprs=0;
    int8 index= 0;
    #int_rda // hàm ngắt RDA, khi có kí tự được gởi lên từ thiết bị thì hàm này được thực thi ah
    void ngat_gps(void)
    {
       char c1;
       c1=fgetc(ID1); 
      
       switch(c1)
       {
          case '$':   {
                      index=0;
                      fputs("OK",ID1);
                      }
                      break;
                      
          case 13:    check_gprmc();
                      break;
          default:    {
                      gps_buffer[index]=c1;
                      index++;
                      }
                      break;
       }   
       
    }
    
    //------------------------------------------------------------------------------
    void check_gprmc(void)
    {
       if ((gps_buffer[1]=='G')&&(gps_buffer[2]=='P')&&(gps_buffer[3]=='R')&&(gps_buffer[4]=='M')&&(gps_buffer[5]=='C'))      
       {
          strcpy(gps_str,gps_buffer);
          fprintf(ID1,gps_str);
       }
       else {};
    }
    Sau khi chạy thử ct thì e ko nhận được chuỗi gps_str từ màn hình ạ
    Mong ACE coi giúp ạh
    p/s: ace nào có tài liệu+bt về xử lý chuỗi thì gởi cho e xin vs ạ, thnsk ace nhiều
    ko biết lần này có bị ad move đi ko nữa :((
    Thân chào mọi người.

    thuật toán của em là bắt kí tự '$', sau đó sẽ cho ghi vào buffer, nếu gặp ksi tự kết thúc chuỗi <CR> thì sẽ cho kiểm tra chuỗi lưu trong buffer có phải là chuỗi GPRMC ko ạ ?
    Mọi người chỉ giúp e cách bug đoạn code này vs ạ.
    Cảm ơn !
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 16-03-2012 lúc 03:07 PM. Lý do: Lấy chuỗi gởi lên từ thiết bị giao tiếp với Vi điều khiển trong C, chạy không đúng

Các đề tài tương tự

  1. Chương trình giao tiếp máy tính với vi điều khiển sử dụng MFC
    Gửi bởi linhdong24 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 26-02-2013, 10:01 PM
  2. kiểm tra tính đúng đắn của chuỗi tiếng Việt như thế nào?
    Gửi bởi ghost.love trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 12-02-2012, 07:58 AM
  3. Hàm sắp xếp chuỗi theo a,b,c. Nó không chạy đúng?
    Gửi bởi phanvanngoc trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 06-06-2011, 10:32 PM
  4. Xuất dữ liệu ra cổng Com để giao tiếp với vi điều khiển.
    Gửi bởi khoavl trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 27-04-2010, 04:16 PM
  5. Hàm trong C++ không nằm trong main vẫn chạy đúng. Giải thích giúp?
    Gửi bởi tuvan1011 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 02-09-2009, 12:58 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn