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

📄 wanterhub.c

📁 水控HUB的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                        *pnt++=SaleCount;
                        checksum+=SaleCount;
                        pnt=&SaleBuf;
                        pnt+=(3+SaleCount*17);
                        checksum+=list;
                        *pnt++=list++;
                        *pnt++=checksum;

			FmSaleCount=SaleCount;
			FmList=list;
			f_sal=1;
		}
                else
                {
                   f_sal=0;
                }
                SALEEND_H=SaleEnd/0x100;
                SALEEND_L=SaleEnd%0x100;
                SALEEND_H1=SaleEnd/0x100;
                SALEEND_L1=SaleEnd%0x100;
                SALEEND_H2=SaleEnd/0x100;
                SALEEND_L2=SaleEnd%0x100;
                fm_cs=1;
	}
}


/********************************************************/
/*Function:  定时器0中断处理函数                        */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void Time0() interrupt 1 using 1
{


    TH0=-(30000/256);
    TL0=-(30000%256);

    if (pci_count)
    {
       pci_count--;
    }

}

/********************************************************/
/*Function:  串口1中断处理函数--和POS通讯               */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
//void serial1() interrupt 7 using 2


/********************************************************/
/*Function:  串口0中断处理函数 --与PCI卡通讯--          */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void serial0() interrupt 4 using 3
{
     static uchar rmod;
     static uchar pf;
     static uchar lengh;
     static uchar xdata *pnt;
     uchar  data c;
 /*-----------------------接收--------------------------*/
 if (RI)
 {
    NOP5();                                        //no88
    RI=0;
    c=SBUF;

    switch (rmod)
    {
           case 0:

                 if (c==address )                  //接收地址帧
                 {
                    SM2=0;
                    rmod++;
                 }
                 break;

           case 1:                             //接收帧数据长度
                  lengh=c;
                  if (lengh>124)
                     lengh=124;
                  pf=lengh;
                  pnt=Ri0Buf;
                  lengh=lengh-2;
                  rmod++;
                  break;

         case 2:                             //接收帧命令和数据
                *pnt++=c;
                pf+=c;
                if (lengh--==1)
                   rmod++;
                break;

         case 3:
              if (pf==c)                     //比较校验和
              {
                  pci_count=200;             //计数值重载
                  switch (Ri0Buf[0])
                      {
                       case 1:                             //功能号1:PCI卡轮寻POs
                        if(f_zhstate==1)
                           {
                              uchar idata i;
                              uchar idata j;
                              uchar idata pf;
                              uchar idata checksum;
                              uchar idata count;
                              uchar xdata *pnt1=AccountBuf;
                              uchar xdata *pnt2=Ti0Buf;
                              pnt2+=4;
                              checksum=0;
                              count=0;

			      for(j=0;j<32;j++)
                              {
                                if(count==10)
                                     break;
                                if(*pnt1!=0xff)
                                {
                                   pf=0;
                                   for(i=0;i<6;i++)
                                   {
                                     pf+=*pnt1;
                                     *pnt2++=*pnt1++;
                                   }
                                   if(pf!=*pnt1++)
                                   {
                                      pnt2-=6;
				   }
                                   else
                                   {
                                      *pnt2++=pf;
                                      checksum+=pf+pf;
                                      count++;
				   }
                                   *(pnt1-7)=0xff;
			        }
                                else
                                    pnt1+=7;
                             }
                             if(count!=0)
                             {
                                 Serial0SendNum=count*7+5;
                                 checksum+=Serial0SendNum;
                                 checksum+=0x2;
                                 checksum+=address;
                                 checksum+=count;
                                 *pnt2++=checksum;

				 pnt2=Ti0Buf;
                                 *pnt2++=Serial0SendNum;        //数据总长度
                                 *pnt2++=0x2;                   //功能号
                                 *pnt2++=address;               //HUB号
                                 *pnt2++=count;                 //包数 dai ding
                                  f_zh=1;
			          TI=1;

			     }
			   }

			   			   //如果有消费发送标志,则发送消费纪录;第2优先级
                           else if (f_sal==1)
                           {
                             uchar data i;
                             uchar idata pf;
                             uchar xdata *pnt=Ti0Buf;
                             uchar xdata *pnt1=&SaleBuf;
                             if (SaleCount!=0)
                             {
                                fm_cs=0;
                                _nop_();
                                pf=0;
                                for (i=0;i<17*SaleCount+4;i++)   // 5? 4?
                                {
                                  *pnt++=*pnt1;
                                   pf+=*pnt1++;
                                }
                                if(pf==*pnt1)
                                {
                                   *pnt=pf;      //数据帧校验和
                                   Serial0SendNum=5+SaleCount*17;
                                   fm_cs=1;
                                   TI=1;
				}
                                else
                                {  f_sal=0;
                                   f_over=0;
                                   SaleCount=0;
                                   FmSaleCount=0;
                                   fm_cs=1;
				}

			     }
			     else
                             {
                                f_sal=0;
                                f_over=0;
                                SaleCount=0;
                                FmSaleCount=0;
                                fm_cs=1;
			      }
			  }
                          //空闲应答
			  else
                          {
                               uchar data i;
                               uchar idata pf;
                               uchar xdata *pnt=Ti0Buf;

                               *pnt++=12;                //数据帧长度
                               *pnt++=0x1;pf=13;         //功能号
                               *pnt++=address;pf+=address;//HUB地址

                               for (i=0;i<8;i++)
                               {
				   *pnt=InOrOff[i];
                                   pf+=*pnt++;
                               }                       //8字节POS状态
			       *pnt++=pf;                 //数据帧校验和
                               Serial0SendNum=12;
                               TI=1;
			    }
			    break;

                       case 2:                       //功能号2:接收卡发送的卡信息
                            {
                            f_zh=0;
                            f_zhdown=1;
                            }
                            break;

                       case 3:                       //功能号3:接收卡更新时间信息
                            {}
                            break;

                       case 4:                        //功能号4:接收卡发送的消费应答信息
                       {
                             if (Ri0Buf[1]==0x55)
                             {
				 f_sal=0;           //复位请求发送消费数据标志
			         f_over=0;
                                 fm_cs=0;
                                 _nop_();
                                 FmSaleCount=0;
                                 fm_cs=1;
			     }
                       }
                       break;

                       default:
                       break;

                      }
              }

              lengh=0;pf=0;
              rmod=0;SM2=1;
              break;

         default:
         {    lengh=0;
              pf=0;
              rmod=0;
              SM2=1;
         }
         break;
    }
 }

 /*-------------------发送数据-------------------------------------*/
 if (TI)
 {
    TI=0;re184_up=1;

    if (Serial0SendNum!=0)              //判断数据是否发送完毕
    {
       SBUF=*Serial0SendPoint;
       Serial0SendPoint++;
       Serial0SendNum--;

    }
    else                               //数据发送完毕
    {
        Serial0SendPoint=Ti0Buf;      //
        re184_up=0;
        NOP5();

    }
 }

}
/********************************************************/
/*Function:  延时 X ms                                  */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void DelayMs(uint count)
{
     uchar i;
     while ((count--)!=0)
     {
           for (i=0;i<125;i++)
		   {;}
     }
}

