?? wanterhub.c
字號:
/*****************************************************************************************
* *
* 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 + -