怎么用51单片机控制GPRS模块接发数据

怎么用51单片机控制GPRS模块接发数据,第1张

GPRS模块大都是通过串口和单片机通信的,所以用51单片机控制GPRS模块

(1)首先要编写串口的通信程序,串口的初始化,读写数据等,提前要确定你的串口接收数据是中断方式还是查询方式,这要根据你的GPRS模块来决定,国内的很多GPRS模块,都只支持中断的方式,西门子的可以用查询,友亩旁其实用查询比较简单,中断的话调试起来相对较麻烦;

(2)根耐伏据串口通信程序和使用的GPRS模块的手册,编写GPRS的通信程序,包括GPRS模块的硬件和软件初始化,GPRS的接收和发送好橡数据等函数;

(3)根据实际需要编写GPRS的整体通信程序,通信的数据协议可以自行设计

#include stdio.h>

#include stdlib.h>

#include string.h>

#include unistd.h>

#include fcntl.h>

#include errno.h>

#include termios.h>

int open_port(void)

{

int fd

fd = open("/dev/s3c2410_serial1", O_RDWR|O_NOCTTY|O_NDELAY)

if(fd == -1)

printf("前辩Unable to open uart1\n")

else

fcntl(fd, F_SETFL, 0)

return fd

}

int setup_uart(int fd)

{

struct termios oldtio, newtio

if((tcgetattr(fd, &oldtio)) != 0)

{

printf("Save old error!\n")

return -1

}

bzero(&newtio, sizeof(newtio))

newtio.c_cflag |= (CLOCAL | CREAD)

newtio.c_cflag &= ~CSIZE

newtio.c_cflag &= ~CSTOPB// 1 stop bit

newtio.c_cflag &= ~PARENB// No parity

newtio.c_cflag |= CS8// 8 bits data

cfsetispeed(&newtio, B9600)

cfsetospeed(&newtio, B9600)

//newtio.c_lflag |= (ICANON | ECHO)

//newtio.c_lflag &= ~ECHOE

//newtio.c_iflag &= ~(IXON | IXOFF | IXANY)

newtio.c_cc[VTIME] = 0

newtio.c_cc[VMIN] = 0

tcflush(fd, TCIFLUSH)

if((tcsetattr(fd, TCSANOW, &newtio)) != 0)

{

printf("慧猜缺Set new error!\n")

return -1

}

}

int main(void)

{

int i

int fd

char c,str[200]

fd = open_port()

if(fd == -1)

return 0

i = setup_uart(fd)

if(i == -1)

return 0

while(1)

{

for(i=0i200i++)

str = '\0'

i = 0

printf("GPRS-CMD #")

while((c=getchar()) != 10)

{

str = c

i++

}

str = 13

str[i+1] = '\0'

i = write(fd, str, strlen(str))

if(i 0)

printf("write error!")

for(i=0i100i++)

usleep(100)

i = read(fd, str, 200)

printf("兆迅%s\n", str)

}

}

另一篇和主题相似的已发送往您的邮箱,请查收.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8260152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存