ninebarmaximus
Joined: 27 Feb 2006 Posts: 20
|
gsm kbhit problem |
Posted: Thu Apr 13, 2006 10:28 am |
|
|
i have an interface built to connect a 16f74 to a gsm sim card, and when i try to reset the card i can see the information being produced from the gsm on an oscilloscope and due to this i know that the pic can see the information, which is reaching pin c7.But it is not transferring the information to the PC
the following is the code i am using to try and read the information coming back from the gsm sim card for the reset command, its a bit long but i hope someone sees something obviously wrong.
also when the reset command is sent from the hyperterminal, the pic stops responding to other commands such as the test to see if its transmitting to the PC.
this is the code
Code: |
#include <16F74.h>
#device adc=8
#fuses NOWDT,XT, NOPUT, NOPROTECT, BROWNOUT
#use delay(clock=3620000)
#use rs232(baud=9600, parity=n, bits=8, xmit=pin_a2, rcv=pin_a4,ERRORS, stream=PC)//PC
#use rs232(baud=9600, parity=n, bits=8, xmit=pin_c6, rcv=pin_c7,ERRORS, stream=GSM)//GSM
int timeout;
char answer;
long testtimer;
char responce[70];
int counter;
void InitialContacts()
{
output_high(PIN_B3); //Disables clock
output_high(PIN_B7); //Puts direction in receive mode
output_low(PIN_B2); //Disables VCC
output_low(PIN_B1); //Puts reset in low state
output_low(PIN_B0); //puts VPP in low state
}
void SetUpContacts()
{
output_low(PIN_B1); //puts reset in low state
delay_us(10); //small delay
output_high(PIN_B2); //puts Vcc high
delay_us(10);
output_high(PIN_B7); //puts I/O in receive mode
delay_us(10);
output_high(PIN_B0); //raises Vpp to high voltage to activate sim card
delay_us(10);
output_float(PIN_B0); //raises Vpp to idle
delay_us(10);
output_low(PIN_B3); //applies clock to card
output_float(PIN_B4);
output_float(PIN_B5);
output_float(PIN_B6);
}
void DeactivateContacts()
{
output_low(PIN_B1); //puts reset in low state
delay_us(10); //small delay
output_high(PIN_B3); //denies clock to card
delay_us(10);
output_low(PIN_B0); //disables vpp
delay_us(10);
output_high(PIN_B7); //puts I/O in receive mode
delay_us(10);
output_low(PIN_B2); //puts Vcc low
}
void main()
{
InitialContacts();
start:
timeout=0;
testtimer=0;
while ((!kbhit(PC)&&(++timeout<500))) // 5ms
{
delay_us(10);
}
if(kbhit(PC))
{
answer=getch(PC);
if (answer=='a')
{
fprintf(PC,"PICisTALKING");
goto start;
}
if (answer=='c')
{
SetUpContacts();
goto start;
}
if (answer=='f')
{
output_high(PIN_B0);
output_high(PIN_B1);
output_high(PIN_B2);
output_high(PIN_B3);
output_high(PIN_B4);
output_high(PIN_B5);
output_high(PIN_B6);
output_high(PIN_B7);
goto start;
}
if (answer=='r')
{
output_high(PIN_B1); //puts rst in high state
testtimer=0;
while ((!kbhit(gsm)&&(++timeout<500)))
{
delay_us(10);
}
if(kbhit(GSM))
{
int i;
timeout=0;
while(++timeout<500)
{
++counter;
responce[counter]=getch(GSM);
}
fprintf(PC,"count= ");
fprintf(PC,counter);
fprintf(PC,"D= ");
for (i=0;i<=counter;i++)
{
fprintf(PC,responce[i]);
}
fprintf(PC,"H= ");
for (i=0;i<=counter;i++)
{
fprintf(PC,"%X",responce[i]);
}
goto start;
}
else
{
fprintf(PC,"no kbhit GSM");
goto start;
}
}
}
else
{
putc('N');
putc('O');
goto start;
}
}
|
|
|