⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shui_kong.lst

📁 加油机源程序代码
💻 LST
字号:
C51 COMPILER V7.06   SHUI_KONG                                                             02/08/2007 15:19:46 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SHUI_KONG
OBJECT MODULE PLACED IN shui_kong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shui_kong.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include "jyj07.h"
   2          #include "shui_kong.h"
   3          
   4          extern byte ram_8255a_c;                         //8255a_c输出字节
   5          
   6          //税务初始化程序,返回初始化状态
   7          //0:初始化正常,1:
   8          byte shuiwu_init()
   9          {
  10   1          byte err_type;
  11   1          wait_sk_ready();
  12   1          if(err_type==0)
  13   1          {
  14   2             err_type=hand_to_sk();
  15   2          }
  16   1          else
  17   1          {
  18   2             return(err_type);
  19   2          }
  20   1              if(err_type==0)
  21   1              {
  22   2                 check_display();
  23   2              }
  24   1              return(err_type);
  25   1      }
  26          //*********************HAND_TO_SK***************
  27          //功能:    和税控芯片握手,初始化稅控芯片工作方式
  28          byte hand_to_sk()
  29          {
  30   1           word delay1;
  31   1           bit tempbit1;
  32   1               byte error_kind=0;
  33   1               byte idata sk_hand_data[7]={0x06,0xa0,0xa3,CHUAN_BING,0,0,0};
  34   1               byte *pskdata;
  35   1               pskdata=sk_hand_data;                  //把数组给指针赋值
  36   1          
  37   1           set_high_skh();                           //设置skh状态
  38   1               tempbit1=0;
  39   1           for(delay1=0;delay1<10000;delay1++)
  40   1           {
  41   2              tempbit1=read_skh();                   //读skh状态 
  42   2                  if(tempbit1==1)
  43   2                      {
  44   3                        delay1=10000;                        //skh为高提前结束
  45   3                      }
  46   2              set_high_skh();
  47   2           }                                   //skh为低说明没准备好
  48   1           while(tempbit1==0)
  49   1               {
  50   2                   error_kind=1;
  51   2                   disp_sk_err(error_kind);
  52   2           }
  53   1           for(delay1=0;delay1<10000;delay1++)
  54   1           {
  55   2              tempbit1=read_skl();                   //读skl状态 
C51 COMPILER V7.06   SHUI_KONG                                                             02/08/2007 15:19:46 PAGE 2   

  56   2                  if(tempbit1==1)
  57   2                      {
  58   3                        delay1=10000;                        //skl为高提前结束
  59   3                      }
  60   2           }
  61   1           while(tempbit1==0)
  62   1               {
  63   2                    error_kind=2;
  64   2                        disp_sk_err(error_kind);
  65   2           }
  66   1               calc_shuzu_crc(pskdata);                  //计算数组的crc值,并赋给最后一个值
  67   1           
  68   1           data_to_sk4562(pskdata);                  //通过4562与sk芯片握手
  69   1               error_kind=check_sk_com();                //检查税控的执行情况
  70   1           return(error_kind);
  71   1      } 
  72          //设置skh状态
  73          void set_high_skh()
  74          {
  75   1           P_SKH_SK=1;
  76   1      }
  77          void set_low_skh()
  78          {
  79   1           P_SKH_SK=0;
  80   1      }
  81          //读skh状态
  82          bit read_skh()
  83          {
  84   1           bit tempbit;
  85   1               tempbit=P_SKH_SK;
  86   1               return(tempbit);
  87   1      }
  88          //读skl值
  89          bit read_skl()
  90          {
  91   1          bit tempbit;
  92   1              tempbit=0x01&CS_8255B_C;                    //8255b c口的最低位
  93   1              return(tempbit);
  94   1      }
  95          //显示税控错误信息
  96          void disp_sk_err(byte error_kind)
  97          {
  98   1      }
