第一范文网 - 专业文章范例文档资料分享平台

C51单片机控制sim900a收发信息c语言程序

来源:用户分享 时间:2025/8/25 11:12:19 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

#include #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\

C51单片机控制sim900a收发信息c语言程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4l78o9rshq5nrao1skmh_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top