aibuxuyaoliyou 发表于 2010-7-7 14:18:19

tc35i与单片机的通信问题

我已经通过电脑串口调试,给tc35i发送AT指令,成功地发送了短信!
也通过单片机与电脑通信,成功地把要发的指令发送到电脑串口,确保发短信的程序没问题
但是,我通过单片机直接发给tc35i就发不成功!单片机的txd,rxd分别连tc35i模块的rxd,txd...单片机的p32口连模块的IGT
请问大牛们,这是为什么呢?
//单片机89s52控制GSM(TC35i)发短信程序
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char


sbit START_TC=P3^2;        //启动TC35i的控制端
uchar code AT[]={"AT"};       //联机命令
uchar code TxtMode={"AT+CMGF=0"}; //短信模式设置PDU模式
uchar code mess_qian={"AT+CMGS="};// 短信 长度设置
uchar code length={"26"}; //短信的长度 2个数(根据短信内容不同要改变)
uchar code message={"0891683108200005F011000B815110574556F10008A70C0061006200634F60597DFF01"};

init_chuankou()
{
        EA=1;                                         //开启中断
        ET1=0;                                        //禁止中断1
        SCON=0x50;
        TMOD=0x20;
    PCON |= 0x80 ;                         //SMOD=1;                
        RCAP2L = 0xD9;                        //设置波特率为9600
        RCAP2H = 0xFF;               
        T2CON = 0x34;                        //RCLK、TCLK置1,TR2置1
}
delay_Xms(uint t)
{
        uint i,j;
        for(i=t;i>0;i--)
           for(j=113;j>0;j--);
}
/*******************************************************/
Print_Char(uchar ch)//发送单个字符
{
        SBUF = ch; //送入缓冲区
        while(TI == 0); //等待发送完毕
        TI = 0; //软件清零
}
Print_Str(uchar * str,uint len)//发送字符串,调用Send_Char() len字符串长度
{
        while(len--)
        {
                Print_Char(*str++);
    }

}
/********************************************************/

start_TC35i()//启动TC35i的函数
{
        START_TC=0;//启动TC35i
        delay_Xms(1500);// 时间必须大于100ms
        START_TC=1;//完成启动 //此后一直保持高电平
}
void GSM_AT()        //发“AT”的函数       
{   
   Print_Str(AT,2);
   Print_Char(0x0D); //以回车作为结束符号,手机才能识别
   Print_Char(0x0A);
   ES=1;
   delay_Xms(1000); //延时
}

/***************************短信**********************************/
void GSM_TXT() //发送AT+cmgf=0       设置短信模式PDU
{   
   Print_Str(TxtMode,9);
   Print_Char(0x0D);
   Print_Char(0x0A);
   ES=1;
   delay_Xms(1000);
}
void GSM_CMGS()       //发送AT+cmgs=                (发短信的命令)
{   
   Print_Str(mess_qian,8);
      
}


void GSM_length()        //设置短信的长度,length(本例为27,实际不同而不同)
{   
   Print_Str(length,2);
   Print_Char(0x0D);
          Print_Char(0x0A);
   ES=1;
   delay_Xms(1000);
}
/**********************以下是发PDU码的程序*********************************/

void pdu_message()   //短信内容24/2=12个数()
{
        Print_Str(message,70);
        Print_Char(0x1a);//发送结束标志位(CTRL+Z        )
        delay_Xms(1000);
}       

/*************************************************************/
void main()
{
        init_chuankou();       //串口初始化
        start_TC35i();
       
while(1)
        {
                TI=0;       
                GSM_AT();                        //发At       
                    GSM_TXT();                        //发送AT+cmgf=0
                GSM_CMGS();                          //发送AT+cmgs=                       
                    GSM_length();                 //发 26
              pdu_message();
                while(1);
                       

        }
       
}

luoguangqi 发表于 2010-11-5 19:38:43

uchar code length={"26"}; //短信的长度 2个数(根据短信内容不同要改变)中的26,是怎么得来的?你能解释下吗?我的不是26啊,
我的是uchar code length={27};

luoguangqi 发表于 2010-11-5 19:40:28

与下面的不一致啊!!!
void GSM_length() //设置短信的长度,length(本例为27,实际不同而不同)
{   
   Print_Str(length,2);
   Print_Char(0x0D);
Print_Char(0x0A);
   ES=1;
   delay_Xms(1000);
}
页: [1]
查看完整版本: tc35i与单片机的通信问题