专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
各位发烧友们,能看下我的代码为什么报错了吗?
2019-07-14 19:11
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
11175
7
966
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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是整型
}
加载中...
查看其它7个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
//延时函数
#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是整型
}
一周热门 更多>