各位发烧友们,能看下我的代码为什么报错了吗?

2019-07-14 19:11发布

2017-11-20_103752.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
樱花很美
2019-07-15 14:08
XX00XX00 发表于 2017-11-20 14:32
全部发出来,我给你解答

//延时函数
#include        "delay.h"
#include "intrins.h"
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        i = 2;
        j = 199;
        do
        {
                while (--j);
        } while (--i);
}

void delay_ms(u16 ms)
{
        u16 i;
        for(i=0;i<ms;i++)
                Delay1ms();
}
#include "string.h"
#include "delay.h"
#include "uart.h"
#include "timer0.h"
#include "SIMxxx.h"
#include "tempshow.c"

sbit P10=P1^0;        //用于提示程序进行到哪里
sbit P11=P1^1;        //用于提示程序进行到哪里
sbit P12=P1^2;        //用于提示程序进行到哪里
/*************  外部函数和变量声明*****************/
/*******************************************************************************
* 函数名 : main
* 描述   : 主函数
* 输入   :
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/
void main(void)
{
        u8 res;
        Uart1Init();
        Timer0Init();
        EA=1;        //开总中断
        res=1;
        P10=0;P11=0; P12=0;
        while(res)
        {
                res=sim900a_work_test();
        }
        P10=1;
        res=1;
        while(res)
        {
                res=SIM900A_CONNECT_SERVER("222.17.78.1","2317");   //实际应用时,只需要更改此处的服务器地址即可
        }
        P11=1;
        res=SIM900A_GPRS_SEND_DATA("1");                   //可更改为自己想要发送的内容                                                                                                                                                                                        //UNCION编码工具一般在资料包工具文件夹内
        while(1)
        {
                P12=1;       
                delay_ms(5000);
        }
}
void Uart1Init(void)                //9600bps@11.05926MHz
{
        PCON &= 0x7F;                //
        SCON = 0x50;                //
        AUXR &= 0xBF;                //
        AUXR &= 0xFE;                //
        TMOD &= 0x0F;                //
        TMOD |= 0x20;                //
        TL1 = 0xFD;                  //
        TH1 = 0xFD;                  //
        ET1 = 0;                    //
        TR1 = 1;                    //
  ES=1;                                        //
}
/*----------------------------
UART1 发送串口数据
-----------------------------*/
void UART1_SendData(u8 dat)
{
        ES=0;                                        //关串口中断
        SBUF=dat;                       
        while(TI!=1);        //等待发送成功
        TI=0;                                        //清除发送中断标志
        ES=1;                                        //开串口中断
}
/*----------------------------
UART1 发送字符串
-----------------------------*/
void UART1_SendString(char *s)
{
        while(*s)//检测字符串结束符
        {
                UART1_SendData(*s++);//发送当前字符
        }
}
///*----------------------------
//UART1 发送字符串
//避免出现 软件报重复调用
//-----------------------------*/
//void UART1_SendString_other(char *s)
//{
//        while(*s)//检测字符串结束符
//        {
//                UART1_SendData(*s++);//发送当前字符
//        }
//}
/*******************************************************************************
* 函数名 : Uart1
* 描述   : 串口1中断服务入口函数
* 输入   :
* 输出   :
* 返回   :
* 注意   :
******************************/
void Uart1_INTER() interrupt 4
{
        if (RI)
    {
      RI = 0;                 //清除RI位  
          if(USART1_RX_STA<USART1_MAX_RECV_LEN)                //?1?éò??óê?êy?Y
          {                 
                TIM_SetCounter();
                if(USART1_RX_STA==0)        TR0=1;                 //开启定时器
                USART1_RX_BUF[USART1_RX_STA++]=SBUF;                //保存串口数据
          }
          else
          {
                USART1_RX_STA|=1<<15;                                        //????±ê???óê?íê3é
            }
    }
    if (TI)
    {
        TI = 0;                 //清除TI位
    }
}

#include "SIMxxx.h"

u8 SIM900_CSQ[4];
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART1_RX_STA&0X8000)                //
        {
                USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;//
                strx=strstr((const char*)USART1_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{       
        u8 res=0;
        USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=1;
        UART1_SendString(cmd);
        if(ack&&waittime)               
        {
                while(--waittime)       
                {
                        delay_ms(10);
                        if(USART1_RX_STA&0X8000)
                        {
                                if(sim900a_check_cmd(ack))break;
                                USART1_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=0;
        return res;
}
u8 sim900a_work_test(void)
{
        if(sim900a_send_cmd((u8 *)"AT ",(u8 *)"OK",100))
        {
                if(sim900a_send_cmd((u8 *)"AT ",(u8 *)"OK",100))return SIM_COMMUNTION_ERR;        //通信不上
        }               
        if(sim900a_send_cmd((u8 *)"AT+CPIN? ",(u8 *)"READY",400))return SIM_CPIN_ERR;        //没有SIM卡
        if(sim900a_send_cmd((u8 *)"AT+CREG? ",(u8 *)"0,1",400))
        {
                if(strstr((const char*)USART1_RX_BUF,"0,5")==NULL)
                {
                         if(!sim900a_send_cmd((u8 *)"AT+CSQ ",(u8 *)"OK",200))       
                         {
                                memcpy(SIM900_CSQ,USART1_RX_BUF+15,2);
                         }
                         return SIM_CREG_FAIL;        //等待附着到网络
                }
        }
        return SIM_OK;
}
u8 SIM900A_CONNECT_SERVER(u8 *IP_ADD,u8 *COM)
{               
        u8          dtbuf[50];
        if(sim900a_send_cmd((u8 *)"AT+CGATT? ",(u8 *)": 1",100))         return 1;               
        if(sim900a_send_cmd((u8 *)"AT+CIPSHUT ",(u8 *)"OK",500))        return 2;
        if(sim900a_send_cmd((u8 *)"AT+CSTT ",(u8 *)"OK",200))        return 3;
        if(sim900a_send_cmd((u8 *)"AT+CIICR ",(u8 *)"OK",600))        return 4;
        if(!sim900a_send_cmd((u8 *)"AT+CIFSR ",(u8 *)"ERROR",200))        return 5;               
        sprintf((char*)dtbuf,"AT+CIPSTART="TCP","%s","%s" ",IP_ADD,COM);
        if(sim900a_send_cmd((u8 *)dtbuf,(u8 *)"CONNECT OK",200))        return 6;               
          return 0;
}
u8 SIM900A_GPRS_SEND_DATA(u8 *temp_data)
{               
         u8 cmd[3];
         //UART3SendString("启动数据发送,数据内容:",strlen("启动数据发送,数据内容:"));       
         if(sim900a_send_cmd("AT+CIPSEND ",">",100))         return 1;
         //UART3SendString((u8*)temp_data,strlen((u8*)temp_data));        UART3SendString(" ",2);
         if(sim900a_send_cmd(temp_data,NULL,0))        return 2;
         cmd[0]=0x1a;cmd[1]=0;
         if(sim900a_send_cmd(cmd,(u8 *)"SEND OK",1500))        return 3;               
         //UART3SendString("数据发送成功",strlen("数据发送成功"));        UART3SendString(" ",2);
         return 0;
}


#include "SIMxxx.h"

u8 SIM900_CSQ[4];
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART1_RX_STA&0X8000)                //
        {
                USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;//
                strx=strstr((const char*)USART1_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{       
        u8 res=0;
        USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=1;
        UART1_SendString(cmd);
        if(ack&&waittime)               
        {
                while(--waittime)       
                {
                        delay_ms(10);
                        if(USART1_RX_STA&0X8000)
                        {
                                if(sim900a_check_cmd(ack))break;
                                USART1_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=0;
        return res;
}
u8 sim900a_work_test(void)
{
        if(sim900a_send_cmd((u8 *)"AT ",(u8 *)"OK",100))
        {
                if(sim900a_send_cmd((u8 *)"AT ",(u8 *)"OK",100))return SIM_COMMUNTION_ERR;        //通信不上
        }               
        if(sim900a_send_cmd((u8 *)"AT+CPIN? ",(u8 *)"READY",400))return SIM_CPIN_ERR;        //没有SIM卡
        if(sim900a_send_cmd((u8 *)"AT+CREG? ",(u8 *)"0,1",400))
        {
                if(strstr((const char*)USART1_RX_BUF,"0,5")==NULL)
                {
                         if(!sim900a_send_cmd((u8 *)"AT+CSQ ",(u8 *)"OK",200))       
                         {
                                memcpy(SIM900_CSQ,USART1_RX_BUF+15,2);
                         }
                         return SIM_CREG_FAIL;        //等待附着到网络
                }
        }
        return SIM_OK;
}
u8 SIM900A_CONNECT_SERVER(u8 *IP_ADD,u8 *COM)
{               
        u8          dtbuf[50];
        if(sim900a_send_cmd((u8 *)"AT+CGATT? ",(u8 *)": 1",100))         return 1;               
        if(sim900a_send_cmd((u8 *)"AT+CIPSHUT ",(u8 *)"OK",500))        return 2;
        if(sim900a_send_cmd((u8 *)"AT+CSTT ",(u8 *)"OK",200))        return 3;
        if(sim900a_send_cmd((u8 *)"AT+CIICR ",(u8 *)"OK",600))        return 4;
        if(!sim900a_send_cmd((u8 *)"AT+CIFSR ",(u8 *)"ERROR",200))        return 5;               
        sprintf((char*)dtbuf,"AT+CIPSTART="TCP","%s","%s" ",IP_ADD,COM);
        if(sim900a_send_cmd((u8 *)dtbuf,(u8 *)"CONNECT OK",200))        return 6;               
          return 0;
}
u8 SIM900A_GPRS_SEND_DATA(u8 *temp_data)
{               
         u8 cmd[3];
         //UART3SendString("启动数据发送,数据内容:",strlen("启动数据发送,数据内容:"));       
         if(sim900a_send_cmd("AT+CIPSEND ",">",100))         return 1;
         //UART3SendString((u8*)temp_data,strlen((u8*)temp_data));        UART3SendString(" ",2);
         if(sim900a_send_cmd(temp_data,NULL,0))        return 2;
         cmd[0]=0x1a;cmd[1]=0;
         if(sim900a_send_cmd(cmd,(u8 *)"SEND OK",1500))        return 3;               
         //UART3SendString("数据发送成功",strlen("数据发送成功"));        UART3SendString(" ",2);
         return 0;
}

#include "SIMxxx.h"

u8 SIM900_CSQ[4];
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART1_RX_STA&0X8000)                //
        {
                USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;//
                strx=strstr((const char*)USART1_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{       
        u8 res=0;
        USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=1;
        UART1_SendString(cmd);
        if(ack&&waittime)               
        {
                while(--waittime)       
                {
                        delay_ms(10);
                        if(USART1_RX_STA&0X8000)
                        {
                                if(sim900a_check_cmd(ack))break;
                                USART1_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        USART1_RX_STA=0;USART1_RX_REC_ATCOMMAD=0;
        return res;
}
u8 sim900a_work_test(void)
{
        if(sim900a_send_cmd((u8 *)"AT ",(u8 *)"OK",100))
        {
                if(sim900a_send_cmd((u8 *)"AT ",(u8 *)"OK",100))return SIM_COMMUNTION_ERR;        //通信不上
        }               
        if(sim900a_send_cmd((u8 *)"AT+CPIN? ",(u8 *)"READY",400))return SIM_CPIN_ERR;        //没有SIM卡
        if(sim900a_send_cmd((u8 *)"AT+CREG? ",(u8 *)"0,1",400))
        {
                if(strstr((const char*)USART1_RX_BUF,"0,5")==NULL)
                {
                         if(!sim900a_send_cmd((u8 *)"AT+CSQ ",(u8 *)"OK",200))       
                         {
                                memcpy(SIM900_CSQ,USART1_RX_BUF+15,2);
                         }
                         return SIM_CREG_FAIL;        //等待附着到网络
                }
        }
        return SIM_OK;
}
u8 SIM900A_CONNECT_SERVER(u8 *IP_ADD,u8 *COM)
{               
        u8          dtbuf[50];
        if(sim900a_send_cmd((u8 *)"AT+CGATT? ",(u8 *)": 1",100))         return 1;               
        if(sim900a_send_cmd((u8 *)"AT+CIPSHUT ",(u8 *)"OK",500))        return 2;
        if(sim900a_send_cmd((u8 *)"AT+CSTT ",(u8 *)"OK",200))        return 3;
        if(sim900a_send_cmd((u8 *)"AT+CIICR ",(u8 *)"OK",600))        return 4;
        if(!sim900a_send_cmd((u8 *)"AT+CIFSR ",(u8 *)"ERROR",200))        return 5;               
        sprintf((char*)dtbuf,"AT+CIPSTART="TCP","%s","%s" ",IP_ADD,COM);
        if(sim900a_send_cmd((u8 *)dtbuf,(u8 *)"CONNECT OK",200))        return 6;               
          return 0;
}
u8 SIM900A_GPRS_SEND_DATA(u8 *temp_data)
{               
         u8 cmd[3];
         //UART3SendString("启动数据发送,数据内容:",strlen("启动数据发送,数据内容:"));       
         if(sim900a_send_cmd("AT+CIPSEND ",">",100))         return 1;
         //UART3SendString((u8*)temp_data,strlen((u8*)temp_data));        UART3SendString(" ",2);
         if(sim900a_send_cmd(temp_data,NULL,0))        return 2;
         cmd[0]=0x1a;cmd[1]=0;
         if(sim900a_send_cmd(cmd,(u8 *)"SEND OK",1500))        return 3;               
         //UART3SendString("数据发送成功",strlen("数据发送成功"));        UART3SendString(" ",2);
         return 0;
}

#include "TIMER0.h"
sbit RUNING_LED=P2^1;

void Timer0Init(void)                //10毫秒@115200
{
        AUXR &= 0x7F;               
        TMOD &= 0xF0;               
        TMOD |= 0x01;                //
        TL0 = 0x00;                //
        TH0 = 0xDC;                //
        TF0 = 0;                //
        ET0 = 1;              //
        TR0 = 0;                //停止计时
}
void TIM_SetCounter(void)                          //重新装值
{
        TL0 = 0x00;                //
        TH0 = 0xDC;                //
}
/*******************************************************************************
* 函数名 : Timer0_ISR
* 描述   : 定时器0中断服务入口函数,20ms中断一次
* 输入   :
* 输出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Timer0_ISR() interrupt 1
{
        TR0=0;//关定时器
        USART1_RX_STA|=1<<15;        //
        USART1_RX_BUF[USART1_RX_STA&0X7FFF]=0;//添加结束符
        if(!USART1_RX_REC_ATCOMMAD)       
        {               
                USART1_RX_STA=0;               
                if(strstr((char*)USART1_RX_BUF,"RING")!=NULL)        Flag_Rec_Call=1;//检测是否是来电话了
        }       
}

    /*程序功能:在1602液晶显示从DS18B20温度传感器中读出的温度*/
#include <reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit ds = P1^6;        // 温度传感器信号线
sbit beep = P1^5;           // 定义蜂鸣器端口
sbit LCD_RS = P2^6;    // 数据/命令选择端(H/L)         
sbit LCD_RW = P2^5;           // 读写选择端(1/0)
sbit LCD_EP = P2^7;           // 使能信号

uint temp;
float f_temp;

u8 code table1[] = {"DATA:2014-7-10"};
u8 code table2[] = {"Temperature:xx c"};
u8 code table3[] = {"0123456789"};

void delay(u16 xms)
{                           // 延时函数
        u16 i,j;
        for(i = xms;i > 0;i--)
                for(j = 110;j > 0;j--);
}
/*******************************************************************/      
/*                                                                                                                                 
/*                  DS18B20温度传感器模块                                    
/*                                                                        
/*******************************************************************/
void dsreset(void)    //18B20复位,初始化函数
{
  u16 i;
  ds=0;
  i=103;
  while(i>0)i--;
  ds=1;
  i=4;
  while(i>0)i--;
}

bit tempreadbit()   //读1位数据函数
{
   u16 i;
   bit dat;
   ds=0;i++;          //i++ 起延时作用
   ds=1;i++;i++;
   dat=ds;
   i=8;while(i>0)i--;
   return dat;
}

u8 tempread()   //读1个字节
{
  u8 i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tempreadbit();
    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
  }
  return dat;
}

void tempwritebyte(u8 dat)   //向DS18B20写一个字节数据函数
{
  u16 i;
  u8 j;
  bit testb;
  for(j=1;j<=8;j++)
  {
    testb=dat&0x01;
    dat=dat>>1;
    if(testb)     //写 1
    {
      ds=0;
      i++;i++;
      ds=1;
      i=8;while(i>0)i--;
    }
    else
    {
      ds=0;       //写 0
      i=8;while(i>0)i--;
      ds=1;
      i++;i++;
    }

  }
}
void tempchange(void)   //DS18B20 开始获取温度并转换
{
  dsreset();
  delay(1);
  tempwritebyte(0xcc);  // 写跳过读ROM指令
  tempwritebyte(0x44);  // 写温度转换指令
}
u16 get_temp()         //读取寄存器中存储的温度数据函数
{
  u8 a,b;

  dsreset();
  delay(1);
  tempwritebyte(0xcc);
  tempwritebyte(0xbe);
  a=tempread();         //读低8位
  b=tempread();         //读高8位
  temp=b;
  temp<<=8;            //两个字节组合为1个字
  temp=temp|a;
  f_temp=temp*0.0625;      //温度在寄存器中为12位 分辨率位0.0625°
  temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入
  f_temp=f_temp+0.05;
  return temp;         //temp是整型
}


一周热门 更多>