求助!我用AVRmega1280控制GPRS,为什么发不出短信啊?(内附相应的程序和原理图)
程序ourdev_437189.rar(文件大小:85K) (原文件名:gprs1.rar)电路图ourdev_437190.rar(文件大小:8K) (原文件名:GPRS.rar)
模块能正常启动,指示灯也会亮。
好像串口发送的AT命令,GPRS模块接收不了,或者GPRS返回的AT命令结果,串口没收到。GPRS的AT返回值以怎样的方式返回的呢?
是不是发送一条AT命令,GPRS都会有相应的返回值呢?
我是新手,请大牛们帮帮忙吧!
我的邮箱是liu21yd@163.com 初略的看了一下你的代码,主要的问题是你对CVAVR产生的串口接收中断程序没能很好的理解。CVAVR产生的代码其实形成了一个环形队列作为串口接收的缓冲,这时,你不应该直接去操作这个缓冲区,即使是读也不行(环形队列的数组下标是周而复始的,你读的程序就没有),正确的做法应该是实现getchar函数,调用一次从串口缓冲区里读取一个字符,然后自己再开个自己的缓冲区,将读取的字符放进去,进行子串匹配来确定GPRS的返回。我一般都会使用C语言库函数的strstr进行字符串匹配。每次从串口缓冲区读取一行进行判断。
原则上,每发一条AT指令,以0X0D结尾或者0X0D0X0A结尾都可以,GPRS模块就会有返回的信息,具体的内容格式含义可以查看GPRS模块的AT指令手册。 谢谢Appcat!
按照您说的问题,我将程序改成下面样子。但我在发送查看串口是否正常工作的AT命令,仍检测不到“OK”字段。是不是串口本身就没正常工作呢?还是程序中仍然有问题呢?
int check_return_OK(void)
{
int i=0;
char *rec_buffer;
char *OK="OK";
while(rx_counter2 > 0)
{
rec_buffer=getchar();
i=i+1;
}
if(strstr(rec_buffer,OK))
return 1;
else
return 0;
}
今天我用电压表测了一下GPRS模块各个引脚的电压,发现其引脚中,UART_RXD0的电压达到4V,而UART_TXD0的电压却只有1.6V。这样对吗?
而且,SIM卡的各个引脚 的电压都几乎为0V。这样的问题是不是很严重啊? 开机了吗? 开机了,模块能正常启动,LPG 接口信号灯闪烁得很快。 什么GPRS模块,先确保硬件没有问题吧。重点检查SIM卡电路,SIMVCC正常要有2.8V。5V的电源容量是否足够,二极管换成1n5408的,不要用4007,在二极管后到地并联一个2200uF的电解电容。在模块的IO口上出现4V的电压太高了,已经超过模块IO的最高允许电压,要降下来,可以串电阻,也可以降低M128的供电电压。最后都弄完后想办法将模块部分直接连一个电平转换的电路到PC串口,测试一下是否正常,再用单片机操作。否则现在连问题在哪里都不清楚。
程序这样写基本可以了。 学习一下. 信猫 单片机GPRS/GSM开发套件主要用于客户开发基于8位用单片机和西门子MC39IGPRS模块的GPRS无线数据通讯终端,为那些没有GPRS开发经验的用户展示基于单片机的GPRS开发过程,开发人员只需将程序下载到单片机内即可实现GPRS拨号和数据传输。提供**源代码
联系方式:
QQ:84239629
淘宝网店:http://item.taobao.com/auction/item_detail-0db2-99f23cd9ea56dfe081c382c241646cf1.htm 相信苹果猫 标记下以后再学 标记下以后再学 标记下以后再学 正在饱受相同的折磨 {:lol:}学习一下
页:
[1]