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

📄 wanterhub.c

📁 水控HUB的程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************************
*                                                                                        *
* File:   2006.10.26                                                                         *
*                                                                                        *
* Version:                                             		                         *
*
*
*****************************************************************************************/
#include <w77c32.h>
#include<absacc.h>
#include<intrins.h>

#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long
#define NOP5() _nop_();_nop_();_nop_();_nop_();_nop_()

#define SYSFLAG   XBYTE[0x0400]
#define SALEBEG_H XBYTE[0x0401]
#define SALEBEG_L XBYTE[0x0402]
#define SALEEND_H XBYTE[0x0403]
#define SALEEND_L XBYTE[0x0404]
#define FmSaleCount  XBYTE[0X0405]

#define SALEBEG_H1 XBYTE[0x0406]
#define SALEBEG_L1 XBYTE[0x0407]
#define SALEEND_H1 XBYTE[0x0408]
#define SALEEND_L1 XBYTE[0x0409]

#define SALEBEG_H2 XBYTE[0x040a]
#define SALEBEG_L2 XBYTE[0x040b]
#define SALEEND_H2 XBYTE[0x040c]
#define SALEEND_L2 XBYTE[0x040d]
#define FmList     XBYTE[0x040e]

#define TEST_XRAM XBYTE[0X0500]        //检测XRAM区
#define SaleBuf   XBYTE[0X0600]        //no02
#define SaleInformationBuf XBYTE[0x1000]

#define SaleLength  13		      //+pf   14BYTE
#define TimeLength  6
#define AccountLen  6                 //+PF   7BYTE

uchar data status;
uchar data address;                     //HUB地址
uchar idata list;                       //流水号

uchar data PosName;
uchar data SaleCount;                   //打包数据消费笔数
uchar data Serial0SendNum;              //串口0发送数据字节变量
uchar data Serial1SendNum;              //串口1发送数据字节变量

uchar idata Ri1Buf[20];                 //串口1接收缓冲区 与PCI卡通讯
uchar idata Ti1Buf[23];                 //串口1发送缓冲区

uchar idata pci_count;

uchar xdata Ri0Buf[246];                //串口0接收缓冲区 与POS终端通讯
uchar xdata Ti0Buf[175];                //串口0发送缓冲区

uchar xdata AccountBuf[224];            //请求帐户信息列表 (1字节POS机号+5字节ID号)
//uchar xdata TimeUpdataBuf[6];         //时间更新信息
uchar xdata ListCode[32];               //消费流水帐号
uchar xdata *Serial0SendPoint=Ti0Buf;
uchar idata *Serial1SendPoint=Ti1Buf;

uchar xdata *SalePoint=&SaleInformationBuf;          //消费流缓冲区指针

uint  data SaleBeg;
uint  data SaleEnd;

bdata char InOrOff[8];                  //POS状态缓冲区

sbit beep=P1^0;
sbit re184_up=P3^2;//P1^6;
sbit batter=P3^3;
//sbit line_led=P1^7;
sbit fm_cs=P1^5;
sbit re184_dn=P1^6;//P3^2;
sbit line_addr=P1^1;                    //读地址片选
sbit watchdog=P1^7;                     //看门狗喂狗

bit f_zh;                               //请求帐号标志
bit f_zhdown;
bit f_send;
bit f_id;
bit f_sal;

bit s_err;                              //串口1接收错误
bit f_1500ms;                           //1.5秒到标志
bit f_ri1;                              //
bit f_time;                             //更新系统时间标志
bit f_serial1;                          //串口0正在发送数据标志
bit f_sign;                             //test 消费数据是否重复发送
bit f_over;                             //消费数据区满标志
bit f_zhstate;
bit f_err;                              //消费数据区指针异常

//函数申明
uchar ReadAddress(void);                //读取HUB地址
void InialSerial(void);                 //初始化串口
void ClearXram(void);                   //清除片外RAM
void ClearXXram(void);                  //清理片外RAM 1000~8000,前提是ADD为FFH
void LookForPos(void);                  //轮寻POS
void SendByte(uchar data1);             //串口1发送一字节
uchar ReceiveByte(void);                //串口1接收一字节
void SendSaleRecord(void);              //检测是否有消费数据发送
bit  test_xram(void);
void ReckonFinger(void);                //计算指针数据存储区头尾指针,结合ReadSys
void ReckonFinger1(void);
void ReadSys(void);
void beepp(uint times);
void poszhGet(void);                    //轮寻pos后判断pos是否已经申请过帐号 存储申请信息
//*******************************************************/
/*Function:测试XRAM                                     */
/*Input:   Non                                          */
/*Output:  bit                                          */
/*Desription:                                           */
/********************************************************/
bit  test_xram( void )
{
      uchar  xdata *point=&TEST_XRAM;
      uchar         i;


      fm_cs=0;
      for(i=0;i<8;i++)
      {
        *point++=0x55;
      }
      point=&TEST_XRAM;
      for(i=0;i<8;i++)
      {
          if(*point++!=0x55)
          return(1);
      }
      point=&TEST_XRAM;
      for(i=0;i<8;i++)
      {
         *point++=0x00;
      }
      fm_cs=1;
}


/********************************************************/
/*Function:  读取HUB地址                                */
/*Input:     Nun.                                       */
/*Output:    address                                    */
/*Description:                                          */
/********************************************************/
uchar ReadAddress(void)
{
      uchar address;

      line_addr=0;
      NOP5();
      address=P2;
      line_addr=1;
      if(address==0x7f)
      {
      ClearXXram();
      }
      return ~address;
}

