Thông báo

Collapse
No announcement yet.

[help] anh em vào trợ giúp mình với!!!!

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

  • [help] anh em vào trợ giúp mình với!!!!

    mình đang làm đề tài có liên quan đến tách dữ liệu ( giao thức NMEA trong thông tin vệ tinh sử dụng SIM các bạn nhé). đoạn mã có dạng : $GPGGA,002153.000,3342.6618,N,11751.3858,W,1,10,1. 2,27.0,M,34.2,M,,000 *5E. được truyền liên tiếp qua uart vào vi điều khiển. các đoạn mã có nội dung tương tự cũng được truyền tiếp theo. ví dụ thông tin truyền vào có thể có dạng :....$GPGGA,002153.000,3342.6618,N,11751.3858,W,1, 10,1.2,27.0,M,34.2,M,,000 *5E$GPGGA,5467.000,4578.6618,N,11751.5426,W,2,10,2 .2,12.0,M,376.2,M,,040 *5E.... dạng như vậy. trong đó đoạn đầu có thể thay đổi tùy thuộc vào định dạng dữ liệu. như với đoạn code trên $GPGGA cho biết thông tin sau nó gồm có thời gian, kinh độ, vĩ độ, khoảng cách so với mực nước biển. giờ mình đang loay hoay với thuật toán tách dữ liệu ra. ví như trong dòng dữ liệu vào ta phải bắt được chuỗi có mào đầu là $GPGGA rồi sau đó lại tách ra các dữ liệu đã nói trên. ($GPGGA(mào đầu),002153.000(thời gian),3342.6618,N(vĩ độ),11751.3858,W(kinh độ),1,10,1.2,27.0,M,34.2,M,,000 *5E. dữ liệu tách ra cần cho lưu vào một biến riêng và được truyền đi vào máy tính như sau. pro nào chỉ giáo giúp mình nhé. mình có tham khảo đoạn code sau sử dụng trong 1 ngắt uart nhưng khi viết thì không thực hiện đươc. nếu ai biết sai chỗ nào thì chỉ mình luôn với nhé.
    Code:
    	ISR (SIG_USART1_RECV)
    	{	
    	data = UDR1;
    	putChar_LCD(data);
    	Uart0_Trans(data);
    	Process_Data(data);
    	}
    // ham xu ly du lieu ngat	
    	void Process_Data(char data)
    		{
    		stt = 0;
    		switch(stt){
    		case  1: if(data!='$') stt=0; break;
    		case  2: if(data!='G') stt=0; break;
    		case  3: if(data!='P') stt=0; break;
    		case  4: if(data!='G') stt=0; break;
    		case  5: if(data!='G') stt=0; break;
    		case  6: if(data!='A') stt=0; break;
    		case  7: if(data!=',') stt=0; break;
    //--------tach phan thoi gian------------
    		case  8: if(data<'0' || data>'9') stt=0; else time[0]=data; break;
    		case  9: if(data<'0' || data>'9') stt=0; else time[1]=data; break;
    		case 10: if(data<'0' || data>'9') stt=0; else time[2]=data; break;
    		case 11: if(data<'0' || data>'9') stt=0; else time[3]=data; break;
    		case 12: if(data<'0' || data>'9') stt=0; else time[4]=data; break;
    		case 13: if(data<'0' || data>'9') stt=0; else time[5]=data; break;
    		case 14: if(data!='.') stt=0; else time[6]=data; break;
    		case 15: if(data<'0' || data>'9') stt=0; else time[7]=data; break;
    		case 16: if(data<'0' || data>'9') stt=0; else time[8]=data; break;
    		case 17: if(data<'0' || data>'9') stt=0; else time[9]=data; break;
    		case 18: if(data!=',') stt=0; break;
    //----------tach phan vi do-----------------
    		case 19: if(data<'0' || data>'9') stt=0; else vido[0]=data; break;
    		case 20: if(data<'0' || data>'9') stt=0; else vido[1]=data; break;
    		case 21: if(data<'0' || data>'9') stt=0; else vido[2]=data; break;
    		case 22: if(data<'0' || data>'9') stt=0; else vido[3]=data; break;
    		case 23: if(data!='.') stt=0; else vido[4]=data; break;
    		case 24: if(data<'0' || data>'9') stt=0; else vido[5]=data; break;
    		case 25: if(data<'0' || data>'9') stt=0; else vido[6]=data; break;
    		case 26: if(data<0 || data>9) stt=0; else vido[7]=data; break;
    		case 27: if(data<0 || data>9) stt=0; else vido[8]=data; break;
    		case 28: if(data!=',') stt=0; else vido[9]=data; break;
    		case 29: if(data!='N' || data!='S') stt=0; else vido[10]=data; break;
    		case 30: if(data!=',') stt=0; break;
    //----------tach phan kinh do------------------		
    		case 31: if(data<0 || data>9) stt=0; else kinhdo[0]=data; break;
    		case 32: if(data<0 || data>9) stt=0; else kinhdo[1]=data; break;
    		case 33: if(data<0 || data>9) stt=0; else kinhdo[2]=data; break;
    		case 34: if(data<0 || data>9) stt=0; else kinhdo[3]=data; break;
    		case 35: if(data<0 || data>9)stt=0; else kinhdo[4]=data; break;
    		case 36: if(data!='.') stt=0; else kinhdo[5]=data; break;
    		case 37: if(data<0 || data>9) stt=0; else kinhdo[6]=data; break;
    		case 38: if(data<0 || data>9) stt=0; else kinhdo[7]=data; break;
    		case 39: if(data<0 || data>9) stt=0; else kinhdo[8]=data; break;
    		case 40: if(data<0 || data>9) stt=0; else kinhdo[9]=data; break;
    		case 41: if(data!=',') stt=0; else kinhdo[10]=data; break;
    		case 42: if(data!='E' || data!='W') stt=0; else kinhdo[12]=data; break;
    		case 43: if(data!=',') stt=0; break;
    		default : stt=0; break;
    	}
    		}
    thank mọi người đã đọc!

  • #2
    các biến đã khai báo biến toàn cục hết rồi nhé, biên dịch được rồi nhưng không sử dụng được.:sosad:

    Comment


    • #3
      Trong ngắt đừng gọi hàm gì mà xử lý mất time như cái hàm putChar_LCD(data); trong ngắt thường chỉ set các flag thôi.
      Web:
      ->Nhận thiết kế, hoàn thiện dự án, sản phẩm điện tử<-
      -->Giải pháp GSM/GPRS/GPS - Công nghệ RFID<--

      Comment


      • #4
        thank bác, cái đó cũng không hợp lý lắm nhưng mình thấy nó không ảnh hưởng nhiều vì mấy dung lượng hàm ngắt vẫn đủ cho nó tồn tại. mình có cái mạch uart ra với LCD , dùng hàm LCD trong ngắt uart vẫn chạy ngon bác ạ. cái của mình là dữ liệu nó vào liên tục với cấu trúc khác nhau. mình đang muốn là tách đựoc cấu trúc như mong muốn ra.

        Comment


        • #5
          gui vao rptdnmqs@gmail.com .toi se cho ban giai thuat tach chuoi tot nhat.
          , , ,

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X