久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3140|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

求一份89C51RC a6 gprs模塊的源程序 我有15的

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:205667 發(fā)表于 2017-5-28 21:29 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
一下是15系列的代碼;哪位大神可以幫轉(zhuǎn)話成89C51RC的源代碼:
     51 單片機(jī)例程       適用于 STC15F 系列
  
  實(shí)驗(yàn)內(nèi)容 :  發(fā)送PDU短信息

    UART1 映射到 P36 P37口      KEY1 : 觸發(fā)發(fā)送目標(biāo)短信
  
PS: A6模塊上電注冊(cè)是要一定的時(shí)間的!
在這里也解釋下 AT+CMGS=39    39是怎么來(lái)的?  AT+CMGS=xx   xx是正文的長(zhǎng)度  在PDU模式下,8位真實(shí)TP數(shù)據(jù)單位的長(zhǎng)度(即RP層的SMSC地址中的8位字符將不計(jì)算在該長(zhǎng)度內(nèi)!)
所以我們轉(zhuǎn)換過(guò)來(lái)的PDU碼長(zhǎng)度是40,要減掉SMSC地址中的8位字符,所以是40-1=39。
串口1全雙工中斷方式收發(fā)通訊程序。本例程使用11.0592MHZ時(shí)鐘,如要改變,請(qǐng)修改下面的"定義主時(shí)鐘"的值并重新編譯。
串口設(shè)置為:115200,8,n,1.
通過(guò)PC向MCU發(fā)送數(shù)據(jù), MCU收到后通過(guò)串口把收到的數(shù)據(jù)原樣返回.
******************************************/

/************* 本地常量聲明 **************/
#define MAIN_Fosc  11059200L //定義主時(shí)鐘
#define BaudRate1  115200UL //選擇波特率

#define Timer1_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate1))  //Timer 1 重裝值, 對(duì)應(yīng)300KHZ
#define Timer2_Reload (65536UL -(MAIN_Fosc / 4 / BaudRate1))  //Timer 2 重裝值, 對(duì)應(yīng)300KHZ
#include "STC15Fxxxx.H"
#include "delay.h"
#include "string.h"
#include "Exti.h"
/************* 本地變量聲明 **************/
#define Automatic_Startup 1     //定義自啟動(dòng) V1.2版本起有自啟動(dòng)功能
#define Buf1_Max 60        //串口1緩存長(zhǎng)度
#define Buf2_Max 60        //串口2緩存長(zhǎng)度
//串口1發(fā)送回車(chē)換行
#define UART1_SendLR() UART1_SendData(0X0D);\
            UART1_SendData(0X0A)

/************* 本地常量聲明 **************/
//sbit RUNING_LED = P1^2;     //運(yùn)行指示燈
sbit LEDA     = P1^3;     //測(cè)試用LED
sbit LEDB       = P1^0;
sbit LEDC       = P1^5;
sbit KEY1       = P3^3;   //發(fā)送短信
/*************  本地變量聲明 **************/
xdata u8 Uart1_Buf[Buf1_Max];
u8 Register_Flag=0;  //A6  注冊(cè)標(biāo)志位  1 :注冊(cè)成功  3:注冊(cè)失敗   5:注冊(cè)成功,但處于漫游狀態(tài)下,無(wú)法撥打電話發(fā)短信
u8 Times=0,First_Int = 0,shijian=0;

bdata u8 Flag;//定時(shí)器標(biāo)志位
sbit Timer0_start =Flag^0; //定時(shí)器0延時(shí)啟動(dòng)計(jì)數(shù)器
//長(zhǎng)度是40 的PDU碼值   內(nèi)容  :果云科技-GPRS-A6
static unsigned char *message="0011000D91683145821957F90008AA18679C4E9179D16280002D0047005000520053002D00410036";//發(fā)送PDU短信
/************* 本地函數(shù)聲明 **************/
void USART1_Init(void);   //串口1初始化
void Timer0Init(void);  //20毫秒@11.0592MHz
void CLR_Buf1(void);      //清串口接收緩存
u8 Find(u8 *a);           //查找字符串
void Second_AT_Command(u8 *b,u8 *a,u8 wait_time) ;//a6 at命令發(fā)送
void Set_PDU_Mode(void);
void Check_New_Message(void);
void UART1_SendData(u8 dat);//串口1發(fā)送 1字節(jié)
void UART1_SendString(char *s);//串口1發(fā)送 字符串
void Wait_CREG(void);
void Send_Message(void);
/**********************************************/
void main(void)
{
  USART1_Init();//串口初始化
Timer0Init();//TIM0初始化
Wait_CREG();//等待GSM注冊(cè)成功
Set_PDU_Mode();//設(shè)置為PDU模式
  
while (1)
{
    if(KEY1==0)
  {
    Send_Message();
  while(!KEY1);
    }  
   
}
}
/********************* UART1中斷函數(shù)************************/
void UART1_int (void) interrupt UART1_VECTOR
{
if (RI)
    {
      RI = 0;                           //清除RI位
   Uart1_Buf[First_Int] = SBUF;     //將接收到的字符串存到緩存中
   First_Int++;                   //緩存指針向后移動(dòng)
   if(First_Int > Buf1_Max)         //如果緩存滿,將緩存指針指向緩存的首地址
   {
    First_Int = 0;
   }
    }
    if (TI)
    {
        TI = 0;                          //清除TI位
    }
}
void USART1_Init(void)
{
S1_8bit();    //8位數(shù)據(jù)
//S1_USE_P30P31();  //UART1 使用P30 P31口 默認(rèn)
S1_USE_P36P37();  //UART1 使用P36 P37口
//S1_USE_P16P17();  //UART1 使用P16 P17口
AUXR &= ~(1<<4); //Timer stop  波特率使用Timer2產(chǎn)生
AUXR |= 0x01;  //S1 BRT Use Timer2;
AUXR |=  (1<<2); //Timer2 set as 1T mode
TH2 = (u8)(Timer2_Reload >> 8);
TL2 = (u8)Timer2_Reload;
AUXR |=  (1<<4); //Timer run enable
REN = 1; //允許接收
ES  = 1; //允許中斷
EA = 1;  //允許全局中斷

}

