当前位置: 代码迷 >> 单片机 >> AT88SC102卡 不能写零操作
  详细解决方案

AT88SC102卡 不能写零操作

热度:40   发布时间:2016-04-28 15:40:40.0
AT88SC102卡 不能写0操作
现在在用msp430写一个AT88SC102卡的底层驱动,现在密码校验已经可以了,要修改应用区的数据。大家看下这两个函数有没有问题。现在将应用区数据擦出为1是可以的了,现在想要将数据修改为0却不行。I/O的置位,地址的位置都是正确的


/********************************************************
* 写卡                               *
********************************************************/
unsigned char AT88SC102Write(unsigned char startaddress,unsigned char *pointer_cardbuf,unsigned char bytes)
{
    unsigned char i,j;
    unsigned char doublebytes,wrbyte; 
    unsigned int bitstart;
    unsigned char *temp_cardbuf;            
    temp_cardbuf=pointer_cardbuf;       
    bitstart = startaddress*8;
    AT88SC102IO_OUT |= AT88SC102IO;
    Card_SetAddress(bitstart);
    
     AT88SC102IO_DIR |= AT88SC102IO;       
    doublebytes = bytes;    //单字节数转为双字节数
    doublebytes = (doublebytes + 1) >> 1;
    doublebytes--;
    if(doublebytes)
    {
       for(i = 0; i < doublebytes; i++)
       {
        Card_WriteBit(1);
        for(j = 0; j < 16; j++) 
        {
         Delay3us();
         AT88SC102CLK_OUT |= AT88SC102CLK; 
         Delay3us();
         AT88SC102CLK_OUT &= ~AT88SC102CLK;
         Delay3us();
        }
       }
       Card_WriteBit(1);
    }else
    {
       Card_WriteBit(1);
    }
    
   // AT88SC102Pscverification(0xf0,0xf0,0);
    
    Card_SetAddress(startaddress);   
    
    
    AT88SC102IO_DIR |= AT88SC102IO;       
    
    
    for(i = 0; i < bytes; i++)
    {
       wrbyte = *temp_cardbuf;
       for(j = 0; j < 8; j++)
       {
        if(wrbyte & 0x80)
        {
         AT88SC102CLK_OUT |= AT88SC102CLK; 
         Delay3us();
         AT88SC102CLK_OUT &= ~AT88SC102CLK;
  相关解决方案