Delay5us();
IC_IO = 1; //IO : H
Delay10us();
}
//-----------------------------------------------------------------------------------
// 函数名称: ReadByte
// 返回接收的数据
// 函数功能: 接收一字节子程序
//-----------------------------------------------------------------------------------
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;
}
//----------------------------------------------------------------------------------
// 函数名称: WriteByte
// 入口参数: ch
// 函数功能: 发送一个字节
//------------------------------------------------------------------------------------
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; //右移一位
}
}
//-------------------------------------------------------------------------------------
// 函数名称: ReadMode
// 入口参数: pt地址指针,指向接收缓冲区,count要接收的数据个数
// 函数功能: 接收n位数据子程序
//----------------------------------------------------------------------------------
void ReadMode(uchar idata *pt,uchar count)
{
IC_CLK=0;
Delay5us();
do
{
*pt = ReadByte(); //读入一个字节
pt++; //指针加一
}while(--count); //计数器减一,判断
}
//------------------------------------------------------------------------
// 延时10us子程序,根据系统时钟需要调整
//------------------------------------------------------------------------
void Delay10us(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//------------------------------------------------------------------------
// 延时5us子程序,根据系统时钟需要调整
//------------------------------------------------------------------------
void Delay5us(void)
{
_nop_();
_nop_();
_nop_();
}
//------------------------------------------------------------------------
// 初始化子程序//------------------------------------------------------------------------
void init()
{
IC_INT0 = 1;
IC_Read_Flag = True;
}
//---------------------------------------------------------------------------------
// 函数名称: ReadMainMem()
// 入口参数: addr: IC存储区地址;
// pt: 地址指针,指向接收缓冲区;
// count: 接收数据的个数
// 函数功能: 读存储区
//-----------------------------------------------------------------------------------
void ReadMainMem(uchar addr,uchar idata *pt,uchar count)
{
SendComm(RMM_COMM,addr,0xff);
ReadMode(pt,count);
BreakOperate();
IC_Read_Flag = False;
}
//-----------------------------------------------------------------------------
// 函数名称: SendComm()
// 入口参数: a: 命令字;
// b: 地址;
// c: 数据
// 函数功能: 发送一个完整的命令
//-------------------------------------------------------------------------------
void SendComm(uchar a,uchar b,uchar c)
{
StartComm(); //开始发送命令
WriteByte(a); //a: 发命令字
WriteByte(b); //b: 发地址
WriteByte(c); //c: 发数据
StopComm(); //结束发送命令
}
main()
{
init();
if((IC_INT0 == 0)&&(IC_Read_Flag == 1) == 1) //有卡插入,并且有读标记
{
CT_PW = 0; //上电
Delay10us();
if(IC_Read_Flag == True)
{
ResetCard(); //
ReadMainMem(0xEF,&Read_Buffer[0],16);
BreakOperate();
上一页 [1] [2] [3] 下一页
本文关键字:暂无联系方式51单片机,单片机-工控设备 - 51单片机