1. 我在做单片机写指令到GSM让GSM发短信到指定手机号,求资料或QQ帮助
我以前编写的51单片机通过SIM300模块用GPRS把采集到的温度发送到设定的TCP服务器,你可以看看,发短信很简单,根据AT指令修改一下前面的代码即可。
/*8位共阳数码管,18b20接P3^3,11.0592晶振*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar th,tl;//存放采集温度高8位,低8位
uchar temp_int,temp_dot;//存放转换后的温度整数部分和小数部分
sbit dq=P3^3; //18b20数据接口
bit stat_18b20; //18b20初始化返回状态
uchar ctrl_z=0x1a;//GPRS数据发送结束标识ctrl+z键16进制码
uchar ATCLPORT[]="AT+CLPORT=\"TCP\",\"5256\"\r"; //设置本地GPRS通信协议以及端口号
uchar ATCIPSTART[]="AT+CIPSTART=\"TCP\",\"121.233.142.158\",\"6000\"\r"; //连接TCP服务器
uchar ATCIPSEND[]="AT+CIPSEND\r"; //启动数据发送命令
void uart_init(); //串口初始化
void delayus(uint xus); //延时微秒
void delayms(uint xms); //延时毫秒
init_18b20(); //18b20初始化
readchar(); //读一个字节
void writechar(uchar dat); //写一个字节
void get_temp(); //取温度
void temp_convert(); //转换温度
void send_string(uchar *gprs_string); //给GPRS模块发送字符串
void send_char(uchar);
void gprs_init(); //GPRS模块初始化
void send_temp(); //通过GPRS模块发送温度
//--------------下面为主函数----------------
void main(void)
{
uart_init();
gprs_init();
while(1)
{
get_temp();
temp_convert();
send_temp();
}
}
void uart_init()
{
TMOD=0X20;
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
//--------------下面为延时操作函数----------------
void delayus(uint xus)
{
for(;xus>0;xus--);
}
void delayms(uint xms)
{
uint i;
uchar j;
for(i=0;i<xms;i++)
for(j=0;j<112;j++);
}
//--------------下面为DS18B20操作函数----------------
init_18b20()
{
stat_18b20=1;
dq=1;
delayus(5);
dq=0;
delayus(50);
dq=1;
delayus(5);
stat_18b20=dq;
delayus(60);
dq=1;
return(stat_18b20);
writechar(0x4e);
writechar(0x02);
writechar(0x01);
writechar(0x7f);
}
readchar()
{
uchar i,dat;
for(i=8;i>0;i--)
{
dq=0;
dat=dat>>1;
dq=1;
if(dq)
dat=dat|0x80;
delayus(4);
}
return(dat);
}
void writechar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
dq=0;
dq=dat&0x01;
delayus(5);
dq=1;
dat=dat>>1;
}
}
void get_temp()
{
init_18b20();
if(stat_18b20==0)
{
writechar(0xcc);
writechar(0x44);
delayms(50);
init_18b20();
writechar(0xcc);
writechar(0xbe);
tl=readchar();
th=readchar();
}
else
{
; //错误处理模块
}
}
void temp_convert()
{
temp_int=((th&0x07)<<4)|((tl&0xf0)>>4);
temp_dot=tl&0x0f;
}
//--------------下面为SIM300操作函数----------------
void send_string(uchar *gprs_string)//指令字符串发送指令
{
while(*gprs_string)
{
SBUF = *gprs_string;
while(TI==0);
TI=0;
gprs_string++;
}
}
void send_char(uchar x)
{
SBUF=x;
while(TI==0);
TI=0;
}
void gprs_init()
{
send_string(ATCLPORT);
delayms(1000);
send_string(ATCIPSTART);
delayms(1000);
}
void send_temp()
{
send_string(ATCIPSEND);
send_char(temp_int);
send_char(temp_dot);
send_char(ctrl_z);
delayms(1000);
}
2. 单片机与GSM之间信息是怎么传递啊
是通过串行口传递的,你先用电脑串口助手调试单片机的串口,单片机与电脑之间通过串口调试助手通信成功了,再电脑和模块用串口助手调通了,最后将单片机与模块通过串口连接,一般用RS232或者TTL电平通信,两者的连接方式是不一样的,一般GSM的使用说明里面都说的很清楚
单片机将AT指令通过串行口发送给GSM来控制GSM发送短信拨打电话或执行其他的操作
如果没有GSM或AT指令的资料可留下邮箱我给你发一份
3. 单片机控制GSM模块发短信,程序
void send(uint sdata)--这是发送一个字节的函数
{
SBUF=sdata;
while(TI==0);
TI=0;
}
send ("AT+CMGF=0\r\n");
send ("AT+CMGS=25\r\n");
发送一个字节的函数,在这里,你却用它发送字符串?
----
单片机发出的东西,你先不要急着送到手机模块。
先送到 PC 的串口助手,看看,你都发出了什么。
4. 单片机与GSM模块通信
先解决好单片机与GSM模块的线路连接问题,然后,单片机可通过GSM模块给你手机发信息
也能收到手机向GSM模块发送的信息;
那么手机向单片机发指令的方式,比如采用短信方式,那么单片机就可从收到的短信上提取你定义的指令了