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

📄 sle4428.lst

📁 最流行的mifare卡读卡器全部源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  SLE4428                                                                08/15/2002 18:03:17 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE SLE4428
OBJECT MODULE PLACED IN sle4428.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sle4428.c DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include <stdio.h>
   2          #include <string.h>
   3          #include "memcard.h"
   4          //#include "memcard1.h"
   5          //#pragma  ot(2)
   6          void delay(uint iTime)
   7          {
   8   1      	uint i;
   9   1      	for(i=0;i<iTime;i++);
  10   1      }
  11          
  12          //上电函数
  13          void power_on(void)
  14          {
  15   1      	RST=0;//tufei
  16   1      	SCL=0;//tufei
  17   1      	SDA=0;//tufei
  18   1      	VCC = 1;
  19   1      }
  20          
  21          //下电函数
  22          void power_down(void)
  23          {
  24   1      	VCC = 0;
  25   1      }
  26          
  27          
  28          //*****************************************************************************************
  29          //***********************以下为4428卡的函数************************************************
  30          //*****************************************************************************************
  31          //reset and atr
  32          void answer_reset_4428(void)
  33          {
  34   1      	uchar data i;
  35   1      //tufei	SCL = 1;
  36   1      //tufei	delay(DELAY_CLK_4428);
  37   1      	RST=HIGH;
  38   1      	delay(DELAY_CLK_4428);
  39   1      	SCL=1;//tufei SCL = 0;
  40   1      	delay(DELAY_CLK_4428);
  41   1      	SCL=0;//tufei SCL = 1;
  42   1      	delay(DELAY_CLK_4428);
  43   1      	RST=LOW;
  44   1      	delay(DELAY_CLK_4428);
  45   1      	for(i=0;i<31;i++)
  46   1      	{
  47   2      		SCL=1;//tufei SCL = 0;
  48   2      		delay(DELAY_CLK_4428);
  49   2      		SCL=0;//tufei SCL = 1;
  50   2      		delay(DELAY_CLK_4428);
  51   2      	}
  52   1      }
  53          
  54          //写入一个字节
  55          void byte_write_4428(uchar cTemp)
C51 COMPILER V6.12  SLE4428                                                                08/15/2002 18:03:17 PAGE 2   

  56          {
  57   1      	uchar data i;
  58   1      	RST=1;
  59   1      	for(i=0;i<8;i++)
  60   1      	{
  61   2      		SDA=cTemp&0x01;
  62   2      		SCL = 1;//tufei SCL=0;
  63   2      		delay(DELAY_CLK_4428);
  64   2      		SCL = 0;//tufei SCL=1;
  65   2      		delay(DELAY_CLK_4428);
  66   2      		cTemp=cTemp>>1;
  67   2      	}
  68   1      }
  69          
  70          //读取一个字节
  71          uchar byte_read_4428(void)
  72          {
  73   1      	uchar data i;
  74   1      	uchar cTemp;
  75   1      	RST=0;
  76   1      	SDA=1;
  77   1      	cTemp=0x00;
  78   1      	for(i=0;i<8;i++)
  79   1      	{
  80   2      		cTemp=cTemp/2;
  81   2      //tufei		SCL = 0;
  82   2      //tufei		delay(DELAY_CLK_4428);
  83   2      		SCL = 1;
  84   2      		delay(DELAY_CLK_4428);
  85   2      		if(SDA==HIGH)
  86   2      		{
  87   3      			cTemp=cTemp+0x80;
  88   3      		}
  89   2      		SCL=0;//tufei
  90   2      		delay(DELAY_CLK_4428);//tufei
  91   2      	}
  92   1      	return (cTemp);
  93   1      }
  94          
  95          //读取一个字节(带保护位)
  96          //返回iTemp, iTemp高字节为数据,iTemp低字节为保护标志(0x00为保护,0xff为未保护)
  97          unsigned int byte_read_wpbit_4428(void)//tufei
  98          {
  99   1      	uchar idata i,iTemp;
 100   1      	uchar idata cTemp[2];
 101   1      	RST=0;
 102   1      	SDA=1;
 103   1      	cTemp[0]=0x00;
 104   1      	for(i=0;i<8;i++)
 105   1      	{
 106   2      		cTemp[0]=cTemp[0]/2;
 107   2      //TUFEI		SCL = 0;
 108   2      //TUFEI		delay(DELAY_CLK_4428);
 109   2      		SCL = 1;
 110   2      		delay(DELAY_CLK_4428);
 111   2      		if(SDA==HIGH)
 112   2      		{
 113   3      			cTemp[0]=cTemp[0]+0x80;
 114   3      		}
 115   2      		SCL=0;//TUFEI
 116   2      		delay(DELAY_CLK_4428);//TUFEI
 117   2      	}
C51 COMPILER V6.12  SLE4428                                                                08/15/2002 18:03:17 PAGE 3   

 118   1      //TUFEI	SCL = 0;
 119   1      //TUFEI	delay(DELAY_CLK_4428);
 120   1      	SCL = 1;
 121   1      	delay(DELAY_CLK_4428);
 122   1      	if(SDA==HIGH)
 123   1      		cTemp[1]=0xff;
 124   1      	else
 125   1      		cTemp[1]=0x00;
 126   1      	memcpy(&iTemp,cTemp,2);
 127   1      	return (iTemp);
 128   1      }
 129          
 130          
 131          //检查写入是否完毕
 132          bit process_4428(void)
 133          {
 134   1      	uchar data i;
 135   1      	RST=LOW;
 136   1      	SDA=HIGH;
 137   1      	for(i=0;i<256;i++)
 138   1      	{
 139   2      //tufei		SCL = 0;
 140   2      //tufei		delay(DELAY_CLK_4428);
 141   2      		SCL = 1;
 142   2      		delay(DELAY_CLK_4428);
 143   2      		if(SDA==LOW)
 144   2      		{
 145   3      			SCL=0;//TUFEI
 146   3      			delay(DELAY_CLK_4428);//TUFEI
 147   3      			return TRUE;
 148   3      		}
 149   2      		SCL=0;//TUFEI
 150   2      		delay(DELAY_CLK_4428);//TUFEI
 151   2      	}
 152   1      	return FALSE;	
 153   1      }
 154          
 155          uchar error_counter_4428(void)
 156          {
 157   1      	uchar data cTemp;
 158   1      	answer_reset_4428();
 159   1      	byte_write_4428(0xce);
 160   1      	byte_write_4428(0xfd);
 161   1      	byte_write_4428(0xff);
 162   1      	cTemp=byte_read_4428();
 163   1      	return cTemp;
 164   1      }
 165          
 166          uchar error_counter_sle4428(void)
 167          {
 168   1      	uchar data cTemp,counter;
 169   1      	uchar data i;
 170   1      	counter=0;
 171   1      	cTemp=error_counter_4428();
 172   1      	for(i=0;i<8;i++)
 173   1      	{
 174   2      		if((cTemp&0x80)==0x80)
 175   2      			counter++;
 176   2      		cTemp<<=1;
 177   2      	}
 178   1      	return counter;
 179   1      }
