⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.2.4.c

📁 《单片机C语言编程与实例》的代码第4章.rar
💻 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 + -