|
|
View previous topic :: View next topic |
Author |
Message |
syide
Joined: 10 Nov 2008 Posts: 16 Location: Malaysia
|
Want to get the response from modem |
Posted: Wed Mar 11, 2009 1:18 pm |
|
|
Hello,
Can everyone take a look to this code. I want to get the response from modem. Like when I send AT, the modem will return "ok". Then send it to hyperterminal.
Code: |
#include <18F4620.h>
#include <string.h>
#use delay(clock=20000000)
#fuses HS, NOWDT, NOLVP, NODEBUG, MCLR
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7,ERRORS,bits=8,stream=GPRS)
#use rs232(BAUD=9600,parity=N,XMIT=PIN_C5,ERRORS,bits=8,stream=PC)
#ifndef NULL
#define NULL 0
#endif
const int cr=0x0D; // PIC press ENTER
void main()
{
char buf[25];
unsigned int8 i;
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
/***start test sequence***/
while (true)
{
delay_ms (1000);
fprintf(PC,"\r\n***Program started***\n");
delay_ms (1000);
fprintf(GPRS,"AT");
fputc (cr, GPRS);
delay_ms (1000);
for (i= 0; i <= 25; i++){
buf[i] = fgetc(GPRS); //get the modem respond
fprintf(PC,"%C",buf[i]);}
}
} |
|
|
|
Ttelmah Guest
|
|
Posted: Wed Mar 11, 2009 3:34 pm |
|
|
First, if the modem starts to respond, before one second has passed, the response will at least in part, be lost.
Second, the code will then be stuck in the 'for' loop, till 26 characters are received. If less than this arrive, it'll sit here for ever...
Best Wishes |
|
|
syide
Joined: 10 Nov 2008 Posts: 16 Location: Malaysia
|
|
Posted: Wed Mar 11, 2009 10:40 pm |
|
|
Quote: | the code will then be stuck in the 'for' loop, till 26 characters are received |
How to solve this problem? is it by using kbhit()? |
|
|
arunb
Joined: 08 Sep 2003 Posts: 492 Location: India
|
RE |
Posted: Thu Mar 12, 2009 12:22 am |
|
|
Use the RDA interrupt, this captures whatever comes to the port, getc() will retrieve the data, you probably need to use an array instead of c.
Code: |
#int_rda
void modem_cap()
{
char c;
c=getc();
}
|
|
|
|
syide
Joined: 10 Nov 2008 Posts: 16 Location: Malaysia
|
|
Posted: Sat Mar 14, 2009 1:35 am |
|
|
I still cannot get the response AT with this code.
Can someone show the way???
Code: | #include <18F4620.h>
#fuses HS, NOWDT, NOLVP, NODEBUG, MCLR
#use delay(clock=20000000)
#use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7,ERRORS,bits=8,stream=GPRS)
#use rs232(BAUD=9600,parity=N,XMIT=PIN_C5,ERRORS,bits=8,stream=PC)
const int cr=0x0D; // PIC press ENTER
#define BUFFER_SIZE 32
BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;
#int_rda
void serial_isr() {
int t;
// this blinks a LED :
static int1 b;
if (b)
output_high (PIN_C0);
else
output_low (PIN_C0);
b = ! b;
buffer[next_in]=getc();
t=next_in;
next_in=(next_in+1) % BUFFER_SIZE;
if(next_in==next_out)
next_in=t; // Buffer full !!
}
#define bkbhit (next_in!=next_out)
BYTE bgetc() {
BYTE c;
while(!bkbhit) ;
c=buffer[next_out];
next_out=(next_out+1) % BUFFER_SIZE;
return(c);
}
void main() {
char c;
enable_interrupts(global);
enable_interrupts(int_rda);
fprintf(PC,"\r\n\Running...\r\n");
fprintf(GPRS,"AT");
fputc (cr, GPRS);
delay_ms(2000);
// The program will delay for 10 seconds and then display
// any data that came in during the 10 second delay
do {
delay_ms(10000);
while(bkbhit){
c=bgetc();
fputc(c,GPRS);
fputc(c,PC);
}
} while (TRUE);
} |
|
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|