当前位置:首页 > C51单片机控制sim900a收发信息c语言程序
#include
#include \
//! 服务器IP地址与端口号,注意,用户需要将此IP替换为 //! 自己服务器的公网IP地址
#define TCPIP_SERVER_IPADDR \#define TCPIP_SERVER_PORT \
//! 串口发送与接收缓冲区大小 #define TTY_MAX_BUFFER_SIZE 256 //! 串口发送与接收缓冲区
char ttyBuffer[TTY_MAX_BUFFER_SIZE];
//! TCPIP发送与接收缓冲区大小
#define TCPIP_MAX_BUFFER_SIZE 256 //! TCPIP发送与接收缓冲区
char tcpipBuffer[TCPIP_MAX_BUFFER_SIZE];
//! 串口0初始化函数, 此串口用作接收终端控制命令 //! 晶振频率:22.1184MHz //! 串口0波特率:9600
void Uart0_Init(void) //9600bps@22.1184MHz {
PCON |= 0x80; //使能波特率倍速位SMOD SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器 TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0x70; //设定定时初值
TH1 = 0x70; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 }
//! 串口0字符串输出函数
//! 参数说明:pString为字符串缓冲区首地址 void Uart0_PutString(char* pString) {
unsigned short i = 0; while(pString[i]) {
SBUF = pString[i++]; while(!TI); TI = 0; } }
//! 串口0字符串读取函数, 获取一行数据, 遇到换行符为止
//! 参数说明:pBuffer为缓冲区首地址, nBufferLen为缓冲区大小, nTimeOut为超时时间 //! 如果nTimeOut=0, 那么函数会阻塞, 直到缓冲区满或遇到换行符
unsigned short Uart0_GetALine(char* pBuffer, unsigned char nBufferLen, unsigned char nTimeOut) {
char ch = 0;
unsigned int i = 0, j = 0, k = 0;
k = 20000*nTimeOut;
for(i = 0, j = 0; i < nBufferLen; i++) {
while(1) {
if(RI) {
RI = 0; //清除接收完成标志 pBuffer[i] = SBUF; //! 回显给终端显示 SBUF = pBuffer[i]; while(!TI); TI = 0;
if(pBuffer[i] == 0x0d) {
pBuffer[i] = 0x00; return i; }
break; }
else if(nTimeOut == 0) continue; else j++;
if(j == k) break; } }
return i; }
//! 串口1初始化函数, 此串口用作控制GSM模块 //! 晶振频率:22.1184MHz //! 串口1波特率:9600
void Uart1_Init(void) //9600bps@22.1184MHz {
AUXR |= 0x08; //使能波特率倍速位S2SMOD S2CON = 0x50; //8位数据,可变波特率
BRT = 0x70; //设定独立波特率发生器重装值
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T AUXR |= 0x10; //启动独立波特率发生器 }
//! 串口1字符串输出函数
//! 参数说明:pString为字符串缓冲区首地址 //! 备注:此函数一方面向串口1发送数据, //! 另一方面也向串口0发送数据, //! 目的是为了方便调试 void Uart1_PutString(char* pString) {
unsigned char i = 0;
//! 向串口1写数据 i = 0;
while(pString[i]) {
//! 向串口0写数据,目的是方便调试 SBUF = pString[i]; while(!TI); TI = 0;
S2BUF = pString[i++]; while(!(S2CON&S2TI)); S2CON &= ~S2TI; } } /**
* @func Uart1_GetString
* @author SwanTech (2011/12/14) * @param pBuffer 缓冲区地址
* @param nBufferLen 缓冲区长度
* @param nTimeOut 读取返回数据的超时时间
* @return unsigned short 成功: 返回接收到的字节数. 失败: 返回-1 * @remark 注意nTimeOut超时时间从接收到第一个字符开始计数 */
unsigned short Uart1_GetString(char* pBuffer, unsigned short nBufferLen, unsigned short nTimeOut) {
unsigned short i = 0, j = 0, k = 0;
//! 此函数固定的超时时间,也就是说如果根本就
//! 没有应答数据时,函数经过这个固定超时时间会返回 const unsigned short nFixedTimeout = 65500;
for(i = 0; (i < nFixedTimeout && k == 0); i++) {
for(j = 0, k = 0; j < nTimeOut; j++) {
if(S2CON & S2RI) {
S2CON &= ~S2RI; pBuffer[k++] = S2BUF;
SBUF = S2BUF; //! 向串口0写数据,目的是方便调试 while(!TI); TI = 0;
if(k == 1) //! 应答数据第一次到来,重新计算超时值 j = 0;
else if(k+1 == nBufferLen) //! 字符串缓冲区已满 break; } } }
pBuffer[k] = 0x00; //! 字符串必须以0x00结束
return k; }
void SwanTech_LogoDisplay(void) {
Uart0_PutString(\
Uart0_PutString(\ #鸿鹄电子科技# |\\n\\r\ Uart0_PutString(\ http://swantech.taobao.com |\\n\\r\
共分享92篇相关文档