/*******************************************************************************
* 函數(shù)名 : Timer0Init
* 描述   : 定時(shí)器0初始化,20ms定時(shí)
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Timer0Init(void)  //20毫秒@11.0592MHz
{
AUXR &= 0x7F;  //定時(shí)器時(shí)鐘12T模式
TMOD &= 0xF0;  //
TMOD |= 0x01;  //設(shè)置定時(shí)器模式,16位定時(shí)器
TL0 = 0x70;    //設(shè)置定時(shí)器初值
TH0 = 0xFC;    //設(shè)置定時(shí)器初值
TF0 = 0;      //清TF0標(biāo)志
TR0 = 1;      //定時(shí)器0開(kāi)始計(jì)時(shí)
ET0 = 1;       //使能定時(shí)器0中斷
}
/*******************************************************************************
* 函數(shù)名 : CLR_Buf1
* 描述   : 清除串口2緩存數(shù)據(jù)
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void CLR_Buf1(void)
{
u16 k;
for(k=0;k<Buf1_Max;k++)      //將緩存內(nèi)容清零
{
  Uart1_Buf[k] = 0x00;
}
    First_Int = 0;              //接收字符串的起始存儲(chǔ)位置
}

/*******************************************************************************
* 函數(shù)名 : Find
* 描述   : 判斷緩存中是否含有指定的字符串
* 輸入   :
* 輸出   :
* 返回   : unsigned char:1 找到指定字符,0 未找到指定字符
* 注意   :
*******************************************************************************/
u8 Find(u8 *a)
{
  if(strstr(Uart1_Buf,a)!=NULL)
     return 1;
else
   return 0;
}
/*******************************************************************************
* 函數(shù)名 : Second_AT_Command
* 描述   : 發(fā)送AT指令函數(shù)
* 輸入   : 發(fā)送數(shù)據(jù)的指針、希望收到的應(yīng)答、發(fā)送等待時(shí)間(單位:S)
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Second_AT_Command(u8 *b,u8 *a,u8 wait_time)         
{
u8 i;
u8 *c;
c = b;          //保存字符串地址到c
CLR_Buf1();
  i = 0;
while(i == 0)                    
{
  
  if(!Find(a))            //查找需要應(yīng)答的字符
  {
   if(Timer0_start == 0)
   {
    b = c;       //將字符串地址給b
    for (b; *b!='\0';b++)
    {
     UART1_SendData(*b);
    }
    UART1_SendLR();
    Times = 0;
    shijian = wait_time;
    Timer0_start = 1;
     }
    }
    else
  {
   i = 1;
   Timer0_start = 0;
  }
}
CLR_Buf1();
}
/*******************************************************************************
* 函數(shù)名 : Set_PDU_Mode
* 描述   : 設(shè)置短信為PDU模式
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Set_PDU_Mode(void)
{
u8 buf[30]="AT+CSCS=";
Second_AT_Command("ATE0","OK",3);          //取消回顯
Second_AT_Command("AT+CMGF=0","OK",3);      //配置短信為PDU模式
Second_AT_Command("AT+CPMS=\"SM\",\"SM\",\"SM\"","OK",3);//所有操作都在SIM卡中進(jìn)行


}
/*******************************************************************************
* 函數(shù)名 : Send_Message
* 描述   : 發(fā)送PDU信息
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Send_Message(void)
{
Second_AT_Command("AT+CMGS=39",">",3);//發(fā)送指令后直到出現(xiàn) ">"  后發(fā)送內(nèi)容  
UART1_SendString(message);//發(fā)送內(nèi)容
UART1_SendData(0x1A);//結(jié)束符

}
/*******************************************************************************
* 函數(shù)名 : Check_Message_rec
* 描述   : 檢查是否有新信息,并執(zhí)行信息內(nèi)容指令
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
******************************************************************************/
void Check_New_Message(void)
{
u8 temp=0;
if(strstr(Uart1_Buf,"+CMT")!=NULL)     //若緩存字符串中含有"+CMT"就表示有新的短信
{
  delay_ms(5);//等待數(shù)據(jù)全部接收完成
  if(strstr(Uart1_Buf,"R00")!=NULL)
  {
  }
   
  CLR_Buf1();
  Second_AT_Command("AT+CMGD=1,4","OK",3);//刪除短信
}
}
/*******************************************************************************
* 函數(shù)名 : Wait_CREG
* 描述   : 等待模塊注冊(cè)成功
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Wait_CREG(void)
{
u8 i;
u8 k;
i = 0;
CLR_Buf1();
  while(i == 0)           
{
   
  CLR_Buf1();        
  UART1_SendString("AT+CREG?");
  UART1_SendLR();
  delay_ms(100);
  
     for(k=0;k<Buf1_Max;k++)         
     {
   if((Uart1_Buf[k] == 'C')&&(Uart1_Buf[k+1] == 'R')&&(Uart1_Buf[k+2] == 'E')&&(Uart1_Buf[k+3] == 'G')&&(Uart1_Buf[k+4] == ':'))
   {
      
    if((Uart1_Buf[k+8] == '1')&&(Uart1_Buf[k+9] != '3'))
    {
     i = 1;
     Register_Flag=1;
     LEDB =0;
      break;
    }
        if((Uart1_Buf[k+8] == '1')&&(Uart1_Buf[k+9] == '3'))
    {
     i = 1;
     Register_Flag=3;
     LEDA =0;
      break;
    }
     if(Uart1_Buf[k+8] == '5')
    {
     i = 1;
     Register_Flag=5;
     LEDC =0;
      break;
    }
   
   }
  }
  
}
}

/*----------------------------
UART1 發(fā)送串口數(shù)據(jù)
-----------------------------*/
void UART1_SendData(u8 dat)
{
ES=0;     //關(guān)串口中斷
SBUF=dat;   
while(TI!=1); //等待發(fā)送成功
TI=0;     //清除發(fā)送中斷標(biāo)志
ES=1;     //開(kāi)串口中斷
}
/*----------------------------
UART1 發(fā)送字符串
-----------------------------*/
void UART1_SendString(char *s)
{
while(*s)//檢測(cè)字符串結(jié)束符
{
  UART1_SendData(*s++);//發(fā)送當(dāng)前字符
}
}

/*******************************************************************************
* 函數(shù)名 : Timer0_ISR
* 描述   : 定時(shí)器0中斷服務(wù)入口函數(shù),1ms中斷一次
* 輸入   :
* 輸出   :
* 返回   :
* 注意   :
*******************************************************************************/
void Timer0_ISR() interrupt 1
{
static u8 Time_count=0;
TR0=0;//關(guān)定時(shí)器
TL0 = 0x70;  //重設(shè)定時(shí)器初值
TH0 = 0xFC;  //重設(shè)定時(shí)器初值



Time_count++;
if(Time_count>=50)
{
  Time_count = 0;
  if(count_20ms) //20ms延時(shí)計(jì)數(shù)器
  count_20ms--;
}

if(Timer0_start)
   Times++;
if(Times > (50*shijian))
{
  Timer0_start = 0;
  Times = 0;
}
TR0=1;//開(kāi)定時(shí)器
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区视频 | 色吊丝2288sds中文字幕 | 国产精品国产三级国产aⅴ无密码 | 福利社午夜影院 | 国产精品特级毛片一区二区三区 | 欧美激情五月 | 在线成人免费视频 | 日韩欧美视频免费在线观看 | 成人三区四区 | 国产成人高清在线观看 | 亚洲一区二区黄 | 国产精品美女久久久久久久网站 | 韩国av一区二区 | .国产精品成人自产拍在线观看6 | 日韩喷潮| 一级欧美黄色片 | 欧美激情国产日韩精品一区18 | www.日韩欧美 | 日韩一区二区三区精品 | 中文字幕亚洲精品 | 久久精彩视频 | 亚洲国产精品久久久 | 色一级 | 成人黄色网址大全 | 欧美综合久久 | 亚洲性综合网 | 亚洲三级在线观看 | 在线国产视频 | 亚洲成人免费在线 | 精品国产乱码久久久久久老虎 | 国产精品观看 | 在线看黄免费 | 成人免费大片黄在线播放 | 日日碰碰| 91传媒在线观看 | 黄色毛片视频 | 国偷自产av一区二区三区 | 亚洲3p| 一级毛毛片| 久久国产一区 | 国产精品99 |