C51 COMPILER V6.12  SLE4428                                                                08/15/2002 18:03:17 PAGE 4   

 180          
 181          ///////////////////////////////////////////////////////////////////////////////////////
 182          
 183          //功能:从SLE4428中读取数据
 184          //参数:
 185          //    iOffset:读取数据起始地址
 186          //    iReadLen:读取数据长度
 187          //    sBuffer:读取数据指针
 188          //返回:
 189          //    TRUE
 190          
 191          bit read_sle4428(uint iOffset,uchar iReadLen,uchar* sBuffer)
 192          {
 193   1      	uchar data i;
 194   1      	uchar cTemp[2];
 195   1      	if((iOffset<0)||(iOffset>1023))
 196   1      		return FALSE;
 197   1      	if((1024-iOffset)<iReadLen)
 198   1      		return FALSE;
 199   1      	answer_reset_4428();
 200   1      	memcpy(cTemp,&iOffset,2);
 201   1      	cTemp[0]=(cTemp[0]*64)|0x0e;
 202   1      	byte_write_4428(cTemp[0]);
 203   1      	byte_write_4428(cTemp[1]);
 204   1      	byte_write_4428(0xff);
 205   1      	for(i=0;i<iReadLen;i++)
 206   1      		*sBuffer++=byte_read_4428();
 207   1      	return TRUE;
 208   1      }
 209          
 210          
 211          //功能:向SLE4428中写入数据
 212          //参数:
 213          //    iOffset:写入数据起始地址
 214          //    iWriteLen:写入数据长度
 215          //    sBuffer:写入数据指针
 216          //返回:
 217          //    TRUE
 218          
 219          bit write_sle4428(uint iOffset,uchar iWriteLen,uchar* sBuffer)
 220          {
 221   1      	uchar data i,ipOffset;
 222   1      	uchar cTemp[2];
 223   1      	uchar* swBuffer;
 224   1      	if((iOffset<0)||(iOffset>1023))
 225   1      		return FALSE;
 226   1      	if((1024-iOffset)<iWriteLen)
 227   1      		return FALSE;
 228   1      	swBuffer=sBuffer;
 229   1      	ipOffset=iOffset;
 230   1      	answer_reset_4428();
 231   1      	for(i=0;i<iWriteLen;i++)
 232   1      	{
 233   2      		memcpy(cTemp,&ipOffset,2);
 234   2      		cTemp[0]=(cTemp[0]*64)|0x33;
 235   2      		byte_write_4428(cTemp[0]);
 236   2      		byte_write_4428(cTemp[1]);
 237   2      		byte_write_4428(*swBuffer++);
 238   2      		if(process_4428()!=TRUE)
 239   2      			return FALSE;
 240   2      		ipOffset++;
 241   2      	}
C51 COMPILER V6.12  SLE4428                                                                08/15/2002 18:03:17 PAGE 5   

 242   1      	answer_reset_4428();
 243   1      	memcpy(cTemp,&iOffset,2);
 244   1      	cTemp[0]=(cTemp[0]*64)|0x0e;
 245   1      	byte_write_4428(cTemp[0]);
 246   1      	byte_write_4428(cTemp[1]);
 247   1      	byte_write_4428(0xff);
 248   1      	for(i=0;i<iWriteLen;i++)
 249   1      		if(byte_read_4428()!=*sBuffer++)
 250   1      			return FALSE;
 251   1      	return TRUE;
 252   1      }
 253          
 254          
 255          //功能:从SLE4428中读取数据(带保护位)
 256          //参数:
 257          //    iOffset:读取数据起始地址
 258          //    iReadLen:读取数据长度
 259          //    sBuffer:读取数据指针(偶数位为数据,奇数位为保护位,0x00为保护,0xff为未保护)

⌨️ 快捷键说明

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