找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機讀取不了EEPROM內(nèi)的值

[復制鏈接]
跳轉到指定樓層
#
ID:342895 發(fā)表于 2018-9-10 16:06 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
30黑幣
這是我寫的門禁系統(tǒng)的一部分,在輸入門的密碼判斷是否正確時出現(xiàn)了問題,在EEPROM內(nèi)存儲的是正確的密碼,但好像Coderead()函數(shù)并未把密碼讀出并保存在CodeT1等變量內(nèi),導致就算我把正確密碼輸入也無法做出我指定的動作,麻煩各位大佬幫忙看看,謝謝。 門禁系統(tǒng).rar (40.63 KB, 下載次數(shù): 14)

最佳答案

查看完整內(nèi)容

下載你的程序看了,主要看的是你的I2C程序,和我用的有很大的不同。 我的程序是一直用著的,肯定沒問題,發(fā)給你看看——對應的就是你的I2C.c文件內(nèi)容。 #include"i2c.h" /******************************************************************************* * 函數(shù)名 : Delay10us() * 函數(shù)功能 : 延時 * 輸入 : 無 * 輸出 : 無 ******************************************************** ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

地板
ID:164602 發(fā)表于 2018-9-12 07:22 | 只看該作者
zeng152 發(fā)表于 2018-9-11 17:18
感謝你的回答,不過不是i2c程序的問題,而是因為我的EEPROM初始化放在了定時器初始化的后面,導致無法將 ...

哦,找到問題就好,謝謝你將解決的情況回復我,我也學習了。
回復

使用道具 舉報

板凳
ID:342895 發(fā)表于 2018-9-11 17:18 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2018-9-11 08:12
下載你的程序看了,主要看的是你的I2C程序,和我用的有很大的不同。
我的程序是一直用著的,肯定沒問題, ...

感謝你的回答,不過不是i2c程序的問題,而是因為我的EEPROM初始化放在了定時器初始化的后面,導致無法將數(shù)據(jù)正常寫入其中
回復

使用道具 舉報

沙發(fā)
ID:342895 發(fā)表于 2018-9-11 16:32 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2018-9-11 08:12
下載你的程序看了,主要看的是你的I2C程序,和我用的有很大的不同。
我的程序是一直用著的,肯定沒問題, ...

你好,我看了一下你發(fā)的代碼,不過感覺我們兩個的代碼是一樣的啊
回復

使用道具 舉報

樓主
ID:164602 發(fā)表于 2018-9-10 16:06 | 只看該作者
下載你的程序看了,主要看的是你的I2C程序,和我用的有很大的不同。
我的程序是一直用著的,肯定沒問題,發(fā)給你看看——對應的就是你的I2C.c文件內(nèi)容。
#include"i2c.h"
/*******************************************************************************
* 函數(shù)名         : Delay10us()
* 函數(shù)功能                   : 延時
* 輸入           : 無
* 輸出                  : 無
*******************************************************************************/

void Delay10us()
{
        unsigned char a,b;
        for(b=1;b>0;b--)
                for(a=2;a>0;a--);

}
/*******************************************************************************
* 函數(shù)名         : I2cStart()
* 函數(shù)功能                   : 起始信號:在SCL時鐘信號在高電平期間SDA信號產(chǎn)生一個下降沿
* 輸入           : 無
* 輸出                  : 無
* 備注           : 起始之后SDA和SCL都為0
*******************************************************************************/

void I2cStart()
{
        SDA=1;
        Delay10us();
        SCL=1;
        Delay10us();//建立時間是SDA保持時間>4.7us
        SDA=0;
        Delay10us();//保持時間是>4us
        SCL=0;                       
        Delay10us();               
}
/*******************************************************************************
* 函數(shù)名         : I2cStop()
* 函數(shù)功能                   : 終止信號:在SCL時鐘信號高電平期間SDA信號產(chǎn)生一個上升沿
* 輸入           : 無
* 輸出                  : 無
* 備注           : 結束之后保持SDA和SCL都為1;表示總線空閑
*******************************************************************************/

void I2cStop()
{
        SDA=0;
        Delay10us();
        SCL=1;
        Delay10us();//建立時間大于4.7us
        SDA=1;
        Delay10us();               
}
/*******************************************************************************
* 函數(shù)名         : I2cSendByte(unsigned char num)
* 函數(shù)功能                   : 通過I2C發(fā)送一個字節(jié)。在SCL時鐘信號高電平期間,保持發(fā)送信號SDA保持穩(wěn)定
* 輸入           : num
* 輸出                  : 0或1。發(fā)送成功返回1,發(fā)送失敗返回0
* 備注           : 發(fā)送完一個字節(jié)SCL=0,SDA=1
*******************************************************************************/

unsigned char I2cSendByte(unsigned char dat)
{
        unsigned char a=0,b=0;//最大255,一個機器周期為1us,最大延時255us。               
        for(a=0;a<8;a++)//要發(fā)送8位,從最高位開始
        {
                SDA=dat>>7;         //起始信號之后SCL=0,所以可以直接改變SDA信號
                dat=dat<<1;
                Delay10us();
                SCL=1;
                Delay10us();//建立時間>4.7us
                SCL=0;
                Delay10us();//時間大于4us               
        }
        SDA=1;
        Delay10us();
        SCL=1;
        while(SDA)//等待應答,也就是等待從設備把SDA拉低
        {
                b++;
                if(b>200)         //如果超過2000us沒有應答發(fā)送失敗,或者為非應答,表示接收結束
                {
                        SCL=0;
                        Delay10us();
                        return 0;
                }
        }
        SCL=0;
        Delay10us();
        return 1;               
}
/*******************************************************************************
* 函數(shù)名         : I2cReadByte()
* 函數(shù)功能                   : 使用I2c讀取一個字節(jié)
* 輸入           : 無
* 輸出                  : dat
* 備注           : 接收完一個字節(jié)SCL=0,SDA=1.
*******************************************************************************/

unsigned char I2cReadByte()
{
        unsigned char a=0,dat=0;
        SDA=1;                        //起始和發(fā)送一個字節(jié)之后SCL都是0
        Delay10us();
        for(a=0;a<8;a++)//接收8個字節(jié)
        {
                SCL=1;
                Delay10us();
                dat<<=1;
                dat|=SDA;
                Delay10us();
                SCL=0;
                Delay10us();
        }
        return dat;               
}

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表