اطلاعیه

Collapse
No announcement yet.

برنامه برای دریافت دیتا از SIM908 و ذخیره در AVR

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

    برنامه برای دریافت دیتا از SIM908 و ذخیره در AVR

    سلام
    من یه برنامه نمونه می خوام که از روی اون کدهای خودم برای avr بنویسم . در واقع می خوام بدونم کد ارسالی از ماژول و چه جوری باید بخونم و در یه متغیر یا رشته ذخیره کنم به این صورت که:
    مثلا
    ّبا زنگ زدن به ماژول یک ای ای دی روشن شود .

    ماژول با زنگ زدن دیتای RING رو میفرسته و اگه به هگز بخوایم به این صورت می فرسته :
    0D 0A 52 49 4E 47 0D 0A 0D 0A

    من یه کد نوشتم جواب نداد لطفا کمک کنید
    IN GOD WE TRUST

    #2
    پاسخ : برنامه برای دریافت دیتا از SIM908 و ذخیره در AVR

    نوشته اصلی توسط حسین فتح بگ
    سلام
    من یه برنامه نمونه می خوام که از روی اون کدهای خودم برای avr بنویسم . در واقع می خوام بدونم کد ارسالی از ماژول و چه جوری باید بخونم و در یه متغیر یا رشته ذخیره کنم به این صورت که:
    مثلا
    ّبا زنگ زدن به ماژول یک ای ای دی روشن شود .

    ماژول با زنگ زدن دیتای RING رو میفرسته و اگه به هگز بخوایم به این صورت می فرسته :
    0D 0A 52 49 4E 47 0D 0A 0D 0A

    من یه کد نوشتم جواب نداد لطفا کمک کنید

    کسی نیست کمک کنه واقعا نیاز دارم فقط یه کد نمونه می خوام بقیه کاراش و خودم انجام می دم :cry:
    IN GOD WE TRUST

    دیدگاه


      #3
      پاسخ : برنامه برای دریافت دیتا از SIM908 و ذخیره در AVR

      اینو ببین: کدش رو اینجا نوشتم:
      http://www.eca.ir/forum2/index.php?topic=109271.0

      دیدگاه


        #4
        پاسخ : برنامه برای دریافت دیتا از SIM908 و ذخیره در AVR

        نوشته اصلی توسط حسین فتح بگ
        سلام
        من یه برنامه نمونه می خوام که از روی اون کدهای خودم برای avr بنویسم . در واقع می خوام بدونم کد ارسالی از ماژول و چه جوری باید بخونم و در یه متغیر یا رشته ذخیره کنم به این صورت که:
        مثلا
        ّبا زنگ زدن به ماژول یک ای ای دی روشن شود .

        ماژول با زنگ زدن دیتای RING رو میفرسته و اگه به هگز بخوایم به این صورت می فرسته :
        0D 0A 52 49 4E 47 0D 0A 0D 0A

        من یه کد نوشتم جواب نداد لطفا کمک کنید
        سلام به دوستان
        من کد زیر و نوشتم ولی جواب نمی ده !!
        روال کار به این صورت است که با ارسال هر پیامی با هر محتویاتی به ماژول میکرو 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

        دیدگاه


          #5
          پاسخ : برنامه برای دریافت دیتا از SIM908 و ذخیره در AVR

          نوشته اصلی توسط حسین فتح بگ
          سلام به دوستان
          من کد زیر و نوشتم ولی جواب نمی ده !!
          روال کار به این صورت است که با ارسال هر پیامی با هر محتویاتی به ماژول میکرو 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

          دیدگاه

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