📄 read4442.c
字号:
#include <stdio.h>
#include <intrins.h>
#include <reg51.h>
#include <Read4442.h>
main()
{
init();
if((IC_In == 1)&&(IC_Read_Flag == 1) == 1)
{
IC_VCCC = 1;
IC_VCC_LED = ON;
Delay10us();
if(IC_Read_Flag == True)
{
ResetCard(); //
ReadMainMem(0xEF,&Read_Buffer[0],16);
BreakOperate();
Delay10us();
ResetCard();
Read_Send();
//Check_Send();
}
Delay10us();
IC_VCCC = 0;
}
}
void ReadMainMem(uchar addr,uchar idata *pt,uchar count)
{
SendComm(RMM_COMM,addr,0xff);
ReadMode(pt,count);
//Delay5us();
BreakOperate();
//IC_Read_LED = ON;
IC_Read_Flag = False;
}
void SendComm(uchar a,uchar b,uchar c)
{
StartComm(); //开始发送命令
WriteByte(a); //a: 发命令字
WriteByte(b); //b: 发地址
WriteByte(c); //c: 发数据
StopComm(); //结束发送命令
}
void StartComm(void)
{
IC_CLK = 0;
IC_IO = 1;
Delay5us();
IC_CLK = 1;
Delay5us();
IC_IO = 0;
Delay5us();
}
void WriteByte(uchar ch)
{
uchar i;
for(i = 8; i > 0; i--)
{
IC_CLK = 0;
IC_IO = (bit)(ch & 0x01);
Delay5us();
IC_CLK = 1;
Delay10us();
ch = ch >> 1; //右移一位
}
}
uchar ReadByte(void)
{
uchar i,ch;
ch = 0;
for (i = 8; i > 0; i--)
{
IC_CLK = 0;
ch = ch >> 1; //从低位读起
if((uchar)IC_IO)
ch |= 0x80;
Delay5us();
IC_CLK = 1;
Delay5us();
}
return ch;
}
void StopComm(void)
{
IC_CLK = 0;
IC_IO = 0;
Delay5us();
IC_CLK = 1; //CLK: H
Delay5us();
IC_IO = 1; //IO : H
Delay10us();
}
void ReadMode(uchar idata *pt,uchar count)
{
IC_CLK=0;
Delay5us();
do
{
*pt = ReadByte(); //读入一个字节
pt++; //指针加一
}while(--count); //计数器减一,判断
}
void BreakOperate(void)
{
IC_CLK = 0;
IC_RST = 0;
IC_IO = 0;
Delay5us();
IC_RST = 1;
IC_IO = 1;
Delay5us();
IC_RST = 0;
Delay5us();
IC_VCCC = 0;
}
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();
}
void Delay10us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void Delay5us(void)
{
_nop_();
_nop_();
_nop_();
}
void init()
{
//uchar i;
TMOD=0x20;
TL1=0xFd;
TH1=0xFd;
SCON=0x50;
PCON=0x00;
EA = 1;
ES = 1;
TR1=1;
IC_VCCC = 0;
IC_In = 1;
P1_7 = OFF;
IC_Read_LED = OFF;
IC_In_LED = OFF;
IC_VCC_LED = OFF;
//for(i = 0;i<=15;i++)
//{
// Read_Buffer[i] = 0xff;
//}
IC_Read_Flag = True;
}
void Read_Send()
{
uchar i;
for(i = 0;i <= 15; i++)
{
SBUF = Read_Buffer[i];
do{}
while(TI == 0);
TI = 0;
}
}
/*
void Check_Send()
{
if(Read_Buffer[2] == 0xE2)
{
SBUF = 0xaa;
do{}
while(TI == 0);
TI = 0;
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -