久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13801|回復: 2
打印 上一主題 下一主題
收起左側

PIC單片機讀內部EEPROM的讀寫操作子程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:51707 發表于 2013-7-11 02:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//********************************************************************************
//********************************************************************************
//     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;                                //禁止寫操作
}
//********************************************************************************
//********************************************************************************
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:53860 發表于 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))
                                {
                                        break ;       
                                }
                        }                                         
                }
                InAddr ++ ; //存儲地址加1
                InData ++ ; //數據地址加1
        }
}
#endif        //WriteRomString_CALL

// 結束  本文源自  http://blog.csdn.net/libiaojs/article/details/9418357



回復

使用道具 舉報

板凳
ID:56605 發表于 2014-6-10 17:09 | 只看該作者
辛苦了!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品三区 | 777777777亚洲妇女 | 久久久一区二区三区 | www.日韩| 在线观看国产wwwa级羞羞视频 | 久草中文在线观看 | 国产精品亚洲第一 | 欧美精品一区二区三区在线 | 久久久www成人免费无遮挡大片 | 热久久久 | 999久久久久久久久6666 | 2018国产大陆天天弄 | 日日操夜夜操天天操 | 久久国 | 成年人在线视频 | 国产高清免费视频 | 亚洲精品一区二区在线观看 | 国产精品伦理一区 | 亚洲欧洲一区 | 国产黄色一级片 | 亚洲精品久久久一区二区三区 | 久久久久久99 | 九九综合| 欧美在线一区二区三区 | 欧美伊人影院 | 国产一区二区三区高清 | 日韩影院在线观看 | 国产一区二区三区 | 亚洲第一av | 鲁大师一区影视 | 男女视频在线观看 | 日韩在线看片 | 欧美不卡在线 | 黄色片视频免费 | 日韩欧美三区 | 国产区第一页 | 91精品国产手机 | 欧美色专区 | 久久免费精品 | 国产精品一卡 | 久久手机视频 |