SLE4442卡IC的51单片机驱动程序.docx
- 文档编号:30675959
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:8
- 大小:15.32KB
SLE4442卡IC的51单片机驱动程序.docx
《SLE4442卡IC的51单片机驱动程序.docx》由会员分享,可在线阅读,更多相关《SLE4442卡IC的51单片机驱动程序.docx(8页珍藏版)》请在冰豆网上搜索。
SLE4442卡IC的51单片机驱动程序
SLE4442卡_IC的51单片机驱动程序
整理了最初的实验草稿版,将端口宏定义,函数声明以及常用的函数声明建立头文件,感觉清楚多了,在不断地修改中凝练,在不停的实践中提高,满眼的思绪,在小小的Readme中划过一笔~~~~~~~~
chardata_RST[4],ErrorCount[4];
voidIC_RST(void)
{
ucharvalue,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;>;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;
}
voidIC_Init(void)//初始化
{
TRISD1=0;
RD1=0;//上电
TRISD4=0;//时钟输出
TRISD3=0;//RST输出
DelayMs(5);//上电的必要延时,否则程序出错
}
voidStart(void)
{
DATA_OUT;//开始时序
CLK_LOW;
DATA_HIGH;
DelayUs
(2);
CLK_HIGH;
DelayUs
(2);
DATA_LOW;
DelayUs
(2);
CLK_LOW;
}
voidStop(void)//结束时序
{
DATA_OUT;
CLK_LOW;
NOP();
NOP();
DATA_LOW;
DelayUs
(2);
CLK_HIGH;
DelayUs
(2);
DATA_HIGH;
DelayUs
(2);
}
ucharByte_Read(void)//读字节
{
ucharcount;
ucharvalue;
DATA_IN;
DelayUs
(2);
value=0xff;
for(count=0;count;>;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);
}
voidByte_WRT(ucharXdata)
//写字节
{
ucharcount;
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;//循环右移,从最低位开始写
}
}
voidCommand(ucharcommand,ucharaddress,ucharIC_data)
{
Start();
Byte_WRT(command);
//发送命令
Byte_WRT(address);
//发送地址
Byte_WRT(IC_data);
//发送数据
Stop();
//操作命令结束
}
voidProcess(void)
{
uintj;//写指令后的处理过程
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;
}
voidProcess2(void)
{
uintj;//写指令后的短处理过程
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;
}
ucharCode_Check(ucharCode1,ucharCode2,ucharCode3)//密码校验函数
{
uchari;
Command(0x31,0x00,0x00);
for(i=0;i<4;i++)
{
ErrorCount[i]=Byte_Read();
}
if(ErrorCount[0]==0)
{
return0;
}
else
{
if((ErrorCount[0]&0x01)==1)
{
ErrorCount[0]&=0x06;
//bit0=0;
}
elseif((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)
{
return1;
}
else
{
return0;
}
}
voidReadMainROM(ucharaddr,uchar*p,ucharN)//读主存区
{
Command(0x30,addr,0xff);
while(N--)
{
*p=Byte_Read();
p++;
}
}
voidWriteMainROM(ucharaddr,uchar*t,ucharN)//写主存区
{
while(N--)
{
Command(0x38,addr,*t);
Process();
addr++;
t++;
}
}
voidReadProROM(ucharaddr,uchar*p,ucharN)//读保护区
{
Command(0x34,addr,0xff);
while(N--)
{
*p=Byte_Read();
p++;
}
}
voidWriteProROM(ucharaddr,uchar*t,ucharN)//写保护区
{
while(N--)
{
Command(0x3c,addr,*t);
Process();
addr++;
t++;
}
}
voidReadCode(ucharaddr,uchar*p,ucharN)//读密码
{
Command(0x31,addr,0xff);
while(N--)
{
*p=Byte_Read();
p++;
}
}
voidWriteCode(ucharaddr,uchar*t,ucharN)//写密码
{
while(N--)
{
Command(0x39,addr,*t);
Process();
addr++;
t++;
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SLE4442 IC 51 单片机 驱动程序