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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4292|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

C51單片機(jī)通過(guò)I2C對(duì)EEPROM進(jìn)行頁(yè)讀取的問(wèn)題求助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:424091 發(fā)表于 2018-11-13 07:58 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
25黑幣
我在嘗試移植教材上的程序時(shí),發(fā)現(xiàn)在頁(yè)讀取EEPROM時(shí),第9位應(yīng)答位假如直接置1或置0,就可以順利讀取,但由形參傳遞1或0給應(yīng)答位時(shí),就只能讀到一串0,這是什么原因?


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

使用道具 舉報(bào)

沙發(fā)
ID:411940 發(fā)表于 2018-11-13 11:02 | 只看該作者
你可以在論壇里面搜集一下,有很多現(xiàn)成的程序可以參考學(xué)習(xí)。要善用論壇的搜索功能。
回復(fù)

使用道具 舉報(bào)

板凳
ID:424091 發(fā)表于 2018-11-13 12:16 | 只看該作者
浮念 發(fā)表于 2018-11-13 11:02
你可以在論壇里面搜集一下,有很多現(xiàn)成的程序可以參考學(xué)習(xí)。要善用論壇的搜索功能。

程序上我沒(méi)有太大的問(wèn)題,這部分程序我也是移植后再自己重新編寫(xiě)了的,主要就是想不明白為啥直接置位可以,用形參置位就出問(wèn)題了,形參置位和直接置位有啥區(qū)別嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:7485 發(fā)表于 2018-11-13 15:53 | 只看該作者
怎么用圖形貼出來(lái),而不用文本格式呢?別人想試一試程序還要照?qǐng)D抄一遍?
回復(fù)

使用道具 舉報(bào)

5#
ID:424091 發(fā)表于 2018-11-13 17:35 | 只看該作者
ahshmj 發(fā)表于 2018-11-13 15:53
怎么用圖形貼出來(lái),而不用文本格式呢?別人想試一試程序還要照?qǐng)D抄一遍?

額,好吧,我把程序列出來(lái)
回復(fù)

使用道具 舉報(bào)

6#
ID:424091 發(fā)表于 2018-11-13 17:39 | 只看該作者
----------------------------------------------------------------主函數(shù)
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int

extern void Int_Lcd();
extern void Lcd_Show(u8 x,u8 y,u8 *set);
extern void EE_Read(u8 *buf,u8 addr,u8 len);
extern void EE_Write(u8 *buf,u8 addr,u8 len);

void Str_Convert(u8 *str,u8 *src,u8 len);

void main()
{
        u8 buf[5]={5,2,8,6,1};
        u8 str[20];
       
        Int_Lcd();
//        EE_Write(buf,0x00,sizeof(buf));              //EEPROM寫(xiě)入
        EE_Read(buf,0x00,sizeof(buf));          //EEPROM讀取
        Str_Convert(str,buf,sizeof(buf));       //字符串轉(zhuǎn)化函數(shù)
        Lcd_Show(0,0,str);                      //1cd1602顯示
        while(1);
}

void Str_Convert(u8 *str,u8 *src,u8 len)
{
        u8 tem;
        while(len--)
        {
                tem=*src>>4;
                if(tem<=9)
                        *str++=tem+'0';
                else
                        *str++=tem-10+'a';
                tem=*src&0x0f;
                if(tem<=9)
                        *str++=tem+'0';
                else
                        *str++=tem-10+'a';
                *str++=' ';
                src++;
        }
}
----------------------------------------------------------------LCD1602
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
#define LCD_DB P0

sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_E=P2^7;
       
void LCD_Wait_Ready()
{
        u8 sta;

        LCD_DB=0xff;
        LCD_RS=0;
        LCD_RW=1;
        do
        {
                LCD_E=1;
                sta=LCD_DB;
                LCD_E=0;
        }
        while(sta & 0x80);
}

void LCD_Write_Cmd(u8 cmd)
{
        LCD_Wait_Ready();
        LCD_RS=0;
        LCD_RW=0;
        LCD_DB=cmd;
        LCD_E=1;
        LCD_E=0;
}

void LCD_Write_Dat(u8 dat)
{
        LCD_Wait_Ready();
        LCD_RS=1;
        LCD_RW=0;
        LCD_DB=dat;
        LCD_E=1;
        LCD_E=0;
}

void Lcd_Set_Cursor(u8 x,u8 y)
{
        u8 addr;
        if(y==0)
                addr=0x00+x;
        else
                addr=0x40+x;
        LCD_Write_Cmd(addr | 0x80);
}

void Lcd_Show(u8 x,u8 y,u8 *str)
{
        Lcd_Set_Cursor(x,y);
        while(*str!='\0')
        {
                LCD_Write_Dat(*str++);
        }
}

void Int_Lcd()
{
        LCD_Write_Cmd(0x38);
        LCD_Write_Cmd(0x0c);
        LCD_Write_Cmd(0x06);
        LCD_Write_Cmd(0x01);
}
----------------------------------------------------------------I2C
#include <reg52.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int

sbit SCL=P2^1;
sbit SDA=P2^0;
sbit LED1=P0^0;
sbit LED2=P0^1;

void Dealy()
{
        u8 i;
       
        for(i=0;i<10;i++)
                _nop_();
}

void I2C_Start()
{
        SDA=1;
        SCL=1;
        Dealy();
        SDA=0;
        Dealy();
        SCL=0;
        Dealy();
}