*** WARNING C280 IN LINE 96 OF SHUI_KONG.C: 'error_kind': unreferenced local variable
  99          //通过4562给税控芯片送数据
 100          void data_to_sk4562(byte *pskdata)
 101          {
 102   1           byte len;
 103   1               byte i,j,k,y;
 104   1               len=*pskdata;                           //数组第一个值为数组的长度
 105   1               ram_8255a_c=ram_8255a_c | 0x03;         //0000 0011
 106   1               CS_8255A_C=ram_8255a_c;                 //税控时钟数据线都置高
 107   1           for(i=0;i<len;i++)
 108   1               {
 109   2                  k=0x01;                              //0000 0001 
 110   2                  for(j=0;j<8;j++)
 111   2                      {
 112   3                         y=k & *pskdata;
 113   3                         if(y==0)
 114   3                         {
 115   4                    ram_8255a_c=ram_8255a_c & 0xfe;
 116   4                         }
C51 COMPILER V7.06   SHUI_KONG                                                             02/08/2007 15:19:46 PAGE 3   

 117   3                         else
 118   3                         {
 119   4                            ram_8255a_c=ram_8255a_c | 0x01;
 120   4                         }
 121   3                 CS_8255A_C=ram_8255a_c;            //送出一位
 122   3                 ram_8255a_c=ram_8255a_c & 0xfd;    //1111 1101
 123   3                 CS_8255A_C=ram_8255a_c;
 124   3                 ram_8255a_c=ram_8255a_c | 0x02;    //0000 0010
 125   3                 CS_8255A_C=ram_8255a_c;            //一个上升沿
 126   3                 k=k<<1;                            //k左移一位
 127   3                      }
 128   2                      pskdata++;
 129   2               }
 130   1           set_low_skh();                           //握手线置低    
 131   1      }
 132          //计算数组的crc校验值,并赋值给最后一项
 133          void calc_shuzu_crc(byte *pskdata)
 134          {
 135   1           byte i,temp0,len;
 136   1           len=*pskdata-1;                         //数组的第一项为指令长度 
 137   1           pskdata++;                              //指向命令码                  
 138   1           for(i=0;i<len;i++)
 139   1           {
 140   2              temp0=temp0^*pskdata;  
 141   2                      pskdata++;  
 142   2               }
 143   1           *pskdata=temp0;                          //校验和送到数组最后一项
 144   1      }
 145          //税务液晶显示自检
 146          void check_display()
 147          {
 148   1           byte i,j,t_num=0;                         //显示的段码
 149   1               byte g_num=0;                           //显示的枪号
 150   1               byte *pcheck;
 151   1           //byte idata check_lcd[13];               //直通显示的数组
 152   1               byte idata check_lcd[13]={0x0c,0xa4,0,0,0,0,0,0,0,0,0,0,0};
 153   1               pcheck=check_lcd;
 154   1               for(i=0;i<16;i++)
 155   1               {
 156   2                   check_lcd[2]=g_num;
 157   2                       for(j=3;j<11;j++)
 158   2                       {
 159   3                           check_lcd[j]=t_num;
 160   3                       }
 161   2                   calc_shuzu_crc(pcheck);                 //求出校验和
 162   2                   normal_to_sk(pcheck);                   //发送数组到税务芯片
 163   2                       g_num=1;
 164   2               check_lcd[2]=g_num;
 165   2                       calc_shuzu_crc(pcheck);                 //求出校验和
 166   2                   normal_to_sk(pcheck);                   //发送数组到税务芯片
 167   2                       t_num++;
 168   2                       g_num=0;
 169   2               }
 170   1      }
 171          //向税务芯片发送普通数据,并检查税控返回数据
 172          byte normal_to_sk(byte *pdat)
 173          {
 174   1           word delay1;
 175   1               bit tempbit1;
 176   1               byte err_kind;
 177   1           set_high_skh();
 178   1           for(delay1=0;delay1<10000;delay1++)
C51 COMPILER V7.06   SHUI_KONG                                                             02/08/2007 15:19:46 PAGE 4   

 179   1           {
 180   2              tempbit1=read_skl();                   //读skl状态 
 181   2                  if(tempbit1==1)
 182   2                      {
 183   3                        delay1=10000;                        //skl为低提前结束
 184   3                      }
 185   2           }
 186   1           while(tempbit1==0)                        //skl为高错误
 187   1               {
 188   2                        disp_sk_err(6);
 189   2           }
 190   1               data_to_sk4562(pdat);
 191   1           
 192   1               err_kind=check_sk_com();                  //检查指令执行情况
 193   1           return(err_kind);                         //err_kind=0 为正确
 194   1      }
 195          //检查税控指令的执行情况
 196          byte check_sk_com()
 197          {
 198   1           bit tempbit1;
 199   1               byte error_kind;
 200   1               word delay1;
 201   1               set_low_skh();
 202   1               //set_high_skh();
 203   1           tempbit1=read_skh();                      //读skh状态 
 204   1               while(tempbit1==1)                        //
 205   1               {
 206   2                   tempbit1=read_skh(); 
 207   2               }
 208   1           for(delay1=0;delay1<10000;delay1++)
 209   1           {
 210   2              tempbit1=read_skl();                   //读skl状态 
 211   2                  if(tempbit1==0)
 212   2                      {
 213   3                        delay1=10000;                        //skl为低提前结束
 214   3                      }
 215   2           }
 216   1           while(tempbit1==1)                        //skl为高错误
 217   1               {
 218   2                    error_kind=3;
 219   2                        disp_sk_err(error_kind);
 220   2           }
 221   1           set_high_skh();
 222   1           for(delay1=0;delay1<10000;delay1++)
 223   1           {
 224   2              tempbit1=read_skh();                   //读skh状态 
 225   2                  if(tempbit1==1)
 226   2                      {
 227   3                        delay1=10000;                        //skh为高提前结束
 228   3                      }
 229   2              set_high_skh();
 230   2           }                                         //skh为低说明没准备好
 231   1           while(tempbit1==0)
 232   1               {
 233   2                   error_kind=4;
 234   2                   disp_sk_err(error_kind);
 235   2           }
 236   1           for(delay1=0;delay1<10000;delay1++)
 237   1           {
 238   2              tempbit1=read_skl();                   //读skl状态 
 239   2                  if(tempbit1==1)
 240   2                      {
C51 COMPILER V7.06   SHUI_KONG                                                             02/08/2007 15:19:46 PAGE 5   

 241   3                        delay1=10000;                        //skl为低提前结束
 242   3                      }
 243   2           }
 244   1           while(tempbit1==0)                        //skl为高错误
 245   1               {
 246   2                    error_kind=5;
 247   2                        disp_sk_err(error_kind);
 248   2           }
 249   1           return(error_kind);
 250   1      }
 251          //等待税控芯片准备好
 252          void wait_sk_ready()
 253          {
 254   1               bit tempbit1;
 255   1           set_high_skh();
 256   1           tempbit1=read_skh();                   //读skh状态 
 257   1               while(tempbit1!=1)
 258   1               {
 259   2                   tempbit1=read_skh();              
 260   2               }
 261   1           tempbit1=read_skl();
 262   1           while(tempbit1!=1)
 263   1               {
 264   2                   tempbit1=read_skl();              
 265   2               }
 266   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    904    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     38    ----
   IDATA SIZE       =     20    ----
   BIT SIZE         =      6    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -