GSM模块用于许多基于GSM(全球移动通信系统)技术的通信设备中。它用于通过计算机与GSM网络进行交互。GSM模块仅了解AT命令,并可以做出相应响应。最基本的命令是“ AT”,如果GSM响应正常,则说明运行良好,否则将响应“错误”。有各种AT命令,例如ATA用于接听电话,ATD拨打电话,AT + CMGR读取消息,AT + CMGS发送短信等。AT命令后面应跟回车符,即\ r(十六进制的0D ),例如“ AT + CMGS \ r”。我们可以使用这些命令来使用GSM模块。
与8051的GSM接口
除了使用PC,我们还可以使用微控制器与GSM模块和LCD交互以获得GSM模块的响应。因此,我们将使GSM与8051微控制器(AT89S52)相连。 GSM与8051的接口非常容易,我们只需要从微控制器发送AT命令并从GSM接收响应并将其显示在LCD上即可。我们可以使用微控制器的串行端口与GSM通信,即使用PIN 10(RXD)和11(TXD)。
首先,我们需要将LCD连接到8051,您可以从这里学习:LCD与8051微控制器的接口。然后我们需要将GSM模块连接到8051,现在在这里我们应该注意一下。首先,您需要检查您的GSM模块是否能够在TTL逻辑下工作,或者仅能与RS232一起工作。基本上,如果您的模块具有板上的RX和TX(带有GND)引脚,则它可以在TTL逻辑上工作。而且,如果它没有任何RX,TX引脚,而只有一个RS232端口(带有9的串行端口),则需要使用MAX232 IC将串行端口连接至微控制器。基本上是MAX232用于将串行数据转换为TTL逻辑,因为微控制器只能在TTL逻辑上工作。但是,如果GSM模块具有RX,TX引脚,则无需使用MAX232或任何串行转换器,则可以直接将GSM的RX连接到8051的TX(PIN 11),而将GSM的TX连接到8051 RX(PIN 10)。在我们的案例中,我使用了SIM900A模块,它具有RX,TX引脚,因此我没有使用MAX232。
上图显示了GSM与AT89S52微控制器接口的电路图。现在,连接之后,我们只需要编写程序即可将AT命令发送给GSM并在LCD上接收其响应。如上所述,有许多AT命令,但本文的范围仅是将GSM与8051接口,因此我们将发送命令“ AT”后跟“ \ r”(十六进制为0D)。这将给我们一个答复“确定”。但是您可以扩展该程序以使用GSM的所有功能。
代码说明
除了所有与LCD相关的功能外,这里我们还使用了串行端口和定时器模式寄存器(TMOD)。您可以通过我们的8051项目部分来了解LCD功能和其他代码,在这里我将解释与串行通信相关的代码功能:
GSM_init()函数:
此功能用于设置微控制器的波特率。波特率不过是传输或接收的位数/秒。我们需要将8051的波特率与GSM模块的波特率即9600相匹配。通过将TMOD寄存器设置为0X20和定时器1的高字节,我们在模式2(8位自动重载模式)中使用了定时器1。 (TH1)到0XFD以获得9600的波特率。SCON寄存器也用于设置串行通信的模式,我们使用了使能接收的Mode1(8位UART)。
GSM_write函数:
SBUF(串行缓冲区特殊功能寄存器)用于串行通信,每当我们要向串行设备发送任何字节时,便将该字节放入SBUF寄存器中,当发送完完整字节后,硬件将TI位置1。我们需要重置它以发送下一个字节。这是一个标志,指示字节已成功发送。TI是SCON寄存器的第二位。我们已经使用此功能发送了“ AT”。
GSM_read函数:
与发送相同,只要我们从外部设备接收到该字节放入SBUF寄存器中的任何字节,我们只需要读取它即可。并且,每当接收到完整字节时,硬件就会将RI位置1。我们需要重置它以接收下一个字节。RI是SCON寄存器的第一位。我们已经使用该功能读取了响应“ OK”。