⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc35i.h

📁 很实用的单片机例程
💻 H
字号:

/*-------------------------------------编码框架定义区----------------------*/
unsigned char code PDU_Enter[5] =
{
  0x0d, 0x0a, 0x0d, 0x0a, 0xff
};

unsigned char xdata PDU_Enable[10] =
{
  0x41, 0x54, 0x2b, 0x43, 0x4d, 0x47, 0x46, 0x3d, 0x30, 0xff
};

unsigned char xdata PDU_Length[12] =
{
  0x41, 0x54, 0x2b, 0x43, 0x4d, 0x47, 0x53, 0x3d, 0x00, 0x00, 0xff, 0x00
};


unsigned char xdata PDU_Code[300] =
{
    0x30, 0x38, 0x39, 0x31, 0x36, 0x38, 0x33, 0x31, 0x30, 0x38, 0x34, 0x30, 0x31,
    0x35, 0x30, 0x35, 0x46, 0x30, 0x31, 0x31, 0x30, 0x30, 0x30, 0x42, 0x38,
    0x31, 0x33, 0x31, 0x39, 0x37, 0x36, 0x36, 0x39, 0x32, 0x38, 0x33, 0x46,
    0x35, 0x30, 0x30, 0x30, 0x38, 0x41, 0x37, 0x30, 0x41, 0x30, 0x30, 0x34,
    0x38, 0x30, 0x30, 0x34, 0x35, 0x30, 0x30, 0x34, 0x43, 0x30, 0x30, 0x34,
    0x43, 0x30, 0x30, 0x34, 0x46, 0x1a, 0xff
};

/*-----------------------------------END-------------------------------------*/





/*-------------------------------------函数区----------------------*/

//UART 相关函数------------------------

/*----------------------------------------------
函数名:delay()
功能:   延时产生函数
        time为延时参量 当time为1000时,
        实际延时为43ms,并呈线性关系
作者:于振南
-----------------------------------------------*/

void delay(unsigned int time)
{
 while(time--);
}



/*----------------------------------------------
函数名:UART_Init()
功能:   串口初始化
        通讯有关参数初始化
        将串口波特率设定为9600bps(TC35i专用波特率)
作者:于振南
-----------------------------------------------*/

void tran_init()        /* 通讯有关参数初始化 */
{
    PCON&=0x7f;
    TH1=0xFB;   /* T1 use sio */
    TL1=0xFB;   /* 选择通讯速率9600bps*/

    /* T1 use sio */
    TMOD=0x21;  /* T1=MODE2,sio; T0=MODE1,16bit,use time */
    PS=1;       /* SIO int high  优先级 */
    EA=1;
    ET1=0;
    SM0=0;
    SM1=1;      /* SM0=0 SM1=1,mode1,10bit          */
    SM2=0;      /* data int,无校验(TB8=bit_duble偶) */
    TR1=1;
    REN=1;
    RI=0;
    TI=0;
    ES=1;
    delay(50000);

}

/*-------------------------------------------------------
函数名:sio_int() interrupt 4 using 2
功能:中断方式接收串口数据   把收到的一个字节放在数组sbuf中
作者:于振南
----------------------------------------------------------*/
void  UART_Int() interrupt 4 using 2
{
      ES=0;
      if(RI)        /* RI==1 */
      {  /*sbuf[counters++]=SBUF;*/  //接受操作屏蔽
         //if(SBUF==0) isend=1;
	     RI=0;
      }
      ES=1;
}

/*-------------------------------------------------------
函数名:send()
功能:用户函数,发送一个字节的数据
作者:于振南
----------------------------------------------------------*/

void send(unsigned char mydata)	
{
	ES=0;
	TI=0;
	SBUF=mydata;
	while(!TI);
	TI=0;
        ES=1;
}

//UART----END-------------------------------



//TC35i编码与通讯函数-------------------


/*--------------------------------------------
 函数名:szzh10_sx()
 功能  :将datax按jz进制转成字符串,存于p中
---------------------------------------------*/

int szzh10_sx(int datax, char *p, int jz)
{
  int i, j, len;
  char t[8];
  i = 0;
  while (datax != 0)
  {
    if (jz >= 1 && jz <= 10)
    {
      t[i] = datax % jz + 48;
      datax = datax / jz;
      if (i >= 7)
        return 0;
      i = i + 1;
    }
    if (jz > 10)
    {
      if (datax % jz >= 10)
      {
        t[i] = datax % jz + 55;
      }
      if (datax % jz < 10)
      {
        t[i] = datax % jz + 48;
      }
      datax = datax / jz;
      if (i >= 7)
        return 0;
      i = i + 1;
    }
  }
  t[i] = '\0';
  len = (int)strlen(t);
  j = len;
  for (i = 0; i < len; i++)
  {
    j = j - 1;
    p[i] = t[j];
  }
  p[i] = '\0';

  return 1;

}


