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

QQ登錄

只需一步,快速開始

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

為啥iic的寫入和讀取之間要加延時(shí),沒(méi)加延時(shí)單片機(jī)讀取不正常?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
為啥iic的寫入和讀取之間要加延時(shí),沒(méi)加延時(shí)讀取不正常-----------------------------------------------

以下程序用郭天祥例程改的-------------------------------------

單片機(jī)源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit  write=0;           //寫24C02的標(biāo)志;
sbit sda=P2^0;                        
sbit scl=P2^1;

void delay()
{ ;; }
void delay1ms(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void start()  //開始信號(hào)
{        
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
}
void stop()   //停止
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void respons()  //應(yīng)答
{
        uchar i;
        scl=1;
        delay();
        while((sda==1)&&(i<250))i++;
        scl=0;
        delay();
}
void init()
{
        sda=1;
        delay();
        scl=1;
        delay();
}
void write_byte(uchar date)
{
        uchar i,temp;
        temp=date;
        for(i=0;i<8;i++)
        {
                temp=temp<<1;
                scl=0;
            delay();
                sda=CY;
                delay();
                scl=1;
                delay();
        }
        scl=0;
        delay();
        sda=1;
        delay();
}
uchar read_byte()
{
        uchar i,k;
        scl=0;
        delay();
        sda=1;
        delay();
        for(i=0;i<8;i++)
        {
                scl=1;
                delay();        
                k=(k<<1)|sda;
                scl=0;
                delay();        
        }
        return k;
}
void write_add(uchar address,uchar date)
{
        start();
        write_byte(0xa0);
        respons();
        write_byte(address);
        respons();
        write_byte(date);
        respons();
        stop();
}
uchar read_add(uchar address)
{
        uchar date;
        start();
        write_byte(0xa0);
        respons();
        write_byte(address);
        respons();
        start();
        write_byte(0xa1);
        respons();
        date=read_byte();
        stop();
        return date;
}


void main()
{
    init();
        delay1ms(12);
        delay1ms(1);
        write_add(2,0xa1);
        delay1ms(1);
    P1=read_add(2);
    while(1);
}
源碼用郭天祥例程改的

51hei截圖20210104140116.png (234.55 KB, 下載次數(shù): 89)

51hei截圖20210104140116.png

51hei截圖20210104140130.png (247.49 KB, 下載次數(shù): 103)

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

使用道具 舉報(bào)

沙發(fā)
ID:743654 發(fā)表于 2021-1-4 17:29 | 只看該作者
需要嚴(yán)格根據(jù)時(shí)序圖來(lái)寫程序,不按時(shí)序圖編寫會(huì)出錯(cuò)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:390416 發(fā)表于 2021-1-4 18:02 | 只看該作者

IIC協(xié)議 可以參考我的貼子的源代碼 寫應(yīng)答和讀應(yīng)答是不同的
STC8單片機(jī)+DS3231+WS2812做的全彩RGB掛鐘程序原理圖資料
http://www.torrancerestoration.com/bbs/dpj-200965-1.html
STC8單片機(jī)+DS3231+DS18B20+74HC595的LED16x32點(diǎn)陣溫度萬(wàn)年歷源代碼分享
http://www.torrancerestoration.com/bbs/dpj-200966-1.html

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表