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

2020-01-25 15:28发布

连接电脑用串口助手可以发短信打电话,可是用单片机控制是没反应
代码如下:
//*****************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(' ');
  ES=1;
  delay(1000);  
}
void GSM_CENTER()
{   
     Print_Str(CenterNum,24);
     Print_Char(' ');
        // Print_Char(0X0D);
        // Print_Char(0X0A);
     ES=1;
     delay(1000);
}       
void GSM_TXT()
{   
     Print_Str(TxtMode,9);
         Print_Char(' ');
    // Print_Char(0X0D);
        // Print_Char(0X0A);
     ES=1;
     delay(1000);
}
void GSM_CMGS()
{   
     Print_Str(PhoneNum,24);
         Print_Char(' ');
        // 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(' ');
  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);
                  
                }
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
飞跃时间
1楼-- · 2020-01-26 08:50
longwu911 发表于 2013-5-10 08:16
很定不行的,开了定时器的中断,却没有中断程序。即便是你写了中断程序,当串口发送数据时,定时器正好溢出 ...

这个程序用不上定时器,我把有关定时器的都删了还是不行。我想是不是单片机的通信问题,数据都是一个字节一个字节发送的,gsm不能识别这些AT指令
519382868
2楼-- · 2020-01-26 14:41
学习学习

一周热门 更多>