?? 4442卡的底層操作程序.c
字號:
//4442卡的底層操作程序
#include <stdio.h>
#include <intrins.h>
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
#define RMM_COMM 0x30 //讀主存命令字
#define UMM_COMM 0x38 //寫主存命令字
#define CVD_COMM 0x33 //校驗密碼
#define RSM_COMM 0x31 //讀密碼存儲區
#define USM_COMM 0x39 //寫密碼存儲區
#define RPM_COMM 0x34 //讀保護存儲區
#define WPM_COMM 0x3c //寫保護存儲區
#define Pow_On 0 //低電平供電
#define Pow_Off 1 //高電平斷電
//******************************************
//定義IC卡接口
sbit CLK=P1^1; //時鐘
sbit OUTDATA=P1^2; //輸出(CPU側)
sbit INDATA=P1^2; //輸入(CPU側)
sbit POWER=P1^4; //電源
sbit RST=P1^0; //復位
//******************************************
//************************************************************************
//4442卡底層程序的外部函數聲明
extern void Rmm(uchar CardAdd,uchar idata *pt,uchar i); //讀IC卡主存
extern void Umm(uchar CardAdd,uchar idata *pt); //寫IC卡主存,每次寫一
字節
extern void Rpm(uchar idata *pt); //讀保護存儲器
extern void P_Byte(uchar CardAdd,uchar idata *pt); //保護一字節,注意待保
護的字節是已經寫入過的,地址只能在保護存儲區內
extern void Power_On(uchar idata *pt); //卡上電,延時約80us,卡
復位,同時讀入4個標示字節
extern void Power_Off(void); //卡下電,延時約80us
extern bit Verify(uchar idata *pt); //校驗密碼,成功返回1
//******************************************************************
//************************************************************
//功能演示,在實際用的時候把這段注釋掉
void main(void)
{
uchar idata *pt;
uchar cc;
bit temp_flag;
uchar test[12]={1,2,3,4,5,6,7,8,9};
uchar test1[12];
pt=&test1[0];
Power_Off();
Power_On(pt); //上電同時讀入標示字節
*pt=0xff; //第一個密碼
pt++;
*pt=0xff; //第二個密碼
pt++;
*pt=0xff; //第三個密碼
pt=&test1[0];
temp_flag=Verify(pt); //校驗密碼
pt=&test1[0];
Rpm(pt); //讀入保密區字節
pt=&test[0];
for (cc=0;cc<10;cc++,pt++)
Umm(0x40+cc,pt);
pt=&test1[0];
Umm(0x40+cc,pt);
Rmm(0x40,pt,12);
*pt=0xaa;
Umm(0x04,pt);
P_Byte(0x05,pt);
while (1);
}
//**********************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -