ahmadabad
Newbie level 4
DEARS:
I want to send this string (+CMTI 'SM' +CMGR) from computer to avr 128 with usart and after receiving this string (+CMTI 'SM' +CMGR) by avr I will call other function f1.you can see my code in follow. But I have a problem. When I send other string i.e. (+CLIP: "+952178259109"), program jump to the f1 function again .i will program jump to f1 function only we received this string (+CMTI 'SM' +CMGR) not other string i.e. (+CLIP: "+952178259109"), I am using codevision. May be help me .
tkn
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15
#endasm
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
// USART0 Receiver buffer
#define RX_BUFFER_SIZE0 248
char rx_buffer0[RX_BUFFER_SIZE0];
unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
// This flag is set on USART0 Receiver buffer overflow
bit rx_buffer_overflow0;
///////////////////////////////////////////////////////////////////////////////////////////////
bit recievedsms=0;
//////////////////////////////////////////////////////////////////////////////////////////////
// USART0 Receiver interrupt service routine
#pragma savereg-
interrupt [USART0_RXC] void uart0_rx_isr(void)
{
char status,data;
#asm
push r26
push r27
push r30
push r31
in r26,sreg
push r26
#endasm
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
/////////////////////////////////////////////////////////////////////////////////////
if(data=='+')
{
rx_buffer0[0]=data;
rx_wr_index0=1;
}
else if(rx_wr_index0==1 && data=='C')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==2 && data=='M')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==3 && data=='T')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==4 && data=='I')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==5)
{
recievedsms=1;
}
/////////////////////////////////////////////////////////////////////////////////////
rx_buffer0[rx_wr_index0]=data;
if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
if (++rx_counter0 == RX_BUFFER_SIZE0)
{
rx_counter0=0;
rx_buffer_overflow0=1;
};
};
#asm
pop r26
out sreg,r26
pop r31
pop r30
pop r27
pop r26
#endasm
}
.
.
.
.
.
while (1)
{
if(recievedsms==1)f1();
}
;
I want to send this string (+CMTI 'SM' +CMGR) from computer to avr 128 with usart and after receiving this string (+CMTI 'SM' +CMGR) by avr I will call other function f1.you can see my code in follow. But I have a problem. When I send other string i.e. (+CLIP: "+952178259109"), program jump to the f1 function again .i will program jump to f1 function only we received this string (+CMTI 'SM' +CMGR) not other string i.e. (+CLIP: "+952178259109"), I am using codevision. May be help me .
tkn
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15
#endasm
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
// USART0 Receiver buffer
#define RX_BUFFER_SIZE0 248
char rx_buffer0[RX_BUFFER_SIZE0];
unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
// This flag is set on USART0 Receiver buffer overflow
bit rx_buffer_overflow0;
///////////////////////////////////////////////////////////////////////////////////////////////
bit recievedsms=0;
//////////////////////////////////////////////////////////////////////////////////////////////
// USART0 Receiver interrupt service routine
#pragma savereg-
interrupt [USART0_RXC] void uart0_rx_isr(void)
{
char status,data;
#asm
push r26
push r27
push r30
push r31
in r26,sreg
push r26
#endasm
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
/////////////////////////////////////////////////////////////////////////////////////
if(data=='+')
{
rx_buffer0[0]=data;
rx_wr_index0=1;
}
else if(rx_wr_index0==1 && data=='C')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==2 && data=='M')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==3 && data=='T')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==4 && data=='I')
{
rx_buffer0[rx_wr_index0]=data;
rx_wr_index0++;
}
else if(rx_wr_index0==5)
{
recievedsms=1;
}
/////////////////////////////////////////////////////////////////////////////////////
rx_buffer0[rx_wr_index0]=data;
if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
if (++rx_counter0 == RX_BUFFER_SIZE0)
{
rx_counter0=0;
rx_buffer_overflow0=1;
};
};
#asm
pop r26
out sreg,r26
pop r31
pop r30
pop r27
pop r26
#endasm
}
.
.
.
.
.
while (1)
{
if(recievedsms==1)f1();
}
;