?? wanterhub.c
字號(hào):
*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: 定時(shí)器0中斷處理函數(shù) */
/*Input: Nun. */
/*Output: Nun. */
/*Description: */
/********************************************************/
void Time0() interrupt 1 using 1
{
TH0=-(30000/256);
TL0=-(30000%256);
if (pci_count)
{
pci_count--;
}
}
/********************************************************/
/*Function: 串口1中斷處理函數(shù)--和POS通訊 */
/*Input: Nun. */
/*Output: Nun. */
/*Description: */
/********************************************************/
//void serial1() interrupt 7 using 2
/********************************************************/
/*Function: 串口0中斷處理函數(shù) --與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: //接收幀數(shù)據(jù)長(zhǎng)度
lengh=c;
if (lengh>124)
lengh=124;
pf=lengh;
pnt=Ri0Buf;
lengh=lengh-2;
rmod++;
break;
case 2: //接收幀命令和數(shù)據(jù)
*pnt++=c;
pf+=c;
if (lengh--==1)
rmod++;
break;
case 3:
if (pf==c) //比較校驗(yàn)和
{
pci_count=200; //計(jì)數(shù)值重載
switch (Ri0Buf[0])
{
case 1: //功能號(hào)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; //數(shù)據(jù)總長(zhǎng)度
*pnt2++=0x2; //功能號(hào)
*pnt2++=address; //HUB號(hào)
*pnt2++=count; //包數(shù) dai ding
f_zh=1;
TI=1;
}
}
//如果有消費(fèi)發(fā)送標(biāo)志,則發(fā)送消費(fèi)紀(jì)錄;第2優(yōu)先級(jí)
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; //數(shù)據(jù)幀校驗(yàn)和
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;
}
}
//空閑應(yīng)答
else
{
uchar data i;
uchar idata pf;
uchar xdata *pnt=Ti0Buf;
*pnt++=12; //數(shù)據(jù)幀長(zhǎng)度
*pnt++=0x1;pf=13; //功能號(hào)
*pnt++=address;pf+=address;//HUB地址
for (i=0;i<8;i++)
{
*pnt=InOrOff[i];
pf+=*pnt++;
} //8字節(jié)POS狀態(tài)
*pnt++=pf; //數(shù)據(jù)幀校驗(yàn)和
Serial0SendNum=12;
TI=1;
}
break;
case 2: //功能號(hào)2:接收卡發(fā)送的卡信息
{
f_zh=0;
f_zhdown=1;
}
break;
case 3: //功能號(hào)3:接收卡更新時(shí)間信息
{}
break;
case 4: //功能號(hào)4:接收卡發(fā)送的消費(fèi)應(yīng)答信息
{
if (Ri0Buf[1]==0x55)
{
f_sal=0; //復(fù)位請(qǐng)求發(fā)送消費(fèi)數(shù)據(jù)標(biāo)志
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;
}
}
/*-------------------發(fā)送數(shù)據(jù)-------------------------------------*/
if (TI)
{
TI=0;re184_up=1;
if (Serial0SendNum!=0) //判斷數(shù)據(jù)是否發(fā)送完畢
{
SBUF=*Serial0SendPoint;
Serial0SendPoint++;
Serial0SendNum--;
}
else //數(shù)據(jù)發(fā)送完畢
{
Serial0SendPoint=Ti0Buf; //
re184_up=0;
NOP5();
}
}
}
/********************************************************/
/*Function: 延時(shí) 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(); //計(jì)算指針是否正確 no97
ReadSys(); //讀取系統(tǒng)信息
InialTime0(); //初始化時(shí)間
//line_led=0; //點(diǎn)兩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);
/*-----------------等待帳戶應(yīng)答-------------------------------*/
/*----------------下發(fā)帳戶信息--------------------------------*/
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; //申請(qǐng)到帳戶信息,該pos帳戶區(qū)清空
*pnt1=0xff;
TB8_1=1;
SendByte(*pnt++); //機(jī)號(hào)
TB8_1=0;
SendByte(13); //長(zhǎng)度
TB8_1=0;
SendByte(02); //功能號(hào)
pf=15; //校驗(yàn)和(不包括機(jī)號(hào))
for(j=0;j<10;j++) //帳戶信息 10B
{
TB8_1=0;
pf+=*pnt;
SendByte(*pnt++);
}
TB8_1=0;
SendByte(pf); //校驗(yàn)和
NOP5();
NOP5();
}
ES1=1;
/*-----------判斷帳戶申請(qǐng)區(qū)是否為空----------*/
pnt1=AccountBuf;
for(j=0;j<32;j++)
{
pnt1+=7;
if(*pnt1!=0xff)
{f_zhstate=1; break;}
else
f_zhstate=0;
}
}
/*---------------------判斷有無消費(fèi)數(shù)據(jù)---------------------------------*/
if (!f_sal)
{
SendSaleRecord();
}
if(f_err)
{
f_err=0;
ReckonFinger1();
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -