0
\$\begingroup\$

I have been trying to interface GSM using the code and circuit from this link, since 2 days. only difference is that I am using AT89S52 and SIM900A module, but I am not getting any response like OK on LCD, can anybody guide me in right direction?

Can different 8051 controller be the problem? I am pasting the code here:

// Program to Interface GSM Module with 8051 microcontroller (AT89C51) without using PC
#include<reg51.h>
#define port P1
#define dataport P2 // Data port for LCD
sbit rs = port^2;
sbit rw = port^3;
sbit en = port^4;
int count,i;
unsigned char check,str[15];
bit check_space;
void init_serial() // Initialize serial port
{
 TMOD=0x20; // Mode2
 TH1=0xfd; // 9600 baud
 SCON=0x50; // Serial mode=1 ,8-Bit data,1 Stop bit ,1 Start bit, Receiving on
 TR1=1; // Start timer
}
void delay(unsigned int msec) // Function for delay
{
 int i,j;
 for(i=0;i<msec;i++)
 for(j=0; j<1275; j++);
}
void lcd_cmd(unsigned char item) // Function to send command on LCD
{
 dataport = item;
 rs= 0;
 rw=0;
 en=1;
 delay(1);
 en=0;
 return;
} 
void lcd_data(unsigned char item) // Function to display character on LCD
{
 dataport = item;
 rs= 1;
 rw=0;
 en=1;
 delay(1);
 en=0;
 return;
}
void lcd_data_string(unsigned char *str) // Function to display string on LCD
{
 int i=0;
 while(str[i]!='0円')
 {
 lcd_data(str[i]); 
 i++;
 delay(10); 
 }
 return; 
}
void lcd()
{
 lcd_cmd(0x38); // For using 8-bit 2 row LCD 
 delay(5); 
 lcd_cmd(0x0F); // For display on cursor blinking
 delay(5); 
 lcd_cmd(0x80); // Set the cursor on first position of LCD 
 delay(5); 
}
void transmit_data(unsigned char str) // Function to transmit data through serial port
{
 SBUF=str; //Store data in SBUF
 while(TI==0); //Wait till data transmits
 TI=0; 
}
 void receive_data() interrupt 4 // Function to recieve data serialy from RS232 into microcontroller
 { 
 RI=0;
 str[++count]=SBUF; //Read SBUF
 }
unsigned char byte_check() // Function to check carraige return and new line character
{
 switch(str[0])
 {
 case 0x0a:
 { // Return 0x00 for new line
 return 0x00;
 break ;
 }
 case 0x0d:
 { // Return 0x01 for carriage return
 return 0x01;
 break ;
 }
 default :return 0x02 ; // Return 0x02 for characters except new line and carriage return
 }
}
void main()
{ 
 lcd(); // Initialize LCD
 init_serial(); // Initialize serial port
 count=(-1);
 delay(500);
 lcd_data_string("Ready");
 delay(10); 
 lcd_cmd(0x01); 
 IE=0x94; 
 transmit_data('A'); // Transmit 'A' to serial port
 delay(1);
 transmit_data('T'); // Transmit 'T' to serial port
 delay(1);
 transmit_data(0x0d); // Transmit carriage return to serial port
 delay(50);
 while(1)
 {
 if(count>=0)
 {
 check=byte_check(); // Check the character
 if(check!=0x00)
 { 
 if(check==0x01)
 {
 if(check_space==1) // Check previous character
 {
 lcd_data(0x20);
 check_space=0;
 }
 }
 else 
 {
 lcd_data(str[0]);
 check_space=1;
 }
 }
 count--; 
 for(i=0;i<count;i++) // Shift the whole array to one left
 {
 str[i]=str[i+1];
 }
 }
 }
}
Roh
4,6807 gold badges51 silver badges86 bronze badges
asked Aug 1, 2015 at 13:12
\$\endgroup\$
1
  • \$\begingroup\$ do you see cursor on the left-most side? \$\endgroup\$ Commented Aug 3, 2015 at 15:11

1 Answer 1

1
\$\begingroup\$

Well most of the things are same for the AT89S51 and At89S52 but yet they way header files are implemented differs hence the way the constants like TMOD,TR1,TF1 are defined in reg51.h may be different for the AT89S52 they are defined by their hex address which may vary in these header files,hence I would adice you to use 52 header file,Lets me know if trouble still occurs.

answered Aug 1, 2015 at 13:41
\$\endgroup\$
1
  • \$\begingroup\$ I have used reg52.h but its still not working, and the code I have pasted is for AT89C51 not S51, I am still trying with no luck \$\endgroup\$ Commented Aug 3, 2015 at 8:06

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.