单片机用的是STC12C5A32S2,其中RXD1与TXD1与GPRS模块相连,实现往GPRS发送AT指令的功能,而RXD2与TXD2与GPS模块相连,实现接收GPS数据的功能。
我是新手,摸着石头过河的那种。。。
开始的时候如果只与GPRS模块相连,利用上位机还能收到数据,单独的用GPS模块。。。
利用串口工具也能收到数据,但是两个模块相连,程序还是原来的那个思路,就是实现不了GPS数据发送到上位机数据,各位大神,小弟跪求指条明路。。。
main程序如下:
void main(void)
{
uchar a[100];
uchar *p=a;
uchar b1[20]="AT%IPSEND="";
uchar *q1=b1;
uchar b2[3]=""";
uchar *q2=b2;
P4M1 = 0x00; //P40-P43设置为推挽输出
P4M0 = 0x0f;
P4 = 0x00;
Delay_ms(100);
IGT = 0;
Delay_ms(5000);
IGT = 1;
Timer0_init(); //定时器0初始化
Serial_Init(); //第一个串口初始化
Second_Serial_Port_Initial();
Wait_CREG();
Second_AT_ERROR("AT+CGDCONT=1,"IP","CMNET"",2);
Second_AT_ERROR("AT%ETCPIP="",""",2);
Second_AT_ERROR("AT%IPOPEN="TCP","180.109.83.195",1234",4);
Second_AT_ERROR("AT%IOMODE=0,1,1",2);
while(1){
// if(flag==1){
strcpy(p,gps);
strcat(q1,p);
strcat(q1,q2);
Second_AT_ERROR(q1,1);
strcpy(q1,"AT%IPSEND="");
Delay_ms(1000);
Yellow_LED=1;
if(i<3)
{
EA=0;
}
// }
}
void Timer0(void) interrupt 1
{
TR0 = 0; //停止定时器0
Count_time++;
if(Count_time >= 60000)
{
Count_time = 0;
}
if(Timer0_Start == 1)
Times++;
if(Times > (20*shijian))
{
Timer0_Start = 0;
Times = 0;
}
TH0 = 0x4C; //设置溢出一次为50ms
TL0 = 0x00;
TR0 = 1; //开启定时器0
}
/*********************************串口1中断处理函数******************************/
void Serial_Int(void) interrupt 4
{
ES = 0; //关串口中断,防止中断嵌套
if(TI) //如果是发送中断,则不做任何处理
{
TI = 0; //清除发送中断标志位
}
if(RI) //如果是接送中断,则进行处理
{
RI = 0; //清除接收中断标志位
Buf_First_Serial[First_Int] = SBUF; //将接收到的字符串存到缓存中
First_Int++; //缓存指针向后移动
if(First_Int > Buf1_Max) //如果缓存满,将缓存指针指向缓存的首地址
{
First_Int = 0;
}
}
ES = 1; //开启串口中断
}
void Second_Serial_Int(void) interrupt 8 {
Yellow_LED=0;
//k=S2CON;
// k=k&0x01;
//if(k==1){
S2CON=S2CON&0xfe; //RI=0;
//gps[0]='k';
// for(i=0;i<=30;i++){
gps[i]=S2BUF;
i++;
//}
// IE2 = 0x00;
//if(gps[0]=='$'){
// i=0;
// flag=1;
// Green_LED = 0;
//IE2=0;
//}
//}
//else i=0;
}
关键就是串口1与串口2的中断怎么控制?数据存在gps[]里,我感觉就是串口2的问题,串口1应该木有问题,各位大神,求指教呢。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>