GSM 打电话小问题

newstime 2010-11-02 11:26:22
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P3^2;
uchar code TC_ZXH[]={"AT+CSCA=+8613800813500\r"}; //本地中心号。
uchar code TC_MDSJ[]={"AT+CMGS=13408131082\r"}; //目的手机地址,
uchar code at[] = "AT";
uchar code call[] = "ATD13408131082;\r"; //目的手机地址,打电话用 我把最后的‘\r’去掉,在程序后面用 send(0X0A)换行,就不能打打电了,为什么呢?
uchar code cmgf[] = "AT+CMGF=1\r";


/***********************************************************
函数名称:Ini_UART
函数功能:串口初始化设置 入口参数:无 出口参数:无
***********************************************************/
void uart_int(void)
{
SCON = 0x50; //UART方式1:8位UART; REN=1:允许接收
PCON = 0x00; //SMOD=0:波特率不加倍
TMOD = 0x20; //T1方式2,用于UART波特率
TH1 = 0xFD;
TL1 = 0xFD; //UART波特率设置:9600
TR1 = 1;

}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)for(y=110;y>0;y--);
}


void send(uchar *tab)
{
while((*tab)!= '\0')
{
SBUF =*tab;
while(TI ==0);
TI = 0;
tab++;
}
}

void main()
{
uart_int();
delay(150);
while(1)
{


if(s==0)
{
delay(10);
if(s3==0)
{
while(!s3);
P0=0x00;
delay(200);
send(cmgf);
//send(0x0d);
//send(0x0d);
send(0x0a);//uchar code TC_MDSJ[]={"AT+CMGS=13408131082\r"}; 没有\r就打 不通了为什么,‘\r’不是等于 0X0A的嘛?
delay(200);
send(call);
P0=0xf7;
}
}

}
}

有劳大家了,谢谢!
...全文
127 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttwuliangjun 2010-11-05
  • 打赏
  • 举报
回复
回车\r是0X0D, 换行\n是0X0A

发送:AT(键盘回车键)
返回的是:AT
OK

上面用16进制表示就是
发送:41 54 0D
返回的是:41 54 0D 0D 0A 4F 4B 0D 0A

串口调试成功,程序里再自己看看呗
congyue123 2010-11-04
  • 打赏
  • 举报
回复
你可以研究下C语言了。。。
kangyonghui 2010-11-04
  • 打赏
  • 举报
回复
研究C语言?呵呵
#include<reg52.h>
void send_ascii(unsigned char *b);
void send_hex(unsigned char b);
void delay(unsigned int);
unsigned int c=0;
sbit D=P3^5;
void main()
{

P0=0X00;
delay(300);
TMOD=0x20; //定时器1--方式2
TL1=0xfd;
TH1=0xfd; //11.0592MHZ晶振,波特率为9600
SCON=0x50; //方式1
TR1=1; //启动定时

while(1)
{
D=1;

delay(100);
D=0;
P0=0XFE;
//if(key1==1)
//{
if(c>5)
{ send_ascii("at");
send_hex(0x0d);
delay(100);
send_ascii("at+cmgf=1");//以文本的形式发送
send_hex(0x0d);
delay(100);
//send_ascii("at+csca=\"AT+CSCA=+8613800290500\"");//短信中心地址
//send_hex(0x0d);
//delay(100);
send_ascii("at+cmgs=\"13408136925\"");//发送到指定号码
send_hex(0x0d);
send_ascii(" test ok.");
send_hex(0x1a);
send_hex(0x0d);
P0=0XAA;
delay(100);
c=0;
}
c++ ;



//}
}
}

/**************************发送字符(ASCII码)函数*********************/
void send_ascii(unsigned char *b)
{
for (b; *b!='\0';b++)
{
SBUF=*b;
while(TI!=1);

TI=0;
}
}


/**************************发送字符(十六进制)函数*********************/

void send_hex(unsigned char b)
{
SBUF=b;
while(TI!=1) ;
TI=0;
}

void delay(unsigned int delay_time) //延时子程序
{
for(;delay_time>0;delay_time--)
{}
}


newstime 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 congyue123 的回复:]
楼上正解。。。
[/Quote]

LLS说的我明白啊,就是不明白‘\r’和OXOA的区别呢,呵呵
congyue123 2010-11-03
  • 打赏
  • 举报
回复
楼上正解。。。
ttwuliangjun 2010-11-03
  • 打赏
  • 举报
回复
\r是回车,AT命令,必须加回车才有效,最明显就是用串口助手和手机模块通信时,输入命令后不加回车,点发送,什么反应都没。至于\r和0x0a,用串口调试助手试了一下,不成功。至于为什么,楼下回答

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