搜索
bottom↓
回复: 8

单片机控制gsm发短信打电话

[复制链接]

出0入0汤圆

发表于 2013-5-9 17:24:18 | 显示全部楼层 |阅读模式
连接电脑用串口助手可以发短信打电话,可是用单片机控制是没反应
代码如下:
//*****************STC控制GSM发送短信(TXT格式)*************************************/
//发送PDU的按键对应开发板的6-P1^6,
//发送短信时,直接调换数组 PhoneNum          Sms 内的内容就可以的
//*************************************************************************
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit Send_SMS_TXT_key=P1^6;
sbit led=P1^0;
uchar code PhoneCall[]={"ATD15555195016;"};
uchar code PhoneNum[]={"AT+CMGS=\"+8615555195016\""};
uchar code CenterNum[]={"AT+CSCA=\"+8613800551500\""};
uchar code TxtMode[]={"AT+CMGF=1"};
uchar code Sms[] = {"GsmTest"};
void delay(uint ms)// 延时子程序
{      
        uchar i;
        while(ms--)
        {
          for(i = 0; i < 120; i++);
        }
}
void Print_Char(uchar ch)//发送单个字符
{
        SBUF = ch; //送入缓冲区
        while(TI == 0); //等待发送完毕
        TI = 0; //软件清零
}
void Print_Str(uchar * str,uint len)//发送字符串,调用Send_Char() len字符串长度
{

        while(len--)
        {
            Print_Char(*str++);
    }

}
void Ini_UART()//串口初始化、定时器初始化
{
        TMOD = 0x20;
        TH1 = 0xFD;
        TL1 = 0xFD;
        SCON = 0x50;
        PCON = 0x00;
       
        TF1 = 1;
        TR1 = 1;
        ES=1;
        ET0=1;
        EA=1;
}
void GSM_AT()
{   
  Print_Str("AT",2);
  Print_Char('\r');
  ES=1;
  delay(1000);  
}
void GSM_CENTER()
{   
     Print_Str(CenterNum,24);
     Print_Char('\r');
        // Print_Char(0X0D);
        // Print_Char(0X0A);
     ES=1;
     delay(1000);
}       
void GSM_TXT()
{   
     Print_Str(TxtMode,9);
         Print_Char('\r');
    // Print_Char(0X0D);
        // Print_Char(0X0A);
     ES=1;
     delay(1000);
}
void GSM_CMGS()
{   
     Print_Str(PhoneNum,24);
         Print_Char('\r');
        // Print_Char(0X0D);
        // Print_Char(0X0A);
     ES=1;
     delay(1000);   
}
void GSM_SMS()
{   
     Print_Str(Sms,7);
     Print_Char(0x1a);
     ES=1;
     delay(1000);
     delay(5000);   
}
void phone()
{   
  Print_Str(PhoneCall,15);
  Print_Char('\r');
  ES=1;
  delay(5000);
  delay(5000);
}
void main()
{

        Ini_UART();
        while(1)
        {
                if(!Send_SMS_TXT_key)
                {
                        led=0;
                        GSM_CENTER();
                        delay(5000);
                    GSM_TXT();
                        delay(5000);
                    GSM_CMGS();
                        delay(5000);
                    GSM_SMS();
                        delay(5000);
                        delay(5000);
                        GSM_AT();
                        phone();
                    delay(50000);
                    delay(50000);
                  
                }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-5-9 17:31:04 | 显示全部楼层
按下P1.6是led灯亮

出0入0汤圆

发表于 2013-5-9 17:36:55 | 显示全部楼层
AT+CSCS? 是gsm编码吗

出0入0汤圆

 楼主| 发表于 2013-5-9 21:35:00 | 显示全部楼层
stone_mesnac 发表于 2013-5-9 17:36
AT+CSCS? 是gsm编码吗

一些AT指令

出0入0汤圆

发表于 2013-5-9 22:11:01 | 显示全部楼层
用的什么IC

出0入0汤圆

 楼主| 发表于 2013-5-9 22:24:45 | 显示全部楼层
benqme 发表于 2013-5-9 22:11
用的什么IC

gsm模块用的是TC35,单片机用的是STC90C516RD+,问的是这个吗?

出0入0汤圆

发表于 2013-5-10 08:16:47 | 显示全部楼层
很定不行的,开了定时器的中断,却没有中断程序。即便是你写了中断程序,当串口发送数据时,定时器正好溢出,不就打断了你的通信。所以你改ET1=0试下

出0入0汤圆

 楼主| 发表于 2013-5-10 11:26:01 | 显示全部楼层
longwu911 发表于 2013-5-10 08:16
很定不行的,开了定时器的中断,却没有中断程序。即便是你写了中断程序,当串口发送数据时,定时器正好溢出 ...

这个程序用不上定时器,我把有关定时器的都删了还是不行。我想是不是单片机的通信问题,数据都是一个字节一个字节发送的,gsm不能识别这些AT指令

出0入0汤圆

发表于 2013-12-13 13:59:40 | 显示全部楼层
学习学习
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 14:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表