📄 93c66de51chengdu.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define HIGH 1 /*定义高电平*/
#define LOW 0 /*定义低电平*/
#define READ_D 0X0C /*读指令*/
#define WRITE_D 0X0a /*写指令*/
#define ERASE_D 0X0e /*擦除指令*/
#define EN_D 0X09 /*擦写允许指令*/
#define EN_DR 0X80
sbit cs=0x90; /*cs接p1.0*/
sbit sk=0x91; /*sk接p1.1*/
sbit din=0x92; /*din接p1.2*/
sbit dot=0x93; /*dot接p1.3*/
/**********延时函数**************/
void delay(uchar n)
{
uchar i;
for(i=0;i<n;i++);
}
/**********时钟函数**************/
void clock(void)
{
sk=LOW;
delay(1);
sk=HIGH;
delay(1);
}
/**********输入一个字节的数据到93C66**************/
void send(uchar l_data)
{
uchar i;
for(i=0;i<8;i++)
{
din=(bit)(l_data&0x80);
l_data << 1;
clock();
}
}
/**********从AT93C66接受一个字节的数据**************/
uchar recept(void)
{
uchar l_data=0;
uchar j;
clock();
for(j=0;j<8;j++)
{
l_data*=2;
if(dot)l_data++;
clock();
delay(2);
}
return(l_data);
}
/**********从93C66指定地址中读取数据**************/
uchar read(uchar address)
{
uchar data_1;
cs=1;
send(READ_D); /*发送读指令*/
send(address); /*送地址*/
data_1=recept(); /*接受数据*/
cs=0;
return(data_1);
}
/**********擦写允许操作**************/
void enable(void)
{
cs=1;
send(EN_D);
send(EN_DR);
cs=0;
}
/**********擦除93c66中指定地址中的数据**************/
void erase(uchar address)
{
dot=1;
cs=1;
send(ERASE_D); /*送擦除指令*/
send(address);
cs=0;
delay(4);
cs=1;
while(!dot); /*等待擦除完毕*/
cs=0;
}
/**********将一个数据写入93C66指定的地址中**************/
void write(uchar data_2,uchar address)
{
enable(); /*擦写允许*/
erase(address); /*擦除数据*/
cs=1;
send(WRITE_D); /*送写指令*/
send(address);
send(data_2); /*送数据*/
cs=0;
delay(4);
cs=1;
delay(4);
while(!dot); /*等待写完*/
cs=0;
}
void main(void)
{
char temp;
cs=1;
din=1;
delay(10);
do{
write(0x5,0x00);
temp=read(0x00);
if(temp!=5)
break;
write(0x4,0x01);
write(0x0,0x02);
write(0x6,0x03);
write(0x1,0x04);
write(0x0,0x05);
write(0xb,0x06);
write(0x5,0x07);
write(0x0,0x08);
write(0x6,0x09);
write(0x8,0x0a);
write(0x0,0x0b);
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -