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

📄 e2prom.c

📁 T112 MCU源程码,用于T112外接MCU篇程,用来驱动模拟屏
💻 C
字号:
#include "reg51.h"
#include "DEF.H"
#include "system.h"

																																											
#define   	ISP_READ        	1						///字节读命令
#define   	ISP_RAM         	2     					///字节编程命令    前提是该字节是空(0FFH)
#define   	ISP_ERASE       	3     					///扇区擦除命令    要某字节为空,要擦移扇区
#define   	ISP_TIME        	0     					///等待时间 30MHZ以下为0,24MHZ以下为1,20MHZ以下为2,12MHZ以下为3,6MHZ以下为4,3MHZ以下为5,2MHZ以下为6,1MHZ以下为7

extern 		uchar 				bright			;
extern 		uchar 				comp			;
extern 		uchar 				color			;
extern		uchar				Pauto			;
extern		uchar				row_num			;
/************************************************
			内部E2PROM的操作
************************************************/

void Delay(uWORD wLoops)
{
	uWORD wTemp									;
    while (wLoops--) 
    {
	    wTemp = 1000/6							;		//		one loop below takes about 11 us
        while (wTemp--)							;
    }
}
				
/************************************************
			打开 ISP,IAP 功能
************************************************/

void ISP_IAP_enable(void)
{
	EA			=	0							;		//		关中断
	ISP_CONTR 	=	ISP_CONTR & 0x18			;       //		0001,1000
	ISP_CONTR 	=	ISP_CONTR | ISP_TIME		;		//		写入硬件延时
	ISP_CONTR 	=	ISP_CONTR | 0x80			;       //		ISPEN=1
}	

/************************************************
			关闭 ISP,IAP 功能
************************************************/

void ISP_IAP_disable(void)
{
	ISP_CONTR	=	ISP_CONTR & 0x7f			;		//		ISPEN = 0
	ISP_TRIG	=	0x00						;
	EA			=	1							;		//		开中断
}

/************************************************
			公用的触发代码
************************************************/

void ISPgoon(void)
{
	ISP_IAP_enable()							;		//	打开 ISP,IAP 功能
	ISP_TRIG	=	0x46						;		//	触发ISP_IAP命令字节1
	ISP_TRIG	=	0xb9						;		//	触发ISP_IAP命令字节2
}

/************************************************
			字节读
************************************************/

uchar byte_read(uint byte_addr)
{
	ISP_ADDRH = (uchar)(byte_addr >> 8)			;		//	地址赋值
	ISP_ADDRL = (uchar)(byte_addr & 0x00ff)		;
	ISP_CMD   = ISP_CMD	& 0xf8					;		//	清除低3位
	ISP_CMD   = ISP_CMD	| ISP_READ				;		//	写入读命令
	ISPgoon()									;		//	触发执行
	ISP_IAP_disable()							;		//	关闭ISP,IAP功能	
	return (ISP_DATA)							;		//	返回读到的数据
}

/************************************************
			扇区擦除
************************************************/

void SectorErase(uint sector_addr)
{
	uint iSectorAddr							;
	iSectorAddr 	= (sector_addr & 0xfe00)	;		//	取扇区地址
	ISP_ADDRH 	= (uchar)(iSectorAddr >> 8)		;
	ISP_ADDRL 	= 0x00							;
	ISP_CMD		= ISP_CMD & 0xf8				;		//	清空低3位
	ISP_CMD		= ISP_CMD | ISP_ERASE			;		//	擦除命令3
	ISPgoon()									;		//	触发执行
	ISP_IAP_disable()							;		//	关闭ISP,IAP功能
}

/************************************************
			字节写
************************************************/

void byte_write(uint byte_addr, uchar w_data)
{
	ISP_ADDRH =(uchar)(byte_addr >> 8)			; 		//	取地址
	ISP_ADDRL =(uchar)(byte_addr & 0x00ff)		;
	ISP_CMD	  = ISP_CMD & 0xf8					;		//	清低3位
	ISP_CMD   = ISP_CMD | ISP_RAM				;		//	写命令2
	ISP_DATA  = w_data							;		//	写入数据准备
	ISPgoon()									;		//	触发执行
	ISP_IAP_disable()							;		//	关闭IAP功能
}

/**************************************************
            把要记忆的参数写入E2PROM
**************************************************/

void write_set(void)
{
  	SectorErase(0x8000)							;
  	byte_write(0x8000,color)					;
    byte_write(0x8001,bright)					;
	byte_write(0x8002,comp)						;
	byte_write(0x8003,Pauto)					;
	byte_write(0x8004,row_num)					;
	Delay(10)									;
  	ISP_IAP_disable()							;		//	关闭IAP功能
}

/**************************************************
             把所设定的参数读出E2PROM28
**************************************************/

void read_set(void)
{
    byte_read(0x8000)							;
	color		=	ISP_DATA					;
    byte_read(0x8001)							;
	bright		=	ISP_DATA						;
	byte_read(0x8002)							;
	comp		=	ISP_DATA					;
	byte_read(0x8003)							;
	Pauto		=	ISP_DATA					;	
	byte_read(0x8004)							;
	row_num		=	ISP_DATA					;
	Delay(10)									;
 	ISP_IAP_disable()							;		//	关闭IAP功能
}


⌨️ 快捷键说明

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