GSM模块通过232与PC机通信测试完全正常,单片机通过232与PC上的串口助手调试也完全正常。但是单片机与GSM模块通信时就不能通信了(直通线),我不知道是软件的问题还是电平的问题,已经困扰我1周了,希望各位大虾能帮我看看。在此表示由衷的谢谢! 测试结果:P0=0X0F ![]() 程序如下: #include<regx52.h> #include<intrins.h> #include<string.h> #define uchar unsigned char #define uint unsigned int #define RxIn 67 sbit start=P0^3; sbit ceshi=P0^4; uchar code AT[]="AT"; uchar code OK[]="OK"; uchar code ATD[]="ATD13408681235;"; uchar code ATS0[]="ATS0=3"; uchar code ATNOS[]="AT$NOSLEEP=1"; uchar idata SystemBuf[RxIn]; //储存出口接收数据 uchar Rx=0,flag1=0; uint flag=0,count=0; void Delay_ms(uint i); void sendchar(uchar ch); void sendstring(uchar *p); void GSM_INIT(void); void Start_GSM(); void UART_init (void); main() { Start_GSM(); UART_init(); GSM_INIT(); while(1) { if(flag1) flag1=0; P0=0X0F; } } /*************串口初始*******************/ void UART_init (void) { TMOD=0x20; //方式控制字 TH1=0xfd; //设置波特率为9600 TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } /*************启动*******************/ void Start_GSM() { start=0; Delay_ms(500); start=1; Delay_ms(1000); } /******************************************************************************************************************/ ////////////////////////////////函数void Delay_ms(uint i);实现功能:进行毫秒延时/////////////////////////////////// /******************************************************************************************************************/ void Delay_ms(uint i) { unsigned int j; for(;i>0;i--) { for(j=0;j<125;j++) {;} } } /******************************************************************************************************************/ //////////////////////函数void sendchar(uchar ch);实现功能:发送一字节数据////////////////////////////////////////// /******************************************************************************************************************/ void sendchar(uchar ch) { SBUF=ch; while(TI==0); TI=0; } /******************************************************************************************************************/ //////////////////////函数void sendstring(uchar *p);实现功能:通过串口发送字符串///////////////////////////////////// /******************************************************************************************************************/ void sendstring(uchar *p) { while(*p) { sendchar(*p); p++; } sendchar(0x0D); sendchar(0x0A); } /******************************************************************************************************************/ ///////////////////函数void receive(void) interrupt 4 using 1;实现功能:通过串口接收数据/////////////////////////////// /******************************************************************************************************************/ void receive(void) interrupt 4 using 1 { if(RI) { if(Rx<RxIn) { SystemBuf[Rx]=SBUF; Rx++; } RI=0; } } /*************清楚缓冲区*******************/ void clearbuffer(void)//清除缓冲区 { uchar cl; for(cl=0;cl<RxIn;cl++) { SystemBuf[cl]=0x00; } Rx=0; } /******************************************************************************************************************/ ///////////////////函数void GSM_INIT(void);实现功能:初始化GSM模块/////////////////////////////// /******************************************************************************************************************/ void GSM_INIT(void) { LOOP: // Delay_ms(1000); // sendstring(AT); Delay_ms(1000); sendstring(ATNOS); Delay_ms(1000); sendstring(ATS0); Delay_ms(1000); // sendstring(ATD); //Delay_ms(1000); // sendstring(ATE); // Delay_ms(1000); // sendstring(AT_CNMI); // Delay_ms(1000); // sendstring(AT_CSCA); // Delay_ms(1000); // for(Rx=0;Rx<RxIn;Rx++) // { // SystemBuf[Rx]=0x00; // } // Rx=0; // sendstring(AT_CMGF); // Delay_ms(1000); if(SystemBuf[0]=='O'&&SystemBuf[1]=='K') //判断是否模块初始化成功,成功的话模块会回复"OK"给单片机 { EA=0; //如果单片机没有收到OK,就继续发送初始化指令/ clearbuffer(); flag1=1; } else { clearbuffer(); goto LOOP; } } |
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) | Powered by Discuz! X3.4 |