void I2C_Stop()
{
        SCL=0;
        SDA=0;
        Dealy();
        SCL=1;
        Dealy();
        SDA=1;
        Dealy();
}

bit I2C_Write(u8 dat)         //I2C寫(xiě)入
{
        bit ack;
        u8 mask;
       
        for(mask=0x80;mask>0;mask>>=1)
        {
                if((mask & dat)==0)
                        SDA=0;
                else
                        SDA=1;
                Dealy();
                SCL=1;
                Dealy();
                SCL=0;
                Dealy();
        }
        SDA=1;
        Dealy();
        SCL=1;
        ack=SDA;
        Dealy();
        SCL=0;
        Dealy();
        return (~ack);
}

u8 I2C_Read(bit ack)         //I2C讀取
{
        u8 dat,i;
       
        SDA=1;
        Dealy();             //延時(shí)10us
        for(i=0;i<8;i++)
        {
                SCL=1;
                Dealy();
                dat<<=1;
                dat |= SDA;
                Dealy();
                SCL=0;
                Dealy();
        }
        SDA=ack;     //SDA由形參ack控制
        Dealy();
        SCL=1;
        Dealy();
        SCL=0;
        Dealy();
        return dat;
}

u8 I2C_ReadACK()
{
        u8 dat,i;
       
        SDA=1;
        Dealy();         //延時(shí)10us
        for(i=0;i<8;i++)
        {
                SCL=1;
                Dealy();
                dat<<=1;
                dat |= SDA;
                Dealy();
                SCL=0;
                Dealy();
        }
        SDA=0;      //SDA直接置0
        Dealy();
        SCL=1;
        Dealy();
        SCL=0;
        Dealy();
        return dat;
}

u8 I2C_ReadNAK()
{
        u8 dat,i;
       
        SDA=1;
        Dealy();
        for(i=0;i<8;i++)
        {
                SCL=1;
                Dealy();
                dat<<=1;
                dat |= SDA;
                Dealy();
                SCL=0;
                Dealy();
        }
        SDA=1;       //SDA直接置1
        Dealy();
        SCL=1;
        Dealy();
        SCL=0;
        Dealy();
        return dat;
}
----------------------------------------------------------------EEPROM
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int

extern void I2C_Start();
extern void I2C_Stop();
extern bit I2C_Write(u8 dat);
extern bit I2C_Read(bit ack);
extern u8 I2C_ReadACK();
extern u8 I2C_ReadNAK();

void EE_Read(u8 *buf,u8 addr,u8 len)       //EEPROM讀取,len讀取長(zhǎng)度
{
        do
        {
                I2C_Start();
                if(I2C_Write(0x50<<1))
                        break;
                I2C_Stop();
        }
        while(1);
        I2C_Write(addr);            //寫(xiě)入讀取的起始地址
        I2C_Start();
        I2C_Write((0x50<<1)|0x01);
        while(len>1)
        {
                *buf++=I2C_Read(0);       //應(yīng)答位置0
//                *buf++=I2C_ReadACK();
                len--;
        }
        *buf=I2C_Read(1);           //應(yīng)答位置1
//        *buf=I2C_ReadNAK();
        I2C_Stop();
}

void EE_Write(u8 *buf,u8 addr,u8 len)       //EEPROM寫(xiě)入
{
        while(len>0)
        {
                do
                {
                        I2C_Start();
                        if(I2C_Write(0x50<<1))
                                break;
                        I2C_Stop();
                }
                while(1);
                I2C_Write(addr);
                while(len>0)
                {
                        I2C_Write(*buf++);
                        len--;
                        addr++;
                        if((addr&0x07)==0)
                                break;
                }
                I2C_Stop();       
        }
}
回復(fù)

使用道具 舉報(bào)

7#
ID:424091 發(fā)表于 2018-11-13 22:11 | 只看該作者
ahshmj 發(fā)表于 2018-11-13 15:53
怎么用圖形貼出來(lái),而不用文本格式呢?別人想試一試程序還要照?qǐng)D抄一遍?

大佬求幫忙看看
回復(fù)

使用道具 舉報(bào)

8#
ID:111634 發(fā)表于 2018-11-14 08:23 | 只看該作者
實(shí)例49  讀寫(xiě)AT24C02
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区不卡 | 国产精品欧美日韩 | 亚洲国产一区二区三区在线观看 | 国产精品九九九 | 精品精品| 久久蜜桃资源一区二区老牛 | 久久精品一二三影院 | 成人性生交大片免费看中文带字幕 | 欧美久久久久久久久中文字幕 | 男人影音 | 国产精品久久久久久 | 国产精品海角社区在线观看 | 中文av在线播放 | 日韩视频免费在线 | 中文字幕一区二区三区不卡在线 | 99精品国产一区二区青青牛奶 | 中文字幕日韩一区 | 国产精品美女久久久免费 | 中文字字幕一区二区三区四区五区 | 欧美激情第一区 | www.欧美.com | 亚洲国产成人精品女人久久久野战 | 在线免费观看一区二区 | 在线观看国产视频 | 狠狠色网 | 懂色中文一区二区三区在线视频 | 亚洲精品久久久蜜桃 | 一级毛片网 | 成人av久久 | 日韩一级免费看 | 色综合一区二区 | 国产欧美日韩精品一区 | 亚洲国产区 | 嫩草视频在线看 | 男女午夜免费视频 | 蜜桃av一区二区三区 | 欧美激情精品久久久久 | 天天操天天射天天 | 成人二区 | 国产视频久久 | 亚洲视频中文字幕 |