//-----------------------函数声明,变量定义--------------------------------------------
//-----------------------函数声明,变量定义--------------------------------------------------------
#include <stdio.h>
#include <intrins.h>
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define OFF 1
#define ON 0
#define True 1
#define False 0
#define RMM_COMM 0x30 //读主存命令字
#define WMM_COMM 0x38 //写主存命令字
#define VER_COMM 0x33 //校验密码
#define RSM_COMM 0x31 //读密码存储区
#define WSM_COMM 0x39 //写密码存储区
#define RPM_COMM 0x34 //读保护存储区
#define WPM_COMM 0x3c //写保护存储区
//----------------------------------------------------------------------------
//------------------------------------------------------------------------------------
// 定义IC卡接口
sbit IC_RST =P1^0; // 将p1.0口设定为复位管脚
sbit IC_CLK =P1^1; // 用p1.1口模拟时钟口
sbit IC_IO =P1^2; // 将p1.2口模拟数据口
sbit watch_PW =P1^3; // 将p1.3口作为电源监控,watch_PW=0,设备有损坏
sbit CT_PW =P1^4; // 将p1.4口作为电源控制,CT_PW=0接通电源,CT_PW=1断开电源
sbit IC_INT0 =P3^2; // P3.2用于检测有无卡插入,检测到低电平,说明有卡插入
//------------------------------------------------------------------------------------
uchar Read_Buffer[16];
bit IC_In_Flag;
bit IC_Read_Flag;
//------------------------------------------------------------------------------------
//4442卡底层程序的外部函数声明
//------------------------------------------------------------------------------------
void ReaDMAinMem(uchar addr,uchar idata *pt,uchar count); //读IC卡主存
void WriteMainMem(uchar addr,uchar idata *pt); //写IC卡主存
void ReadProtectMem(uchar idata *pt); //读保护存储器
void ProtectByte(uchar CardAdd,uchar idata *pt); //保护一字节,注意待保
//护的字节是已经写入过的,地址只能在保护存储区内
void SendComm(uchar a,uchar b,uchar c); //发送命令
void ReadMode(uchar idata *pt,uchar count);
void ProcessMode(void);
void ResetCard(void);
void BreakOperate(void);
void StartComm(void);
void StopComm(void);
uchar ReadByte(void);
void WriteByte(uchar ch);
void Delay10us(void);
void Delay5us(void);
void init();
//--------------------------------------------------------------------------------
// 函数名称: ResetCard
// 函数功能: 卡复位子程序
//-------------------------------------------------------------------------------
void ResetCard(void)
{
uchar temp;
Delay5us();
IC_RST = 0;
IC_CLK = 0;
IC_IO = 1;
Delay5us();
IC_RST = 1;
Delay5us();
IC_CLK = 1;
Delay10us();
Delay10us();
Delay10us();
Delay10us();
IC_CLK = 0;
Delay5us();
IC_RST = 0;
Delay10us();
temp = ReadByte();
temp = ReadByte();
temp = ReadByte();
temp = ReadByte();
IC_CLK = 0;
Delay5us();
IC_IO = 1;
_nop_();
IC_CLK = 0;
Delay5us();
}
//-------------------------------------------------------------------------------------
// 函数名称: BreakOperate
// 函数功能: 停止操作
//-----------------------------------------------------------------------------------
void BreakOperate(void)
{
IC_CLK = 0;
IC_RST = 0;
IC_IO = 0;
Delay5us();
IC_RST = 1;
IC_IO = 1;
Delay5us();
IC_RST = 0;
Delay5us();
CT_PW = 1;
}
//------------------------------------------------------------------------------------
// 函数名称: StartComm()
// 函数功能: 启动I2C总线子程序
//-----------------------------------------------------------------------------------
void StartComm(void)
{
IC_CLK = 0;
IC_IO = 1;
Delay5us();
IC_CLK = 1;
Delay5us();
IC_IO = 0;
Delay5us();
}
//-------------------------------------------------------------------------------
// 函数名称: StopComm()
// 函数功能: 停止I2C总线数据传送子程序
//-----------------------------------------------------------------------------
void StopComm(void)
{
IC_CLK = 0;
IC_IO = 0;
Delay5us();
IC_CLK = 1; //CLK: H
[1] [2] [3] 下一页
本文关键字:暂无联系方式51单片机,单片机-工控设备 - 51单片机