📄 4.2.4.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_RD 0x80
sbit CS=0x90; //CS为P1.0
sbit SK=0x91; //SK为P1.1
sbit DI=0x92; //DI为P1.2
sbit DO=0x93; //DO为P1.3
/*********************************延时函数*********************************/
void delay(uchar n)
{
uchar i;
for(i=0;i>n;i++);
}
/*********************************时钟函数*********************************/
void i_clock(void)
{
SK=Low;
delay(1);
SK=High;
delay(1);
}
/********************************输入函数**********************************/
//输入一个字节的数据到AT93C66中
void send(uchar i_data)
{
uchar i;
for(i=0;i<8;i++)
{
DI=(bit)(i_data&0x80);
i_data<<=1;
i_clock();
}
}
/********************************接收函数**********************************/
//从AT93C66接收1个字节的数据
uchar receive(void)
{
uchar i_data=0;
uchar j;
i_clock();
for(j=0;j<8;j++)
{
i_data*=2;
if(DO)i_data++;
i_clock();
delay(2);
}
return(i_data);
}
/**********************************读操作函数********************************/
//发送读指令和地址,从AT93C66指定的地址中读取数据
uchar read(uchar addr)
{
uchar data_r;
CS=1; //片选
send(READ_D); //送读指令
send(addr); //送地址
data_r=receive(); //接收数据
CS=0;
return(data_r);
}
/****************************擦写允许操作函数******************************/
void enable(void)
{
CS=1;
send(EN_D); //送使能指令
send(EN_RD);
CS=0;
}
/*****************************擦除操作函数********************************/
//擦除AT93C66中指定地址的数据
void erase(uchar addr)
{
DO=1;
CS=1;
send(ERASE_D); //送擦除指令
send(addr);
CS=0;
delay(4);
CS=1;
while(!DO); //等待擦除完毕
CS=0;
}
/*********************************写操作函数*********************************/
//将一个字节数据写入AT93C66指定的地址中
void wirite(uchar addr)
{
enable(); //擦写允许
erase(addr); //写数据前擦除同样地址的数据
CS=1;
send(WRITE_D); //送写指令
send(addr); //送地址
CS=0;
delay(4);
CS=1;
delay(4);
while(!DO); //等待写完
CS=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -