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