久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

SLE4442卡_IC的51單片機驅動程序

作者:liumei   來源:本站原創   點擊數:  更新時間:2014年03月31日   【字體:

整理了最初的實驗草稿版,將端口宏定義,函數聲明以及常用的函數聲明建立頭文件,感覺清楚多了,在不斷地修改中凝練,在不停的實踐中提高,滿眼的思緒,在小小的Readme中劃過一筆~~~~~~~~
char data_RST[4], ErrorCount[4];

void IC_RST(void)
{
uchar value,i,count;
DATA_IN;  //IC輸入
RST_LOW;  //復位時序
CLK_LOW;
DATA_HIGH;
DelayUs(5);
RST_HIGH;
DelayUs(5);
CLK_HIGH;
DelayUs(5);
CLK_LOW;
DelayUs(5);
RST_LOW;
DelayUs(2);
for(i=0;i<4;i++) //讀4個BYTE  可用后面的Byte_Read()代替
{
  value = 0xff;
  for(count=0;count<8;count++)
  {
   value = value >> 1;
   DelayUs(2);
   CLK_LOW;
   DelayUs(2);
   CLK_HIGH;
   DelayUs(2);
   if(RD5 == 1)
   {
    value |= 0x80; //判斷IO腳是否為1,是則位置1
   }
   else
   {
    value &= 0x7f; //否則位置0
   }
   DelayUs(2);

  }
  data_RST[i] = value;
  DelayUs(2);
}
DelayUs(2);
CLK_LOW;
DelayUs(2);
DATA_HIGH;
}

void IC_Init(void)  //初始化
{
TRISD1 = 0;
RD1 = 0;  //上電
TRISD4 = 0;  //時鐘輸出
TRISD3 = 0;  //RST輸出
DelayMs(5);  //上電的必要延時,否則程序出錯
}


void Start(void)
{
DATA_OUT; //開始時序
CLK_LOW;
DATA_HIGH;
DelayUs(2);
CLK_HIGH;
DelayUs(2);
DATA_LOW;
DelayUs(2);
CLK_LOW;
}

void Stop(void) //結束時序
{
DATA_OUT;
CLK_LOW;
NOP();
NOP();
DATA_LOW;
DelayUs(2);
CLK_HIGH;
DelayUs(2);
DATA_HIGH;
DelayUs(2);
}

uchar Byte_Read(void) //讀字節
{
uchar count;
uchar value;
DATA_IN;
DelayUs(2);
value = 0xff;
for(count=0;count<8;count++)
{
  value = value >> 1;  //循環右移,從最低位開始讀
  DelayUs(2);
  CLK_LOW;
  DelayUs(2);
  CLK_HIGH;
  DelayUs(2);
  if(RD5 == 1)
  {
   value |= 0x80;//判斷IO腳是否為1
  }
  else
  {
   value &= 0x7f;
  }
  DelayUs(2);
}
return (value);
}


void Byte_WRT(uchar Xdata)   //寫字節
{
uchar count;
DATA_OUT;
DelayUs(2);
for(count=8;count!=0;count--)
{
  CLK_LOW;
  DelayUs(2);
  if((Xdata)&0x01)
  {
   DATA_HIGH;
  }
  else
  {
   DATA_LOW;
  }
  DelayUs(2);
  CLK_HIGH;
  DelayUs(2);
  Xdata = Xdata >> 1;  //循環右移,從最低位開始寫
}
}


void Command(uchar command,uchar address,uchar IC_data)
{
Start();
Byte_WRT(command);         //發送命令
Byte_WRT(address);         //發送地址
Byte_WRT(IC_data);   //發送數據
Stop();                 //操作命令結束
}

void Process(void)
{
uint j;  //寫指令后的處理過程
DATA_OUT;
  DelayUs(2);
  CLK_LOW;
  DATA_LOW;
  DelayUs(2);
  for(j = 0;j < 255;j++)
  {
   CLK_HIGH;
   DelayUs(2);
   CLK_LOW;
   DelayUs(2);
  }
DATA_HIGH;
}

void Process2(void)
{
uint j;  //寫指令后的短處理過程
DATA_OUT;
  DelayUs(2);
  CLK_LOW;
  DATA_LOW;
  DelayUs(2);
  for(j = 0;j < 2;j++)
  {
   CLK_HIGH;
   DelayUs(2);
   CLK_LOW;
   DelayUs(2);
  }
DATA_HIGH;
}

uchar Code_Check(uchar Code1,uchar Code2,uchar Code3)  //密碼校驗函數
{
uchar i;
Command(0x31,0x00,0x00);
for(i = 0;i < 4;i++)
{
  ErrorCount[i] = Byte_Read();
}
if(ErrorCount[0] == 0)
{
  return 0;
}
else
{
  if((ErrorCount[0]&0x01) == 1)
  {
   ErrorCount[0] &= 0x06;      //bit0=0;
  }
  else if((ErrorCount[0]&0x02) == 1)
  {
   ErrorCount[0] &= 0x05;      //bit1=0;
  }
  else
  {
   ErrorCount[0] &= 0x03;      //bit2=0
  }
}
Command(0x39,0x00,ErrorCount[0]);
Process();

Command(0x33,0x01,Code1);
Process2();

Command(0x33,0x02,Code2);
Process2();

Command(0x33,0x03,Code3);
Process2();

Command(0x39,0x00,0xff);
Process();

Command(0x31,0x00,0x00);
for(i = 0;i < 4;i ++)
{
  ErrorCount[i] = Byte_Read();
}
if(ErrorCount[0] == 0x07)
{
  return 1;
}
else
{
  return 0;
}
}


void ReadMainROM(uchar addr,uchar *p,uchar N)  //讀主存區
{
Command(0x30,addr,0xff);
while(N--)

  *p=Byte_Read();
     p++;
    }
}


void WriteMainROM(uchar addr,uchar *t,uchar N)  //寫主存區
{
while(N--)
{
  Command(0x38,addr,*t);
  Process();
  addr++;
  t++;
    }
}

void ReadProROM(uchar addr,uchar *p,uchar N)  //讀保護區
{
Command(0x34,addr,0xff);
while(N--)

  *p=Byte_Read();
     p++;
    }
}


void WriteProROM(uchar addr,uchar *t,uchar N)  //寫保護區
{
while(N--)
{
  Command(0x3c,addr,*t);
  Process();
  addr++;
  t++;
    }
}

void ReadCode(uchar addr,uchar *p,uchar N)  //讀密碼
{
Command(0x31,addr,0xff);
while(N--)

  *p=Byte_Read();
     p++;
    }
}

void WriteCode(uchar addr,uchar *t,uchar N)  //寫密碼
{
while(N--)
{
  Command(0x39,addr,*t);
  Process();
  addr++;
  t++;
    }
}

}
 

關閉窗口

相關文章

主站蜘蛛池模板: 在线激情视频 | 国产精品视屏 | 蜜桃臀av一区二区三区 | 无码一区二区三区视频 | 中文字幕91 | 成人精品一区二区三区 | 日韩在线免费视频 | 日本人做爰大片免费观看一老师 | 一区二区三区视频在线观看 | 日韩一区二区在线视频 | 亚洲精品视频网站在线观看 | 青青久久av北条麻妃海外网 | 国产精品中文字幕在线观看 | 久久com | 最新av在线网址 | 亚洲精品一区二区二区 | 五月激情六月婷婷 | 国产免费高清 | 国产一区在线免费观看 | 亚洲精品免费看 | 在线观看特色大片免费网站 | 久久久久国产一区二区三区四区 | 亚洲国产视频一区二区 | 成人欧美一区二区三区在线播放 | 爽爽免费视频 | 国产一区二区三区四区 | 超碰超碰| 日韩一区二区久久 | 国产一区二区在线免费视频 | 免费精品久久久久久中文字幕 | 成人区精品一区二区婷婷 | 成人区精品 | 国产欧美精品 | 99久久精品国产一区二区三区 | 欧美色综合网 | 成人免费视频网站在线观看 | 国产三级 | 999久久久久久久久6666 | 亚洲天堂影院 | 午夜三区| www.亚洲精品 |