📄 tc35i.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 + -