Vanessa Love Strawberriie
Newbie level 3
Hi, is there anybody who is able to write a keil c programming for my gsm to receive the message from what the user send to the gsm? i am using the #include<DS89C4xx.H> header and xdata.
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
Code C - [expand] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 #include<DS89C4xx.H> //microcontroller specific library (DS89C450) #include<absacc.h> //XBYTE[] #include<string.h> #define uchar unsigned char; /*Global Variables*/ uchar start_header='+',end_header=':'; //gsm command header uchar xdata GSMrd[80]; uchar xdata raw_data[80]; uchar xdata infor[4]; enum sector_state {Idle,Extract} state; uchar read_count,raw_data_count,infor_count,infor_count1, get_infor,infor_start,infor_start1; uchar xdata extract; void initializtion (void) { SCON1 = 0x52; //set serial port 1, 8-bit UART, TI Enable SCON0 = 0x52; TMOD = 0x21; //set Timer 1 to 16-bit timer/counter //WDCON = 0x80; TH1 = 0xFD; //set Baud Rate=9600 //PCON=0x80; //set SCON=1 for baud rate = 19200 TR1=1; //Run Timer 1 EA=1; ES0=1; } void tx(unsigned char x) { while (TI_1==0); TI_1 = 0; SBUF1 = x; } void tx0(unsigned char x) { while (TI_0==0); TI_0 = 0; SBUF0 = x; } void SMSstring(unsigned char *msg) //send string GSM to hyper terminal { int count=0; while(msg[count]) { tx(msg[count++]); } // tx(0x0D); //CR carriage return // tx(0x0A); //next line } void SMSstring0(unsigned char *msg) { int count=0; ES0=0; while(msg[count]) { tx0(msg[count++]); } ES0=1; // tx(0x0D); //CR carriage return // tx(0x0A); //next line } void serial_int(void) interrupt 4 //serial port 0 { ES0=0; //disable interrupt if(RI_0==1) { if(read_count==80) //Check is array full read_count=0; //Restart from position 0 GSMrd[read_count]=SBUF0; //Storing the data from serial buffer into array read_count++; //increase the count //indicator=1; RI_0=0; //reset RI flag } ES0=1; } void delay(int num) { int i,j; for(i=0;i<num;i++) //number of loop according with the given num for(j=0;j<1200;j++); //num * 1200 times of looping } void read_message (void) { if(raw_data_count != read_count) //checking is there any unread data? { if(raw_data_count==80) //go back to start position of array raw_data_count=0; raw_data[raw_data_count]=GSMrd[raw_data_count];//read the data //======================= CHECK FOR "CMTI"================================ if(raw_data[raw_data_count]==start_header) //check for + sign { SMSstring0("Detected + Sign"); //prove that is detected infor_start=1; //increment to 1 if start header is true raw_data[raw_data_count]=GSMrd[raw_data_count]='0'; //reset the string array of raw_data and GSmrd tx0(0x0D); //CR carriage return tx0(0x0A); //next line } else if(infor_start==1) // if information (CMTI) is true { if(raw_data[raw_data_count]==end_header) //check for : sign { SMSstring0("Detected : Sign"); raw_data[raw_data_count]=GSMrd[raw_data_count]='0'; //reset the string array of raw_data and GSmrd infor_start=0; //reset infor_start back to zero infor_count=0; //reset infor_count back to zero tx0(0x0D); //CR carriage return tx0(0x0A); //next line if((infor[0]=='C') && (infor[1]=='M') && (infor[2]=='T') && (infor[3]=='I')) { delay(100); SMSstring0("AT+CMGR=1"); //Read SMS message in SIM location 1 tx0(0x0D); //CR carriage return tx0(0x0A); //next line extract=1; //when message is true it will extract out the data switch(raw_data[raw_data_count]) { case: '+': state=extract; break; default: break; } } infor[0]=infor[1]=infor[2]=infor[3]='0'; //reset the CMTI information } else if(infor_count<4) //counter to detect CMTI { infor[infor_count]= raw_data[raw_data_count]; //store the raw data into infor as a string infor_count++; //every character receieve will incraese the count } } raw_data_count++; } } void main(void) { delay(200); //call delay PMR=PMR|0X81; //power management modules for external memory initializtion(); //initialization ); SMSstring("GSM Testing "); //to indicate system is ready for testing while(1) { read_message(); } }