اطلاعیه

Collapse
No announcement yet.

نحوه ذخیره دیتای سریال و مقایسه در ارتباط با sim908

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    نحوه ذخیره دیتای سریال و مقایسه در ارتباط با sim908

    سلام به دوستان
    من دارم با ماژول sim 908 کار می کنم و می خوام با میکرو ازش دیتای سریال دریافت کنم و اون دیتای سریال و با یک دیتای خاص که در میکرو به صورت رشته هست مقایسه کنم و سپس دستوری از میکرو مطابق اون مقیسه به ماژوا بفرستم .

    من کد زیر و نوشتم ولی جواب نمی ده !!
    روال کار به این صورت است که با ارسال هر پیامی با هر محتویاتی به ماژول میکرو portb.3 رو روشن کنه .
    هموان طور که می دونیم با ارسال پیام به ماژول پاسخ ماژول به شکل زیر است:
    CMTI: "SM",1+
    حالا من تو برنامه به میکرو گفتم هر دیتایی غیر از دیتای RECSMS بیاید PORTB.3 سه بار چشمگ بزند و کل اس ام اس ها رو پاک کنه .

    با پروتوس تو قسمت ترمینال مجازی جواب گرفتم ولی تو عمل نه و هر بار که اس ام اس می فرستم وارد مد چشمک میشه .
    همچنین مطمن هستم که بود ریتم درسته اخه دستوری رو که می کرو واسه پاک کردن اس ام اسا می فرسته ماژول اجرا می کنه .
    بود ریتم هم 4800 هستش .
    اینم کدی که نوشتم :

    کد:
    #include <mega32.h>
    #include <stdio.h>
    #include <delay.h> 
    
    char RECSMS[]={'+','C','M','T','I',':',' ','"','S','M','"',',','1',0X0D};
    char data [5];
    char ram,i,j;
    bit flag;
    
    void main()
    {
    DDRB.3=1;
    PORTB.3=0;
    DDRA=0xff;
    PORTA=0x00;
    
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0X00;
    UBRRL=12; //BAUDE RATE 4800
    delay_ms(1000);
    for(i=0;i<6;i++)
    {
      PORTB.3=~PORTB.3;
      delay_ms(800);
    } 
    PORTA.1=1;    //ON MODULE
    delay_ms(1500);
    PORTA.1=0;
    delay_ms(15000);
    
    //printf("AT+CGPSPWR=1");
    //putchar(0x0d);
    //delay_ms(500);
    //printf("AT+CGPSRST=1");
    //putchar(0x0d);
    //delay_ms(15000);
    
    //#asm ("sei") ;
    
    while(1)
    
      {
    
       while(1)
        { 
         getdata: 
         ram=getchar();
         if(((ram==0X0D)||(ram==0X0A))&&(i==0)) goto getdata; //declare 2 first byte
         data[i]=ram;
         if(ram==0x0D) break;
         i++;
          
        }    
           
         printf("i=%i",i);
        i=0;
        ram=0;
        //delay_ms(500);
        //printf("data recived !!!");
        //putchar('\r');
        
         while((data[i]!=0x0d)) 
            {
             
             
             if(RECSMS[i]!=data[i])
              {
               //putchar('\r');
              // printf("wrong !!!");
               flag=1;
               i=0;
               goto wrong ;
              }
              i++;
              
            }
                
             
              
              
            
            
            wrong:
            if(flag==1)
            {
            printf("AT+CMGDA=");
            putchar('"');
            printf("DEL ALL");
            putchar('"');
            putchar(0X0D);
              for(j=0;j<6;j++)
              {
                 PORTB.3=~PORTB.3;
                 delay_ms(800);
              }
              
            }
            if(i==13)PORTB.3=1;
            i=0;
            flag=0;
            for(j=0;j<20;j++)
              {
               data[j]=0;
                                 
              }
    IN GOD WE TRUST

    #2
    پاسخ : نحوه ذخیره دیتای سریال و مقایسه در ارتباط با sim908

    سلام
    نکته اول اینکه اگر باود ریت رو با کامپیوتر برای ماژولت تنظیم نکردی پیش فرضش 115200 هست که باید کریستال خارجی بزاری و باود ریت رو 115200 تنظیم کنی تا اطلاعات درست بیاد
    نکته دوم تا جایی که من تست کردم قبل از هر پاسخ ماژول یک اینتر هم میفرسته..

    دیدگاه

    لطفا صبر کنید...
    X