当单片机与电脑通信时,串口助手显示如下:
我独自用电脑操作串口助手发送AT指令,SIM800A成功发送短信:
但当我单片机与SIM800A通信时,SIM800A没有执行指令。想请教各位专家是什么原因?
接线如下:
代码如下:
#include<REGX52.H>
#include<intrins.h>
#include "Delay.h"
#include "LCD1602.h"
#include "ADC0832.h"
#include<stdio.h>
#define FOSC_110592M
#define uchar unsigned char
#define uint unsigned int
unsigned int AD_X;
unsigned int AD_Y;
//ÒÔÏÂÊÇ¿ª»úºó·¢Ë͵½ÊÖ»úµÄÄÚÈÝ£¬·¢Ë͵ĺÅÂëÔÚ³ÌÐòÖÐÐ޸ġ£
unsigned int rec_data_len_uart=0; //±ê¼ÇBuffer_Uart0½ÓÊÕÊý×é
unsigned char idata Buffer_Uart0_Rec[25]={0}; //Uart0ÖжϽÓÊÕÊý×é
//×¢Ò⣬ÎÞÂÛ½ÓÊÕµ½ÐźŻ¹ÊÇ·¢ËÍÍêÐźţ¬¶¼»á½øÖжϷþÎñ³ÌÐòµÄ
/*³õʼ»¯³ÌÐò£¨±ØÐëʹÓ㬷ñÔòÎÞ·¨ÊÕ·¢£©£¬´Î³ÌÐò½«»áʹÓö¨Ê±Æ÷1*/
void SerialInti()//³õʼ»¯³ÌÐò£¨±ØÐëʹÓ㬷ñÔòÎÞ·¨ÊÕ·¢£©
{
TMOD=0x20;//¶¨Ê±Æ÷1²Ù×÷ģʽ2:8λ×Ô¶¯ÖØÔض¨Ê±Æ÷
#ifdef FOSC_12M //ÔÚÕâÀï¸ù¾Ý¾§Õñ´óСÉèÖò»Í¬µÄÊýÖµ³õʼ»¯´®¿Ú
TH1=0xf3;//×°Èë³õÖµ£¬²¨ÌØÂÊ2400
TL1=0xf3;
#else
TH1=0xfd;//×°Èë³õÖµ£¬²¨ÌØÂÊ9600
TL1=0xfd;
#endif //end of SOC_12M
TR1=1;//´ò¿ª¶¨Ê±Æ÷
SM0=0;//ÉèÖô®ÐÐͨѶ¹¤×÷ģʽ£¬£¨10Ϊһ²¿·¢ËÍ£¬²¨ÌØÂʿɱ䣬Óɶ¨Ê±Æ÷1µÄÒç³öÂÊ¿ØÖÆ£©
SM1=1;//(ͬÉÏ)ÔÚ´ËģʽÏ£¬¶¨Ê±Æ÷Òç³öÒ»´Î¾Í·¢ËÍÒ»¸öλµÄÊý¾Ý
REN=1;//´®ÐнÓÊÕÔÊÐí루ҪÏÈÉèÖÃsm0sm1ÔÙ¿ª´®ÐÐÔÊÐí£©
EA=1;//¿ª×ÜÖжÏ
ES=1;//¿ª´®ÐпÚÖжÏ
}
/*´®ÐÐͨѶÖжϣ¬ÊÕ·¢Íê³É½«½øÈë¸ÃÖжÏ*/
void Serial_interrupt() interrupt 4
{
unsigned char temp_rec_data_uart0;
temp_rec_data_uart0 = SBUF;//¶ÁÈ¡½ÓÊÕÊý¾Ý
RI=0;//½ÓÊÕÖжÏÐźÅÇåÁ㣬±íʾ½«¼ÌÐø½ÓÊÕ
Buffer_Uart0_Rec[rec_data_len_uart]=temp_rec_data_uart0; //½ÓÊÕÊý¾Ý
rec_data_len_uart++;
if(rec_data_len_uart>24)
{
rec_data_len_uart=0; //´ÓÍ·¿ªÊ¼½ÓÊÕÊý¾Ý
}
}
void Uart1Send(uchar c)
{
SBUF=c;
while(!TI);//µÈ´ý·¢ËÍÍê³ÉÐźţ¨TI=1£©³öÏÖ
TI=0;
}
//´®ÐпÚÁ¬Ðø·¢ËÍcharÐÍÊý×飬Óöµ½ÖÕÖ¹ºÅ/0½«Í£Ö¹
void Uart1Sends(uchar *str)
{
while(*str!='\0')
{
Uart1Send(*str);
//SBUF=*str;
//while(!TI);//µÈ´ý·¢ËÍÍê³ÉÐźţ¨TI=1£©³öÏÖ
//TI=0;
str++;
}
}
void main()
{
LCD_Init();
SerialInti();
LCD_ShowString(1,1,"X Y");
Delay(10000);
while(1)
{
AD_X=ADC0832(1);
LCD_ShowNum(2,1,AD_X,3);
AD_Y=ADC0832(0);
LCD_ShowNum(2,6,AD_Y,3);
if((AD_X<=47 || AD_X>=126) || (AD_Y>=141 || AD_Y<=57))
{
//----------------ΪʲôÊÇÏÂÃæÕâЩATÖ¸ÁîÄØ£¬Ç뿴Ⱥ¹²ÏíÎļþSIM900AÖØÒªµÄ¶ÌÐÅÖ¸ÁîÎļþ------------
Uart1Sends("AT\r\n");
Delay(2000);//ÑÓʱ´óÔ¼2Ãë
Uart1Sends("AT+CSCS=\"UCS2\"\r\n");
Delay(2000);//ÑÓʱ´óÔ¼2Ãë
Uart1Sends("AT+CMGF=1\r\n");
Delay(2000);//ÑÓʱ2Ãë
Uart1Sends("AT+CSCA?\n");
Delay(2000);//ÑÓʱ2Ãë
Uart1Sends("AT+CSMP=17,167,0,25\r\n");
Delay(2000);//ÑÓʱ2Ãë
Uart1Sends("AT+CMGS=\"00310039003100360037003500340036003700320034\"\r\n");//´Ë´¦ÐÞ¸ÄΪ¶Ô·½µÄµç»°ºÅ£¬µç»°»°µÄUNICON±àÂ룬¿ÉʹÓÃÎÒÃÇÅäÌ×µÄ
//×ÊÁÏ°üÖÐµÄ ÖÐÎÄתUNICON±àÂ빤¾ßÀ´»ñÈ¡¡£Ìرð×¢Ò⣺ÄǸöÈí¼þ
//»ñµÃµÄunicon ±àÂë´ýÓпոñ£¬Êµ¼ÊÖÐҪȥµô£¬·ñÔòÄ£¿é»á±¨´í
Delay(2000);//ÑÓʱ2Ãë
Uart1Sends("4F7F7528800553EF80FD64545012FF0C8BF7524D5F800058005800585E2E52A9FF01");//Ð޸ĶÌÐÅÄÚÈÝ,¶ÌÐÅÄÚÈÝ¿ÉΪÖÐÎÄ¡¢Ó¢ÎĺÍÊý×Ö£¬µ«¶¼ÊǶÔÓ¦µÄunicon ±àÂë¡£
Uart1Send(0x1a);
Delay(8000);//ÑÓʱ10Ãë
}
Delay(100);
}
}