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);
}
} uchar code length={"26"}; //短信的长度 2个数(根据短信内容不同要改变)中的26,是怎么得来的?你能解释下吗?我的不是26啊,
我的是uchar code length={27}; 与下面的不一致啊!!!
void GSM_length() //设置短信的长度,length(本例为27,实际不同而不同)
{
Print_Str(length,2);
Print_Char(0x0D);
Print_Char(0x0A);
ES=1;
delay_Xms(1000);
}
页:
[1]