//*****************************************************************************
//*****************************************************************************
// pic16f917
//*****************************************************************************
unsigned char read_eeprom(unsigned char);
void write_eeprom(unsigned char,unsigned char);
void write_work();
//*****************************************************************************
//*****************************************************************************
unsigned char read_eeprom(unsigned char addr)
{
unsigned char num;
do{;}
while(RD==1); //上一次读操作是否完成
EEADR=addr; //EEPROM地址为00H
EEPGD=0; //指向EEPROM数据储存器
RD=1; //开始读
do{;}
while(RD==1); //等待读操作完成
num=EEDATA; //读出
return(num); //返回读出的数
}
//********************************************************************************
void write_work()
{
if((write_dt&0x1) == 0x1)
{
write_eeprom(0,sdy_dt);
}
if((write_dt&0x2) == 0x2)
{
write_eeprom(1,sdy_set);
}
if((write_dt&0x4) == 0x4)
{
write_eeprom(2,power_dt);
}
write_dt=0;
}
//********************************************************************************
void write_eeprom(unsigned char addr,unsigned char data)
{
do{;}
while(WR==1); //上一次写操作是否完成
EEADR=addr; //EEPROM地址
EEDATA=data; //准备写入EEPROM的数据
EEPGD=0; //指向EEPROM数据储存器
WREN=1; //使能写操作
EECON2=0x55; //设置通用参数
EECON2=0xAA; //设置通用参数
WR=1; //开始写
do{;}
while(WR==1); //等待写操作完成
WREN=0; //禁止写操作
}
//********************************************************************************
//********************************************************************************
回复 举报
sunhaitao 发表于 2013-8-13 17:24 | 显示全部楼层
单片机讨论群87496842,目前有100多人。
回复 举报
libiaoha 发表于 2013-9-1 11:04 | 显示全部楼层
我也来凑个热闹:
#define ReadRomString_CALL
#define WriteRomString_CALL
//*************************************
// 函数名称:ReadRomByte
// 函数功能:从ROM的某一地址读数据
// 入口参数:所读数据的地址
// 出口参数:所读地址的数据
//***************************************
uint8 ReadRomByte(uint8 addr)
{
uint8 num;
while(RD==1);//等待读完成
EEADR=addr;//写入要读的址址
EEPGD=0;//操作EEPROM
RD=1;//执行读操作
while(RD==1);//等待读完成
num=EEDATA;
return num;//返回读取的数据
}
//*************************************
// 函数名称:WriteRomByte
// 函数功能:从RAM的某一地址写数据
// 入口参数:所写数据的地址及数据
// 出口参数:无
//***************************************
void WriteRomByte(uint8 addr,uint8 data)
{
uint8 Tmp ;
uint8 i ;
Tmp = ReadRomByte(addr) ;
if(Tmp == data) return ; //如果读出数据与要写的数一样 直接返回
for(i=3;i>0;i--)//最多写三次
{
while(WR==1);//等待写完成
EEADR=addr;//写入地址信息
EEDATA=data;//写入数据信息
EEPGD=0;//操作EEPROM
WREN=1; //写EEPROM允许
EECON2=0x55;//写入特定时序
EECON2=0xaa;
WR=1; //执行写操作
while(WR==1);//等待写完成
WREN=0;//禁止写入EEPROM
Tmp = ReadRomByte(addr) ;
if(Tmp == data)
{
break ;
}
}
}
//*************************************
// 函数名称:ReadRomString
// 函数功能:从RAM读一连串的数据
// 入口参数:所读数据的首地址 读得的数据的存放首地址 读数据 长度
// 出口参数:所读地址的数据
/***************************************/
#ifdef ReadRomString_CALL
void ReadRomString(uint8 InAddr,uint8 *OutAddr,uint8 DataLong)
{
uint8 i ;
for(i=DataLong;i>0;i--)
{
while(RD==1);//等待读完成
EEADR = InAddr;//写入要读的址址
EEPGD = 0;//操作EEPROM
RD = 1;//执行读操作
while(RD==1);//等待读完成
*OutAddr = EEDATA;
InAddr ++ ; //存储地址加1
OutAddr ++ ; //数据地址加1
}
}
#endif //ReadRomString_CALL
//*************************************
// 函数名称:WriteRomString
// 函数功能:从RAM写一连串的数据
// 入口参数:要写进RAM的首地址 要写的数据 写数据的长度
// 出口参数:无
/***************************************/
#ifdef WriteRomString_CALL
void WriteRomString(uint8 InAddr,uint8 *InData,uint8 DataLong)
{
uint8 i,j;
uint8 Tmp ;
for(i=DataLong;i>0;i--)
{
//读出的和要写的数据一致 直接写下一个数据
Tmp = ReadRomByte(InAddr) ;
if(Tmp != (*InData)) //读数据与要写数据不一至 进行写 操作
{
for(j=3;j>0;j--)//最多写三次
{
while(WR==1);//等待写完成
EEADR = InAddr;//写入地址信息
EEDATA = *InData;//写入数据信息
EEPGD = 0;//操作EEPROM
WREN = 1; //写EEPROM允许
EECON2 = 0x55;//写入特定时序
EECON2 = 0xaa;
WR = 1; //执行写操作
while(WR==1);//等待写完成
WREN = 0;//禁止写入EEPROM
Tmp = ReadRomByte(InAddr) ;
if(Tmp == (*InData))
上一篇:PIC单片机驱动LCD1602液晶循环显示两行字符串程序
下一篇:Micrichip 单片机 I /O引脚使用注意事项
推荐阅读最新更新时间:2024-11-09 18:00
设计资源 培训 开发板 精华推荐
- LT8304ES8E 18V 至 80Vin、5Vout 隔离反激式转换器的典型应用电路
- 使用 Microchip Technology 的 HV9925 的参考设计
- 野火挑战者F429-V1核心板 简易底板
- L7987L 61 V 2 A 具有可调电流限制的异步降压开关稳压器的典型应用
- EVAL-AD7928CB 用于数据采集系统的 AD7928、12 位、1MSPS、8CH ADC 的评估板
- SY88216L EV、SY88216L 评估板允许检查 SY88216 的性能
- 五口千兆交换机
- AD8313-EVAL,AD8313 评估板,0.1GHz 至 2.5GHz,70dB 对数检波器/控制器
- NUCLEO-F031K6,STM32 Nucleo-32开发板,带STM32F031K6T6 MCU,支持Arduino连接
- AT32国产飞控 两层单面便于手搓版
- If you had to start from scratch which wireless protocol would you pick?
- 【平头哥RVB2601创意应用开发】_1_板卡开箱+资料收集
- 【征集帖】大家有没有想法跟网友平湖秋月一起翻译【Tiva C系列固件库翻译】呢?
- PCB开发技术中的电磁的兼容性
- 如果这种打印机机不那么贵,那么热转印法制板将成为历史~~~
- 【XILINX 主题分享月】活动要求在标题前选择【设计工具】,怎么没有这个选项?
- IAR怎么设置空格,就和keil一样按下空格,代码之间空出一格??
- 招聘:射频工程师
- NuMaker-IIoT-NUC980 测评之 EBI
- K210 获取图像后如何转换成JPEG数据流