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

📄 4.2.4.c

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 C
字号:
#include <reg52.h>						//头文件
#include <stdio.h>

#define uchar unsigned char
#define High 1							//定义高电平
#define Low 0							//定义高电平
#define READCode 0x0C					//AT93C66读指令
#define WRITECode 0x0A				//AT93C66写指令
#define ERASECode 0x0E				//AT93C66擦除指令
#define EWENCodeH 0x09				//AT93C66擦/写允许指令
#define EWENCodeL 0x80

sbit CS=P2^0;							//CS为P2.0
sbit SK=P2^3;							//SK为P2.3
sbit DI=P2^2;							//DI为P2.2
sbit DO=P2^4;							//DO为P2.4

void Delay(uchar n);						//延时
void MicrowareClock(void);				//时钟函数
void MicrowareSend(uchar senddata);		//字节输入函数
uchar MicrowareReceive(void);				//字节接收函数
uchar MicrowareRead(uchar addr);			//读数据函数
void MicrowareEnable(void);				//擦写允许函数
void MicrowareErase(uchar addr);			//擦除函数
void MicrowareWrite(uchar addr,uchar Wdata);	//写数据函数

 void main()
 {
 uchar Select_Menu; 					//功能选择
 uchar rd;
 SCON=0x50;							//初始化串行口模式1
TMOD=0x20;							//初始化T1为定时功能,模式2
PCON=0x80;							//设置SMOD=1
TL1=0xF4;							//波特率4800bit/s,初值
TH1=0xF4;

  TR1 = 1;       						//启动T1
  TI = 1; 								//启动发送
while(1)
{
  printf("Microware AT93C66 Write and Read!");
  printf (" Select Control Menu Option\n");		//菜单信息
  printf (" 1. Enable AT93C66.\n");
  printf (" 2. Read AT93C66.\n");
  printf (" 3. Write AT93C66.\n");
  printf (" 4. Erase AT93C66.\n");
  printf (" 5. EXIT.\n");
  printf (" Please Input Menu Option:\n");

  	Select_Menu = _getkey(); 			//从键盘输入选择数字
	switch(Select_Menu)
{
		case '1': 						//擦写使能AT93C66
			printf ("\n You Select 1. Enable AT93C66\n");
			MicrowareEnable();
			printf ("\n Enable over\n");
			break;
		case '2': 						//读AT93C66
			printf ("\n You Select 2. Read AT93C66\n");
			rd=MicrowareRead(0x12);
			printf("AT93C66 data at 0x12=%d\n",rd);
			break;
		case '3': 						//写AT93C66
			printf("\n You Select 3. Write AT93C66\n");
			MicrowareWrite(0x12,0x56);
			printf ("\n Write over\n");
			break;
		case '4': 						//搜索擦除AT93C66
			printf ("\n You Select 4. Erase AT93C66\n");
			MicrowareErase(0x12);
			printf ("\n Erase over\n");
			break;
		case '5': 						//退出程序
			printf ("\n You Select 5. Exit\n");
			goto Exit; 				//转向Exit标号处
			break;
		default: 
printf ("\n Error: Please Select Right Menu Option\n");
			break;
		}; 
  }
Exit: printf("Exit the program!");				//退出
}





void Delay(uchar n)
{
  int i;
  for(i=0;i<n;i++);						//空延时
}



void MicrowareClock(void)
{
  SK=Low;							//SK=0
  Delay(2);
  SK=High;							//SK=1
  Delay(2);
}


void MicrowareSend(uchar senddata)
{
  int i;
 for(i=0;i<8;i++)						//循环输出一个字节的数据
   {
     DI=(bit)(senddata&0x80);
     senddata<<=1;						//移位
     MicrowareClock();					//构造时钟
   }
}



uchar MicrowareReceive(void)
{
 uchar receivedata=0;					//接收的字节数据
  int i;
 MicrowareClock();						//构造时钟
 for(i=0;i<8;i++)						//循环接收
   {
    receivedata*=2;
    if(DO)receivedata++;					//判断DO,接收位数据
    MicrowareClock();
    Delay(2);
   }
  return receivedata;					//返回数据
}


uchar MicrowareRead(uchar addr)
  {
    uchar ReadData;
    CS=1;							//选通
    MicrowareSend(READCode);			//READ指令
    MicrowareSend(addr);				//指定地址
    ReadData=MicrowareReceive();			//接收数据
    CS=0;							//选通禁止
    return ReadData;					//返回数据
  }



void MicrowareEnable(void)
  {
    CS=1;							//选通
    MicrowareSend(EWENCodeH);			//EWEN指令
    MicrowareSend(EWENCodeL);
    CS=0;							//选通禁止
  }


void MicrowareErase(uchar addr)
{
DO=1;
    CS=1;							//选通
MicrowareSend(ERASECode);			//ERASE指令
MicrowareSend(addr);				//地址
    CS=0;							//选通禁止
Delay(4);
    CS=1;							//选通
while(!DO)							//判断擦除完毕
{
}
    CS=0;							//选通禁止
}

void MicrowareWrite(uchar addr,uchar Wdata)
  {
    MicrowareEnable();					//擦除/写允许
    MicrowareErase(addr);				//擦除对应地址的数据
    CS=1;							//选通
    MicrowareSend(WRITECode);			//写指令
    MicrowareSend(addr);				//指定地址
    MicrowareSend(Wdata);				//写数据
    CS=0;							//选通禁止
    Delay(4);
    CS=1;							//选通
    Delay(4);
while(!DO);						//查询DO引脚等待写完
{
}
    CS=0;							//选通禁止
  }



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -