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

📄 cpu.txt

📁 cpu卡和存储卡读写器程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
cpu卡和存储卡读写器程序/52User.h__.htm

文件头:
/*--------------------------------------------------------------------------

REG52.H



Header file for generic 80C52 and 80C32 microcontroller.

Copyright (c) 1988-2001 Keil Elektronik GmbH and Keil Software, Inc.

All rights reserved.

--------------------------------------------------------------------------*/



/*  BYTE Registers  */

sfr P0    = 0x80;

sfr P1    = 0x90;

sfr P2    = 0xA0;

sfr P3    = 0xB0;

sfr PSW   = 0xD0;

sfr ACC   = 0xE0;

sfr B     = 0xF0;

sfr SP    = 0x81;

sfr DPL   = 0x82;

sfr DPH   = 0x83;

sfr PCON  = 0x87;

sfr TCON  = 0x88;

sfr TMOD  = 0x89;

sfr TL0   = 0x8A;

sfr TL1   = 0x8B;

sfr TH0   = 0x8C;

sfr TH1   = 0x8D;

sfr IE    = 0xA8;

sfr IP    = 0xB8;

sfr SCON  = 0x98;

sfr SBUF  = 0x99;



/*  8052 Extensions  */

sfr T2CON  = 0xC8;

sfr RCAP2L = 0xCA;

sfr RCAP2H = 0xCB;

sfr TL2    = 0xCC;

sfr TH2    = 0xCD;





/*  BIT Registers  */

/*  PSW  */

sbit CY    = PSW^7;

sbit AC    = PSW^6;

sbit F0    = PSW^5;

sbit RS1   = PSW^4;

sbit RS




/*******以下为SAM卡接点定义*****/

sbit SAM_VCC	 =  P2^7;

sbit SAM_RST	 =  P2^6;

sbit SAM_CLK	 =  P2^5;

sbit SAM_DATA	 =  P2^3;

sbit SAM_DET	 =	P3^2;

// define the MCU port for memcard

/******************************************************/

/********AT24C|SLE4406|SLE4428|SLE4442|SLE4404|AT88****/

sbit  VCC   =  P1^7;

sbit  RST   =  P1^6;

sbit  SCL   =  P1^3;

sbit  SDA   =  P1^1;

/*****************************************************/

/****************at88*********************************/

sbit  FUS   =  P1^4;

sbit  PGM   =  P1^0;

/****************************************************/

/*************SLE4404********************************/

sbit  ICT   =  P1^4;

sbit  ICP   =  P1^0;

/***************************************************/

/**************at45d041*****************************/

sbit  SDAI  =  P1^2;

sbit  SDAO  =  P1^0;

sbit  at45dSCL =P1^2;

sbit  ByRd11=  P1^6;

sbit  CS    =  P1^1;

 

/***************************************************/





文件头:
/*******************************************************/

/*本头文件主要定义了程序中使用的全局变量和数据结构

/*

/*

/*******************************************************/



#define uchar  unsigned char

#define uint   unsigned int

/*---------------------------------------------

****************常量定义***********************

---------------------------------------------*/

#define MAX_LE_SHORT  		0x100				/*短情况下期望接收到的最大数据字节*/

#define MAX_LE_EXT    		0x1000				/*扩展情况下期望接收到的最大数据字节*/

#define APDU_CASE_1         1

#define APDU_CASE_2_SHORT   2

#define APDU_CASE_3_SHORT   3

#define APDU_CASE_4_SHORT   4

#define APDU_CASE_2_EXT		5

#define APDU_CASE_3_EXT		6

#define APDU_CASE_4_EXT		7



#define ANSWER_RECEIVED     1



/* --------------在命令数组中的位置----------*/

#define CLA_IDX             0					/* 类别 */

#define INS_IDX 			1					/* 指令 */

#define P1_IDX  			2					/* 参量1*/

#define P2_IDX  			3					/* 参量2*/

#define P3_IDX  			4


全局结构*/



uchar pdata * idata RPCBuf=&Addr1;

uchar pdata * idata SPCBuf=&Addr2+2;



uchar pdata * idata ptCapdu=&Addr1+2;				//指向RAPDU数组的指针

uchar pdata * idata SICCBuf=&Addr1+2;

uchar pdata * idata RICCBuf=&Addr2;

uchar pdata * idata aucI_SndBuf=&Addr1-1;



uchar data SIFDLen=0;

