c - Receiving OK response for AT command via PIC Microcontroller -
char rcv[10]; void main() { uart1_init(9600); delay_ms(2000); trisb=0x00; uart1_write_text("at"); uart1_write(13); //enter key = cf + lf uart1_write(10); delay_ms(500); while (1) { portb.rb0=1; // endless loop while(!uart1_data_ready()); // if data received, rcv[0]=uart1_read(); rcv[1]=uart1_read(); rcv[2]='\0'; uart1_write_text(rcv); portb.rb0=0; } } compiler used : mikroc rcv output attttttttt. pls me out here receive ok response gsm modem works hyperterminal. using pic 18f4520 in picplc16v6 development board mikroelectronika.
it seems have modem echo set on, you'll receive each caracter send it.
i rewrite code :
void main(void) { uint8_t cmd[10]; uint8_t answer[20]; uint16_t timeout = 500; //max miliseconds wait answer uart1_init(9600); delay_ms(1000); trisb=0; cmd[0]='a'; cmd[1]='t'; cmd[2]=13; cmd[3]=10; cmd[4]=0;//marks end of cmd string while(1) { uint8_t answer_len = sendmodemcmd(cmd,answer,timeout); uart1_write_text(answer); delay_ms(500);//not needed ... } } uint8_t sendmodemcmd(uint8_t *cmd,uint8_t* answer,uint16_t timeout) { uint16_t local_timeout; uint8_t answer_len=0; while(*cmd!=0) { uart1_write(*cmd++); local_timeout=timeout; while(local_timeout>0 && !uart1_data_ready()) { delay_ms(1); local_timeout--; } if(uart1_data_ready()) { uart1_read();//discard echoed character } } uint8_t finished=0; while(finished==0) { local_timeout=timeout; while(local_timeout>0 && !uart1_data_ready()) { delay_ms(1); local_timeout--; } if(uart1_data_ready()) { *answer++=uart1_read(); answer_len++; } else { finished=1; } } *answer=0; return answer_len; }
Comments
Post a Comment