/********************************************************/
/*Function:  判断是否恢复指针                           */
/*Input:					        */
/*Output:			                        */
/*Description:                                          */
/********************************************************/
void ReckonFinger(void)
{
      uchar xdata a,b,c,d;
      fm_cs=0;
      _nop_();

      a=SALEBEG_H;
      b=SALEBEG_H1;
      c=SALEBEG_H2;
      d=(a-b)|(a-c);
      a=SALEBEG_L;
      b=SALEBEG_L1;
      c=SALEBEG_L2;
      d+=(a-b)|(a-c);
      a=SALEEND_H;
      b=SALEEND_H1;
      c=SALEEND_H2;
      d+=(a-b)|(a-c);
      a=SALEEND_L;
      b=SALEEND_L1;
      c=SALEEND_L2;
      d+=(a-b)|(a-c);
      if(d!=0)
      {
         ReckonFinger1();
         beepp(400);
      }
      fm_cs=1;
}

/********************************************************/
/*Function:  恢复指针				        */
/*Input:					        */
/*Output:			                        */
/*Description:                                          */
/********************************************************/
void ReckonFinger1(void)
{
      uint  xdata  i,j,k;
      uchar xdata *pnt=0x1000;

      fm_cs=0;
      _nop_();

      k=0;
      j=0;
      for(i=0;i<2000;i++)       //判断end
      {
        if(*pnt==0xff)
        {
             if(i==1999)
             {
                 j=0;           //end
                 k=0;           //beg
                 i++;
                 break;
             }
             else
             {
              pnt+=14;
              continue;
             }
        }
        else
        {
             j=i++;
             break;
        }
      }

      for(;i<2000;i++)
      {
        if(*pnt!=0xff)
        {
             if(i==1999)
             {
                 k=1999;       //beg
                 i++;
                 break;
             }
             else
             {
              pnt+=14;
              continue;
             }
        }
        else
        {
             k=i;
             i++;
             break;
        }

      }



      for(;i<2000;i++)
      {
          if(*pnt==0xff)
          {
             pnt+=14;
             continue;
          }
          else
          {
           j=i;
           break;
          }
      }


      SaleBeg=k;
      SaleBeg=SaleBeg%2000;
      SALEBEG_H=SaleBeg/0x100;
      SALEBEG_L=SaleBeg%0x100;
      SALEBEG_H1=SALEBEG_H;
      SALEBEG_L1=SALEBEG_L;
      SALEBEG_H2=SALEBEG_H;
      SALEBEG_L2=SALEBEG_L;

      SaleEnd=j;
      SaleEnd=SaleEnd%2000;
      SALEEND_H=SaleEnd/0x100;
      SALEEND_L=SaleEnd%0x100;
      SALEEND_H1=SALEEND_H;
      SALEEND_L1=SALEEND_L;
      SALEEND_H2=SALEEND_H;
      SALEEND_L2=SALEEND_L;
      fm_cs=1;
}


/********************************************************/
/*Function:  读取系统标志和缓冲区数据数目               */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void ReadSys(void)
{
     fm_cs=0;
     _nop_();
     if (SYSFLAG==0xaa)
     {
        SaleBeg=SALEBEG_H*0x100+SALEBEG_L;
        SaleEnd=SALEEND_H*0x100+SALEEND_L;

       if((SaleBeg+1)%2000==SaleEnd)
             f_over=1;
       else
             f_over=0;
       list=FmList;
       SaleCount=FmSaleCount;
       if(SaleCount!=0)
       {
	    f_sal=1;
       }
       else
       {
	    f_sal=0;
       }

     }
     else
     {
         SYSFLAG=0xaa;
         f_over=0;
         SaleBeg=0;SaleEnd=0;
         SALEBEG_H=0;SALEBEG_L=0;
         SALEEND_H=0;SALEEND_L=0;

         SALEBEG_H1=0;
         SALEBEG_L1=0;
         SALEBEG_H2=0;
         SALEBEG_L2=0;

         SALEEND_H1=0;
         SALEEND_L1=0;
         SALEEND_H2=0;
         SALEEND_L2=0;

         SaleCount=0;FmSaleCount=0;f_sal=0;FmList=0;

     }

     fm_cs=1;
}

/********************************************************/
/*Function:  清除片外RAM                                */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void ClearXram(void)
{
     uchar xdata *pnt=0x0000;
     uint i;

     for (i=0;i<0x0400;i++)
         *pnt++=0xff;

}


//Function:  清除片外RAM

void ClearXXram(void)
{
     uchar xdata *pnt=0x1000;
     uint i;

     fm_cs=0;
     _nop_();

     SYSFLAG=0xaa;
     f_over=0;
     SaleBeg=0;SaleEnd=0;
     SALEBEG_H=0;SALEBEG_L=0;
     SALEEND_H=0;SALEEND_L=0;

     SALEBEG_H1=0;
     SALEBEG_L1=0;
     SALEBEG_H2=0;
     SALEBEG_L2=0;

     SALEEND_H1=0;
     SALEEND_L1=0;
     SALEEND_H2=0;
     SALEEND_L2=0;

     SaleCount=0;FmSaleCount=0;f_sal=0;FmList=0;

     for (i=0;i<0x8000;i++)
         *pnt++=0xff;
     f_err=0;
     fm_cs=1;

}

/********************************************************/
/*Function:  初始化定时器0                              */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void InialTime0(void)
{

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

    ET0=1;
    TR0=1;
}


/********************************************************/
/*Function:  初始化串口                                 */
/*Input:     Nun.                                       */
/*Output:    Nun.                                       */
/*Description:                                          */
/********************************************************/
void InialSerial(void)
{
     SCON=0xf0;        //串口1与POS通讯 28800bps
     SCON1=0xd0;       //串口0与PCI卡通讯 115200bps

⌨️ 快捷键说明

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