uchar data RIFDLen=0;

uchar data RICCLen=0;

uchar data SICCLen=0;

uchar data sbyte,rbyte=0x00,check;      	

uchar data RBitCount,SBitCount;					//传送位数计数

uchar idata RCount;  									//232接收计数

uint  data EtuCount,ErrorCount=0x00;			//错误次数计数	

uchar idata uSaveChar;

bit   HaveCard;  								//有无卡;1:有卡,0:无卡;

bit	  HaveSAMCard;

bit   IfSend;	 								//发送接收识别;1:发送,0:接收

bit   HaveCommand;                              //有上位机的命令

bit   HaveReset;                                //是否已经复位;

bit   HaveResetSAM;

bit   bStartFlag;

bit   isTimeOut = 0;

bit   HavePowered=0;          //存储卡是否已经上电;

bit   isSAM=0;		//1:SAM;0:CPU



/*******************************************************/

/*本头文件主要定义了程序中使用的错误返回值

/*

/*

/*******************************************************/



#define OK  			1

#define NoCard 			2

#define HaveTimeOut 	3

#define SerialError 	4

#define illegal  		5

#define SendError 		6

#define ReceiveError 	7

#define ERROR        	0

#define TRUE         	1

#define FALSE        	0

//bit HaveCard;  //有无卡;1:有卡,0:无卡;

//bit HaveCommand; //是否有pc机发来的命令;1:有;0:无

//bit HaveReset; //卡是否已经复位 1:已经复位;0:没有复位




/****************** 本文件定义IC卡读写器物理层及数据链路层函数  **************************/

/****************** 编写时间:2001年9月12日                     **************************/

//#pragma OE

#include "52User.h"

#include "datas.h"

#include "errcode.h"

#include "intrins.h"

#include "tr2.h"

#include "transt1.h"

#include "memcard1.h"

/****************子函数定义*********************/

void delay_50us()

{

	uchar i;

	for(i=0;i<5;i++);

}



void delay_104us()

{

	TL0=0x68;

	ET0=0;

	TR0=1;

	while(!TF0);

	TR0=0;

	TF0=0;

	ET0=1;

}



void delay_104SAM()

{

	TL1=0x68;

	ET1=0;

	TR1=1;

	while(!TF1);

	TR1=0;

	TF1=0;

	ET1=1;

}





void initT0()

{

   TL0=0x60;

   ET0=1;

   TR0=1;

}

void initT1()

{

   TL1=0x60;

   ET1=1;

   TR1=1;

}





/***** 定义ReceiveATR函数,该函数接收来自ICC的复位应答,并将其保存到以RICCBuf为首址的存储空间 *****/

/******************* 正确接收完则返回OK,无卡则返回NoCard,超时则返回HaveTimeOut *******************/



uchar ReceiveATR





endErrCode(reCode);

		SPCBuf=&Addr2+2;			//重置SPCBuf缓冲区指针

	}

}



/*****************************************************************************************/

/***********主程序,初始化,判断有无卡************/

/*****************************************************************************************/

main()

{

	Init();					//初始化

	while(1)						//开始接收PC机命令

	{

		if(HaveCommand)	//如果有命令

		{

			ES=0;					//关闭串口中断

			HaveCommand=0;			//是否有命令标志清零

			if(RPCBuf[1]==0x01)

			{

				if(!isSAM)

				{

					isSAM=1;

					iICC_SAVE     = iICC_CNT;

					iICC_IFD_SAVE = iIFD_CNT;

					iICC_CNT	  = iSAM_SAVE;

					iIFD_CNT	  = iSAM_IFD_SAVE;

				}

				SAMCommandProc();		//处理上位机命令

			}

			else

			{

				if(isSAM)

				{

					isSAM=0;

					iSAM_SAVE     = iICC_CNT;

					iSAM_IFD_SAVE = iIFD_CNT;

					iICC_CNT	  = iICC_SAVE;

					iIFD_CNT	  = iICC_IFD_SAVE;

				}

				CPUCommandProc();

			}

			ES=1;

		}

	}

}





#include <stdio.h>

#include <string.h>

#include "memcard.h"

//#include "memcard1.h"

//#pragma  ot(2)

void delay(uint iTime)

{

	uint i;

	for(i=0;i<iTime;i++);

}



//上电函数

void power_on(void)

{

	VCC = 1;

}



//下电函数

void power_down(void)

⌨️ 快捷键说明

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