stc12c5a60s2与SIM300的问题啊???
本帖最后由 zhanyicai000 于 2012-9-8 16:04 编辑小弟,最近在弄這個SIM300 GSM/GPRS的模块,,,我用的MCU是:stc12c5a60s2,,串口而通信,,求各位大神指导一下:,有基本例程的贴一下最好了,,呵呵,还有论坛上我也看过一下他们说跳出来的例程,,我套用了一下,在我的板上是不行的,,我的SIM300模块是 http://item.taobao.com/item.htm?spm=a1z10.1.4.19.fb8b58&id=5020180338这个板,,自带的程序也太不行,但串口助手发送指令的话就可以,,应该是程序问题::求各位大神知道知道,有基本例程的贴一下最好了,。
我写的程序--只要可以发个信息就好了,,不知道哪里出错了
uint i = 0;
Uart1_Init(); //串口1初始化
Uart2_Init(); //串口2初始化
AUXR |= 0x02;
Delay_1us(1);
Delay_1ms(1);
Delay_1s(1);
while(1)
{
if(i==0)
{
Send_Uart1_Str("at\r");
Send_Uart1_Enter(1);
Delay_1us(2);
Send_Uart1_Str("ate1\r");
Send_Uart1_Enter(1);
Delay_1us(2);
Send_Uart1_Str("atv1\r");
Send_Uart1_Enter(1);
Delay_1us(2);
Send_Uart1_Str("at+cpgf=1\r");
Send_Uart1_Enter(1);
Delay_1us(2);
Send_Uart1_Str("at+cmgs=\"13538074093\"\r");
Send_Uart1_Enter(1);
Delay_1us(2);
Send_Uart1_Str("are you ok\r");
Send_Uart1_Enter(1);
Delay_1us(2);
Send_Uart1_Byte(0x1a);
Send_Uart1_Enter(1);
Delay_1us(2);
i=1;
}
} 貌似发0x1a之前需要有较大的延时 本帖最后由 zhanyicai000 于 2012-9-9 16:38 编辑
这个是我现在改的程序,加了设置波特率的指令,,但还是没效果
能不能帮我看看,哪里还有不对的地方嘛
while(1)
{
if(i==0)
{
P16=0;
Send_Uart1_Str("at");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("at");
Send_Uart1_Enter(1); //====Send_Uart1_Byte(0xD);//回车Send_Uart1_Byte(0xA);//换行
Delay_1ms(500);
Send_Uart1_Str("at");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("AT+IPR=9600");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("ate1");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("atv1");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("at+cpgf=1"); //AT+CMGF=1短信模式设置Text模式;AT+CMGF=0PDU模式
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("at+cmgs=\"18718579905\""); //发送短信AT指令头+接收短信号码 改为你要发送短信的目标手机的号码 //an ning
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("are you ok");
Send_Uart1_Enter(1);
Delay_1ms(500);
Delay_1s(3);
Send_Uart1_Byte(0x1a);
Send_Uart1_Enter(1);
// Delay_1s(2);
i=1;
P16=1;
} zhanyicai000 发表于 2012-9-9 09:20 static/image/common/back.gif
能不能帮我看看,哪里还有不对的地方嘛
没用过这模块,只用过MC35I之类的,有些操作需要加较大的延时。
而且你也说“串口助手发送指令的话就可”,那估计就是延时的问题。 还有波特率要设一下,有时候自适应是不行的 zhanyicai000 发表于 2012-9-9 09:20 static/image/common/back.gif
能不能帮我看看,哪里还有不对的地方嘛
我改成了延时3秒但还是不行啊 yuanbuqi 发表于 2012-9-9 10:15 static/image/common/back.gif
还有波特率要设一下,有时候自适应是不行的
问一下,,要不要断开单片机这边“串口助手”的232啊,,我看别的坛里有人这样说,,不知道是不是这样 zhanyicai000 发表于 2012-9-9 10:29 static/image/common/back.gif
问一下,,要不要断开单片机这边“串口助手”的232啊,,我看别的坛里有人这样说,,不知道是不是这样 ...
如果你电脑上没发过来,一般都不用 yuanbuqi 发表于 2012-9-9 15:23 static/image/common/back.gif
如果你电脑上没发过来,一般都不用
你能帮我看看,,程序哪有问题啊啊,,发出去了,,但就是没有效果啊 zhanyicai000 发表于 2012-9-9 16:35 static/image/common/back.gif
你能帮我看看,,程序哪有问题啊啊,,发出去了,,但就是没有效果啊
你试试将模块发过来的数据让它发回你的电脑,这样你就可以看哪里出错了 yuanbuqi 发表于 2012-9-9 19:37 static/image/common/back.gif
你试试将模块发过来的数据让它发回你的电脑,这样你就可以看哪里出错了 ...
串口助手一直返回这个啊,,不知道 是我函数错了还是啥问题啊?、、求解决 zhanyicai000 发表于 2012-9-11 15:17 static/image/common/back.gif
串口助手一直返回这个啊,,不知道 是我函数错了还是啥问题啊?、、求解决 ...
肯定是你是函数错了,模块接收的识别不了,返回错误 yuanbuqi 发表于 2012-9-11 17:08 static/image/common/back.gif
肯定是你是函数错了,模块接收的识别不了,返回错误
求教,,你说的是哪个函数啊,,你能帮我看看那呗
Uart1_Init(); //串口1初始化
Uart2_Init(); //串口2初始化
P17=0;
Delay_1us(1);
Delay_1ms(1);
Delay_1s(5);
while(1)
{
if(i==0)
{
P16=0;
Send_Uart1_Str("at");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("at");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("AT+IPR=9600");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("ate1");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("atv1");
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("at+cpgf=1"); //AT+CMGF=1短信模式设置Text模式;AT+CMGF=0PDU模式
Send_Uart1_Enter(1);
Delay_1ms(500);
Send_Uart1_Str("at+cmgs=\"13538074093\""); //发送短信AT指令头+接收短信号码 改为你要发送短信的目标手机的号码 //an ning
Delay_1ms(500);
Send_Uart1_Enter(1);
Delay_1ms(900);
Send_Uart1_Str("are you ok");
Delay_1ms(500);
Send_Uart1_Byte(0x1a);
Send_Uart1_Enter(1);
Delay_1ms(500);
i=1;
P16=1;
}
//************************ "my_delay.h"**********************************************************
void Delay_1us(uchar time) //延时1微秒
{
unsigned char a,b;
for(b=time;b>0;b--)
for(a=1;a>0;a--)
_nop_();
}
void Delay_1ms(uchar time) //延时1毫秒
{
unsigned char a,b,c;
for(c=time;c>0;c--)
for(b=18;b>0;b--)
for(a=152;a>0;a--)
_nop_();
}
void Delay_1s(uchar time) //延时1秒
{
uchar i,j;
for( i=0;i<time;i++ )
for( j=0;j<5;j++)
Delay_1ms(200);
}
//****************************Uart1.c***********************************
bit Uart1_Flag = 0; //串口1收到数据标志位
unsigned char Uart1_Data; //串口1收到数据
/**********************/
unsigned char a = 0;
uchar flag=0;
/***********************/
/*
//串口1初始化 串口1用独立波特率发生器
void Uart1_Init()
{
SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位
// TMOD = 0x21; //0011,0001 设置定时器1为8位自动重装计数器
// TH1 = RELOAD_COUNT; //设置定时器1自动重装数
// TL1 = RELOAD_COUNT;
// TR1 = 1; //开定时器1
// BRT = RELOAD_COUNT;//给定BRT独立波特率发生器的溢出率
BRT = -SYSCLK/12/32/BAUDRATE1;
//BRTR = 1, S1BRS = 1, EXTRAM = 1 ENABLE EXTRAM
AUXR = 0x11; // T0x12,T1x12,UART_M0x6,BRTR,S2SMOD,BRTx12,EXTRAM,S1BRS
ES = 1; //允许串口中断
EA = 1; //开总中断
}
*/
//串口1初始化 串口1用定时器1波特率发生器
void Uart1_Init()
{
SCON = 0x50; //0101,0000 8位可变波特率,无奇偶校验位
TMOD = 0x21; //0010,0001 设置定时器1为8位自动重装计数器
/*********************/
/*
TH1 = -SYSCLK/12/32/BAUDRATE1; //设置定时器1自动重装数
TL1 = -SYSCLK/12/32/BAUDRATE1;
*/
/*******原版改为一下:11.0592M晶振下波特率为9600的TH.TL的值:*********/
TH1=0XFD;
TL1=0XFD;
TR1 = 1; //开定时器1
ES = 1; //允许串口中断
////////设置串口1为中断优先级2--较高优先级/////////////////
PS=0; // IP&=0xEF;
IPH|=0x10;
//////////////////////////
EA = 1; //开总中断
}
//串口1发送一个字节
void Send_Uart1_Byte(uchar i)
{
ES = 0;//关串口中断
TI = 0;//清零串口发送完成中断请求标志
SBUF = i;
while(TI ==0); //等待发送完成
TI = 0;//清零串口发送完成中断请求标志
ES = 1;//允许串口中断
}
//**************
//---------------------------------------------------------------
//----打印换行---------------------------------------------------
//---------------------------------------------------------------
void Send_Uart1_Enter(bit a)
{
Send_Uart1_Byte(0xD); //回车
if(a==1)
Send_Uart1_Byte(0xA); //换行
}
//***********************
//----将字符串发送到串口1--------------------------------------
//---------------------------------------------------------------
void Send_Uart1_Str(uchar *s) //单片机向其他设备发送数据
{
int len=strlen(s); //-1
int i;
for(i=0;i<len;i++)
{
if(s=='\n')
{
Send_Uart1_Enter(1);
}
else
Send_Uart1_Byte(s);
}
}
/**********************/
//串口1收到一个字节
unsigned char Receive_Uart1_Byte(void)
{
uchar R1_data = 0;
while( RI == 0 );
RI = 0;
R1_data = SBUF;
return R1_data;
}
//串口1接收中断
void Uart1_Interrupt_Receive(void) interrupt 4
{
/* if( RI )
{
Uart1_Data = Receive_Uart1_Byte();
if( Uart1_Data!= 0x5E )
goto LOOP;
while( Uart1_Data != 0x0D )
{
i++ ;
if( i == DATA_NUM1 )
goto LOOP;
Uart1_Data = Receive_Uart1_Byte();
}
Uart1_Flag = 1;
}
LOOP:
i = 0; */
/*****************/
a=SBUF;
RI=0;
flag=1;
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI); //等待发送完成,
TI=0;
ES=1;
}
/********************/
} zhanyicai000 发表于 2012-9-11 19:18 static/image/common/back.gif
求教,,你说的是哪个函数啊,,你能帮我看看那呗
Uart1_Init(); //串口1初始化
看了下,有的乱,我还是给份程序你参考下吧,程序也是在其他地方下载的,应该可以用的 yuanbuqi 发表于 2012-9-11 21:58 static/image/common/back.gif
看了下,有的乱,我还是给份程序你参考下吧,程序也是在其他地方下载的,应该可以用的 ...
恩,,谢谢,,这个UART程序我是参考网上弄的
,,呵呵初学程序还写的很菜 zhanyicai000 发表于 2012-9-11 23:03 static/image/common/back.gif
恩,,谢谢,,这个UART程序我是参考网上弄的
,,呵呵初学程序还写的很菜 ...
模块的波特率你设好了没?先用串口助手AT+IPR?查查波特率是多少 哦哦,我试了,,是波特率没改,,但我用串口是时候也没设置它的波特率啊,,也可以你发给,,,你发给我的那个程序我试试了一下,,那个发短信的试了,,是可以,,但就是我复位后好像有时又不行,,不知道是不是SIM300没准备好。。。求指导,,先谢谢你啊,,弄那么就突然下载器下载不了了,,休息吧
页:
[1]