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

📄 jl2key.lst

📁 这是我在我们公司做的C51加油单片机程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.02  JL2KEY                                                                 07/15/2004 11:07:07 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE JL2KEY
OBJECT MODULE PLACED IN C:\COMM_D\JL2KEY.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE C:\COMM_D\JL2KEY.C DB SB OE

stmt level    source

   1          /* ---------------------------------------------------------- */
   2          /*                                                            */
   3          /*                 IC卡加油机通讯子模块                       */
   4          /*                 负责键盘与计量主板通讯                     */
   5          /*                 最后修改日期:2002年5月18日                */
   6          /*                                                            */
   7          /* ---------------------------------------------------------- */
   8          
   9          #include "c:\comm_d\comm_pub.h"
  10          #include "c:\comm_d\jl2key.h"
  11          #include "reg52.h"
  12          unsigned char data unit_2s;
  13          extern unsigned char idata comm_status;
  14          unsigned char send_jl(unsigned char gun_num,unsigned char command)
  15          {
  16   1      	register unsigned char length,tem;
  17   1              ES=0;
  18   1      	if(req_bus(gun_num))return(3);		// 请求占用总线超时
  19   1      	SOURCE=4;				// 置收发数据来源为加油机主板
  20   1      	switch(command)
  21   1      	{
  22   2      		case 0xa0:			// 读单价
  23   2      		case 0xa1:			// 读提前关阀量
  24   2      		case 0xa2:			// 读密度
  25   2      		case 0xa3:			// 读预置量
  26   2      		case 0xa4:			// 读当次加油量
  27   2      		case 0xa5:			// 读当次金额
  28   2      		case 0xa6:			// 读加油量班累
  29   2      		case 0xa7:			// 读金额班累
  30   2      		case 0xa8:			// 读加油量总累
  31   2      		case 0xa9:			// 读金额总累
  32   2      		case 0xaa:			// 读状态标志位
  33   2      		case 0xab:			// 读错误类型
  34   2      		case 0xb5:			// 清班累
  35   2      		case 0xc1:			// 停止加油
  36   2      		case 0xc2:			// 清数
  37   2      		case 0xc3:			// 查税控明细
  38   2      		case 0xc8:			// 查税控时钟
  39   2      		case 0xca:			// 关断电池
  40   2      			length=3;		// 命令长度(不包括通讯头)
  41   2      			break;
  42   2                      case 0xc0:			// 开始加油
  43   2                           length=3;
  44   2                           break;
  45   2      		case 0xb0:			// 写单价
  46   2      		case 0xb2:			// 写密度
  47   2      			length=5;
  48   2      			break;
  49   2      		case 0xb1:			// 写提前关阀量
  50   2      		case 0xc7:			// 税控检定确认
  51   2      		case 0xc9:			// 查税控总累计
  52   2      			length=4;
  53   2      			break;
  54   2      		case 0xb3:			// 写金额预置量
  55   2                             length=6;
C51 COMPILER V6.02  JL2KEY                                                                 07/15/2004 11:07:07 PAGE 2   

  56   2                             break;
  57   2      		case 0xb4:			// 写油量预置量
  58   2                             length=6;
  59   2                             break;
  60   2      		case 0xc5:			// 查税控月累计
  61   2      			length=6;
  62   2      			break;
  63   2      		case 0xc4:			// 查税控日志
  64   2      			length=7;
  65   2      			break;
  66   2      		case 0xc6:			// 设置税控时钟
  67   2      			length=9;
  68   2      			break;
  69   2                      case 0xd0:
  70   2                              length=7;
  71   2                              break;
  72   2      		default:
  73   2      			HAND_WR=1;		// 释放总线
  74   2      			return(5);		// 无此命令
  75   2      			break;
  76   2      	}
  77   1      	for(tem=length-2;tem>1;tem--)send_buf[tem]=send_buf[tem-2];
  78   1      	send_buf[0]=0xd0|length;		// 通讯头
  79   1      	send_buf[1]=gun_num;			// 枪号
  80   1      	send_buf[length-1]=command;		// 命令码
  81   1      	send_buf[length]=check_jl(length-1,send_buf+1);	// 校验和
  82   1      	send(0,length+1);
  83   1      
  84   1      	switch(command)
  85   1      	{
  86   2      		case 0xaa:
  87   2      		case 0xab:
  88   2      		case 0xca:
  89   2      			length=5;
  90   2      			break;
  91   2      		case 0xa0:
  92   2      		case 0xa2:
  93   2      			length=7;
  94   2      			break;
  95   2      		case 0xa1:
  96   2      			length=6;
  97   2      			break;
  98   2      		case 0xa3:
  99   2      		case 0xa4:
 100   2      		case 0xa5:
 101   2      			length=8;
 102   2      			break;
 103   2      		case 0xa6:
 104   2      		case 0xa7:
 105   2      		case 0xa8:
 106   2      		case 0xa9:
 107   2      			length=10;
 108   2      			break;
 109   2      		case 0xc0:
 110   2      		case 0xc1:
 111   2      		case 0xc2:
 112   2      		case 0xc3:
 113   2      		case 0xc4:
 114   2      		case 0xc5:
 115   2      		case 0xc6:
 116   2      		case 0xc7:
 117   2      		case 0xc8:
C51 COMPILER V6.02  JL2KEY                                                                 07/15/2004 11:07:07 PAGE 3   

 118   2      		case 0xc9:
 119   2      		case 0xb5:
 120   2      		case 0xb4:
 121   2      		case 0xb3:
 122   2      		case 0xb2:
 123   2      		case 0xb1:
 124   2      		case 0xb0:
 125   2                      case 0xd0:
 126   2      			length=5;
 127   2      			break;
 128   2      	}
 129   1      	tem=recv(0,length);
 130   1      	if(tem==2 || tem==1)	// 超时/奇偶校验错
 131   1      	{
 132   2      		HAND_WR=1;	//释放总线
 133   2      		return(tem);
 134   2      	}
 135   1      	tem=rekk[0];
 136   1      	if((tem&0xf0)!=0xd0)	// 判断通讯头是否正确
 137   1      	{
 138   2      BACK:		HAND_WR=1;
 139   2      		return(4);
 140   2      	}
 141   1      	if((tem&0xf)!=(length-1))goto BACK;	// 长度不对
 142   1      	if(rekk[1]!=gun_num)goto BACK;	// 返回枪号与发出者不符
 143   1      	if(rekk[length-2]!=command)goto BACK;	// 命令码与发出的不符
 144   1      	tem=check_jl(length-2,rekk+1);
 145   1      	if(rekk[length-1]!=tem)goto BACK;	// 校验和错
 146   1      	for(tem=0;tem<length-4;tem++)rekk[tem]=rekk[tem+2];	// 没出错,把数据放在接收缓冲区头
 147   1      	HAND_WR=1;
 148   1              comm_status=0;
 149   1              ES=1;
 150   1              return(0);				// 成功返回
 151   1      }
 152          
 153          unsigned char check_jl(unsigned char length,unsigned char xdata *buf)
 154          {
 155   1      	register unsigned char temp,i;
 156   1      
 157   1      	temp=buf[0];
 158   1      	for(i=1;i<length;i++)temp=temp^buf[i];
 159   1      	i=temp>>4;
 160   1      	temp=(temp&0xf)+0x50;
 161   1      	temp^=i;
 162   1      	return(temp);
 163   1      }
 164          
 165          bit req_bus(unsigned char gun_num)
 166          {
 167   1      	register unsigned char i=0;

⌨️ 快捷键说明

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