Thông báo

Collapse
No announcement yet.

Hỏi về giao tiếp AVR và module SIMCOM

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

  • #31
    Nguyên văn bởi hitechvn Xem bài viết
    Bạn dùng timer để test giao tiếp với module SIM ah, bạn nên test trong hàm Main() để các công việc thực hiện lần lượt. Các dữ liệu trao đổi qua lại giữa VDK và module SIM. Bạn có hàm lưu cấu hình cài đăt cho module SIM chưa.
    Ký tự "ctrl+Z" chính là ký tự 26 trong bảng ASCII. bạn chỉ cần putchar(26) là OK
    Mình có hàm gửi tin nhắn bạn xem có dùng được không
    int API_sendmsgtextff(flash unsigned char *msg,flash unsigned char *phonenum )
    {

    UART0_rx_reset( ); //Clear rx_buff
    UART0_setSearchString(READY_); //Set "> " to be search string
    UART0_putsf(AT_CMGS); //Send message
    UART0_putsf(phonenum); //Send message
    UART0_putsf(CR); //CR
    UART0_rx_on(); //Receiver on
    if( API_check_acknowledge()>0) //Wait for acknowledge = "> "
    {
    UART0_rx_reset(); //Clear rx_buff
    UART0_setSearchString(OK_); //Set "OK" to be search string
    UART0_putsf(msg);
    UART0_putchar(26); // ki tu Ctrl+Z
    UART0_rx_on(); //Receiver on
    if( API_check_acknowledge()>0) //Acknowledge = OK
    {
    return 1;
    }
    if( API_check_acknowledge()>0) //Acknowledge = OK
    {
    return 1;
    }
    if( API_check_acknowledge() >0) //Acknowledge = OK
    {
    return 1;
    }
    else //Acknowledge != OK
    {
    return -2;
    }
    }
    else //Acknowledge != "> "
    {
    return -1;
    }
    // }
    }
    anh cho e xin code đầy đủ của a được ko? chứ a viết như thế thì e ko biết lấy hàm API_check_acknowledge() ở chỗ nào? cảm ơn a.
    WS:
    Blog:

    Comment


    • #32
      Em lại làm phiền các anh chút, các a cho e hỏi: e 1 bật hoặc tắt 1 thiết bị nào đó thì e nt với cú pháp "BAT1 mật khẩu" hoặc TAT1 mat khau". vậy thì làm cách nào để tách được mật khẩu ra để so sánh và tách được BAT1 hoặc TAT1 ra để thực thi công việc? E cảm ơn.
      WS:
      Blog:

      Comment


      • #33
        Nguyên văn bởi hoang_3i Xem bài viết
        Đúng rồi bên Hoàng Phát ở gần Thủ Lệ có bán module này. Giao tiếp rs232 giá 850K.
        Sống là để chiến đấu

        Comment


        • #34
          Nguyên văn bởi hoang_3i Xem bài viết
          hic làm gì có kí tự này : putchar('\r');
          putchar('\n');


          chương trình dịch ko báo lỗi mới lạ
          Hi bạn hoang_3i. Bạn dùng phần mềm gì lập trình cho avr thế. Mình dùng codevision thì dùng hàm putchar('\r'); vẫn bình thường mà bạn. Các ký tự \n,\r chính là 0x0A, 0x0D mà bạn nói đó.
          Sống là để chiến đấu

          Comment


          • #35
            Nguyên văn bởi quangtung112 Xem bài viết
            Em lại làm phiền các anh chút, các a cho e hỏi: e 1 bật hoặc tắt 1 thiết bị nào đó thì e nt với cú pháp "BAT1 mật khẩu" hoặc TAT1 mat khau". vậy thì làm cách nào để tách được mật khẩu ra để so sánh và tách được BAT1 hoặc TAT1 ra để thực thi công việc? E cảm ơn.
            Bạn đã test bằng máy tính để đọc tin nhắn về chưa. Nếu bạn test rồi thì bạn dùng VDK cũng như vây. Sau đó bạn dùng các hàm xử lý text để lọc lấy ngày tháng, số điện thoại, rồi cuối cùng là nội dung tin nhắn. Khi có nội dung tin nhắn vd là BAT1 123456 chẳng hạn. bạn tìm xem chuỗi có "BAT1" hay không rồi tách tiếp phần mật khẩu. Nếu đúng hết thì bạn thực hiện công việc. Nếu sai có thể bạn báo lại cho ng nhắn tin là sai cú pháp. Chúc bạn thành công.
            Sống là để chiến đấu

            Comment


            • #36
              Nguyên văn bởi quangtung112 Xem bài viết
              anh cho e xin code đầy đủ của a được ko? chứ a viết như thế thì e ko biết lấy hàm API_check_acknowledge() ở chỗ nào? cảm ơn a.
              Code đầy đủ thì mình có. Mình post từ từ lên để anh em mang ra bình luận.
              Code:
              //  kiem tra da nhan du lieu OK chua
              int API_check_acknowledge(void)     
              {
                  static unsigned int i, ii;    
                  for(i=0;(rx_ack0==0)&&(i<65535);i++) //Wait loop           // 0.5s    
                  {
                      for(ii=0;ii<30;ii++){;}            //12s <--> ii=100;  => 5s <--> ii=40         // test ko co gi khoang 2,2 s
                  }  
                  // da nhan du lieu xong 
                  if(rx_ack0>0)    //  rx_ack0=1                               //Everything worked out fine...rx turned off
                  {
                      rx_ack0=0;                                     //Reset flag
                      return 1;
                  }
                  else                                                //A timeout could result from no acknowledge, wrong acknowledge or buffer overrun
                  { 
                      UART0_rx_off();                      
                      UART0_rx_reset();                              //Reset buffer and interrupt routine
                      return 0;                                       // chua nhan dc OK hoac timeout o phone 
                                                                      //Timed out, or wrong acknowledge from phone
                  }
              }
              Còn đây là phần nhận dữ liệu trong ngắt nhận UART0
              Code:
              interrupt [USART0_RXC] void usart0_rx_isr(void)
              {
                  char status,data;
                  status=UCSR0A;
                  data=UDR0; 
                  if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
                  {  
                      rx_buffer0[rx_index0]=data;                     //Store new data    
                      rx_index0++;
                      if(rx_index0>RX_BUFFER_MAX0)                    //Check for overflow
                      {
                          rx_index0=0;                                //Reset write index
                          rx_overflow0=1;                             //Set flag high                       
                          //UART0_rx_off();                           // Disable RX interrupt  
                          // tranh truong hop ko co tin nhan, du lieu van den khi co cuoc goi
                          UART0_rx_reset();                           // reset
                      }
                      if(searchFor[rx_i0]==data )                     //Test response match
                      {
                          rx_i0++;                                    
                          if(!searchFor[rx_i0])                       // End of new_message string...received new message!                  
                          { 
                              rx_i0=0;                                //  reset
                              if(searchStr==CMTI_)                    //+CMTI:
                              {
                                  searchFor=searchStrings[CRLF_];       //Wait for
                                  searchStr=CRLF_;
                              }
                              else if (searchStr==CPIN_)                  //  CHECK TK
                              {
                                  searchFor=searchStrings[CRLF_];       //Wait for
                                  searchStr=CRLF_;   
                              } 
                              else if (searchStr==CUSD_)                  //  CHECK TK
                              {
                                  searchFor=searchStrings[CRLF_];       //Wait for
                                  searchStr=CRLF_;   
                              } 
                              else
                              {
                                  rx_ack0=1;                                  //Set new message flag
                                  UCSR0B&=~(1<<RXCIE);                        // Disable RX interrupt  
                              }
                          }
                      }
                      else rx_i0=0;                                   //Not valid search pattern...start again. 
                  }
              }
              Sống là để chiến đấu

              Comment


              • #37
                bác post thế này làm e khó nghiên cứu quá? đọc đến hàm searchFor[rx_i0] thì tìm mãi mà chẳng thấy hàm đâu?
                WS:
                Blog:

                Comment


                • #38
                  Nguyên văn bởi quangtung112 Xem bài viết
                  bác post thế này làm e khó nghiên cứu quá? đọc đến hàm searchFor[rx_i0] thì tìm mãi mà chẳng thấy hàm đâu?
                  Hi bạn
                  Mình sẽ post đầy đủ code cho bạn. Hi vọng bạn sẽ hoàn thành project này.
                  Trong project của mình, mình dùng 2 file header UART.HSIM900_ATCOMMAND.H. Ngoài ra mình còn dùng file FUNCTION.H để xử lý chuỗi như lọc, tách text.
                  1. File Header SIM900_ATCOMMAND.H
                  Code:
                  #ifndef _ATCOMMAND_H_
                  #define _ATCOMMAND_H_ 
                   
                  #include "UART.H"   
                  #include "FUNCTION.H"  
                  #include <delay.h>
                  
                  //! AT-Command set used 
                  const unsigned char flash CR[]                      = "\r";                            
                  const unsigned char flash AT[]                      = "AT\r";                               //!< Say "OK"   // test connection
                  const unsigned char flash ATZ[]                     = "ATZ\r";                              //!< Say "OK"
                  const unsigned char flash ATE0[]                    = "ATE0\r";                             //!< Echo off 
                  const unsigned char flash AT_CMGD[]                 = "AT+CMGD=";                           //!< Delete message at index
                  const unsigned char flash AT_CMGR[]                 = "AT+CMGR=";                           //!< Read from index   
                  const unsigned char flash ATCLIP[]                  = "AT+CLIP=1\r";                        //!< text default   
                  const unsigned char flash ATW[]                     = "AT&W\r";                             //!< LUU CAU HINH    
                  const unsigned char flash AT_SMSTEXTFORMAT[]        = "AT+CMGF=1\r";                        // set text sms format  
                  const unsigned char flash AT_CNMI[]                 = "AT+CNMI=0,0,0,0,1\r";                //!< Identification of new sms
                  const unsigned char flash AT_CPMS[]                 = "AT+CPMS=\"SM\",\"SM\",\"SM\"\r";     //!< Preferred storage
                  const unsigned char flash AT_CMGS[]                 = "AT+CMGS=";                           //!< Send mmessage  
                  const unsigned char flash AT_CSCS[]                 = "AT+CSCS=\"GSM\"\r";                           //!< Send mmessage
                  
                  const unsigned char flash UUDECODE[]                    = "?E??????????????ABVGDEJZIIKLMNOPRSTUFHCCSS`Y`EYAabvgdejziiklmnoprstufhccss`y`eya?e??????????????";
                  
                  
                  typedef struct 
                  {
                   unsigned char  phone[16];
                   unsigned char  name[16];   
                   //unsigned char count;
                  } SIMBookf; 
                    
                  SIMBookf SIMBook[21];
                  
                  #define OK_     0                           //!< Used to look up in COM_setSearchString( unsigned char Response )
                  #define CMTI_   1                           //!< Used to look up in COM_setSearchString( unsigned char Response )
                  #define READY_  2                           //!< Used to look up in COM_setSearchString( unsigned char Response )
                  #define CRLF_   3                           //!< Used to look up in COM_setSearchString( unsigned char Response )  
                  #define CUSD_   4                           //!< Used to look up in COM_setSearchString( unsigned char Response )
                  #define CPIN_   5  
                  
                  unsigned char fromsmsnumber[30];    // so dien thoai nguoi gui
                  unsigned char fromsmsdatetime[30];  // ngay gio
                  unsigned char fromsmstext[161];     // noi dung tin nhan
                  unsigned char fromsmsmoney[161];    // noi dung tien
                  
                  //  reset danh ba trong SIMbook
                  void    API_resetSIMbook(); 
                  //  ham test ket noi voi module SIM 
                  //  return 0: disconnect
                  //  return 1: da ket noi voi module SIM
                  int     API_GSMtestconnect();
                  
                  //  init module SIM voi cac gia tri ban dau   
                  //  return 1: OK
                  //  return <=0: xuat hien loi
                  int     API_GSMinit();  
                  
                  //  reset cac thong tin lien quan den tin nhan nhan ve
                  void    API_resetfromSMS(); 
                  
                  //  ham xac nhan co du lieu truyen ve
                  //  return 0: chua nhan du du lieu hoac timeout
                  //  return 1: da nhan 
                  int API_check_acknowledge(void) ;    // kiem tra da nhan du lieu OK chua   
                  
                  //  giai ma tin nhac, lay cac thong tin nhu sdt, ngay gio, noi dung tin
                  int API_decodemessage();   
                  int API_checkmoney(unsigned char tk);  
                  int SplitInfMoney();
                  int API_deletemsg(int index); 
                   
                   
                  int API_readmsg(int index);  
                  
                  
                  int API_sendmsgtextmm( unsigned char *msg, unsigned char *phonenum ); 
                  int API_sendmsgtextff( unsigned char flash *msg, unsigned char flash *phonenum ); 
                  int API_sendmsgtextfm( unsigned char flash *msg, unsigned char *phonenum ); 
                  int API_sendmsgtextmf( unsigned char  *msg, unsigned char flash *phonenum )  ;
                  
                  int API_writebookf(unsigned int index, flash unsigned char *phone_num,flash unsigned char *name);    
                  int API_writebook(unsigned int index, unsigned char *phone_num, unsigned char *name); 
                  
                  
                  
                  
                  void API_resetSIMbook()
                  {
                      unsigned char i=0;
                      for(i=0;i<21;i++)
                      {
                          SIMBook[i].phone[0]='\0'; 
                          SIMBook[i].name[0]='\0';
                      }   
                  }
                  
                  void API_resetfromSMS()
                  {      
                      int dem=0;
                      for(dem=0;dem<161;dem++)
                      {
                          fromsmsnumber[dem]=0; 
                          fromsmsdatetime[dem]=0;
                          fromsmstext[dem]=0;      
                      }
                  }
                  
                  int API_GSMtestconnect()
                  {
                      UART0_rx_reset();
                      UART0_setSearchString(OK_);               //Set OK to be search string  // set OK de tim kem     
                      UART0_putsf(AT);                          //Check connection
                      UART0_rx_on();                            //Receiver on 
                      if(API_check_acknowledge()<1) return 0;   //NOT  OK  
                      return 1;   
                  }  
                  //--------------------------------------------------------------
                  int API_GSMinit()
                  { 
                  // Send ATZ
                      UART0_rx_reset();
                      UART0_setSearchString(OK_);                 //Set OK to be search string  // set OK de tim kem     
                      UART0_putsf(ATZ);                          //Send reset modem
                      UART0_rx_on();                               //Receiver on 
                      if(API_check_acknowledge()<1) return 0;      //Echo off = OK 
                      delay_ms(5);
                     
                  // Send ATE0
                      UART0_rx_reset();
                      UART0_putsf(ATE0);                          //Send turn echo off
                      UART0_rx_on();                               //Receiver on   
                      if(API_check_acknowledge()<1)   return -1;                //Echo off = OK      
                      delay_ms(5);   
                   
                  // Send ATCLIP    
                      UART0_rx_reset();                              //Reset system
                      UART0_putsf(ATCLIP);                        //Ding dang chuoi tra ve khi co cuoc goi la RING
                      UART0_rx_on();                            //Receiver on
                      if(API_check_acknowledge() <1 ) return -2;          //Preferred storage = OK  
                      delay_ms(5);    
                         
                  // send ATCSCS
                      UART0_rx_reset();                              //
                      UART0_putsf(AT_CSCS);                          //
                      UART0_rx_on();                             //Receiver on
                      if(API_check_acknowledge()<1 )  return -3;          //Preferred storage = OK
                      delay_ms(5);  
                         
                  // Send ATW   
                      UART0_rx_reset();                              //Reset system
                      UART0_putsf(ATW);                        //LUU CAU HINH CAI DAT AT CLIP & ATE0
                      UART0_rx_on();                             //Receiver on
                      if(API_check_acknowledge()<1 )  return -3;          //Preferred storage = OK
                      delay_ms(5);  
                       
                      
                   // Send THIET LAP SMS DANG TEXT    
                      UART0_rx_reset();                              //Reset system
                      UART0_putsf(AT_SMSTEXTFORMAT);                   //Send preferred storage
                      UART0_rx_on();                             //Receiver on
                      if(API_check_acknowledge()<1 )  return -4;         //Preferred storage = OK  
                      delay_ms(5);  
                      
                   // THIET LAP CHE DO THONG BAO KHI CO TIN NHAN MOI
                   // AT+CNMI="2,2,0,1,1"  --> KHI CO TIN NHAN MOI TRUYEN NOI DUNG LEN LUON 
                   // AT+CNMI="3,3,0,1,1"  --> KHI CO TIN NHAN MOI SE THONG BAO DANG LUU VAO VUNG NHO NAO
                   // AT+CNMI="0,0,0,1,1"  --> KHI CO TIN NHAN MOI KO TRUYEN VE THONG BAO 
                      UART0_rx_reset();                              //Reset system
                      UART0_putsf(AT_CNMI);                       //Send preferred storage
                      UART0_rx_on();                             //Receiver on
                      if(API_check_acknowledge()<1 )  return -5;         //Preferred storage = OK
                      
                      return 1;     
                  }
                  //--------------------------------------------------------------
                  //  kiem tra da nhan du lieu OK chua
                  int API_check_acknowledge(void)     
                  {
                      static unsigned int i, ii;    
                      //doi cho den khi rx_ack1=1 hoac i = 65535    
                      //toc do 9600 thi 1 byte =1ms -->250 byte = 0,25s <0,5s
                      //timeout
                     for(i=0;(rx_ack0==0)&&(i<65535);i++) //Wait loop           // 0.5s    
                      {
                          for(ii=0;ii<100;ii++){;}            //12s <--> ii=100;  => 5s <--> ii=40         // test ko co gi khoang 2,2 s
                      }  
                      // da nhan du lieu xong 
                      if(rx_ack0 >0)                                    //Everything worked out fine...rx turned off
                      {
                          rx_ack0=0;                                     //Reset flag
                         // UART0_rx_off(); 
                          return 1;
                      }
                      else                                                //A timeout could result from no acknowledge, wrong acknowledge or buffer overrun
                      { 
                          UART0_rx_off();                      
                          UART0_rx_reset();                              //Reset buffer and interrupt routine
                          return 0;                                       // chua nhan dc OK hoac timeout o phone 
                                                                          //Timed out, or wrong acknowledge from phone
                      }
                  }  
                  
                  //----------------------------------
                  int API_readmsg(int index)
                  {
                      int j=0; 
                      if((index<=0)||(index>=66)) return -2; // tran vung nho inbox trong SIM 
                      else
                      {
                          UART0_rx_reset();
                          UART0_setSearchString(OK_);           //Set OK to be search string  // set OK de tim kem  
                          UART0_putsf(AT_CMGR);                 //Read message  
                          UART0_putint(index);                         //@index
                          UART0_putsf(CR);                              //CR
                          UART0_rx_on();                                  //Receiver on, wait for acknowledge
                          if(API_check_acknowledge()>0 )               //Read = OK
                          {  
                              j=API_decodemessage();      // giai ma tin nhan
                              if(j==1)    return 1;       // co noi dung tin nhan
                              else        return 0;       // khong co noi dung tin nhan    
                          }
                          else    return (-1);            // khong ket noi
                      }
                  } 
                  
                  int API_decodemessage()
                  {
                      int i=0;  
                      unsigned char n=0; 
                      unsigned char *temp;
                      unsigned char *temp1,*temp2;
                      unsigned char count=0,count1=0;       
                      
                      n=FUC_strlen(rx_buffer0);  
                      
                      for(i=0;i<n;i++)
                      {
                          if((rx_buffer0[i]==0x0D)&&(rx_buffer0[i+1]==0x0A)) count++;  // de so ky tu xuong dong
                      }      
                      if(count==4) return 0; // ko co tin nhan
                      else if(count==5)  // co noi dung tin nhan
                      {  
                          count1=0;
                          //n=UART0_trim();      // length string
                          for(i=0;i<n;i++)
                          {
                              if(rx_buffer0[i]==',')   count1++;
                              if(count1==1)  break;
                          }
                          // lay so dien thoai
                          temp=rx_buffer0+i+1;            // "+84913137597",,"11/10/19,15:15:18+28"..............   
                          for(i=2;i<FUC_strlen(temp);i++)
                          {
                                if(*(temp+i)!=0x22)  fromsmsnumber[i-2]= *(temp+i);       // ki tu " 
                                else  
                                {
                                  fromsmsnumber[i-2]='\0';
                                  break; 
                                }   
                          }  
                          // lay thoi gian
                          temp1=temp+i+3;                                                     // "11/10/19,15:15:18+28".............. 
                          for(i=1;i<FUC_strlen(temp1);i++)
                          {
                              if(*(temp1+i)!=0x22)  fromsmsdatetime[i-1]= *(temp1+i);       // ki tu " 
                              else 
                              {
                                  fromsmsdatetime[i-1]='\0';  
                                  break;
                              }
                                 
                          }    
                          // lay noi dung tin nhan
                          count1=0;
                          for(i=0;i<n;i++)
                          {
                              if((rx_buffer0[i]==0x0D)&&(rx_buffer0[i+1]==0x0A)) count1++;
                              if(count1==2) break; 
                          }   
                          temp2=rx_buffer0+i+2;   
                          for(i=0;i<FUC_strlen(temp2);i++)
                          {     
                              if ((*(temp2+i)==0x0D)&&(*(temp2+i+1)==0x0A))  
                              {
                                  fromsmstext[i]='\0'; 
                                  break;   
                              } 
                              else fromsmstext[i]=*(temp2+i);
                          }  
                          return 1; 
                      } 
                      else return -1; // error
                  }
                  
                  
                  //----------------------------------------------------------------- 
                  
                  //----------------------------------------------------------------- 
                  int API_checkmoney(unsigned char tk)
                  {
                      UART0_rx_reset();
                      UART0_setSearchString(OK_);                       //Set OK to be search string  // set OK de tim kem  
                      UART0_putsf("ATD");                           //Call  
                      if(tk==1)   UART0_putsf("*101#");                         //phone number  
                      else if(tk==2) UART0_putsf("*102#");                         //phone number
                      else return 0; 
                      UART0_putchar(';');
                      UART0_putsf(CR);                              //CR
                      UART0_rx_on();                                  //Receiver on, wait for acknowledge
                      if(API_check_acknowledge()> 0)    //Da nhan  OK   , doi nhan them du lieu gui ve 
                      {   
                          UART0_rx_reset( );                                            //Clear rx_buff
                          UART0_setSearchString(CUSD_);                                 //Set "OK" to be search string
                          UART0_rx_on();                                               //Receiver on  
                          if(API_check_acknowledge()>0)
                          {   
                              if(SplitInfMoney()>0)   return 1;
                              else return 0;
                          }
                          else return 0;
                      }  
                      else return 0; 
                  }    
                  //-----------------------------------------------------------------  
                  
                  int SplitInfMoney()
                  {
                      int i=0;  
                      unsigned char n=0; 
                      unsigned char *temp;  
                      
                      if((rx_buffer0[2]=='+')&&(rx_buffer0[3]=='C')&&(rx_buffer0[4]=='U')&&(rx_buffer0[5]=='S')&&(rx_buffer0[6]=='D'))
                      {
                          n=FUC_strlen(rx_buffer0); // lay do dai chuoi rx_buffer0;
                          for(i=0;i<=n;i++)
                          {
                              if(rx_buffer0[i]==',') break;    
                          }  
                          if(i==n) return 0; // cu phap ko dung
                          else
                          {
                              temp=rx_buffer0+i+1;
                              for(i=1;i<FUC_strlen(temp);i++)
                              {
                                  if(*(temp+i)!=0x22) fromsmsmoney[i-1]=*(temp+i);
                                  else 
                                  {
                                      fromsmsmoney[i-1]='\0';
                                      break;
                                  }   
                              } 
                              return 1;
                          }
                      }
                      else return 0;  // noi dung khong dung   
                  } 
                  
                  //-------------------------------------------------------------------
                  int API_deletemsg(int index)
                  { 
                      if((index<=0)||(index>=66)) return -2; // ra  ngoai vung nho
                      else
                      {
                          UART0_rx_reset();
                          UART0_setSearchString(OK_);                       //Set OK to be search string  // set OK de tim kem  
                          UART0_putsf(AT_CMGD);                           //Read message  
                          UART0_putint(index);                         //@index
                          UART0_putsf(CR);                              //CR
                          UART0_rx_on();                                  //Receiver on, wait for acknowledge
                          if(API_check_acknowledge() > 0 )    //Delete = OK    
                          {
                              return 1;                       // xoa thanh cong
                          }
                          else    return 0;                   // chua xoa thanh cong
                      }
                  }  
                    
                  //------------------------------------------------------------------------
                  int API_sendmsgtextmm( unsigned char *msg, unsigned char *phonenum )
                  {
                      UART0_rx_reset( );                                            //Clear rx_buff
                      UART0_setSearchString(READY_);                                //Set "> " to be search string
                      UART0_putsf(AT_CMGS);                                         //Send message     
                      UART0_puts(phonenum);                                         //Send message
                      UART0_putsf(CR);                                                //CR
                      UART0_rx_on();                                                 //Receiver on
                      if(API_check_acknowledge() > 0)                             //Wait for acknowledge = "> "
                      {
                        UART0_rx_reset( );                                            //Clear rx_buff
                        UART0_setSearchString( OK_ );                                 //Set "OK" to be search string
                        UART0_puts(msg);
                        UART0_putchar(26);                                           // ki tu Ctrl+Z
                        UART0_rx_on();                                               //Receiver on
                        if( API_check_acknowledge() > 0 )                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge() > 0 )                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge() > 0 )                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        
                        else                                                        //Acknowledge != OK
                        {
                          return -2;                                                // loi ket noi
                        }
                      }
                      else                                                          //Acknowledge != "> "
                      {
                          return -1;                                                // loi ket noi
                      }
                  }
                  //----------------------------------------------------
                  int API_sendmsgtextff(flash unsigned char  *msg,flash unsigned char  *phonenum )  
                  {   
                      UART0_rx_reset();                                            //Clear rx_buff
                      UART0_setSearchString(OK_);                                 //Set "OK" to be search string
                      UART0_putsf(AT_CSCS);  
                      UART0_rx_on();                                                 //Receiver on
                      if( API_check_acknowledge()>0)                             //Wait for acknowledge = "> "
                      {
                      UART0_rx_reset( );                                            //Clear rx_buff
                      UART0_setSearchString(READY_);                                //Set "> " to be search string
                      UART0_putsf(AT_CMGS);                                         //Send message     
                      UART0_putsf(phonenum);                                         //Send message
                      UART0_putsf(CR);                                                //CR
                      UART0_rx_on();                                                 //Receiver on
                      if( API_check_acknowledge()>0)                             //Wait for acknowledge = "> "
                      {
                        UART0_rx_reset();                                            //Clear rx_buff
                        UART0_setSearchString(OK_);                                 //Set "OK" to be search string
                        UART0_putsf(msg);
                        UART0_putchar(26);                                           // ki tu Ctrl+Z
                        UART0_rx_on();                                               //Receiver on
                        if( API_check_acknowledge()>0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge()>0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge() >0)                           //Acknowledge = OK
                        {
                          return 1;
                        } 
                        else                                                        //Acknowledge != OK
                        {
                          return -2;
                        }
                      }
                      else                                                          //Acknowledge != "> "
                      {
                          return -1;
                      } 
                      }
                  }
                  
                  //--------------------------------------------------------------------------------------------------
                  int API_sendmsgtextfm( unsigned char flash *msg, unsigned char *phonenum )  
                  {
                      UART0_rx_reset( );                                            //Clear rx_buff
                      UART0_setSearchString(READY_);                                //Set "> " to be search string
                      UART0_putsf(AT_CMGS);                                         //Send message     
                      UART0_puts(phonenum);                                         //Send message
                      UART0_putsf(CR);                                                //CR
                      UART0_rx_on();                                                 //Receiver on
                      //Append payload
                      if( API_check_acknowledge()>0)                             //Wait for acknowledge = "> "
                      {
                        UART0_rx_reset();                                            //Clear rx_buff
                        UART0_setSearchString(OK_);                                 //Set "OK" to be search string
                        UART0_putsf(msg);
                        UART0_putchar(26);                                           // ki tu Ctrl+Z
                        UART0_rx_on();                                               //Receiver on
                        if( API_check_acknowledge()>0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge()>0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge() >0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        
                        else                                                        //Acknowledge != OK
                        {
                          return -2;
                        }
                      }
                      else                                                          //Acknowledge != "> "
                      {
                          return -1;
                      }
                  }
                   //---------------------------------------------------------------------------------------------
                  int API_sendmsgtextmf( unsigned char  *msg, unsigned char flash *phonenum )  
                  {
                      UART0_rx_reset( );                                            //Clear rx_buff
                      UART0_setSearchString(READY_);                                //Set "> " to be search string
                      UART0_putsf(AT_CMGS);                                         //Send message     
                      UART0_putsf(phonenum);                                         //Send message
                      UART0_putsf(CR);                                                //CR
                      UART0_rx_on();                                                 //Receiver on
                      //Append payload
                      if( API_check_acknowledge()>0)                             //Wait for acknowledge = "> "
                      {
                        UART0_rx_reset();                                            //Clear rx_buff
                        UART0_setSearchString(OK_);                                 //Set "OK" to be search string
                        UART0_puts(msg);
                        UART0_putchar(26);                                           // ki tu Ctrl+Z
                        UART0_rx_on();                                               //Receiver on
                        if( API_check_acknowledge()>0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge()>0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        if( API_check_acknowledge() >0)                           //Acknowledge = OK
                        {
                          return 1;
                        }
                        
                        else                                                        //Acknowledge != OK
                        {
                          return -2;
                        }
                      }
                      else                                                          //Acknowledge != "> "
                      {
                          return -1;
                      }
                  }
                  //------------------------------------------------------------------------------------------------
                  
                  int API_writebookf(unsigned int index, flash unsigned char *phone_num,flash unsigned char *name)
                  {
                         UART0_rx_reset();
                         UART0_setSearchString(OK_);                       //Set OK to be search string  // set OK de tim kem 
                         UART0_putsf("AT+CPBW=");                           //Read book entry
                         UART0_putint(index);                         //@index
                         UART0_putchar(',');
                         UART0_putsf(phone_num);
                         UART0_putsf( ",161," );
                         UART0_putsf(name);
                         UART0_putsf(CR); 
                         UART0_rx_on();                             //CR+LF
                         if(API_check_acknowledge()>0) return 1;
                         else return 0;
                  }
                   
                  int API_writebook(unsigned int index, unsigned char *phone_num, unsigned char *name)
                  {
                         UART0_rx_reset();
                         UART0_setSearchString(OK_);                       //Set OK to be search string  // set OK de tim kem 
                         UART0_putsf("AT+CPBW=");                           //Read book entry
                         UART0_putint(index);                         //@index
                         UART0_putchar(',');
                         UART0_puts(phone_num);
                         UART0_putsf( ",161," );
                         UART0_puts(name);
                         UART0_putsf(CR); 
                         UART0_rx_on();                             //CR+LF
                         if(API_check_acknowledge()>0) return 1;
                         else return 0;
                  } 
                  
                  
                  int API_readbook(unsigned int index)
                  {
                         int i,len;
                         unsigned char count=0,count1=0;
                         unsigned char *temp;
                         UART0_rx_reset();                                //Reset system
                         UART0_setSearchString(OK_);                     //Set OK to be search string
                         UART0_putsf("AT+CPBR=");                           //Read book entry
                         UART0_putint(index);                         //@index
                         UART0_putsf(CR);                              //CR+LF
                         UART0_rx_on( );                                          //Receiver on, wait for acknowledge
                         if(API_check_acknowledge()>0)                // Read=OK
                         {
                              len=FUC_strlen(rx_buffer0);  
                              for(i=0;i<len;i++)
                              {
                                  if((rx_buffer0[i]==0x0D)&&(rx_buffer0[i+1]==0x0A)) count++;   
                              }
                              if(count==2)   // chua luu ten, no contact
                              {
                              SIMBook[index].phone[0]='\0';
                              SIMBook[index].name[0]='\0';
                              return 0;
                              }           
                              else if(count==4)
                              {
                                  if((rx_buffer0[2]=='+')&&(rx_buffer0[3]=='C')&&(rx_buffer0[4]=='P')&&(rx_buffer0[5]=='B')&&(rx_buffer0[6]=='R'))  // OK
                                  {   
                                      for(i=0;i<len;i++)
                                      {
                                          if(rx_buffer0[i]==',') break;
                                      } 
                                      // lay so dien thoai
                                      temp=rx_buffer0+i+1;           // "0913137597",161,"MRDUONGBO"........    
                                      for(i=1;i<FUC_strlen(temp);i++)
                                      {
                                          if(*(temp+i)!=0x22)  SIMBook[index].phone[i-1]= *(temp+i);       // ki tu " 
                                          else  
                                          {
                                              SIMBook[index].phone[i-1]='\0';
                                              break; 
                                          }   
                                      } 
                                      // lay name 
                                      for(i=0;i<len;i++)
                                      {
                                          if(rx_buffer0[i]==',') count1++;
                                          if(count1==3) break;
                                      } 
                                      temp=rx_buffer0+i+1; 
                                      for(i=1;i<FUC_strlen(temp);i++)
                                      {
                                          if(*(temp+i)!=0x22)  SIMBook[index].name[i-1]= *(temp+i);       // ki tu " 
                                          else  
                                          {
                                              SIMBook[index].name[i-1]='\0';
                                              break; 
                                          }   
                                      }
                                      return 1;     
                                  }
                                  else return 0;   // loi cau truc
                              }
                              
                         } 
                         else return -1;                                  // khong  ket noi
                  }
                  
                  //----------------------------------------------------------
                  #endif
                  2. File Header UART.H
                  Code:
                  #ifndef _UART_H_
                  #define _UART_H_   
                  #include <mega128.h>  
                  
                  // define for UCSRA 
                  #define MPCM    0       // bit trong truyen nhan da chip
                  #define U2X     1       // che do gap doi  0: bt     1: gap doi
                  #define UPE     2       // bit bao parity bi loi
                  #define OVR     3       // bit bao tran du lieu
                  #define FE      4       // bit bao khung truyen bi  loi
                  #define UDRE    5       // bit bao thanh ghi UDR trong  
                  #define TXC     6      // bit trang thai qua trinh truyen ket thuc
                  #define RXC     7      // bit trang thai qua trinh nhan ket thuc
                  // define for UCSRB
                  #define RXCIE   7              // Cho phep ngat khi nhan ket thuc
                  #define TXCIE   6              // cho phep ngat khi truyen ket thuc
                  #define UDRIE   5              // cho phep ngat khi UDR trong
                  #define RXEN    4              // kich hoat bo nhan
                  #define TXEN    3               // kich hoat bo truyen
                  #define UCSZ2   2              // bit dung de quy dinh do dai du lieu
                  #define RXB8    1              // bit thu 9 trong nhan 9bit
                  #define TXB8    0               // bit thu 9 trong truyen
                  // define for UCSRC
                  #define URSEL   7              //  1: dung thanh ghi UCSRC,   0: dung thanh ghi UBRRH ( vi trung dia chi)
                  #define UMSEL   6              //  0: ko dong bo,        1: dong bo
                  #define UPM1    5              // 
                  #define UPM0    4              //  dung cho chon parity
                  #define USBS    3               // 0: 1 bit stop,       1: 2 bit stop
                  #define UCSZ1   2              // 
                  #define UCSZ0   1              // chon toc do BAUD
                  #define UCPOL   0               // chi dung cho truyen dong bo   0: suon  len,  1: suon xuong,      khong dong bo:0
                    
                  
                  #define FRAMING_ERROR (1<<FE)         // bit bao khung truyen bi loi
                  #define PARITY_ERROR (1<<UPE)         // bit bao parity bi loi
                  #define DATA_OVERRUN (1<<OVR)         // bao tran du lieu
                  #define DATA_REGISTER_EMPTY (1<<UDRE) // bao thanh ghi UDR trong
                  #define RX_COMPLETE (1<<RXC)           // qua trinh nhan ket thuc   
                  
                  //! Possible strings pointed to by searchStr
                  const unsigned char flash OK[]                      = "OK\r\n";                   //!< "OK"
                  const unsigned char flash CMTI[]                    = "+CMTI: ";                  //!< New Message arrived
                  const unsigned char flash READY[]                   = "> ";                       //!< Phone ready to receive text message
                  const unsigned char flash CR_LF[]                   = "\r\n";                     //!< Carrige Return Line Feed
                  const unsigned char flash CUSD[]                   = "+CUSD: ";                   //!< Check tk 
                  const unsigned char flash CPIN[]                   = "+CPIN: ";                   //!< Check sim ready
                  const unsigned char flash *searchFor;                                             //!< Flash pointer
                  const unsigned char flash *searchStrings[6]         = {OK, CMTI, READY, CR_LF, CUSD,CPIN};   //!< Initialize pointer 
                  
                  #define RX_WAIT0        65000                //!< Timeout value
                  #define RX_WAIT1        65000                //!< Timeout value
                  
                  #define  RX_BUFFER_SIZE0 250
                  #define  TX_BUFFER_SIZE0 250
                  #define  RX_BUFFER_SIZE1 60
                  #define  TX_BUFFER_SIZE1 60   
                  #define RX_BUFFER_MAX0    RX_BUFFER_SIZE0-2    
                  #define RX_BUFFER_MAX1    RX_BUFFER_SIZE1-2
                  
                  
                  //---------------------------------------------------------------------------------------------// USART0 Receiver buffer
                  unsigned char rx_buffer0[RX_BUFFER_SIZE0];  
                  //unsigned char rx_buffer0_copy[RX_BUFFER_SIZE0]; 
                  
                  //! Overflow and acknowledge flag
                  bit rx_overflow0=0, rx_ack0=0; 
                  //bit write_flag=0;
                  volatile bit rx_flag0=1,check0=1;      // check de nhan du lieu tu P1  
                  static int rx_index0=0; 
                  volatile unsigned int rx_i0=0;   // khai bao bien dem dung trong ngat
                  static unsigned char searchStr; 
                  
                  volatile unsigned char Rec_count0=0,pre_Rec_count0=0; 
                  
                  #if RX_BUFFER_SIZE0<256
                  unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
                  #else
                  unsigned int rx_wr_index0,rx_rd_index0,rx_counter0;
                  #endif    
                  
                  // USART1 Transmitter buffer
                  unsigned char tx_buffer0[TX_BUFFER_SIZE0];
                  #if TX_BUFFER_SIZE0<256
                  unsigned char tx_wr_index0,tx_rd_index0,tx_counter0;
                  #else
                  unsigned int tx_wr_index0,tx_rd_index0,tx_counter0;
                  #endif  
                  
                  
                  //---------------------------------------------------------------------------------------------// USART1 Receiver buffer
                  unsigned char rx_buffer1[RX_BUFFER_SIZE1];
                  //! Overflow and acknowledge flag
                  bit rx_overflow1=0,rx_ack1=0; 
                  bit rx_flag1=0;
                  //bit write_flag=0;
                  //static unsigned char searchStr;
                  static int rx_index1=0; 
                  volatile unsigned int rx_i1=0;   // khai bao bien dem dung trong ngat 
                  bit check1=1;
                  unsigned char Rec_count1=0; 
                  
                  #if RX_BUFFER_SIZE1<256
                  unsigned char rx_wr_index1,rx_rd_index1,rx_counter1;
                  #else
                  unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;
                  #endif    
                  
                  // USART1 Transmitter buffer
                  unsigned char tx_buffer1[TX_BUFFER_SIZE1];
                  #if TX_BUFFER_SIZE1<256
                  unsigned char tx_wr_index1,tx_rd_index1,tx_counter1;
                  #else
                  unsigned int tx_wr_index1,tx_rd_index1,tx_counter1;
                  #endif   
                  //-------------------------------------------------------------------------------------
                  
                  // init, setup
                  void UART0_rx_reset(void); 
                  void UART0_init();
                  void UART0_stop();
                  void UART0_tx_rx_on(void);
                  void UART0_tx_rx_off(void);
                  void UART0_rx_on(void);
                  void UART0_rx_off( void );    
                  
                  void UART1_init();
                  void UART1_stop();
                  void UART1_tx_rx_on(void);
                  void UART1_tx_rx_off(void);
                  void UART1_rx_on(void);
                  void UART1_rx_off( void );
                  
                  
                  //dung ngat 
                  char getchar(void); 
                  void putchar(char c);  
                  char getchar1(void); 
                  void putchar1(char c);  
                  
                  // khong dung ngat
                  void UART0_setSearchString(unsigned char Response);
                  int  UART0_putchar(unsigned char data);
                  void UART0_putint(int data);
                  void UART0_puts(unsigned char *fstr);
                  void UART0_putsf(const unsigned char flash *fstr);   
                  void UART0_putstr(unsigned char *fstr, unsigned char len);
                  int  UART0_trim(void);
                  unsigned char* UART0_gets(void); 
                  void UARTO_send(unsigned char *Data0, unsigned char DataLen0);   // dung ngat  
                  void UART1_send(unsigned char *Data1, unsigned char DataLen1);
                  
                  
                  #ifndef _DEBUG_TERMINAL_IO_
                  // Get a character from the USART0 Receiver buffer
                  #define _ALTERNATE_GETCHAR_
                  #pragma used+
                  char getchar(void)
                  {
                  char data;
                  while (rx_counter0==0);
                  data=rx_buffer0[rx_rd_index0];
                  if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
                  #asm("cli")
                  --rx_counter0;
                  #asm("sei")
                  return data;
                  }
                  #pragma used-
                  #endif
                  
                  // USART0 Transmitter interrupt service routine
                  interrupt [USART0_TXC] void usart0_tx_isr(void)
                  {
                  if (tx_counter0)
                     {
                     --tx_counter0;
                     UDR0=tx_buffer0[tx_rd_index0];
                     if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;
                     };
                  }
                  
                  #ifndef _DEBUG_TERMINAL_IO_
                  // Write a character to the USART0 Transmitter buffer
                  #define _ALTERNATE_PUTCHAR_
                  #pragma used+
                  void putchar(char c)
                  {
                  while (tx_counter0 == TX_BUFFER_SIZE0);
                  #asm("cli")
                  if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0))
                     {
                     tx_buffer0[tx_wr_index0]=c;
                     if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;
                     ++tx_counter0;
                     }
                  else
                     UDR0=c;
                  #asm("sei")
                  }
                  #pragma used-
                  #endif
                   
                  //--------------------------------------------------------------------------------------------
                  
                  // Get a character from the USART1 Receiver buffer
                  #pragma used+
                  char getchar1(void)
                  {
                  char data;
                  while (rx_counter1==0);
                  data=rx_buffer1[rx_rd_index1];
                  if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
                  #asm("cli")
                  --rx_counter1;
                  #asm("sei")
                  return data;
                  }
                  #pragma used-
                  // USART1 Transmitter buffer
                  
                  // USART1 Transmitter interrupt service routine
                  interrupt [USART1_TXC] void usart1_tx_isr(void)
                  {
                  if (tx_counter1)
                     {
                     --tx_counter1;
                     UDR1=tx_buffer1[tx_rd_index1];
                     if (++tx_rd_index1 == TX_BUFFER_SIZE1) tx_rd_index1=0;
                     };
                  }
                  
                  // Write a character to the USART1 Transmitter buffer
                  #pragma used+
                  void putchar1(char c)
                  {
                  while (tx_counter1 == TX_BUFFER_SIZE1);
                  #asm("cli")
                  if (tx_counter1 || ((UCSR1A & DATA_REGISTER_EMPTY)==0))
                     {
                     tx_buffer1[tx_wr_index1]=c;
                     if (++tx_wr_index1 == TX_BUFFER_SIZE1) tx_wr_index1=0;
                     ++tx_counter1;
                     }
                  else
                     UDR1=c;
                  #asm("sei")
                  }
                  #pragma used-
                  
                   
                   //--------------------------------------------------------------------------  
                  void UART1_init()
                  {
                  // USART1 initialization
                  // Communication Parameters: 8 Data, 1 Stop, Even Parity
                  // USART1 Receiver: On
                  // USART1 Transmitter: On
                  // USART1 Mode: Asynchronous
                  // USART1 Baud rate: 19200
                  UCSR1A=0x00;
                  UCSR1B=0xD8;
                  UCSR1C=0x26;
                  UBRR1H=0x00;
                  UBRR1L=0x23;
                  } 
                  
                  void UART1_stop()
                  {
                  UCSR1A=0x00;
                  UCSR1B=0x00;
                  UCSR1C=0x00;
                  UBRR1H=0x00;
                  UBRR1L=0x00;
                  }  
                  
                  void UART1_rx_off()
                  {
                      UCSR1B=UCSR1B&~(1<<RXCIE);
                  } 
                  
                  void UART1_off()
                  {
                      UCSR1B=UCSR1B&~(1<<RXCIE)&~(1<<TXCIE);
                  }  
                  
                  void UART1_rx_on()
                  {
                      UCSR1B=UCSR1B|(1<<RXCIE);
                  }
                  void UART1_on()
                  {
                      UCSR1B=UCSR1B|(1<<RXCIE)|(1<<TXCIE);
                  }
                  //-----------------------------------------------    
                  
                  // phuc vu cho debug hoac giao tiep GSM
                  void UART0_init()
                  {
                  // USART0 initialization
                  // Communication Parameters: 8 Data, 1 Stop, No Parity
                  // USART0 Receiver: On
                  // USART0 Transmitter: On
                  // USART0 Mode: Asynchronous
                  // USART0 Baud Rate: 9600
                  UCSR0A=0x00;
                  UCSR0B=0xD8;
                  UCSR0C=0x06;
                  UBRR0H=0x00;
                  UBRR0L=0x47;
                  } 
                  
                  void UART0_stop()
                  {
                  UCSR0A=0x00;
                  UCSR0B=0x00;
                  UCSR0C=0x00;
                  UBRR0H=0x00;
                  UBRR0L=0x00;
                  } 
                   
                  void UART0_rx_off(void)
                  {
                      UCSR0B=UCSR0B&~(1<<RXCIE);
                  } 
                  //---------------------------------------
                  void UART0_tx_rx_on(void)
                  {
                      UCSR0B=UCSR0B|(1<<RXCIE)|(1<<TXCIE);
                  } 
                  void UART0_tx_rx_off()
                  {
                      UCSR0B=UCSR0B&~(1<<RXCIE)&~(1<<TXCIE);
                  }
                  
                  void UART0_rx_on(void)
                  {
                      UCSR0B=UCSR0B|(1<<RXCIE);
                  }
                  //------------------------------------------------------------ 
                  //  set cac string de tim  kiem trong ham
                  void UART0_setSearchString(unsigned char Response)       
                  {
                      UART0_rx_off();                         // Disable RX interrupt
                      searchFor = searchStrings[Response];    //Set desired search string
                      searchStr = Response;                   //Used in rx_isr     
                      rx_i0 = 0;
                  } 
                  //---------------------------------------------------------------------------  
                  void UART0_rx_reset()
                  {   
                      int i=0;
                      UART0_rx_off();                        // Disable RX interrupt
                      for (i=0;i<RX_BUFFER_SIZE0;i++)
                      { 
                          rx_buffer0[i] = '\0';   
                      }
                      rx_i0 = 0;              //Init variables 
                      rx_index0=0;
                      rx_overflow0 = 0;       //Zero overflow flag
                      rx_ack0 = 0;     
                  }    
                  //-------------------------------------------------------------    
                  int  UART0_putchar(unsigned char data)
                  {
                      unsigned int i;  
                      for(i=0;!(UCSR0A & DATA_REGISTER_EMPTY);i++)        // Wait for empty transmit buffer
                      {
                          if(i>RX_WAIT0)                                  // > timeout  thoi gian du truyen 1 byte
                          {
                              return -1;                                  //Give feedback to function caller
                          }
                      }
                      UDR0 = data;                                        // Start transmittion     
                      return (int)data;                                   //Cast and return int value
                  }  
                  //-----------------------------------------------
                  void UART0_putsf(const unsigned char flash  *fstr)     
                  {
                      for(;*fstr!='\0';)
                      {     
                          UART0_putchar(*fstr++);
                      }
                  } 
                  // truyen ca chuoi cho den khi gap ki tu ket thuc chuoi
                  void UART0_puts(unsigned char *fstr)     
                  {
                      for( ;*fstr != '\0'; )
                      {     
                          UART0_putchar(*fstr++);
                      }
                  }  
                  void UART0_putstr(unsigned char *fstr,unsigned char len)
                  {
                      unsigned char i=0;
                      for(i=0;i<len;i++)
                      {   
                          UART0_putchar(*fstr++);
                      }
                  } 
                  //  gui 1 so integer thanh dang text
                  void UART0_putint(int data)
                  {
                      int ii;
                      unsigned char integer_buf[5];
                  
                      if (data < 0)                                              //Integer is negative
                      {
                          data = -data;                                             //Convert to positive Integer
                          UART0_putchar('-');                                   //Print - sign
                      }
                      for (ii=0; ii < 5; )                                    //Convert Integer to char array
                      {
                          integer_buf[ii++] = '0'+ data % 10;                        //Find carry using modulo operation
                          data = data / 10;                                         //Move towards MSB
                      }
                      do
                      { 
                          ii--; 
                      }while((integer_buf[ii] == '0') && (ii != 0)); // xoa nhung so 0 o dau                  //Remove leading 0's
                      
                      do
                      { 
                          UART0_putchar(integer_buf[ii--]);
                      }while (ii>=0);     //Print int->char array convertion
                  
                  }  
                  
                  //--------------------------------------------- 
                  //  cat duoi chuoi "OK\r\n" nhan ve
                  int UART0_trim(void)
                  {
                      int i;
                      unsigned char temp;
                      for(i=rx_index0-1;i>=0;i--)    // vi sau khi nhan xong da tang rx_index0 them 1                                                  
                      {
                          temp = rx_buffer0[i];                                                     //rx_buff[i] into temp
                          //if((temp!='\r') &&(temp!='\n')&&(temp!='O')&&(temp!='K')&&(temp!=' '))    //If not equal to ' ','O', 'K', '\r' or '\n', break 
                          if((temp!='\r') &&(temp!='\n')&&(temp!='O')&&(temp!='K'))    //If not equal to 'O', 'K', '\r' or '\n', break
                          {
                              break;                                                                //Do break
                          }
                      }
                      rx_buffer0[i+1] = '\0';                                                     //Terminate trimmed string
                      return (i+1);                                                                 //Return new length
                  }
                     
                  
                  //------------------------- 
                  unsigned char* UART0_gets(void)
                  {
                    return rx_buffer0;
                  }
                  
                  //-----------------------------------------------------------------------------
                  // dung ngat de truyen du lieu
                  void UARTO_send(unsigned char *Data0, unsigned char DataLen0)   
                  {
                      unsigned char i; 
                      unsigned char *ptr;
                      ptr=Data0;
                      for(i=0;i<DataLen0;i++)
                      {
                          putchar(ptr[i]);   // gui lien tiep
                      }
                  }  
                  void UART1_send(unsigned char *Data1, unsigned char DataLen1)
                  {
                      unsigned char i; 
                      unsigned char *ptr;
                      ptr=Data1;
                      for(i=0;i<DataLen1;i++)
                      {
                          putchar1(ptr[i]); 
                      }    
                  }   
                  #endif
                  3. Ngắt nhận uart0 trong chương trình chính
                  Code:
                   // USART0 Receiver interrupt service routine
                  interrupt [USART0_RXC] void usart0_rx_isr(void)
                  {
                      char status,data;
                      status=UCSR0A;
                      data=UDR0; 
                      if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
                      {  
                          rx_buffer0[rx_index0]=data;                     //Store new data    
                          rx_index0++;
                          if(rx_index0>RX_BUFFER_MAX0)                    //Check for overflow
                          {
                              rx_index0=0;                                //Reset write index
                              rx_overflow0=1;                             //Set flag high                       
                              //UART0_rx_off();                           // Disable RX interrupt  
                              // tranh truong hop ko co tin nhan, du lieu van den khi co cuoc goi
                              UART0_rx_reset();                           // reset
                          }
                          if(searchFor[rx_i0]==data )                     //Test response match
                          {
                              rx_i0++;                                    
                              if(!searchFor[rx_i0])                       // End of new_message string...received new message!                  
                              { 
                                  rx_i0=0;                                //  reset
                                  if(searchStr==CMTI_)                    //+CMTI:
                                  {
                                      searchFor=searchStrings[CRLF_];       //Wait for
                                      searchStr=CRLF_;
                                  }
                                  else if (searchStr==CPIN_)                  //  CHECK TK
                                  {
                                      searchFor=searchStrings[CRLF_];       //Wait for
                                      searchStr=CRLF_;   
                                  } 
                                  else if (searchStr==CUSD_)                  //  CHECK TK
                                  {
                                      searchFor=searchStrings[CRLF_];       //Wait for
                                      searchStr=CRLF_;   
                                  } 
                                  else
                                  {
                                      rx_ack0=1;                                  //Set new message flag
                                      UCSR0B&=~(1<<RXCIE);                        // Disable RX interrupt  
                                  }
                              }
                          }
                          else rx_i0=0;                                   //Not valid search pattern...start again. 
                      }
                  }
                  Trong hàm main() bạn khởi tạo uart và init module SIM bằng hàm API_GSMinit(); . Nếu bạn khởi tạo OK thì bạn sử dụng các hàm đọc như bình thường.
                  Chúc bạn thành công.
                  Sống là để chiến đấu

                  Comment


                  • #39
                    chào các a, bây giờ e muốn tiếp tục chuyển sang thoại nhưng e vẫn chưa biết làm thế nào, mong các a giúp đỡ. Các a cho e hỏi, em phải dùng IC nào để lưu lại giọng nói để khi gọi đến module thì module sẽ tự động phát giọng nói đó. Cảm ơn các a.
                    WS:
                    Blog:

                    Comment


                    • #40
                      Nguyên văn bởi quangtung112 Xem bài viết
                      chào các a, bây giờ e muốn tiếp tục chuyển sang thoại nhưng e vẫn chưa biết làm thế nào, mong các a giúp đỡ. Các a cho e hỏi, em phải dùng IC nào để lưu lại giọng nói để khi gọi đến module thì module sẽ tự động phát giọng nói đó. Cảm ơn các a.
                      Bạn thử dùng con ISD để thu giọng nói xem, rồi phát lại vào đường mic in của module sau khi đã kết nối cuộc gọi, hoặc là ghi âm PCM vào thẻ nhớ rồi phát lại qua VDK

                      Comment


                      • #41
                        Nguyên văn bởi quangtn82 Xem bài viết
                        Bạn thử dùng con ISD để thu giọng nói xem, rồi phát lại vào đường mic in của module sau khi đã kết nối cuộc gọi, hoặc là ghi âm PCM vào thẻ nhớ rồi phát lại qua VDK
                        e muốn dùng thẻ nhớ+VĐK, a có tài liệu gì liên quan cho e tham khảo với. Cảm ơn a.
                        WS:
                        Blog:

                        Comment


                        • #42
                          Nguyên văn bởi quangtung112 Xem bài viết
                          e muốn dùng thẻ nhớ+VĐK, a có tài liệu gì liên quan cho e tham khảo với. Cảm ơn a.
                          Mình không có tài liệu nào về vấn đề này hết, bạn có thể tìm hiểu cấu trúc của file âm thanh mã hóa dạng PCM (file.wav thì phải, không rõ lắm) rồi đọc và giải mã, sau đó dùng DAC để phát lại, hoặc tự tạo định dạng file mã hóa PCM riêng để đọc và phát lại bằng DAC

                          Comment


                          • #43
                            Nguyên văn bởi quangtung112 Xem bài viết
                            chào các a, bây giờ e muốn tiếp tục chuyển sang thoại nhưng e vẫn chưa biết làm thế nào, mong các a giúp đỡ. Các a cho e hỏi, em phải dùng IC nào để lưu lại giọng nói để khi gọi đến module thì module sẽ tự động phát giọng nói đó. Cảm ơn các a.
                            1. cách này nhanh nhất mà đỡ mất công nghiên cứu nhiều, bạn dùng 1 cái mp3 ghi âm giọng lại, khi nào cần phát thì play thôi.

                            2. dùng VDK + thẻ nhớ, ko đơn giản mà mất nhiều thời gian. Đổi lại được kiến thức.

                            gợi ý bạn tìm hiểu về con VS1001, có rất nhiều tài liệu và nhiều người đã làm rồi.
                            (^_^) hoangnv.3i@gmail.com

                            Comment


                            • #44
                              Nguyên văn bởi hoang_3i Xem bài viết
                              1. cách này nhanh nhất mà đỡ mất công nghiên cứu nhiều, bạn dùng 1 cái mp3 ghi âm giọng lại, khi nào cần phát thì play thôi.

                              2. dùng VDK + thẻ nhớ, ko đơn giản mà mất nhiều thời gian. Đổi lại được kiến thức.

                              gợi ý bạn tìm hiểu về con VS1001, có rất nhiều tài liệu và nhiều người đã làm rồi.
                              Với cách 1 của a thì play tự động như nào vậy a? hay là khi nào cần thì mới ấn nút play thì mới phát được? Cảm ơn a.
                              WS:
                              Blog:

                              Comment


                              • #45
                                Nguyên văn bởi quangtung112 Xem bài viết
                                Với cách 1 của a thì play tự động như nào vậy a? hay là khi nào cần thì mới ấn nút play thì mới phát được? Cảm ơn a.
                                Muốn tự động thì can thiệp vào cái MP3 đấy, để khi vdk xuất lệnh đọc nó sẽ play giống như khi ấn nút play vậy (chắc phải hàn dây vào nút play của MP3)

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X