查看: 1427|回复: 0
打印 上一主题 下一主题

GSM双串口单片机继电器控制开发板产品使用手册

[复制链接]
跳转到指定楼层
沙发
发表于 2015-5-13 09:44:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GSM远程通信控制模块\STC12C5A60S2单片机开发板
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg
简要说明:
一、 尺寸:长152.6mmX93mmX25mm
二、 主要芯片:STC12C5A60S2单片机(支持AT89S52
              GTM900-B GSM远程控制\通讯模块
三、 工作电压:直流91A(或9V~40V
四、 通过串口COM1下载程序
五、 特点:
          1、具有电源指示。
     2STC12C5A60S2单片机所有I/O口引出,便于二次开发
     3、可以双串口通讯
4GTM900-B GSM模块接口40P管脚(除1112和电源接口未引出),其余全部引出,便于二次开发
5、采用LM2576-5稳压器使输入工作电压范围9~40V可以正常工作。
6、为了保证模块稳定和模块供电要求采用LM2576-5  ADJ 可调稳压转为GTM900-B GSM模块供电     
7、两路带输出光电隔离控制5V继电器(可控制两路交流220/10A以下设备)
8、标准的11.0592M晶振。(便于设置串口波特率)
9、具有上电复位和按键复位
10、具有GSM启动按键
11、支持STC89C5X系列单片机以及AT89S5X单片机
          12、具有串口通信功能(可以通过上位机控制)带上位机软件
          13
、具有电脑和单片机通讯、电脑和GSM通讯选择控制
     14、附带丰富例程和资料(包括郭天祥GSM视频教程和课件)
GTM900-B简要说明
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg
跳冒说明:
在未连接跳冒时,单片机P3.0P3.1分别和GSM模块的1819管脚是直接连接好的,单片机可以和模块直接通讯
1.     单片机下载程序时跳冒为RXD1RXD0短接,TXD1TXD0短接(即单片机与电脑的通讯)
2.     电脑通过串口与GSM模块通讯时RXD0TXD1短接, RXD1TXD0短接(通过这种方式可以监视GSM模块与单片机的通讯)
使用环境:工业应用场合、初学GSM通讯模块学习、毕业设计等等
【标注说明】
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg
【视频教程包括课件和资料】
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image016.jpg
【上位机界面】
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image018.jpg
PCB展示】
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image020.jpg
【程序代码】
实现功能:
/**********************************************************
             GTM900-B工业模块模块测试程序1           
程序功能:远程控制两路继电器的吸合与断开\远程控制两路开关
                       短信控制
单片机型号:STC12C5A60S2  支持双串口
晶振:11.0592M       波特率:9600bps
应用软件:Keil2Keil3                                               
                                                                                                                                            
发布时间:2011-1210
公司:汇诚科技
         
**********************************************************/
#include<reg52.h>
#include<string.h>
#define Buf_Max 200 //缓存长度200
#define Delay_Time 3000  //延时长度
sbit jdq1 = P0^0; //继电器1
sbit jdq2 = P0^1; //继电器2
//sbit LED3 = P0^2; //状态指示灯3
//sbit LED4 = P0^3; //状态指示灯4
unsigned char i = 0;               //定义缓存指针
unsigned charRec_Buf[Buf_Max];    //定义缓存数组
void Serial_Init(void);            //声明串口初始化函数
void Send_ASCII(unsigned char *b);//声明发送字符(ASCII)函数
void Delay_ms(unsigned inttime);  //声明延时函数
void CLR_Buf(void);                              //声明清除缓存内容      
void Send_Hex(unsigned charb);    //声明发送字符(十六进制)函数
bit  Hand(unsigned char *a);       //声明判断缓存中是否含有指定的字符串函数
/**********************************主函数******************************/
void main(void)
{
            Serial_Init();         //初始化串口
                            CLR_Buf();             //清除缓存内容
                        Delay_ms(60000);        //延时
                            Send_ASCII("AT");    //发送联机指令
                        while(!Hand("OK"))     //判断是否握手成功,如果不成功延时一会,再发送AT握手指令
                                   {
                                          Send_ASCII("AT");//发送联机指令
                                          Delay_ms(60000);   //延时
                                   }
                            CLR_Buf();                //清除缓存内容
                                   
                            Delay_ms(Delay_Time);     //延时
                        Send_ASCII("AT+CPMS=\"SM\",\"SM\",\"SM\"");//所有操作都在MT(模块终端)中进行
                            Delay_ms(Delay_Time);     //延时
                            while(!Hand("OK"));       //等待设置成功
                            CLR_Buf();                //清除缓存内容
                                          
                            Delay_ms(Delay_Time);     //延时
                            Send_ASCII("AT+CNMI=2,1");//设置当有新短信到来时提示
                            Delay_ms(Delay_Time);     //延时
                            while(!Hand("OK"));       //等待设置成功
                            CLR_Buf();                //清除缓存内容
               
                            Delay_ms(Delay_Time);     //延时
                            Send_ASCII("AT+CMGF=1");  //文本(TEXT)模式
                            Delay_ms(Delay_Time);     //延时
                            while(!Hand("OK"));          //等待设置成功
                            CLR_Buf();                //清除缓存内容
                     /*    Delay_ms(Delay_Time);     //延时
                            Send_ASCII("AT+CMGD=1");  //删除第一条信息
                            Delay_ms(Delay_Time);     //延时
                            while(!Hand("OK"));          //等待设置成功
                            CLR_Buf();                //清除缓存内容 */
/*                      Delay_ms(Delay_Time);     //延时
                            Send_ASCII("AT+CSCA="shoujihao"");  //文本(TEXT)模式
                            Delay_ms(Delay_Time);     //延时
                            while(!Hand("OK"));          //等待设置成功
                            CLR_Buf();                //清除缓存内容
*/
                                 
                            while(1)
                                   {
                                      if(strstr(Rec_Buf,"+CMTI")!=NULL)    //若缓存字符串中含有"+CMTI"就表示有新的短信
                                         {
                                                        CLR_Buf();                   //清除缓存内容
                                                        Delay_ms(Delay_Time);        //延时
                                                        Send_ASCII("AT+CMGR=1");     //发送读取信息指令
                                                        Delay_ms(Delay_Time);        //延时
                                            while(!Hand("OK"));          //等待设置成功
                                                
                                                if(strstr(Rec_Buf,"openjdq1")!=NULL)       //如果信息内容是"open1"
                                                   jdq1= 0;                           //点亮LED7指示灯
                                            elseif(strstr(Rec_Buf,"closeljdq1")!=NULL) //如果信息内容是"close1"
                                                       jdq1= 1;                              //熄灭LED7指示灯
                                                        elseif(strstr(Rec_Buf,"openjdq2")!=NULL) //如果信息内容是"open2"
                                                              jdq2= 0;                           //点亮LED8指示灯
                                                elseif(strstr(Rec_Buf,"closejdq2")!=NULL) //如果信息内容是"close2"
                                                   jdq2= 1;                              //熄灭LED8指示灯
                                                        CLR_Buf();                              //清除缓存内容
                                         
                                                        Delay_ms(Delay_Time);                   //延时
                                                        Send_ASCII("AT+CMGD=1");                //删除读取后的信息
                                                        Delay_ms(Delay_Time);                   //延时
                                                        while(!Hand("OK"));                         //等待设置成功
                                                        CLR_Buf();                              //清除缓存内容
                                                 }
                                            if(strstr(Rec_Buf,"RING")!=NULL)                   //有电话时两路继电器吸合
                                            {
                                             jdq1=0;
                                             jdq2=0;
                                            }
               }
}
/***************************串口初始化函数*****************************/
/*函数原型:void Serial_Init(void)
/*函数功能:串口初始化
/*输入参数:
/*输出参数:
/**********************************************************************/
void Serial_Init(void)//串口初始化函数
{
SCON = 0x50;//串口:方式1,允许发送和接收
TMOD = 0x20;//定时器1:模式2,8位自动重装模式,用于产生波特率   
TH1 = 0xFD; //11.0592MHZ晶振,波特率为9600
TL1 = 0xFD;  
TR1 = 1;   //开启定时器1   
ES = 1;    //开启串口中断
EA = 1;    //开启全局中断
}
/****************************串口中断处理函数**************************/
/*函数原型:void Serial_Int(void)
/*函数功能:串口中断处理
/*输入参数:
/*输出参数:
/**********************************************************************/
void Serial_Int() interrupt 4
{               
                ES= 0;       //关串口中断,防止中断嵌套
                if(TI)    //如果是发送中断,则不做任何处理
                     {
                            TI= 0;  //清除发送中断标志位
                     }
                if(RI)   //如果是接送中断,则进行处理
                     {
                            RI= 0; //清除接收中断标志位
                            Rec_Buf = SBUF; //将接收到的字符串存到缓存中
                            i++;               //缓存指针向后移动
                            if(i>200)          //如果缓存满,将缓存指针指向缓存的首地址
                                   {
                                          i= 0;
                                   }
                     }
                ES= 1;       //开启串口中断
}
/****************************发送字符(ASCII)函数***********************/
/*函数原型:void Send_ASCII(unsigned char *b)
/*函数功能:发送字符(ASCII)
/*输入参数:unsigned char *b
/*输出参数:
/**********************************************************************/
void Send_ASCII(unsigned char*b)         
{
   ES = 0;                   //关串口中断
   for (b; *b!='\0';b++)
           {
             SBUF= *b;
             while(TI!=1);     //等待发送完成
                            TI= 0;           //清除发送中断标志位
                     }
                ES= 1;                   //开串口中断
                Send_Hex(0x0d);           //发送回车符
               Send_Hex(0x0a);           //发送换行符
}
/****************************timems延时函数***************************/
/*函数原型elay_ms(unsigned int time)
/*函数功能:延时Timems
/*输入参数:time
/*输出参数:
/**********************************************************************/
void Delay_ms(unsigned int time)
{
unsigned char j;
for(;time>0;time--)
               {
                  j = 1500;
                  while(j--);
               }
}
/**************************清除缓存数据函数****************************/
/*函数原型:void CLR_Buf(void)
/*函数功能:清除缓存数据
/*输入参数:
/*输出参数:
/*调用模块:
/**********************************************************************/
void CLR_Buf(void)
{
                unsignedchar k;
   for(k=0;k<Buf_Max;k++)    //将缓存内容清零
                    {
                            Rec_Buf[k]= 0;
                     }
   i = 0;                    //接收字符串的起始存储位置
}
/*************************发送字符(十六进制)函数********************/
/*函数原型:void Send_Hex(unsigned char c)
/*函数功能:发送字符(十六进制)
/*输入参数:unsigned char c
/*输出参数:
/*调用模块:
/******************************************************************/
void Send_Hex(unsigned charc)         
{
   ES = 0;               //关串口中断
   SBUF = c;
   while(TI!=1);         //等待发送完成
   TI = 0;               //清除发送中断标志位
                ES= 1;               //开串口中断
}
/*****************判断缓存中是否含有指定的字符串函数******************/
/*函数原型:bit Hand(unsigned char *a)
/*函数功能:判断缓存中是否含有指定的字符串
/*输入参数:unsigned char *a 指定的字符串
/*输出参数:bit 1---含有    0---不含有
/*调用模块:
/*******************************************************************/
bit Hand(unsigned char *a)
{
   if(strstr(Rec_Buf,a)!=NULL)
                    return 1;
                else
                     return0;
}
/********************************************************************
                              结束
*********************************************************************/
【图片展示】
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image022.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image024.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image026.jpg
file:///C:/Users/admin/AppData/Local/Temp/msohtmlclip1/01/clip_image028.jpg
/*************************************/
                 发货清单
1、图片所示开发板一块(带单片机和GTM900-B模块) 1
2、(郭天祥GSM视频和资料)产品相关原理图及例程购买后刻录光盘,赠送顾客!
3.此价格不带天线和转接线(需另卖天线15转接线8
/****************************************/

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表