急求tc35i短信接收程序,现在接收不了短信,大侠们帮帮我!
我通过手机发送中文短信,手机消息报告成功,但是单片机没有测检测到收到信息,怎么回事?如果哪位大侠有tc35i的短信接收程序,给我分享下!下下! 有消息报告吗? 程序如下,望大侠们看看,问题在哪!!!#include <reg52.h>
#include <intrins.h>
/*************宏定义专区***************/
#define uint unsigned int
#define uchar unsigned char
#define BLKN4 //列锁存器数(=LED显示字数*2)
#define TOTAL 8 //待显示字个数,本例共14个
sbit led1=P3^4;
sbit led2=P3^5;
/*************变量定义专区*************/
sbit G=P1^7; //P1.7为154译码器显示允许控制信号端口,0时输出,1时输出全为高阻态.
sbit CLK=P1^6; //P1.6为595输出锁存器时钟信号端,1时输出数据,从1到0时锁存输出数据.(引脚12)
sbit SCLR=P1^5; //P1.5为595移位寄存器清零口,平时为1,为0时,输出全为0.(引脚10)
sbit dat_595=P2^0; //595的14脚
sbit Shift_Clk=P2^1; //595的11脚
//unsigned char dispram[(BLKN/2)*32]={0}; //显示区缓存,1字共1*32单元
unsigned char dispram={0}; //显示区缓存,1字共1*32单元
sbit START_TC=P3^2; //启动TC35i的控制端
uchar code AT[]={"AT"}; //AT指令
uchar code AT_Code[]="OK"; //GSM响应
uchar idata RsBuf; //接收缓存区
uchar codeReceive_Mode[]={"AT+CNMI=2,1,0,0,0"}; //短信接收模式设置:通过SIM卡接收
uchar codeRead_Message[]={"AT+CMGR=1"}; //读第一条短信
uchar codeDelete_All_Message[]={"AT+CMGD=1,4"};//删除所有短信
void main(void)
{
start_TC35i();
UART_Init(); // 串口初始化
Send_Set(); //GSM设置
while(1)
{
led1=0;
Read(); //读短信
}
}
start_TC35i()//启动TC35i的函数
{
START_TC=0;//启动TC35i
delay_Xms(1500);// 时间必须大于100ms
START_TC=1;//完成启动 //此后一直保持高电平
}
delay_Xms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=113;j>0;j--);
}
/**************************************************
*函数名称:SendByte_595
*输入:byte
*输出:无
*功能说明:595发送一个字节的数据
***************************************************/
void SendByte_595(unsigned char byte)
{
unsigned char i;
for(i=0;i<8;i++)
{
byte >>=1;
dat_595=CY;
Shift_Clk=1;
_nop_();
_nop_();
Shift_Clk=0;
}
}
/**************************************************
*函数名称:display_up
*输入:word1,word2 待显示的汉字
*输出:无
*功能说明:点阵显示:上滚形式
***************************************************/
void display_up(uchar word1)
{
register unsigned char i,j,k,l,q;
//unsigned char j,k,q;
//for (i=0; i<word1; i++)
// {
if(word1==0)
{i=0;
for (j=0; j<2; j++)
for (k=0; k<8; k++)
{
for (l=0; l<16; l++)
{
for(q=0;q<1;q++)
{
dispram = dispram<<1 | dispram>>7;
if(q==1-1) dispram = dispram<<1 | Bmp1>>(7-k);
else dispram = dispram<<1 | dispram>>7;
}
}
delay_ms(100);
}
}
}
/****************************************
*函数名称:delay_ms
*输入:uint ms延时时间 ,注意ms的数据类型
*输出:无
*功能说明:毫秒级延时
*****************************************/
void delay_ms(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
/********************************
*函数名称:UART_Send_Byte
*输入:byte
*输出:无
*功能说明:发送单字节
*********************************/
void UART_Send_Byte(uchar ch)
{
SBUF=ch; //缓冲区装载要发送的字节数据
while(TI==0); //等待发送完毕,TI标志位会置1
TI=0; //清零发送完成标志位
}
/*************************************
*函数名称:UART_Send_Str
*输入:*str 字符串指针,len字符串长度
*输出:无
*功能说明:发送字符串
**************************************/
void UART_Send_Str(uchar * str,uint len)
{
while(len--)
{
UART_Send_Byte(*str++);
}
}
/*************************************
*函数名称:UART_Init
*输入:无
*输出:无
*功能说明:串口初始化
**************************************/
void UART_Init(void)
{
SCON=0X50;
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;//波特率为9600
TR1=1;
ES=1;
//定时器初始化,主要用于LED显示
TMOD = 0x01; //定时器T0工作方式1:16位方式
TR0 = 1; //启动定时器T0
TH0 = (65536-1000)/256; //设定显示屏刷新率每秒62.5帧(16毫秒每帧)
TL0 = (65536-1000)%256;
P1 = 0x3f; //CONIO端口初值
ET0=1; //允许定时器T0中断
EA=1;
}
/*************************************
*函数名称:ClrRsBuf
*输入:uchar * struint len
*输出:无
*功能说明:清除接受指令缓存区
**************************************/
void ClrRsBuf(uchar * str,uint len)
{
uchari;
for(i=0;i<len;i++)
str=0;
}
/*************************************
*函数名称:GSM_OK
*输入:无
*输出:1:返回OK;0:不返回OK
*功能说明:判断是否返回OK
**************************************/
uchar GSM_OK(void)
{
uchar i;
for(i=0; i<sizeof(RsBuf); i++)
{
if(RsBuf == 'O' && RsBuf== 'K')
{
return 1;
}
}
return 0;
}
/***********************************************************
*函数名称:CheckAtc_Message
*输入:无
*输出:1:收到信息;0:没收到信息
*功能说明:判断是否返回"+CMTI: "SM", 41",若返回,则收到短信
**************************************************************/
uchar CheckAtc_Message(void)
{
uchar j;
for(j=0;j<sizeof(RsBuf);j++)
{
if((RsBuf==0x53)&&(RsBuf==0x4D)) //0X53 'S' 4D 'M'
return 1;
}
return 0;
}
/***********************************************************
*函数名称:GSM_Read_Message
*输入:无
*输出:1:收到佛;2:收到科;0:没有收到“佛”或“科”
*功能说明:判断读到的短信
**************************************************************/
uchar GSM_Read_Message(void)
{
uchar j;
for(j=0;j<sizeof(RsBuf);j++)
{
if((RsBuf==0x34)&&(RsBuf==0x46)&&(RsBuf==0x35)&&(RsBuf==0x42)) //收到佛(4F5B)字
return 1;
else if((RsBuf==0x37)&&(RsBuf==0x39)&&(RsBuf==0x44)&&(RsBuf==0x31))//收到科(79D1)字
return 2;
}
return 0;
}
/*********************************************************************
*函数名称:Read_One_Message
*输入:无
*输出: 0,1,2
*功能说明:返回读到短信内容所指标志,如收到“佛”返回1,收到“科”返回2
************************************************************************/
uchar Read_One_Message(void)
{
ES=0;
UART_Send_Str(Read_Message,sizeof(Read_Message)-1); //发送AT+CMGR=1读第一条短信
UART_Send_Byte(0x0d);
ES=1;
delay_ms(1000); //GSM反应速度较慢,等待它反应,具体时间待定
returnGSM_Read_Message();
}
/***********************************************************
*函数名称:Read
*输入:无
*输出:无
*功能说明:读一条短信完整过程
**************************************************************/
void Read(void)
{ led2=0;
if(CheckAtc_Message()) //收到短信
{
led2=1;
delay_ms(100);
if(Read_One_Message()==1) //收到“佛”
{
display_up(0);
display_up(1); //点阵显示“佛山
// Send_Set(); //重新设置
}
else if(Read_One_Message()==2) //收到“科
{
display_up(2);//点阵显示“科学
display_up(3);
Send_Set(); //重新设置
}
}
}
/**************************************************
*函数名称:GSM_AT
*输入:无
*输出:1:返回OK,连接成功;0:不返回OK,连接不成功
*功能说明:发AT指令,返回OK证明已连接
***************************************************/
ucharGSM_AT(void)
{
ES=0;
ClrRsBuf(RsBuf,sizeof(RsBuf)); //////////////////清空缓冲区
UART_Send_Str(AT,2);
UART_Send_Byte(0x0d);
ES=1;
delay_ms(1000); //GSM反应速度较慢,等待它反应,具体时间待定
return GSM_OK();
}
/**************************************************
*函数名称:GSM_Receive_Mode
*输入:无
*输出:1:返回OK,设置成功;0:不返回OK,设置不成功
*功能说明:设置接收短信模式:通过SIM卡接收
***************************************************/
uchar GSM_Receive_Mode(void)
{
ES=0;
UART_Send_Str(Receive_Mode,17);
UART_Send_Byte(0x0d);
ES=1;
delay_ms(1000); //GSM反应速度较慢,等待它反应,具体时间待定
return GSM_OK();
}
/**************************************************
*函数名称:Delete_Message
*输入:无
*输出:1:返回OK,设置成功;0:不返回OK,设置不成功
*功能说明:删除SMI卡内所有短信
***************************************************/
uchar Delete_Message(void)
{
ES=0;
UART_Send_Str(Delete_All_Message,sizeof(Delete_All_Message)-1);
UART_Send_Byte(0x0d);
ES=1;
delay_ms(1000); //GSM反应速度较慢,等待它反应,具体时间待定
return GSM_OK();
}
/**************************************************
*函数名称:Send_Set
*输入:无
*输出:无
*功能说明:设置GSM
***************************************************/
void Send_Set(void)
{
if(GSM_AT()) //发AT指令,返回OK证明已连接
{
if(Delete_Message()) //删除SMI卡内所有短信
{
if(GSM_Receive_Mode()) //设置接收短信模式,返回OK,设置成功
{
}
}
}
}
/**************************************************
*函数名称:GSM_UART
*输入:无
*输出:无
*功能说明:串口接收中断
***************************************************/
void GSM_UART(void) interrupt 2
{
static uchar k=0;
if(RI==1) //检测接收完成标志位置1
{
RI=0; //清零接收完成标志位
RsBuf = SBUF;//读取接收到的数据
if(k >= (sizeof(RsBuf)))
{
k=0;
}
}
}
/**********显示屏扫描(定时器T0中断)函数**********/
void leddisplay(void) interrupt 1 using 1
{
register unsigned char m, n=BLKN;
TH0 = (65536-1000)/256; //设定显示屏刷新率每秒62.5帧(16毫秒每帧)
TL0 = (65536-1000)%256;
m = P1; //读取当前显示的行号
m = ++m & 0x0f; //行号加1,屏蔽高4位
SCLR=1;
do {
n--;
SendByte_595(dispram); //送显示数据
}
while (n); //完成一行数据的发送 //完成一行数据的发送
G = 1; //消隐(关闭显示)
P1 &= 0xf0; //行号端口清0
CLK=1; //显示数据打入输出锁存器
P1 |= m; //写入行号
CLK=0; //锁存显示数据
G = 0; //打开显示
// P1 |= m; //写入行号
}
我测试led显示的部分没有问题,但是我发送短信的时候就进不了if(CheckAtc_Message())//收到短信,大侠们啊,我急啊!!! 我的手机有消息报告 它收到短信不会主动提示你,你的单片机在初始化的时候先从头按顺序找到sim卡短信存储的空白位置,不停的读取这个位置的内容,如果相关标志位变化说明有新信息。然后提取这个地方的信息就行了。
给模块打电话却会主动提示你。不停的发送“RING”,呵呵~~~
tc35是这样的。 2年前做过西门子手机6688短信控制开关,有点忘掉了,读短信好像是AT+CMGR 2年前做过西门子手机6688短信控制开关,有点忘掉了,读短信好像是AT+CMGR。不难的,串口读写的操作 我是这样设置的啊,但是没有检测到“SM”,是怎么回事,但是我手机发送的消息,有消息报告啊,我糊涂了,不知道是怎么回事? 你的gsm模块上的串口还能再扯出线吗?如果能的话,就连到电脑的串口上,监视一下他俩之间到底发了什么东西。
你这么看代码看不出问题的。 恩,我试试看,谢谢! 需要设置的如果没记错的话应该是AT+CMTI,最好看下AT指令集的手册!我之前弄的时候就是这样! 恩,好的! 回复【10楼】xiaosi1102
需要设置的如果没记错的话应该是at+cmti,最好看下at指令集的手册!我之前弄的时候就是这样!
-----------------------------------------------------------------------
你能把你之前搞的测试成功的例子发给我看看吗?邮箱:838239297@qq.com 回复【12楼】luoguangqi小猫咪……
-----------------------------------------------------------------------
我的是STM32的程序估计你用不了! 我现在是用电话上的,看看明天的,我把程序传上来吧! 楼主能把电路图上传吗?很想学习你的程序 wavecom公司的2406有这样的一个命令,好像是和短信提醒有关系的。
"AT+CNMI=2,1,0,0,0",
看了你前面的程序,好像也有这个设置命令的啊。
------------------------------
uchar GSM_Receive_Mode(void)
{
ES=0;
UART_Send_Str(Receive_Mode,17);
UART_Send_Byte(0x0d);
ES=1;
delay_ms(1000); //GSM反应速度较慢,等待它反应,具体时间待定
return GSM_OK();
}
这个函数,你执行的时候,要确认一下,是不是返回OK了。最好做法是,设置命令后,通过判断串口返回值来。
如果等待时间不够长的话,继续下一条命令,可能会出现前面命令设置错误的。 LS的方法是正确的我的设置也是这样的 设置完之后你收到短信会有指令提示的 回复【16楼】yinjinzhong 殷淼
wavecom公司的2406有这样的一个命令,好像是和短信提醒有关系的。
"at+cnmi=2,1,0,0,0",
看了你前面的程序,好像也有这个设置命令的啊。
------------------------------
uchar gsm_receive_mode(void)
{
es=0;
uart_send_str(receive_mode,17);
uart_send_byte(0x0d);
es=1;
delay_ms(1000); //gsm反应速度较慢,等待它反应,具体时间待定
return gsm_ok();
}
这个函数,你执行的时候,要确认一下,是不是返回ok了。最好做法是,设置命令后,通过判断串口返回值来。
如果等待时间不够长的话,继续下一条命令,可能会出现前面命令设置错误......
-----------------------------------------------------------------------
我用的是tc35i啊,不一样啊!程序需要怎么改一下啊! 看不懂 大侠们,给我一个51控制tc35i接收短信的程序吧!!!本人不胜感激!!!邮箱:838239297@qq.com 都是高手啊,膜拜。{:handshake:} xiaosi1102 发表于 2011-10-6 00:04 static/image/common/back.gif
回复【12楼】luoguangqi小猫咪……
----------------------------------------------------------------- ...
您好,我现在正在做STM32 的TC35i的设计,我出现了这样的问题,利用串口来检测STM32的发送数据和TC35i的接收数据都显示正确一致,为什么TC35i就是不能工作啊,你能给我看看程序吗,我的QQ705066269,可以的话加个好友,谢谢! justyou 发表于 2012-4-30 16:10 static/image/common/back.gif
您好,我现在正在做STM32 的TC35i的设计,我出现了这样的问题,利用串口来检测STM32的发送数据 ...
你应该查一下你的TC35I是否硬件初始化了 然后在确定一下你的AT指令是否有问题
只要这两个没有问题 都是可以发出去短信的
还有就是波特率 一定要匹配 xiaosi1102 发表于 2012-5-1 21:09 static/image/common/back.gif
你应该查一下你的TC35I是否硬件初始化了 然后在确定一下你的AT指令是否有问题
只要这两个没有问题 ...
谢谢了,现在问题解决了,估计是tc35i初始化的时间还没有好,就发送了指令,然后当时是在进行测试,所以main函数一开始就执行了,导致tc35i没有收到数据,然后使用复位重发,但有打乱了tc35i的AT指令,后来加了个按键来控制AT命令,成功解决问题 justyou 发表于 2012-5-4 21:23 static/image/common/back.gif
谢谢了,现在问题解决了,估计是tc35i初始化的时间还没有好,就发送了指令,然后当时是在进行测试,所以m ...
一般TC35出问题基本上都是这几个所以把初始化时间调长点注意下AT指令顺序就没问题了 xiaosi1102 发表于 2011-10-6 00:04
回复【12楼】luoguangqi小猫咪……
----------------------------------------------------------------- ...
您好!你的STM32的程序能否给我发一份,感谢万分!邮箱365231628@qq.com
页:
[1]