sendfunction.c

来自「指纹通讯模块程序」· C语言 代码 · 共 110 行

C
110
字号
#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 + =
减小字号Ctrl + -
显示快捷键?