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

📄 internaleeprom_test.c

📁 LPC900系列单片机 片内EEPROM的正确使用
💻 C
字号:
/*************************************************
*文件名 :InternalEEprom_Test.C
*版权:  广州周立功单片机发展有限公司
*功能:  P89LPC932内部EEPROM操作演示程序
*日期:  10:44 04-2-18
*************************************************/
#include "reg932.h"

#define	uchar unsigned char

sbit	LED=P2^6;		//定义运行指示灯
sbit	BEEP=P2^7;		//定义蜂鸣器

sbit	KEY1=P0^0;		//定义按键
sbit	KEY2=P0^1;
sbit	KEY3=P0^2;
sbit	KEY4=P0^3;

/* 74HC595控制管脚定义 */
sbit	HC595_CS  = P2^4;	//片选线
sbit	HC595_CLK = P2^5;	//时钟线
sbit    HC595_DAT = P2^2;	//数据线

void  	SendHC595(uchar dat);	

main()
{
	uchar	Temp;
	uchar	Count;
	uchar	Data;
	uchar	Addr;

	P0M1=0x00;		//定义IO口工作模式
	P0M2=0x00;
	P2M1=0xC0;
	P2M2=0xC0;

	while(1)
	{
		if(KEY1==0)					//当KEY1按下,向 地址为0-->0xff的区域写入数据0->0xff.
		{
			LED=0;					//点亮运行指示灯

			Addr=0x00;				//地址初始值
			Data=0x00;				//待写入数据初始值
			Count=0xFF;				//循环次数

			EA=0;					//写操作前关闭中断功能,避免干扰		
			while(Count>0)			
			{
				DEECON=0x00;			//初始化DEECON
				DEEDAT=Data;			//赋值DEEDAT
				DEEADR=Addr;			//赋值DEEADR
				
				while((DEECON&0x80)==0);	//等待写完成

				DEECON=DEECON&0x7F;		//清0写完成标志位

				Data++;				//待写入数据递增
				Addr++;				//地址递增
				Count--;			//循环次数递减
				if(Count==0)			
				{
					LED=1;			//最后一次循环,熄灭运行指示灯
				}
			}
			EA=1;					//开中断
		}
			
			//read--------------------------
		if(KEY2==0)					//当KEY2按下时,校验地址0-->0xff区域间的数据,不对则BEEP
		{
			LED=0;

			Addr=0x00;				//首地址
			Data=0x00;				//首数据
			Count=0xFF;				//循环次数
			while(Count>0)
			{
				DEECON=0x00;			//初始化DEECON
				DEEADR=Addr;			//赋值DEEADR
				while((DEECON&0x80)==0);	//等待

				Temp=DEEDAT;			//将读出的值赋给Temp
				if(Temp!=Data)			//判断
				{
					BEEP=0;			//BEEP鸣叫
					SendHC595(~Temp);	//显示时的数据(可以判断出操作第?位EEPROM出错)
					break;
				}
				
				Data++;				//待校验数据递增
				Addr++;				//地址递增
				Count--;			//循环次数递减
			}
				SendHC595(~Data);		//若循环结束,显示最后一次操作的数据 	
		}

//----------------100~~~~1FFH--------------
		if(KEY3==0)					//KEY3按下,对地址为100-->1FF的区域进行写操作
		{
			LED=0;					//点亮运行指示灯

			Addr=0x00;				//地址低8位初值
			Data=0x00;				
			Count=0xFF;				//循环次数

			EA=0;					//关中断,避免干扰
			while(Count>0)
			{
				DEECON=0x01;			//初始化DEECON,并置地址最高位为1
				DEEDAT=Data;			//赋值DEEDAT
				DEEADR=Addr;			//赋值DEEADR
					
				while((DEECON&0x80)==0);	//等待写完成

				DEECON=DEECON&0x7F;		//清0写完成标志位
				Data++;				//待写入数据递增
				Addr++;				//待写入地址递增
				Count--;			//循环次数递减
				if(Count==0)
				{
					LED=1;			//循环结束关闭运行指示灯
				}
			}
			EA=1;					//恢复中断
		}
			
			//read--------------------------
		if(KEY4==0)					//KEY4按下,对地址100-->1FF进行校验
		{
			LED=0;					//点亮运行指示灯

			Addr=0x00;				//初始化地址低8位:  x 0000 0000
			Data=0x00;				//循环次数
			Count=0xFF;
			while(Count>0)
			{
				DEECON=0x01;			//初始化DEECON,并置位地址最高位
				DEEADR=Addr;			//赋值DEEADR
				while((DEECON&0x80)==0);	//等待读完成

				Temp=DEEDAT;			//将读出的值赋给DEEDAT
				if(Temp!=Data)
				{
					BEEP=0;			//如果读出不正确,则BEEP
					SendHC595(~Temp);	//并显示出错数据(可以判断出错地址)
					break;
				}
				
				Data++;				//数据递增
				Addr++;				//地址递增
				Count--;			//循环嫡减
			}
				SendHC595(~Data);		//循环结束,显示最后一次的数据
		}
	}
}

/*******************************************************
* 名称:SendHC595()
* 功能:向74HC595发送数据,以驱动LED显示
* 入口参数:data	    要发送的数据
* 出口参数:无
*******************************************************/
void  SendHC595(uchar dat) 
{ uchar i;
  HC595_CS=0;						//片选
  for(i=0; i<8; i++)
  { HC595_CLK=0;					//CLK置低
    if( (dat&0x80)!=0 )HC595_DAT=1;			//赋值
	  else HC595_DAT=0;
	HC595_CLK=1;					//CLK置高	
	dat=dat<<1;					//循环移位
  }
  HC595_CS=1;						//关闭
}

⌨️ 快捷键说明

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