www.pudn.com > 47651478keil51file.rar > shui_kong.c
#include "jyj07.h"
#include "shui_kong.h"
extern byte ram_8255a_c; //8255a_c输出字节
//税务初始化程序,返回初始化状态
//0:初始化正常,1:
byte shuiwu_init()
{
byte err_type;
wait_sk_ready();
if(err_type==0)
{
err_type=hand_to_sk();
}
else
{
return(err_type);
}
if(err_type==0)
{
check_display();
}
return(err_type);
}
//*********************HAND_TO_SK***************
//功能: 和税控芯片握手,初始化稅控芯片工作方式
byte hand_to_sk()
{
word delay1;
bit tempbit1;
byte error_kind=0;
byte idata sk_hand_data[7]={0x06,0xa0,0xa3,CHUAN_BING,0,0,0};
byte *pskdata;
pskdata=sk_hand_data; //把数组给指针赋值
set_high_skh(); //设置skh状态
tempbit1=0;
for(delay1=0;delay1<10000;delay1++)
{
tempbit1=read_skh(); //读skh状态
if(tempbit1==1)
{
delay1=10000; //skh为高提前结束
}
set_high_skh();
} //skh为低说明没准备好
while(tempbit1==0)
{
error_kind=1;
disp_sk_err(error_kind);
}
for(delay1=0;delay1<10000;delay1++)
{
tempbit1=read_skl(); //读skl状态
if(tempbit1==1)
{
delay1=10000; //skl为高提前结束
}
}
while(tempbit1==0)
{
error_kind=2;
disp_sk_err(error_kind);
}
calc_shuzu_crc(pskdata); //计算数组的crc值,并赋给最后一个值
data_to_sk4562(pskdata); //通过4562与sk芯片握手
error_kind=check_sk_com(); //检查税控的执行情况
return(error_kind);
}
//设置skh状态
void set_high_skh()
{
P_SKH_SK=1;
}
void set_low_skh()
{
P_SKH_SK=0;
}
//读skh状态
bit read_skh()
{
bit tempbit;
tempbit=P_SKH_SK;
return(tempbit);
}
//读skl值
bit read_skl()
{
bit tempbit;
tempbit=0x01&CS_8255B_C; //8255b c口的最低位
return(tempbit);
}
//显示税控错误信息
void disp_sk_err(byte error_kind)
{
}
//通过4562给税控芯片送数据
void data_to_sk4562(byte *pskdata)
{
byte len;
byte i,j,k,y;
len=*pskdata; //数组第一个值为数组的长度
ram_8255a_c=ram_8255a_c | 0x03; //0000 0011
CS_8255A_C=ram_8255a_c; //税控时钟数据线都置高
for(i=0;i