/*--------------------------------------------
 函数名:PDU_Strlen()
 功能  :计算编码长度,编码都以0xff为结束符
---------------------------------------------*/

unsigned int PDU_Strlen(unsigned char *c)
{
  unsigned int len;
  len = 0;
  while (c[len++] != 0xff)
    ;
  return len - 1;
}

/*--------------------------------------------
 函数名:PDU_Send()
 功能  :发送编码,接着发出确认码
---------------------------------------------*/

void PDU_Send(unsigned char *c)
{
  int i;
  for (i = 0; i < PDU_Strlen(c); i++)
    send(c[i]);
  for (i = 0; i < PDU_Strlen(PDU_Enter); i++)
    send(PDU_Enter[i]);
  delay(10000);
}


/*--------------------------------------------
 函数名:PDU_EnablePDU()
 功能  :开启PDU编码模式
---------------------------------------------*/

void PDU_EnablePDU()
{
  PDU_Send(PDU_Enable);
}



/*--------------------------------------------
 函数名:PDU_SetLength()
 功能  :设置短信的内容字节数
---------------------------------------------*/

void PDU_SetLength(int length)
{
  char temp[4];
  szzh10_sx(length + 14, temp, 10);
  strcpy((char*)(PDU_Length + 8), temp);
  PDU_Length[strlen((char*)PDU_Length)] = 0xff;
  PDU_Send(PDU_Length);
}


/*--------------------------------------------
 函数名:Word_Swap_F()
 功能  :内部函数,为了解决编码中的一个细节
---------------------------------------------*/
void Word_Swap_F(unsigned char *a, unsigned char *b)
{
  *b =  *a;
  *a = 'F';
}


/*--------------------------------------------
 函数名:PDU_SMS()
 功能  :发送短信的最终的函数
 参数说明:SMS_Center为短信中心号码 11位 以字符串形式给出
           SMS_Telenum为短信接收方的号码 11位 以字符串形式给出
           SMS_Context为短信的内容,只限ascii码范围内的字符 
                      最大为70个字符
---------------------------------------------*/

void PDU_SMS(char *SMS_Center, char *SMS_Telenum, char *SMS_Context)
{
  int i, j;
  unsigned char len;
  char lens[3];
  /*----------set the SMS Center No--------------*/
  for (i = 0, j = 0; i < strlen(SMS_Center) / 2; i++)
  {
    PDU_Code[6+(j++)] = SMS_Center[2 *i + 1];
    PDU_Code[6+(j++)] = SMS_Center[2 *i];
  }
  PDU_Code[6+j++] = 'F';
  PDU_Code[6+j] = SMS_Center[strlen(SMS_Center) - 1];

  /*---------------------------------------------*/

  /*----------set the Reciever No--------------*/
  for (i = 0, j = 0; i < strlen(SMS_Telenum) / 2; i++)
  {
    PDU_Code[26+(j++)] = SMS_Telenum[2 *i + 1];
    PDU_Code[26+(j++)] = SMS_Telenum[2 *i];
  }
  PDU_Code[26+j++] = 'F';
  PDU_Code[26+j] = SMS_Telenum[strlen(SMS_Telenum) - 1];
  /*---------------------------------------------*/

  /*----------set the Code Length--------------*/

  len = strlen(SMS_Context) *2;
  PDU_Code[44] = (len >> 4) > 9 ? (len >> 4) + 55: (len >> 4) + 48;
  PDU_Code[45] = (len &0x0f) > 9 ? (len &0x0f) + 55: (len &0x0f) + 48;

  /*---------------------------------------------*/

  /*----------encode the context--------------*/

  for (i = 46, j = 0; i < 46+strlen(SMS_Context) *4; i += 4)
  {
    PDU_Code[i] = '0';
    PDU_Code[i + 1] = '0';
    szzh10_sx((int)SMS_Context[j++], lens, 16);
    PDU_Code[i + 2] = lens[0];
    PDU_Code[i + 3] = lens[1];
  }

  PDU_Code[i++] = 0x1a;
  PDU_Code[i] = 0xff;

  /*---------------------------------------------*/

  PDU_EnablePDU();
  PDU_SetLength(strlen(SMS_Context) *2);
  PDU_Send(PDU_Code);

}

//TC35i----END---------------

/*-----------------------------------END-------------------------------------*/



//-------------调用实例---------------------------------------

void main()
{
  UART_Init() ;
  PDU_SMS("13800451500","13796629385","Hello world!!");
  while(1);
}

//

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -