sim900a程序,基于51单片机与sim900a相连接程序

sim900a程序,基于51单片机与sim900a相连接程序,第1张

  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。

  SIM900A模块是一款尺寸紧凑的GSM/GPRS模块,采用SMT封装,基于STE的单芯片案,采用ARM926EJ-S架构,性能强大,可以内置客户应用程序。可广泛应用于车载跟踪、车队管理、无线POS、手持PDA、智能抄表与电力监控等众多方向。

  程序说明:

  本程序运行后如果gprs模块找到服务商信号,就拨打指定电话。

  1.将自己的51单片机的串口1连接到GSM的tx rx gnd

  2.找到程序中前面的#define处,根据说明修改好自己的单片机配置,编译程序

  3.下载程序

  4.按下模块复位键,启动模块,等待信号灯闪烁变慢,复位单片机4.等待发送成功

  基于51单片机与sim900a相连接程序

  #include 《REGX52.H》

  #define uchar unsigned char

  #define uint unsigned int

  //以下是板子上LED的配置,把Px_x改成自己对应的脚。

  #define LED1_ON P1_0 = 0

  #define LED1_OFF P1_0 = 1

  #define LED2_ON P1_1 = 0

  #define LED2_OFF P1_1 = 1

  #define LED3_ON P1_2 = 0

  #define LED3_OFF P1_2 = 1

  #define LED4_ON P1_3 = 0

  #define LED4_OFF P1_3 = 1

  //以下是你的51单片机的晶振大小

  #define FOSC_110592M

  //#define FOSC_12M

  //以下是开机后发送到手机的内容,发送的号码在程序中修改。

  uchar sms_text[] = “123”;

  //注意,无论接收到信号还是发送完信号,都会进中断服务程序的

  /*初始化程序(必须使用,否则无法收发),次程序将会使用定时器1*/

  void SerialInTI()//初始化程序(必须使用,否则无法收发)

  {

  TMOD=0x20;//定时器1 *** 作模式2:8位自动重载定时器

  #ifdef FOSC_12M //在这里根据晶振大小设置不同的数值初始化串口

  TH1=0xf3;//装入初值,波特率2400

  TL1=0xf3;

  #else

  TH1=0xfd;//装入初值,波特率9600

  TL1=0xfd;

  #endif //end of SOC_12M

  TR1=1;//打开定时器

  SM0=0;//设置串行通讯工作模式,(10为一部发送,波特率可变,由定时器1的溢出率控制)

  SM1=1;//(同上)在此模式下,定时器溢出一次就发送一个位的数据

  REN=1;//串行接收允许位(要先设置sm0sm1再开串行允许)

  EA=1;//开总中断

  ES=1;//开串行口中断

  }

  /*串行通讯中断,收发完成将进入该中断*/

  void Serial_interrupt() interrupt 4

  {

  // a=SBUF;

  P2=SBUF;

  RI=0;//接收中断信号清零,表示将继续接收

  // flag=1;//进入中断的标志符号

  }

  void Uart1Send(uchar c)

  {

  SBUF=c;

  while(!TI);//等待发送完成信号(TI=1)出现

  TI=0;

  }//串行口连续发送char型数组,遇到终止号/0将停止

  void Uart1Sends(uchar *str)

  {

  while(*str!=‘\0’)

  {

  SBUF=*str;

  while(!TI);//等待发送完成信号(TI=1)出现

  TI=0;

  str++;

  }

  }

  //延时函数大概是1s钟,不过延时大的话不准。。。

  void DelaySec(int sec)

  {

  uint i , j= 0;

  for(i=0; i《sec; i++)

  {

  for(j=0; j《65535; j++)

  {

  }

  }

  }

  void main()

  {

  uchar i = 0;

  LED1_OFF;

  LED2_OFF;

  LED3_OFF;

  LED4_OFF;

  SerialInti();

  while(1)

  {

  LED1_ON;

  LED2_OFF;

  Uart1Sends(“AT+CMGF=1\r”);

  DelaySec(3);//延时3秒

  Uart1Sends(“AT+CSCS=\”GSM\“\r”);

  DelaySec(3);//延时3秒

  Uart1Sends(“AT+CSMP=17,167,0,250\r”);//设备短信模式(手机自动保存模式)

  // Uart1Sends(“AT+CSMP=17,167,0,240\r”);//设备短信模式(手机非自动保存模式)

  DelaySec(3);//延时3秒

  Uart1Sends(“AT+CMGS=\”18332563682\“\r”);

  DelaySec(5);//延时3秒

  Uart1Sends(sms_text);

  Uart1Send(0x1a);

  LED2_ON;

  LED1_OFF;

  DelaySec(15);//延时20秒

  }

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2704684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-16
下一篇 2022-08-16

发表评论

登录后才能评论

评论列表(0条)

保存