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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機讀取不了EEPROM內的值

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

最佳答案

查看完整內容

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

使用道具 舉報

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

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

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

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

void I2cStop()
{
        SDA=0;
        Delay10us();
        SCL=1;
        Delay10us();//建立時間大于4.7us
        SDA=1;
        Delay10us();               
}
/*******************************************************************************
* 函數名         : I2cSendByte(unsigned char num)
* 函數功能                   : 通過I2C發送一個字節。在SCL時鐘信號高電平期間,保持發送信號SDA保持穩定
* 輸入           : num
* 輸出                  : 0或1。發送成功返回1,發送失敗返回0
* 備注           : 發送完一個字節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++)//要發送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沒有應答發送失敗,或者為非應答,表示接收結束
                {
                        SCL=0;
                        Delay10us();
                        return 0;
                }
        }
        SCL=0;
        Delay10us();
        return 1;               
}
/*******************************************************************************
* 函數名         : I2cReadByte()
* 函數功能                   : 使用I2c讀取一個字節
* 輸入           : 無
* 輸出                  : dat
* 備注           : 接收完一個字節SCL=0,SDA=1.
*******************************************************************************/

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

回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久综合 | www.4hu影院 | 天堂一区| 爱爱视频日本 | caoporon| 国产一级特黄真人毛片 | 91福利影院 | 噜噜噜噜狠狠狠7777视频 | 国产精品精品视频一区二区三区 | 久草视频在线播放 | 超碰在线人 | 精品国产伦一区二区三区观看体验 | 国产一区二区三区久久久久久久久 | 天天操夜夜爽 | 国产伦一区二区三区久久 | 日韩国产高清在线观看 | 天天干视频在线 | 91.xxx.高清在线 | 一区二区不卡视频 | 天天操 天天操 | 午夜av影院 | 国产精彩视频 | 国产日韩一区二区 | 久久精品黄色 | 亚洲 自拍 另类 欧美 丝袜 | 天天干天天玩天天操 | 国产高潮av | 一区二区三区日韩 | 亚洲一区二区视频 | 国产精品成人一区二区三区 | 国产美女自拍视频 | 日韩亚洲欧美综合 | 国产精品久久久久久 | gogo肉体亚洲高清在线视 | 在线一区视频 | 成人av一区 | 国内91在线| 久久亚洲一区 | 国产传媒视频在线观看 | 国产一区二区三区久久久久久久久 | 久久精品成人 |