GSM SIM900A Модуль сопряжения с контроллером PIC18F4520 - PullRequest
0 голосов
/ 19 декабря 2018

Я работаю с модулем GSM (sim900a), взаимодействующим с микроконтроллером PIC18F4520.

Здесь я пытаюсь отправлять SMS-сообщения через контроллер PIC на модуль GSM, но не могу получить ответ от GSM и не получаю никаких сообщений.,

Когда я пытаюсь подключить к Гипертерминалу только GSM-модуль, я могу отправить SMS.Аналогичным образом, когда я пытаюсь отправить AT-команды из PIC в HYPERTERMINAL, я получаю команды Serially.

Код ниже

#include<p18f4520.h>      /* Header File */
#include<string.h>
void delay_ms(int ms);
void Data(char Value); 
void Cmd(char Value);
char temp;
void main() 
{
   char tocheck[] ="AT";/*Basic command to test GSM is working or not */
   char sendingsmsmode[]="AT+CMGF=1";/* To change the GSM Module in SMS 
  sending Mode */
   char newsms[]="AT+CMGS=918500923915";/*Set Text mode for SMS */
 char msg[]="WelcometoGSM";/* The text which you want to send */
 char terminator=0x1A;
 int i=0;
  TRISC =   0x80;         /* RC6=0 (O/P) RC7=1(I/P)                    */           
 SPBRG  =   0x33;         /* Serial Port Baud rate Generator (9600)    */
 TXSTA  =   0X24;         /* Transmission Enabling(TXEN=1,SYNC=0,BRGH=1) 
 */
 RCSTA  =   0X90;         /* Rception Enabling (SPEN=1,CREN=1)         */
 TRISC=0X00;               /*  (RC1,RC0 ->O/P Setting by Zero)                 
   */
 TRISD=0X00;                 /*  PORTD (0 - 7)pins Config as Output                  
       */

   while(tocheck[i]!='\0'){
    while(TXSTAbits.TRMT==0);
    TXREG=tocheck[i];
    delay_ms(30);
    i++;
  }
   i=0;
   while(sendingsmsmode[i]!='\0'){
    while(TXSTAbits.TRMT==0);
    TXREG=sendingsmsmode[i];
    delay_ms(30);
    i++;
  }
  i=0;
  while(newsms[i]!='\0'){
    while(TXSTAbits.TRMT==0);
    TXREG=newsms[i];
    delay_ms(30);
    i++;
   }
   i=0;
  while(msg[i]!='\0'){
    while(TXSTAbits.TRMT==0);
    TXREG=msg[i];
    delay_ms(30);
    i++;
}
  TXREG=terminator;
 delay_ms(3000);
 while(1);
 }
  void Cmd(char Value)
   {
 PORTD=Value;
 PORTCbits.RC1=0;                /*  RC1=0(RS=0)        [Command Registr 
 Selection])    */
 PORTCbits.RC0=0;                /*  RC0=0(R/W=0)   [Write Process])                
   */
 PORTCbits.RC2=1;                /*  RC2=1(Enable=1)    [Enable Line ON]                
  */
 delay_ms(4);                    /*  Minimun Delay For Hold On Data                      
   */
 PORTCbits.RC2=0;                /*  RC2=0(Enable=0)    [Enable Line OFF]               
 */
    }   

void Data(char Value)
{
 PORTD=Value;
 PORTCbits.RC1=1;               /*  RC1=1(RS=1)     [Data Registr 
Selection])       */
 PORTCbits.RC0=0;                /*  RC0=0(R/W=0)   [Write Process])                
   */
 PORTCbits.RC2=1;               /*  RC2=1(Enable=1) [Enable Line ON]                
   */
 delay_ms(4);                   /*  Minimun Delay For Hold On Data                      
    */
 PORTCbits.RC2=0;               /*  RC2=0(Enable=0) [Enable Line OFF]               
    */
    }
  void delay_ms(int ms)
{
int i,count;

for(i=1;i<=ms;i++)
{
    count=498;
    while(count!=1)
    {
        count--;
    }
     }

   }

1 Ответ

0 голосов
/ 19 декабря 2018

Вам необходимо отправлять CR или CR + LF (символы № 13 и 10 соответственно) после каждой строки, отправляемой модему.

При использовании эмулятора терминала, такого как HyperTerminal, вы нажимаете клавишу Enter, вправо?Если вы не нажмете эту клавишу, модем не знает, что команда завершена и должна быть выполнена.То же самое должно быть сделано в вашей прошивке.

Более того: вы должны разрешить некоторую задержку, и вы должны прочитать ответы модема, но это может быть вторым шагом;Прежде всего, чтобы проверить, работает ли настройка на базовом уровне, необходимо отправить «AT», затем CR, а затем посмотреть, отвечает ли модем OK (+ CR и LF ...).

Измените

char tocheck[] ="AT";

в

char tocheck[] ="AT\r";  // the \r is the CR (carriage return)

, и вы увидите, что модем ответит, если все подключено правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...