单片机与gsm通信c语言,实现51单片机与GSM模块通信介绍

51单片机与GSM模块实现通信

1、检测串口线的好坏

1)将串口线插在电脑上,用短路子短接串口的2脚和3脚

2)打开串口调试助手

3)点击自动发送,在自动发送的窗口中随便发个数据,看看能不能接收到若能接收到自己发的数据表示串口线是正常的,否则是坏的。

2、下完单片机程序后,看看串口是否有数据发出检测

3、单片机上与模块通信的4个灯表示的含义

1)DO灯

一直闪表示单片机串口与GSM模块串口通信不正常,否则串口通信正常

2)D1灯

灯亮就表示模块注册上网络,否则没有注册上网络

3)D2灯

灯亮表示开始发短信

4)D3灯

灯亮表示发短信结束

4、单片机板子与GSM模块的连接

单片机---------GSM模块

VCC--------vcc(P5的第3脚)

GND--------GND(P5的第4脚)

RX_232(表示单片机的发)----------RXDPC_232(模块的收(P5的第5脚))

TX_232(表示单片机的收)----------TXD_PC232(模块的发(P5的第6脚))

c6ba5b378ab408db056a5dc6107ff30e.png

gsm模块和单片机连接

单片机连接GSM模块,直接就是把异步串行通信口的TX和RX连上就可以,别忘了地线。

注意事项:

1、不同的单片机有不同的电压,一般GSM模块的输入输出电平是2.85V,51系列的电平是5V,一般在51输出的TX那根线上串联2K的电阻,基本上可以使用。如果是3.3V的单片机,这个电阻就可以很小,几百欧姆就可以。

2、GSM模块本身的电源和SIM卡电路很麻烦,首先是大多数GSM模块都是用FPC40的接口,排线的间距只有零点五毫米,而且是塑料外壳,不好焊接。焊不好的话工作不稳定。其次是电源部分较麻烦,GSM模块的发射电流较大,最大瞬间电流2A!所以电源部分一般要用LM2576这种大电流的DC-DC变换器来提供4V的电压,DCDC电路设计本身就很不容易,个人应用比较难,需要做电路板。搭接的不稳定。还有SIM卡部分,SIM卡与GSM模块通信本身就是个复杂的高频过程,电路抗干扰能力强,我曾经试过用电线给它们连接起来,没有十分钟,就掉线了。所以SIM卡部分也需要精心设计,别看只有五根数据线而已。

单片机控制TC35GSM模块的方法

1、硬件连接

电路见下图只需设计一个TTL转RS232电平电路,连接到MCU的UART口,另一端直接连接到TC35。

ad16cc5fe51af17ab198f5ecf154b1e0.png

  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要使用RFID模块单片机之间的串口通信协议。一般来说,RFID模块都支持UART串口通信,因此可以使用单片机的串口模块实现与RFID模块通信。 以下是实现RFID与单片机的串口通信的基本步骤: 1. 确定RFID模块单片机之间的串口通信协议,并设置单片机的串口模块相应的参数,例如波特率、数据位、校验位等。 2. 在单片机中编写串口通信程序,以实现与RFID模块的数据交换。具体来说,需要使用单片机的串口发送数据给RFID模块,并等待RFID模块的响应数据。一般可以使用单片机的中断服务程序来接收RFID模块的数据。 3. 对接收到的RFID数据进行解析和处理。RFID模块通常会返回一组数据,包括卡号、卡类型等信息。单片机需要解析这些数据,并根据需要进行相应的处理,例如开门、记录刷卡信息等。 下面是一个简单的示例代码,用于实现单片机与RFID模块的串口通信: ```c #include <reg51.h> #define RFID_BUF_SIZE 16 // RFID数据缓冲区大小 unsigned char rfid_buf[RFID_BUF_SIZE]; // RFID数据缓冲区 unsigned char rfid_idx = 0; // RFID数据缓冲区当前位置 // 串口中断服务程序 void uart_isr() interrupt 4 { if (RI) // 接收中断 { rfid_buf[rfid_idx++] = SBUF; // 保存接收到的数据 RI = 0; // 清除接收中断标志位 } if (TI) // 发送中断 { TI = 0; // 清除发送中断标志位 } } // 初始化串口 void init_uart() { SCON = 0x50; // 8位数据位,无校验位,1位停止位 TMOD &= 0x0F; // 清除波特率控制位 TMOD |= 0x20; // 串口通信模式2 TH1 = 0xF3; // 波特率 = 9600 TL1 = 0xF3; TR1 = 1; // 启动定时器1 ES = 1; // 允许串口中断 EA = 1; // 允许全局中断 } // 发送数据给RFID模块 void send_rfid(unsigned char *data, unsigned char len) { unsigned char i; for (i = 0; i < len; i++) { SBUF = data[i]; // 发送数据 while (!TI); // 等待发送完成 TI = 0; // 清除发送中断标志位 } } // 主函数 void main() { init_uart(); // 初始化串口 // 发送指令给RFID模块 unsigned char cmd[] = {0xAA, 0xBB, 0x01, 0x00, 0x01, 0x01, 0x03, 0x2A}; send_rfid(cmd, sizeof(cmd)); // 等待RFID模块的响应数据 while (rfid_idx < 8); // 解析RFID数据 unsigned char card_type = rfid_buf[2]; unsigned char card_num[4]; unsigned char i; for (i = 0; i < 4; i++) card_num[i] = rfid_buf[3 + i]; // 处理RFID数据,例如开门、记录刷卡信息等 } ``` 注意,上述代码仅作为示例,实际应用中需要根据具体的RFID模块单片机来进行相应的调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值