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

📄 sendfunction.c

📁 指纹通讯模块程序
💻 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 + -