2793|2

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

请大家看看我这个串口的程序哪里不对??很多乱码 [复制链接]

单片机的接收端是连接的GPS信号, 发送端连接的是GPRS的接收。
单片机就是把收到的经纬度找出来传给GPRS,用UDP发送。
只要不连GPS, 发送的数据就完全正确。
连了GPS之后,数据就乱了,GPS是一直在发送,速度很快

#include
#include
#include
#include
#define uchar unsigned char
#define uint  unsigned int

uchar runFly = 1;
uchar temp;
uchar fir[5] = {0};
uchar dataJW[38] = {0};
uchar dataOK[20] = {0};
uchar nowPoint_fir = 0;
uchar nowPoint_data = 0;
uchar mode = 0;
uchar canSend = 0;


//  GPRS模块联网AT+CIPSTART="UDP","IP","PORT" 语句  
unsigned char code AT_CIPSTART[] = {"AT+CIPSTART=\"UDP\",\"113.250.157.114\",\"22223\""};

//  定长发送语句 AT+CIPSEND=20
unsigned char code AT_CIPSEND_20[]={"AT+CIPSEND=20"};

void delay_1ms(uint x)
{
        uint i,j;
        for(j=0;j                 for(i=0;i<110;i++);
}               

//向串口发送一个数据
void send_uart(unsigned char ch)
{
    SBUF=ch;
        while(TI==0);
        TI=0;
}

// 模块UDP联网指令AT_CIPSTART 发送
void send_AT_CIPSTART()
{
        uchar i;
        for(i=0;AT_CIPSTART!='\0';i++)
        {
            send_uart(AT_CIPSTART);
        }
     send_uart(0x0d);
     send_uart(0x0a);
}


//  发送指令AT_CIPSEND_20 的发送      
void send_AT_CIPSEND_20()
{
        uchar i;
        for(i=0;AT_CIPSEND_20!='\0';i++)                 
        {
                send_uart(AT_CIPSEND_20);                                                  
        }
        send_uart(0x0d);
        send_uart(0x0a);
}


//         发送经纬度数组 WD[]
void send_WD()
{
        uchar i;
          for(i=0; i<20; i++)               
          {
                   send_uart(dataOK);
          }
        send_uart(0x0d);
          send_uart(0x0a);
}

void uart_init()
{
        TMOD = 0x20;
        TH1 = 0xfa;
        TL1 = 0xfa;
        SCON=0x40;    //接受数据
        PCON = 0x00;
        EA = 0;
        ES = 0;
        TR1 = 1;
}

char cmp(uchar *a, uchar *b)
{
        uchar i = 0;
        char result = 0;
        while(a != '\0' && b != '\0')
        {
                if(a != b)
                {
                        result = 1;
                        return result;
                }
                i++;
        }
        return result;       
}

/*********************************************************/
/*                                                                                                                 */
/* 主程序                                                                                    */
/*                                                       */
/*********************************************************/
main()
{
        uart_init();
    while(1)
        {
                if(runFly)
                {
                        ES = 0;
                        delay_1ms(50000);
                        send_AT_CIPSTART();
                        delay_1ms(50000);
                        delay_1ms(50000);
                        send_AT_CIPSTART();
                        delay_1ms(50000);
                        delay_1ms(50000);
                        ES = 1;                       
                }       
        }
}

//检测数据是否符合发送条件
uchar isSend()
{
        if(dataJW[12] == 'A')
        {
                return 1;
        }
        return 0;       
}

void getOK()
{
        uchar j = 0;
        for(j = 0; j < 9; j++)
        {
                dataOK[j] = dataJW[j+14];
        }
        for(j = 9; j < 20; j++)
        {
                dataOK[j] = dataJW[j+16];
        }
}

//串口接收中断
void analysis(uchar dat)
{
        if(dat == '$')
        {
                mode = 1;
                nowPoint_fir = 0;
                return ;               
        }
        switch(mode)
        {
        case 0: break;
        case 1: fir[nowPoint_fir] = dat; nowPoint_fir++; break;
        case 2: dataJW[nowPoint_data] = dat; nowPoint_data++; break;
        default: break;
        }
        if(nowPoint_fir == 5)
        {
                nowPoint_fir = 0;
                if(cmp(fir, "GPRMC") == 0)
                {
                        mode = 2;
                }
                else
                {
                        mode = 0;
                }
        }
        if(nowPoint_data == 38)
        {
                nowPoint_data = 0;
                if(isSend() == 1)
                {
                        send_AT_CIPSEND_20();
                        delay_1ms(50000);
                        getOK();
                        send_WD();
                }
                else
                {
                        mode = 0;
                }
        }
}

void receive() interrupt 4
{
        ES = 0;
        if(RI == 1)
        {
                temp = SBUF;
                analysis(temp);
                RI = 0;
        }
        ES = 1;
}
此帖出自51单片机论坛

最新回复

楼主莫急,让小生试试看。初步测试发现数据接收后一直显示十六进制的F8 00  详情 回复 发表于 2012-10-21 22:54

点评

楼主莫急,让小生试试看。初步测试发现数据接收后一直显示十六进制的F8 00  详情 回复 发表于 2012-10-21 22:54
点赞 关注
 

回复
举报

24

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
在这问问题 有人解吗
此帖出自51单片机论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 楼主 baokeyu 的帖子

楼主莫急,让小生试试看。初步测试发现数据接收后一直显示十六进制的F8 00
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表