/*
 * EEPROM.c
 *
 *  Created on: 2019-8-13
 *      Author: charles_cai
 */
#include"main.h"

#ifndef EEPROM_C_
#define EEPROM_C_

/***********************************************************************************
 * 函数名     	：Dataeeprom_Singledata_Read
 * 函数功能	：Data eeprom 读出指定地址的单字节数据
 * 入口参数	：地址
 * 返回         ：    内容
 * Data eeprom 读出指定地址的单字节数据
 **********************************************************************************/
unsigned char Dataeeprom_Singledate_Read(unsigned char addr)
{
#pragma save
#pragma disable_warning 59
#pragma disable_warning 85
	__asm
	;//  char 型参数位于R0中
	BANKSEL  NVMADDRL
	MOV NVMADDRL , R0				//写入地址

	//数据读入函数
	MOV R0 , #0x01
	MOV NVMCTL0 , R0
	NOP
	NOP
	MOV R0,NVMDATAL
	;// char 型结果返回内容位于R0中
	__endasm;
#pragma restore
}

/***********************************************************************************
 * 函数名     	：Dataeeprom_Singledata_Write
 * 函数功能	：Data eeprom 写入指定地址的单字节数据
 * 入口参数	：指定地址
 * 			  指定内容
 * 返回         ：无
 * Data eeprom 写入指定地址的单字节数据
 **********************************************************************************/
void Dataeeprom_Singledata_Write(unsigned char addr,unsigned char value)
{
#pragma save
#pragma disable_warning 59
#pragma disable_warning 85
	__asm
	;//  参数 地址：r0  参数值，自动变量STK00
	BANKSEL NVMADDRL
	MOV NVMADDRL , R0

	BANKSEL STK00
	MOV R1,STK00
	BANKSEL NVMDATAL
	MOV NVMDATAL,R1
	;// 建议的关闭中断
	CWDT
	BANKSEL INTCTL
	MOV R1,INTCTL
	CLR INTCTL,7
	JNB INTCTL,7
	JMP $-2
	;//

	;// 数据写入执行
	MOV R0 , #0x04
	MOV NVMCTL0 , R0
	MOV R0 , #0x69
	MOV NVMCTL1 , R0
	MOV R0 , #0x96
	MOV NVMCTL1 , R0
	SET NVMCTL0 , 1
	NOP
	NOP
	NOP
	NOP
	;//.............................
	JB EIF1,7
	JMP $-1				//等待写入完成（6ms)，可以考虑写控制，外部判断写完成下，屏蔽这些代码
	CLR EIF1,7

	MOV R0 , #0x00				//关闭DATA EE的写操作，防止意外写
	MOV NVMCTL0,R0
	;//............................
	;// 如果关了中断，中断还原
	AND R1,#0xC0
	BANKSEL INTCTL
	ORL INTCTL,R1
	__endasm;
#pragma restore
}

#endif /* EEPROM_C_ */
