📄 sendfunction.c
字号:
#include <stdio.h>
#include <reg51.h>
extern void delay(int i); //延时子程序
extern bit SendOver;
void SendFunction(unsigned char *p)
{
unsigned char n=0;
unsigned char packetBuff[20]={0xEF,0x01,0xFF,0xFF,0xFF,0xFF,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned int checkSum1=0;
unsigned char packetLength=0;
unsigned char SendNum=0;
unsigned char Length;
unsigned char buff;
ES=0 ;
Length=*p;
if(*p<=0x03) //只有指令没有参数的包
{
for(n=6;n<=6+*p;n++) //整个包长度为 9+*p
{
if(n==6)
{
packetBuff[n]=0x01; //包标识 0x01H
checkSum1+=(int)(packetBuff[n]);
}
if(n==7)
{
packetBuff[n]=0x00; //包长度 的 高字节 0x00H
//包长度不会超过256字节,因此高字节恒为0x00H
checkSum1+=(int)(packetBuff[n]);
}
if(n==8)
{
buff=*p;
packetBuff[n]=buff; //包长度的低字节
checkSum1+=(int)(packetBuff[n]);
}
if(n==9)
{
buff= *(p+1);
packetBuff[n]=buff; // 指令码
checkSum1+=(int)(packetBuff[n]);
}
}
}
if(*p>=0x04) //有指令也有参数的包
{
for(n=6;n<=6+*p;n++)
{
if(n==6)
{
packetBuff[n]=0x01; //包标识
checkSum1+=(int)packetBuff[n];
}
if(n==7)
{
packetBuff[n]=0x00; //包长度 的 高字节 0x00H
//包长度不会超过256字节,因此高字节恒为0x00H
checkSum1+=(int)packetBuff[n];
}
if(n==8)
{
buff=*p;
packetBuff[n]=buff; //包长度 的 低字节
checkSum1+=(int)packetBuff[n];
}
if(n==9)
{
buff=*(p+1);
packetBuff[n]=buff; //指令字节
checkSum1+=(int)packetBuff[n];
}
if(n>=10 && n<9+*p-2)
{
buff=*(p+n-8);
packetBuff[n]=buff; // 指令参数
checkSum1+=(int)packetBuff[n];
}
}
}
packetBuff[n]=checkSum1/256; //加效验位的高字节
packetBuff[n+1]=checkSum1%256; //加效验位低字节
packetLength=*p+9 ;
SendNum=0;
TI=1;
while(SendNum<packetLength)
{
if(TI==1)
{
TI=0;
SBUF=*(packetBuff+SendNum);
SendNum++;
}
}
while(TI==0){}
if(TI==1)
{
TI=0;
RI=0;
ES=1; //传送完毕开中断进行接收
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -