⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsm.c

📁 单片机控制GSM模块(发短信
💻 C
字号:
#include<reg52.h>
sbit key1=P3^3;//按钮
unsigned int rsl;//接收字符串长度
unsigned char *q;//发送数组指针
unsigned char cmgs;//发送的字节数
//code的用法因为你定义的数据是常量,放在DATA或XDATA区中浪费了,故被定位在CODE(就是程序存储器)区内。
unsigned char callno[]="ATDT15816916909;";//发送的字符串
unsigned char msmorder[]="AT+CMGS=21";
unsigned char msm[140];
unsigned char rsbuf;
unsigned char rspoint,z;//接收数组下标+接收数组开关
void sendmassage();//发短信
void call();//打电话
void scankey1();  //扫描按钮
void delay(int);  //粗略延时 
void ser();		  //串口中断
void sendtogsm(unsigned char,int);//发送字符串
void sendasc(unsigned char);//发送一个ASCII码
void sendenter();//发送回车


main()
{	
//----------串口通信初始化开始------------------
	PCON=0x80;//设置波特率为19200  若想变成9600删除此行即可
	TMOD=0x20;//设置定时器1为方式2
	TH1=0xfd;//设置波特率
	TL1=0xfd;
	TR1=1;
	REN=1;//打开串口通信		
	SM0=0;
	SM1=1;
	EA=1;
	ES=1;
	z=0;
	rspoint=0;
//---------串口通信初始化结束-------------------		

	while(1)
		{
			scankey1();			
		}
}

//------------扫描按键是否按下------------------
void scankey1()
{
	if (key1==0)
		{
			delay(6000);
				if (key1==0)

				{
					
					sendmassage();
					delay(20000);
				}

		}	
}

//---------------粗糙延时-----------------------
void delay(int x)
{
	int i;
	for (i=0;i<=x;i++);
}
//-------串口中断+串口数据接收-----------
void ser() interrupt 4 using 1
{	
		RI=0;
		if(SBUF=='~')
		{
			z=1;
		}
		if(SBUF=='!')
		{
			rspoint=0;
			z=0;
		}
		if(z==1)
		{
			msm[rspoint]=SBUF;
			rspoint++;
		}
		
}

//-----------发送一个ASCII码----------------
void sendasc(unsigned char asc)
{
	bit es;
	es=ES;
	ES=0;
	TI=0;
	SBUF=asc;
	while(!TI);
	TI=0;
	ES=es;
}

//---------------------------发送字符串------------------------------------
void sendtogsm(unsigned char *p,int L)//1、字符串数组   2、字符串长度
{
	while (L--)
		{
			sendasc(*p++);
		}
}
//---------------------发送字符串去首字符---------------------------------
void sendtogsmno1(unsigned char *p,int L)//1、字符串数组   2、字符串长度
{
	p++;
	while (L--)
		{
			sendasc(*p++);
		}
}
//-----------------发短信-----------------------
void sendmassage()
{
		int i;
		sendtogsm(msmorder,sizeof(msmorder)-1);
		sendenter();
		for(i=0;i<10000;i++) delay(50000);//接收<符号
		q=&msm[1];
		sendtogsm(q,sizeof(msm)-1);
		sendasc(26);	
}


//-----------------打电话-----------------------
void call()
{
	sendtogsm(callno,sizeof(callno)-1);
	sendenter();
		
}

//-------------------发送回车---------------------
void sendenter()
{
	sendasc(13);//传送回车
	sendasc(10);			
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -