GSM-module wordt gebruikt in veel communicatieapparaten die zijn gebaseerd op GSM-technologie (Global System for Mobile Communications). Het wordt gebruikt voor interactie met het GSM-netwerk met behulp van een computer. GSM-module begrijpt alleen AT-commando's en kan dienovereenkomstig reageren. Het meest basale commando is "AT", als GSM OK reageert, werkt het goed, anders reageert het met "ERROR". Er zijn verschillende AT-commando's zoals ATA voor het beantwoorden van een oproep, ATD om een oproep te plaatsen, AT + CMGR om het bericht te lezen, AT + CMGS om de sms te verzenden, etc. AT-commando's moeten worden gevolgd door Carriage return ie \ r (0D in hex), zoals "AT + CMGS \ r". We kunnen de GSM-module gebruiken met behulp van deze opdrachten.
GSM-interface met 8051
In plaats van pc te gebruiken, kunnen we microcontrollers gebruiken om te communiceren met de GSM-module en LCD om het antwoord van de GSM-module te krijgen. Dus we gaan GSM koppelen aan een 8051 microcontroller (AT89S52). Het is heel gemakkelijk om GSM met 8051 te verbinden, we hoeven alleen maar AT-opdrachten van de microcontroller te verzenden en antwoord van GSM te ontvangen en op het LCD-scherm weer te geven. We kunnen de seriële poort van de microcontroller gebruiken om met GSM te communiceren, wat betekent dat we PIN 10 (RXD) en 11 (TXD) gebruiken.
Eerst moeten we LCD verbinden met 8051, u kunt dit hier leren: LCD-interface met 8051 Microcontroller. Dan moeten we de GSM-module verbinden met 8051, nu moeten we hier even opletten. Eerst moet u controleren of uw GSM-module geschikt is voor TTL-logica of alleen voor RS232. Als uw module RX- en TX- (met GND) -pinnen aan boord heeft, kan deze in principe werken op TTL-logica. En als het geen RX-, TX-pinnen heeft en alleen een RS232-poort heeft (seriële poort met 9), dan moet je MAX232 IC gebruiken om de seriële poort op de microcontroller aan te sluiten. In feite MAX232gebruikt om seriële gegevens om te zetten in TTL-logica omdat Microcontroller alleen op TTL-logica kan werken. Maar als de GSM-module RX-, TX-pinnen heeft, hoeft u MAX232 of een seriële converter niet te gebruiken, u kunt RX van GSM rechtstreeks verbinden met TX (PIN 11) van 8051 en TX van GSM met RX (PIN 10) van 8051 In ons geval heb ik de SIM900A-module gebruikt en deze heeft RX-, TX-pinnen, dus ik heb MAX232 niet gebruikt.
Het schakelschema voor GSM-interface met AT89S52-microcontroller wordt weergegeven in de bovenstaande afbeelding. Nu, na de verbinding, hoeven we alleen maar een programma te schrijven om AT-opdrachten naar GSM te sturen en het antwoord op het LCD-scherm te ontvangen. Er zijn veel AT-commando's zoals hierboven beschreven, maar onze strekking van dit artikel is alleen om GSM te koppelen aan 8051, dus we gaan gewoon het commando "AT" verzenden gevolgd door "\ r" (0D in hex). Dit geeft ons een antwoord "OK". Maar u kunt dit programma uitbreiden om gebruik te maken van alle faciliteiten van GSM.
Code uitleg
Naast alle LCD-gerelateerde functies, hebben we hier de seriële poort en het timer-modusregister (TMOD) gebruikt. U kunt meer te weten komen over LCD-functies en andere code door onze sectie 8051-projecten te doorlopen, hier leg ik uit over seriële communicatie-gerelateerde codefuncties:
GSM_init () functie:
Deze functie wordt gebruikt om de baudrate voor de microcontroller in te stellen. Baudrate is niets anders dan de verzonden of ontvangen bits / seconde. En we moeten de baudrate van 8051 afstemmen op de baudrate van de GSM-module, dwz 9600. We hebben Timer 1 gebruikt in Mode 2 (8-bit auto-herlaadmodus) door het TMOD-register in te stellen op 0X20 en hogere byte van Timer 1 (TH1) naar 0XFD om de baudrate van 9600 te krijgen. Ook wordt het SCON-register gebruikt om de modus van seriële communicatie in te stellen, we hebben Mode1 (8-bit UART) gebruikt met ontvangst ingeschakeld.
GSM_write Functie:
SBUF (seriële buffer speciale functie register) wordt gebruikt voor seriële communicatie, wanneer we een byte naar een serieel apparaat willen sturen, plaatsen we die byte in het SBUF-register, wanneer de volledige byte is verzonden, wordt de TI-bit ingesteld door hardware. We moeten het resetten om de volgende byte te verzenden. Het is een vlag die aangeeft dat de byte met succes is verzonden. TI is het tweede bit van het SCON-register. We hebben "AT" verzonden met deze functie.
GSM_read-functie:
Hetzelfde als verzenden, wanneer we een byte van een extern apparaat ontvangen, wordt die byte in het SBUF-register geplaatst, we hoeven het alleen maar te lezen. En wanneer de volledige byte is ontvangen, wordt de RI-bit door hardware ingesteld. We moeten het resetten om de volgende byte te ontvangen. RI is het eerste bit van het SCON-register. We hebben het antwoord "OK" gelezen met deze functie.