您当前的位置:五五电子网电子知识单片机-工控设备51单片机IC卡控制程序 正文
IC卡控制程序

IC卡控制程序

点击数:7113 次   录入时间:03-04 11:55:23   整理:http://www.55dianzi.com   51单片机
    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单片机

《IC卡控制程序》相关文章>>>