📄 waterpos.c
字号:
/********************************************************/
/*Function: 串口1发送一字节 */
/*Input: uchar data1 */
/*Output: Nun. */
/*Description: */
/********************************************************/
void SendByte(uchar data1)
{
NOP5();
SBUF1=data1;
while(!TI_1);
TI_1=0;
NOP5();
NOP5();
}
/********************************************************/
/*Function: 串口1接收1字节 */
/*Input: Nun. */
/*Output: uchar data1 */
/*Description: */
/********************************************************/
uchar ReceiveByte(void)
{
uchar data data1;
ulong data count;
s_err=1;
for (count=0;count<500000;count++) /*delay 5.5ms */
{
if (RI_1)
{
data1=SBUF1;
s_err=0;
RI_1=0;
}
if (!s_err)
{ _nop_();
break;}
watchdog=~watchdog;
}
return (data1);
}
/********************************************************/
/*Function: 串口1接收一帧数据 */
/*Input: Nun. */
/*Output: Nun. */
/*Description: */
/********************************************************/
void ReceiveData5(void)
{
uchar data c;
uchar data pf;
uchar data i,j;
uchar xdata *pnt=ASSIC5;
c= ReceiveByte();
if(!s_err&&(c==0x02))
{
for(i=0;i<32;i++)
{ c= ReceiveByte();
if(!s_err)
{
*pnt++=c;
_nop_();
if(c==0x03)
{ c=ReceiveByte();
_nop_();
f_err=1;
error=ERR8;
//f_mifare=1;
break;
}
}
else
break;
}
}
if((!f_err)&&(!s_err))
{
c= ReceiveByte();
if(!s_err&&(c==0x03))
{
pf=ASSIC5[0]^ASSIC5[1];
for(i=2;i<32;i++)
{
pf=pf^ASSIC5[i];
}
}
c=ReceiveByte();
if((!s_err)&&(c==pf))
{
f_ok=1;
}
}
//f_faut: _nop_();
}
/********************************************************/
/*Function: 串口1接收一帧数据 */
/*Input: Nun. */
/*Output: Nun. */
/*Description: */
/********************************************************/
void ReceiveData6(void)
{
uchar data c;
uchar data pf;
uchar data i,j;
uchar xdata *pnt=ASSIC6;
c=ReceiveByte(); //接收帧头
if(!s_err&&(c==0x02))
{
for(i=0;i<32;i++)
{
c= ReceiveByte();
if(!s_err)
{
*pnt++=c;
_nop_();
if(c==0x03)
{ c=ReceiveByte();
_nop_();
f_err=1;
error=ERR8;
//f_mifare=1;
break;
}
}
else
break;
}
}
if((!f_err)&&(!s_err))
{
c= ReceiveByte();
if(!s_err&&(c==0x03))
{
pf=ASSIC6[0]^ASSIC6[1];
for(i=2;i<32;i++)
{
pf=pf^ASSIC6[i];
}
}
c=ReceiveByte();
if((!s_err)&&(c==pf))
{
f_ok=1;
}
}
}
/******************************************/
/*---------发送读取第四块的数据-----------*/
/******************************************/
void sendcard4(void)
{ uchar pf;
SendByte(0X02);
NOP5();
SendByte(0X34);
NOP5();
pf=0x34;
SendByte(0X36);
NOP5();
pf=pf^0x36;
SendByte(0X30);
NOP5();
pf=pf^0x30;
SendByte(0X31);
NOP5();
pf=pf^0x31;
SendByte(0X30);
NOP5();
pf=pf^0x30;
SendByte(0X34);
pf=pf^0x34;
NOP5();
SendByte(0X03);
NOP5();
SendByte(pf);
}
/***************************************/
/*-------发送读取第五块数据-------------/
/***************************************/
void sendcard5(void)
{ uchar pf;
SendByte(0X02);
SendByte(0X34);
pf=0x34;
SendByte(0X36);
pf=pf^0x36;
SendByte(0X30);
pf=pf^0x30;
SendByte(0X31);
pf=pf^0x31;
SendByte(0X30);
pf=pf^0x30;
SendByte(0X35);
pf=pf^0x35;
SendByte(0X03);
SendByte(pf);
}
/*************************/
/* 主函数 */
/*************************/
void main(void)
{ re184=0;
PMR=0x41;
PS=1; /*串口0设置成高优先级别 */
f_card=0; //复位消费状态标志 f_card=0 -- 空闲中
f_kguan0=0; // f_card=1 -- 消费中
clear_xram(); /*清除片外RAM */
address=~P0; /*读取当地地址 */
beepp();
init_serial(); /*初始化串口 */
init_T0(); /*初始化定时器0 */
beepp();
closevalue(); /*关闭电磁阀 */
addr=irdbyte(fm_addr); /*read local address from FM*/
master=irdbyte(fm_master); /*read GLJ address from FM */
status=irdbyte(fm_status); /*read local addess */
iwrbyte(fm_status,status);
if(irdbyte(fm_flag0)!=FM_FLAG) /*check fm flag */
{iwrbyte(fm_flag0,FM_FLAG);} /*write FM flag */
Read_Sys();
disp_name();
f_card=0;
f_sal=0;
f_updata=0;
salecount=1;
kcount=0;
f_mifare=0;
f_connect=0;
wait10ms();
wait10ms();
wait10ms();
wait10ms();
while (1)
{
watchdog=~watchdog;
if ((f_ri0)&&(F_M1)) //串口1有数据标志
{ //处理串口1接收到的一帧数据
assichex(); //assic to hex函数
if (xorsum())
{
f_mifare=1;
sal_time=0;
openvalue();
f_ID=1;
}
f_ri0=0;
}
/*----------------------------------------------------------------*/
if (f_ID)
{
if (!f_sal) //若在发送消费数据,屏蔽读卡
{
f_ID=0; //读到ID卡
//禁止读卡中断
f_zh=1;f_send=1; //置位请求帐号标志
if(f_com)
{
Request_Information_Count=50; //启动请求帐户超时定时标志 分频60ms
while (Request_Information_Count)
{
watchdog=~watchdog;
if (!f_zh) break; //请求到帐户信息后f_zh=0;
}
}
if (!f_zh) //判断有无在3秒内请求到数据
{
accounts(); //处理请求到的帐号
if (!f_err)
{
sal_time=0;
openvalue(); //打开电磁阀
f_card=1; //置位消费状态标志
Card_On_Or_Off_Count=50; //检测卡计数单元赋值
}
}
else if(f_com)
{
error=ERR13; //写通讯超时代码 ERR13
f_err=1;
f_mifare=1; //置位错误标志
f_card=1;
expence=0;
liuliang=3;
money=0;
}
else
{
error=ERR12;
f_err=1;
rate=1;
money=0;
expence=0;
liuliang=0;
f_card=1;
Card_On_Or_Off_Count=50; //检测卡计数单元赋值
openvalue();
}
f_zh=0;
}
}
/*---------------------------------------------------------------*/
if (f_status) /*更新POS终端功能状态 */
{
iwrbyte(fm_status,status);
f_status=0;
}
/*---------------------------------------------------------------*/
if (f_master) /*HUB地址更新 */
{
iwrbyte(fm_master,master);
f_master=0;
}
/*---------------------------------------------------------------*/
if((kcount%2)&&f_card)
closevalue();
else if(f_card)
{
openvalue();
if (f_60ms)
{
read_plus(); /*读取水表脉冲 */
f_60ms=0;
disp_money();
if (f_plusa&f_plusb) /*读到脉冲? */
{
//beepp();
updata(); /*更新卡中余额和消费流量 */
f_plusa=0;
f_plusb=0;
}
}
}
/*---------------------------------------------------------------*/
if (f_err) /*错误报警处理 */
{
errordeal();
if(f_com&&(error!=13))
{
f_err=0;
f_card=0;
f_mifare=0;
closevalue();
}
else if(error==12)
{
f_err=0;
f_card=1;
}
else if(error!=13)
{
f_err=0;
f_card=0;
f_mifare=0;
closevalue();
}
else
{ ;}
if(error==13)
{
f_err=0;
f_card=1;
Card_On_Or_Off_Count=50;
sal_time=0;
}
}
/*---------------------------------------------------------------*/
/* -----------------判断卡是否存在-------------------------------*/
if(f_card)
{
//F_M1=1;
if(!F_M1)
{ uchar i;
wait10ms();
wait10ms();
wait10ms();
wait10ms();
if(!F_M1)
{
f_mifare=0;
Card_On_Or_Off_Count=0;
}
}
}
/*--------------检测卡是否仍旧存在 ------------------------------- */
if ((!Card_On_Or_Off_Count)&&f_card)
{ if(f_com)
{
closevalue(); /*close value*/
collect_saledata(); /*收集消费信息并保存到消费缓冲区中 */
f_sal=1; /*置位发送下费信息标志 */
kcount=0;
f_card=0;
}
else
{
closevalue();
SaveSaleRecord();
kcount=0;
f_card=0;
}
}
/*---------------------------------------------------------------*/
if (!f_card) //有卡?
{
if (f_com)
{
dispbuf[0]=0xa;
dispbuf[1]=0xa;
}
disp_name();
}
if((!f_card)&&f_com&&(!f_sal))
{
if( irdbyte( SAL_END )<irdbyte( SAL_BEG ) )
{
ReadSaleData();
}
else
{
iwrbyte( SAL_BEG,0X0 );
iwrbyte( SAL_END,0X0 );
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -