SIM900A的程序,STC12C5A60S2的单片机。短信收不到

2019-07-15 18:18发布

include <STC_NEW_8051.H>
#include <string.h>
#include <intrins.h>       

#define S2RI 0x01       
#define S2ti 0x02       
#define uchar unsigned char
#define uint unsigned int

#define len 52
unsigned int i;//全局用 I
uchar thz=0;         //通话中标志位




unsigned char flag1=0;
unsigned char flag2=0;

void printf1 (uchar *p);
void printf2 (uchar *p);

void UART_1SendOneByte(unsigned char c);
void UART_2SendOneByte(unsigned char c);

uchar  usart1buf[len]={0};
uchar  usart2buf[len]={0};


void delay_ms(unsigned int i)   // -0.018084490741us
{
                while(i--)
                {       
                        unsigned char a,b;
                        for(b=18;b>0;b--)
                                        for(a=152;a>0;a--);
                        _nop_();  //if Keil,require use intrins.h
                }
}
////////////////////////////////////////////////////


/////////////////GSM模块测试连接函数////////////////
//测试指令:AT                                    //
//软件延时:1000ms                                //
//返回值:1 连接正常                              //
//返回值:0 其他错误                              //
////////////////////////////////////////////////////
uchar GSMinit(void)
{
        flag2=0;
        for(i=0;i<len;i++)
        {
                usart2buf[i]=0;       
        }
       
        printf2("AT&F ");//设置模块波特率115200
        delay_ms(300);

        flag2=0;//复位缓冲
        printf2("AT ");
        delay_ms(1000);
        UART_1SendOneByte(usart2buf[6]);
        UART_1SendOneByte(usart2buf[7]);
        if(usart2buf[6]=='O' && usart2buf[7]=='K')// 如果成功
        {
                flag2=0;
                IE2&=0xfe;
                return 1;
        }
        else
        {
                flag2=0;
                return 0;
        }
}
/**************** 串口初始化****************/
//串口1 定时器 11.0592  115200
//串口2 独立波特率发生器 11.0592  115200
void InitUART(void)
{
        AUXR = AUXR|0x40 ;
        TMOD = 0x20;
        SCON = 0x50;
        TH1 = 0xFD;
        TL1 = TH1;
        PCON = 0x00;
        EA = 1;
        //   ES = 1;
        TR1 = 1;
       
        AUXR |= 0x08;                //使能波特率倍速位S2SMOD
        S2CON = 0x50;                //8位数据,可变波特率
        BRT = 0xFA;                //设定独立波特率发生器重装值
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        AUXR |= 0x10;                //启动独立波特率发生器
       
        IE2 =0x01;       
}


/*****************主函数******************/
void main(void)
{
        InitUART();         
       
        while(GSMinit()!=1);//模块连接错误 始终尝试连接,直到连接成功后往下走
       
        P0=0; //板子P0口全部置0 代表初始化通过
       
        printf2("AT+CMGF=1 "); //配置英文模式
        delay_ms(500);
       
        printf2("AT+CSCS=");      //配置字节集
        UART_2SendOneByte(0x22);
        printf2("GSM");
        UART_2SendOneByte(0x22);
        printf2(" ");
        delay_ms(500);
       
        printf2("AT+CMGS=");
        UART_2SendOneByte(0x22);
        printf2("13921283715");   //发送号码,各位学生在测试的时候 注意改成自己的号码
        UART_2SendOneByte(0x22);
        printf2(" ");
        delay_ms(500);
       
        printf2("hello");     //发送内容
        delay_ms(500);
        UART_2SendOneByte(0x1a);
       
        while(1);//发送成功在此等待

}
/************串口中断函数************/
void UART_1Interrupt(void) interrupt 4
{
        if(RI==1)
        {
                RI=0;
                usart1buf[flag1++]=SBUF;
        }
}
void UART_2Interrupt(void) interrupt 8
{
        if(S2CON&S2RI)
        {
                S2CON&=~S2RI;
                usart2buf[flag2++]=S2BUF;
        }
}
/****************串口1发送一个字节****************/
void UART_1SendOneByte(unsigned char c)
{
    SBUF = c;
    while(!TI);          
    TI = 0;         
}
/****************串口2发送一个字节****************/
void UART_2SendOneByte(unsigned char c)
{
    S2BUF = c;
    while(!(S2CON&S2TI));  
    S2CON&=~S2TI;          //S2TI=0
}
void printf1 (uchar *p)
{
        while(*p!='')
        {
                UART_1SendOneByte(*p++);
        }
}
void printf2 (uchar *p)
{
        while(*p!='')
        {
                UART_2SendOneByte(*p++);
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。