/********************************************************/
/*Function:  beep X ms                                  */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void beepp(uint times)
{
  beep=0;
  DelayMs(times);
  beep=1;
}

/*-------MAIN------*/
void main(void)
{// uchar i;
  re184_dn=0;
  re184_up=0;
  batter=0;
  PMR=0x41;
  watchdog=~watchdog;
  DelayMs(500);
  watchdog=~watchdog;
  batter=1;
  DelayMs(500);
  //batter=0;
  watchdog=~watchdog;
  ClearXram();                               //清除片RAM
  DelayMs(500);
  InialSerial();                             //初始化串口
  beepp(400);                                //蜂鸣器叫 800ms
  address=ReadAddress();                     //读取HUB地址
  ReckonFinger();                             //计算指针是否正确  no97
  ReadSys();                                 //读取系统信息
  InialTime0();                              //初始化时间
  //line_led=0;                              //点两LED
  PosName=0x00;
  PS=1;
  ES=1;
  EA=1;
  f_1500ms=0;
  f_sal=0;
  f_zhdown=0;
  if(test_xram())
  {
     while(1);
  }

  while(1)
  {
   watchdog=~watchdog;
   if (pci_count)                               //等待PCI卡的轮循
      LookForPos();                             /*look for pos  */
   //  DelayMs(500);
   /*-----------------等待帐户应答-------------------------------*/

   /*----------------下发帐户信息--------------------------------*/
   if (f_zhdown)
   {
	   uchar xdata *pnt=Ri0Buf;
           uchar xdata *pnt1;
	   uchar idata count;
	   uchar data  i,j,pf;
           pnt++;
	   count=*pnt++;
           f_zhdown=0;
           ES1=0;
	   for(i=0;i<count;i++)
	   {
                   pnt1=AccountBuf;
                   pnt1+=*pnt*7;        //申请到帐户信息,该pos帐户区清空
                   *pnt1=0xff;

		   TB8_1=1;
		   SendByte(*pnt++); 	//机号
		   TB8_1=0;
		   SendByte(13);		//长度
		   TB8_1=0;
		   SendByte(02);		//功能号
		   pf=15;	//校验和(不包括机号)
		   for(j=0;j<10;j++) //帐户信息 10B
		   {
			   TB8_1=0;
			   pf+=*pnt;
			   SendByte(*pnt++);
		   }
		   TB8_1=0;
		   SendByte(pf);		//校验和
		   NOP5();
		   NOP5();
	    }
            ES1=1;
            /*-----------判断帐户申请区是否为空----------*/
            pnt1=AccountBuf;
            for(j=0;j<32;j++)
            {
               pnt1+=7;
               if(*pnt1!=0xff)
                  {f_zhstate=1; break;}
               else
                  f_zhstate=0;
            }
   }

   /*---------------------判断有无消费数据---------------------------------*/
   if (!f_sal)
   {
     SendSaleRecord();
   }

   if(f_err)
   {
      f_err=0;
      ReckonFinger1();
   }

  }

}

⌨️ 快捷键说明

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