I use AT89S52 Mc (MicroController) and Neoway M590E GSM module. when i burn the code into the Mc. i don't get any message to the number specified the code. kindly help me. thanks a lot in advance.
#include <reg51.h> void confirmPBready(void); void BYTEwrite( unsigned char VAL, unsigned char buffLEN, unsigned char *buffADDR); void sendAT(unsigned char *buf); bit COMP_buff2buff( unsigned char *BUFF1, unsigned char *BUFF2, unsigned char LEN); void delay(void); bit OKay( unsigned char *BUFF1, unsigned char *BUFF2, unsigned char LEN); unsigned char rcx[13]; code char txtMOD[]="AT+CMGF=1"; code char TE_com[]="AT+CSCS=\"GSM\""; xdata unsigned char GSMRESPONSE[]="AT+CMGS=\"+2349056777712\""; unsigned char respOK[] = "OK"; unsigned char PBcheck[]="+PBREADY"; bit RXDcmpt; bit PBflag; bit tr; unsigned char rxd_cnt = 0; unsigned char SERIALcase ; unsigned char *loc; void main() { //INITIALIZATION SCON = 0x50; TMOD = 0x20; TH1 = 0xFD; TR1 = 1; ES = 1; EA = 1; SERIALcase = 1; PBflag = rxd_cnt = RXDcmpt = 0; while(!PBflag) { if(RXDcmpt && !PBflag) confirmPBready(); } BYTEwrite(0,sizeof(rcx),rcx); //clear buffer sendAT(txtMOD); tr = OKay(rcx, respOK, sizeof(respOK)); while(!tr); tr = 0; BYTEwrite(0,sizeof(rcx),rcx); sendAT(TE_com); tr = COMP_buff2buff(rcx, respOK, sizeof(respOK)); while(!tr); tr = 0; BYTEwrite(0,sizeof(rcx),rcx); sendAT(GSMRESPONSE); delay(); sendAT("GSM MODULE TEXT VIA CODING"); delay(); sendAT("0x1A"); } void delay(void) { unsigned int i; for(i=0;i<25000;i++); } void BYTEwrite( unsigned char VAL, unsigned char buffLEN, unsigned char *buffADDR) { while(buffLEN) { *buffADDR++ = VAL; buffLEN--; } return; } bit COMP_buff2buff( unsigned char *BUFF1, unsigned char *BUFF2, unsigned char LEN) { LEN-=2; while(LEN) { if(LEN ==2) break; if(*BUFF1++ != *BUFF2++) return 0; LEN--; } return 1; } void confirmPBready() { if( COMP_buff2buff(rcx , PBcheck, sizeof(PBcheck) ) ) PBflag = 1; return; } void serial(void) interrupt 4 { unsigned char RXD_VAL; RXD_VAL = SBUF; if(RI) { switch(SERIALcase) { case 1: if(RXD_VAL == 0x0D) { SERIALcase=2; } break; case 2: if(RXD_VAL == 0x0A) { SERIALcase = 3; } break; case 3: if(RXD_VAL == 0x0D) { SERIALcase = 4; } else { rcx[rxd_cnt++] = RXD_VAL; } break; case 4: if(RXD_VAL == 0x0A) { RXDcmpt = 1; } else { rcx[rxd_cnt++] = RXD_VAL; } SERIALcase = 1; break; } } RI = 0; } void sendAT(unsigned char *buf) { while(*buf) { SBUF = *buf++; while(!TI); TI=0; } SBUF = 0x0D; while(!TI); TI=0; } bit OKay( unsigned char *BUFF1, unsigned char *BUFF2, unsigned char LEN) { while(LEN) { if(*BUFF1++ != *BUFF2++) //Check if both value in address are same. return 0; //One value is different. LEN--; //Decrement. } return 1; //AT Last, all values are the same in both buffers. }