完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
include #include #include #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 usart2buf[i]=0; } printf2("AT&Frn");//设置模块波特率115200 delay_ms(300); flag2=0;//复位缓冲 printf2("ATrn"); 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=1rn"); //配置英文模式 delay_ms(500); printf2("AT+CSCS="); //配置字节集 UART_2SendOneByte(0x22); printf2("GSM"); UART_2SendOneByte(0x22); printf2("rn"); delay_ms(500); printf2("AT+CMGS="); UART_2SendOneByte(0x22); printf2("***"); //发送号码,各位学生在测试的时候 注意改成自己的号码 UART_2SendOneByte(0x22); printf2("rn"); 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!=' |