SIM800C使用STC89C52单片机读写短信

写英文短信

写短信是向单片机的SBUF寄存器一位位发送字符串,从而与SIM800C模块达到通信的目的

void UartPrintf(unsigned char *p)				//发送字符串
{	
 	while(*p)
 	{
	 	SBUF=*(p++);
		while(TI==0)
		{;;;};
		TI=0;
	}   
}

char SIM800_Init()
{
	Uart_Init();//初始化串口是9600

	UartPrintf("AT\r\n");//先发AT,让GSM模块自动获取波特率为9600
	/检测模块是否有回应,接收OK判断
	
	UartPrintf("AT+CMGF=1\r\n");
	设置文本模式为英文,接收OK判断
	
	UartPrintf("AT+CSCS=\"GSM\"\r\n");
	设置GSM字符集,接收OK判断

	return 0;//初始化完成
}

void main()
{
	while(SIM800_Init!=0);
	UartPrintf("AT+CMGS=\"手机号\"\r\n");
	延时或者收到反馈 > ;
	UartPrintf("英文短信内容");
	延时10ms;
	向SBUF寄存器发送字符0x1a;//是字符,不是字符串
	while(1);
}

写短信网上的源码到处都是,在这就不多做叙述了。

读英文短信

首先,读的短信一定是英文或者短中文短信,在这我用英文短信举例。
因为52内存的限制,读取短信的时候内存会超出,所以我们需要舍弃一些不需要的内容

+CMGR:“短信是否读取”,“短信手机号来源”,“”,“接收时间”
短信内容

在读短信的时候,SIM800C会向我们发送这些数据,以做简单的接收短信来控制外设为例,我们需要的是短信内容,其他的都可以舍弃,在这里就可以在写入数据的时候做个选择——从“:”开始,“\n”之前的数据,我们不读了,不再占用空间。

void readSBUF() interrupt 4 using 1         //串口中断  		
{  
	unsigned char i = 0;  
	
	if(RI == 1)
	{	
		temp = SBUF;
		if((temp == ':')||(flag == 1)) flag = 1;
		else
		if(num < 32)
		{
		   RX_Buffer[num] = temp;
		   num++;
		}
		else
		{
			num = 0;
		}

		if(temp == '\n')
		{
			RX_Buffer[num] = temp;
			if(flag == 0)
			num = 0;
			flag = 0;
			flagReceive = 1;		//接收数据判断
		}
		RI = 0;
	}
}

这样设置的话,假如串口传的数据是
+CMGR:…………………………………………
OK

我们读的数据就是+CMGROK\r\n

这样就不会出现被用不到的数据占用内存的情况。

同样,也可以选择不接收其他的数据来为内存释放空间。

以上程序不全,因某些原因,源码要迟一些发布,一些地方也用伪代码代替,有不明白的可以私我。
源码已发布://download.csdn.net/download/weixin_44206533/11866969

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值