|
|
View previous topic :: View next topic |
Author |
Message |
ninebarmaximus
Joined: 27 Feb 2006 Posts: 20
|
more than one rs232 |
Posted: Mon Apr 24, 2006 7:55 am |
|
|
I want to be able to send stream information from pc to PIC to gsm sim card and also to be able to send from gsm sim card to PIC to pc but i am having trouble setting up the 2 rs232 connections using the code i have implemented, i am using the int_rda interrupt to see if info is coming from the gsm card and printing it to visual basic, there is no problem with this , but i dont know how i would implement the stream from the pc to the PIC using the same interupt i am using the following code Code: | #include <16F74.h>
#device adc=8
#fuses NOWDT,XT, NOPUT, NOPROTECT, BROWNOUT
#use delay(clock=3645000)
#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
#define BUFFER_SIZE 32
BYTE buffer[BUFFER_SIZE];
BYTE next_in=0;
BYTE next_out=0;
#define bkbhit (next_in!=next_out)
long timeout;
char answer;
long testtimer;
int i;
#int_rda
void serial_isr()
{
int t;
buffer[next_in]=getc(GSM);
t=next_in;
next_in=(next_in+1)%BUFFER_SIZE;
if (next_in==next_out)
next_in=t; //buffer full!!
}
BYTE bgetc()
{
BYTE c;
while (!bkbhit);
c=buffer[next_out];
next_out=(next_out+1)%BUFFER_SIZE;
return(c);
}
void Reset()
{
enable_interrupts(int_rda);
output_high(PIN_B1);
delay_ms(200);
while (bkbhit)
fprintf(PC,"%X",bgetc());
disable_interrupts(INT_RDA);
}
void main()
{
command[1]=0x80;
command[2]=0xC0;
command[3]=0x02;
command[4]=0xA4;
command[5]=0x0D;
enable_interrupts(global);
InitialContacts();
start:
timeout=0;
testtimer=0;
test=0xFF;
while(!kbhit(PC)&&(++timeout<1000))
delay_us(10);
if(kbhit(PC))
{
answer=getch(PC);
if (answer=='s')
{
enable_interrupts(int_rda);
output_low(PIN_B7);
delay_us(10);
for(i=0;i<=5;i++)
fprintf(GSM,"%X",command[i]);
fprintf(PC,"%X",command[1]);
output_high(PIN_B7);
delay_ms(50);
while (bkbhit)
fprintf(PC,"%X",bgetc());
disable_interrupts(int_rda);
goto start;
}
else
{
goto start;
}
}
else
{
goto start;
}
} |
as you can see the interrupt is set up to take info from the gsm, Code: | buffer[next_in]=getc(GSM); | how could i set it up so i could take info from pc or gsm depending on which i want to read information. |
|
|
Humberto
Joined: 08 Sep 2003 Posts: 1215 Location: Buenos Aires, La Reina del Plata
|
|
Posted: Mon Apr 24, 2006 11:53 am |
|
|
Quote: |
I want to be able to send stream information from pc to PIC to gsm sim card and
also to be able to send from gsm sim card to PIC to pc
|
It is possible to do it in such way but it is a little twisted. It would be easiest
if you can select one of the two modes using a switch selector.
You�ll need to re-define the dedicated pins for a software UART to detect the incoming
character, you can use the #INT_EXT capability to detect it.
I wrote a simple test code just to show how you can do it, hope you understand
the idea. Code not tested.
Code: |
#use rs232(baud=9600,parity=n,bits=8,xmit=pin_B1,rcv=pin_B0,stream=PC) // PC
#use rs232(baud=9600,parity=n,bits=8,xmit=pin_C6,rcv=pin_C7,stream=GSM,ERRORS)//GSM
#INT_EXT
void software_receiver()
{
if(kbhit(PC))
{
answer=getc(PC);
}
}
#INT_RDA
void serial_isr()
{
answer=getc(GSM);
}
void main()
{
enable_interrupts(global);
enable_interrupts(INT_RDA);
enable_interrupts(INT_EXT);
answer=0;
while(1)
{
do
{
}while(!answer);
fprintf(PC,"%C", answer);
answer=0;
}
}
|
Humberto |
|
|
|
|
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
|