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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助:STC12C5A60S2單片機的片內EEPROM為何寫不進去?

[復制鏈接]
跳轉到指定樓層
樓主
ID:356610 發表于 2020-8-4 16:22 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
STC12C5A60S2的片內EEPROM卡了一周了,請高手幫忙看下,感激不盡!
為了方便閱讀,我只把關于EEPROM的代碼貼出來。

#define CMD_READ                                1
#define CMD_PROGRAM                        2
#define CMD_ERASE                                3
#define ENABLE_IAP                                0x83

#define IAP_ADDRESS_1                         0x0000

void Initialization()
{
        DehumiTimeSet = IAP_Read_Byte(IAP_ADDRESS_1);
        if(DehumiTimeSet > 99 || DehumiTimeSet < 1)
        {
                DehumiTimeSet = 48;
        }

        DehumiTimeSetBak = DehumiTimeSet;
}


void main()
{
        Initialization();
        while(1)

       {
                if(bit_Timer100ms)                //中斷2ms,計數器累加50次就是100ms
                {
                        bit_Timer100ms = 0;
                        Display();
                        KeyDispose();

                }
        }
}


void KeyDispose()
{
        if(Key_Value == 0)                        //60秒內無按鍵按下則顯示DHT11溫濕度
        {
                if(bit_NoKeyPress)
                {
                        NoKeyPressDelayCnt++;
                        if(NoKeyPressDelayCnt >= 600)
                        {
                                NoKeyPressDelayCnt = 0;
                                
                                if(DehumiTimeSetBak != DehumiTimeSet)
                                {
                                        EEPROM_WriteDehumiTimeSet();
                                        DehumiTimeSetBak = DehumiTimeSet;
                                }

                        }
                 }
        }
}

void EEPROM_WriteDehumiTimeSet()                    //先擦除扇區,再寫入數據
{
        IAP_Erase_Sector(IAP_ADDRESS_1);
        IAP_Write_Byte(IAP_ADDRESS_1,DehumiTimeSet);        
}


void IAP_Idle()
{
        IAP_CONTR = 0;
        IAP_CMD = 0;
        IAP_TRIG = 0;
        IAP_ADDRH = 0x80;
        IAP_ADDRL = 0;
}

unsigned char IAP_Read_Byte(unsigned int addr)
{
        unsigned char dat;
        
        IAP_CONTR = ENABLE_IAP;                                //允許IAP功能,Clock<12MHz
        IAP_CONTR = CMD_READ;                                        //讀
        IAP_ADDRL = addr;
        IAP_ADDRH = addr >> 8;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        _nop_();_nop_();_nop_();
        dat = IAP_DATA;
        IAP_Idle();
        
        return dat;
}

void IAP_Write_Byte(unsigned int addr,unsigned char dat)
{
        IAP_CONTR = ENABLE_IAP;                                //允許IAP功能
        IAP_CMD = CMD_PROGRAM;                                //寫
        IAP_ADDRL = addr;
        IAP_ADDRH = addr >> 8;
        IAP_DATA = dat;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        _nop_();_nop_();_nop_();
        IAP_Idle();
}

void IAP_Erase_Sector(unsigned int addr)
{
        IAP_CONTR = ENABLE_IAP;                                //允許IAP功能
        IAP_CMD = CMD_ERASE;                                        //擦除
        IAP_ADDRL = addr;
        IAP_ADDRH = addr >> 8;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        _nop_();_nop_();_nop_();
        IAP_Idle();
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

7#
ID:213173 發表于 2020-8-4 20:18 | 只看該作者
STC單片機EEPROM讀寫其實還是很簡單的。單以這段程序片段無法判斷問題所在,懷疑KeyDispose()里4個if條件不能全部滿足。比如NoKeyPressDelayCnt的數據類型等等。
回復

使用道具 舉報

6#
ID:804115 發表于 2020-8-4 17:51 | 只看該作者
建議在EEPROM_WriteDehumiTimeSet();處加入調試信息,看看到底有么有走到這里,可以用uart打印log也可以通過屏disp一些信息。
回復

使用道具 舉報

5#
ID:636538 發表于 2020-8-4 17:47 | 只看該作者
zsj1984 發表于 2020-8-4 16:39
void EEPROM_WriteDehumiTimeSet()                    //先擦除扇區,再寫入數據
{
        IAP_Erase ...

我意識到你是STC12C5A60S2,你有沒有看官方的數據手冊,建議你參考官方測試用例,有寫這個EEPROM至少我看到的延時是一個_nop_();
回復

使用道具 舉報

地板
ID:636538 發表于 2020-8-4 17:34 | 只看該作者
zsj1984 發表于 2020-8-4 16:39
void EEPROM_WriteDehumiTimeSet()                    //先擦除扇區,再寫入數據
{
        IAP_Erase ...

哦,那你這個DehumiTimeSet是全局變量是嗎,
回復

使用道具 舉報

板凳
ID:356610 發表于 2020-8-4 16:39 | 只看該作者
SKYLAR123 發表于 2020-8-4 16:31
首先你想寫入進入參數,那這個函數EEPROM_WriteDehumiTimeSet(形參)要有個形參吧,要不然你想寫入的東西, ...

void EEPROM_WriteDehumiTimeSet()                    //先擦除扇區,再寫入數據
{
        IAP_Erase_Sector(IAP_ADDRESS_1);
        IAP_Write_Byte(IAP_ADDRESS_1,DehumiTimeSet);        
}

DehumiTimeSet就是要寫入的數據(1個字節)。
回復

使用道具 舉報

沙發
ID:636538 發表于 2020-8-4 16:31 | 只看該作者
首先你想寫入進入參數,那這個函數EEPROM_WriteDehumiTimeSet(形參)要有個形參吧,要不然你想寫入的東西,怎么放入這個EEPROM
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品视频99 | 亚洲综合色自拍一区 | 尤物视频在线免费观看 | 日本精品一区二区三区视频 | 欧美日韩亚洲系列 | 久久久www成人免费精品 | 有码一区 | 久久综合久久综合久久 | 一区二区欧美在线 | 久久在看 | 国产免费人成xvideos视频 | 日韩欧美在线不卡 | 欧美综合一区二区三区 | 欧美区日韩区 | 久久日韩精品 | 精品久久久久久国产 | 久久国产精品免费一区二区三区 | 欧美一区二区三区久久精品 | 91秦先生艺校小琴 | 日韩欧美视频在线 | 午夜视频在线观看网址 | 美女视频网站久久 | 99亚洲| 中文字幕一区二区三区四区五区 | 超碰国产在线 | 国产在线视频三区 | 色妹子综合网 | 国产美女在线免费观看 | 日韩在线欧美 | 欧美久久久久久 | 欧美黄在线观看 | 日韩在线电影 | 欧美精品 在线观看 | 欧美日韩国产在线观看 | 中文字幕在线视频网站 | 依人成人 | 天天操狠狠操 | 在线看日韩 | 99re视频在线免费观看 | 日韩免费一区二区 | 亚洲精品视频在线 |