⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at102.h

📁 msp430操作AT88SC102卡函数
💻 H
字号:
#define  IC_VCC_OUT       P6OUT
#define  IC_VCC_DIR       P6DIR
#define  IC_VCC_BIT       BIT5

#define  IC_RST_OUT       P6OUT
#define  IC_RST_DIR       P6DIR
#define  IC_RST_BIT       BIT4

#define  IC_CLK_OUT       P6OUT
#define  IC_CLK_DIR       P6DIR
#define  IC_CLK_BIT       BIT3

#define  IC_PGM_OUT       P6OUT
#define  IC_PGM_DIR       P6DIR
#define  IC_PGM_BIT       BIT7

#define  IC_DATA_IN       P6IN
#define  IC_DATA_OUT      P6OUT
#define  IC_DATA_DIR      P6DIR
#define  IC_DATA_BIT      BIT6

void ic_delay(unsigned int lll)
{
 unsigned int qqq;
 for(qqq=0;qqq<lll;qqq++);
}

void Locate_Bit(unsigned int add)
{
    unsigned int i;
    ic_delay(50);
    IC_CLK_OUT &=~IC_CLK_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_RST_OUT |= IC_RST_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_RST_OUT &=~IC_RST_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    for(i=0;i<add;i++)
    {
      IC_CLK_OUT |= IC_CLK_BIT;
      _NOP();
      _NOP();
      ic_delay(50);
      IC_CLK_OUT &=~IC_CLK_BIT;
      _NOP();
      _NOP();
      ic_delay(50);
    }
}
void Locate_Word(unsigned int add)
{
    unsigned int temp;

    temp=add;
    temp<<=4;
    Locate_Bit(temp);
}

void Write_Bit(void)
{
    IC_DATA_DIR |= IC_DATA_BIT;
    IC_CLK_OUT &=~IC_CLK_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT |= IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_DATA_OUT &=~IC_DATA_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_CLK_OUT |= IC_CLK_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    ic_delay(8000);
    IC_CLK_OUT &=~IC_CLK_BIT;
    _NOP();
    _NOP();

}

void Erase_Bit(void)
{
    IC_DATA_DIR |= IC_DATA_BIT;
    IC_CLK_OUT &=~IC_CLK_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT |= IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_DATA_OUT |= IC_DATA_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_CLK_OUT |= IC_CLK_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    ic_delay(8000);
    IC_CLK_OUT &=~IC_CLK_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
}

unsigned int Read_IC(unsigned int add)
{
    unsigned int i,temp;

    Locate_Word(add);
    ic_delay(50);
    IC_RST_OUT &=~IC_RST_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_DATA_DIR &=~IC_DATA_BIT;
    temp=0;
    _NOP();
    _NOP();
    ic_delay(50);
    for(i=0;i<16;i++)
    {
        temp<<=1;

        if((IC_DATA_IN & IC_DATA_BIT)==IC_DATA_BIT)
        {
          temp++;
        }

        _NOP();
        _NOP();
        ic_delay(50);
        IC_CLK_OUT |= IC_CLK_BIT;
        _NOP();
        _NOP();
        ic_delay(50);
        IC_CLK_OUT &=~IC_CLK_BIT;
        _NOP();
        _NOP();
        ic_delay(50);

    }

    return temp;
}


unsigned char Write_IC(unsigned int add,unsigned int data)
{
    unsigned int i,temp;

    Locate_Word(add);
    temp=data;
    for(i=0;i<16;i++)
    {
        if((temp & BITF)==BITF)
        {
          _NOP();
        }
        else
        {
          Write_Bit();
        }
        ic_delay(800);
        IC_CLK_OUT |= IC_CLK_BIT;
        ic_delay(800);
        IC_CLK_OUT &=~IC_CLK_BIT;
        ic_delay(800);
        temp<<=1;

    }
    temp=Read_IC(add);
    if (temp==data)
      return 1;
    else
      return 0;
}


unsigned char SC_Com(unsigned int psw)
{
    unsigned int temp,i;

    temp=psw;

    Locate_Bit(80);
    _NOP();
    _NOP();
    ic_delay(50);
    IC_RST_OUT &=~IC_RST_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_PGM_OUT &=~IC_PGM_BIT;
    _NOP();
    _NOP();
    ic_delay(50);
    IC_DATA_DIR |= IC_DATA_BIT;
    _NOP();
    _NOP();
    ic_delay(50);

    for(i=0;i<16;i++)
    {
        if(temp & 0x8000)
            IC_DATA_OUT |= IC_DATA_BIT;
        else
            IC_DATA_OUT &=~IC_DATA_BIT;
        _NOP();
        _NOP();
        ic_delay(50);
        IC_CLK_OUT |= IC_CLK_BIT;
        _NOP();
        _NOP();
        ic_delay(50);
        IC_CLK_OUT &=~IC_CLK_BIT;
        _NOP();
        _NOP();
        ic_delay(50);
        temp<<=1;
    }

    IC_DATA_DIR &=~IC_DATA_BIT;
    _NOP();
    _NOP();
    ic_delay(50);

    for(i=0;i<4;i++)
    {

        if((IC_DATA_IN & IC_DATA_BIT)==IC_DATA_BIT)
        {
          Write_Bit();
          IC_DATA_DIR &=~IC_DATA_BIT;
          ic_delay(800);
          if((IC_DATA_IN & IC_DATA_BIT)==IC_DATA_BIT)
          {
            return 0;
          }
          else
          {
            Erase_Bit();
            return 1;
          }
        }
        IC_CLK_OUT |= IC_CLK_BIT;
        _NOP();
        _NOP();
        ic_delay(50);
        IC_CLK_OUT &=~IC_CLK_BIT;
        _NOP();
        _NOP();
        ic_delay(50);
    }
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -