欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3346|回復: 2
收起左側

為啥iic的寫入和讀取之間要加延時,沒加延時單片機讀取不正常?

[復制鏈接]
ID:589491 發表于 2021-1-4 14:07 | 顯示全部樓層 |閱讀模式
為啥iic的寫入和讀取之間要加延時,沒加延時讀取不正常-----------------------------------------------

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

單片機源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit  write=0;           //寫24C02的標志;
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()  //開始信號
{        
        sda=1;
        delay();
        scl=1;
        delay();
        sda=0;
        delay();
}
void stop()   //停止
{
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
}
void respons()  //應答
{
        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
51hei截圖20210104140130.png
回復

使用道具 舉報

ID:743654 發表于 2021-1-4 17:29 | 顯示全部樓層
需要嚴格根據時序圖來寫程序,不按時序圖編寫會出錯。
回復

使用道具 舉報

ID:390416 發表于 2021-1-4 18:02 | 顯示全部樓層
15 03 44 02   IIC讀寫 主從機信號時間關系.png
IIC協議 可以參考我的貼子的源代碼 寫應答和讀應答是不同的
STC8單片機+DS3231+WS2812做的全彩RGB掛鐘程序原理圖資料
http://m.raoushi.com/bbs/dpj-200965-1.html
STC8單片機+DS3231+DS18B20+74HC595的LED16x32點陣溫度萬年歷源代碼分享
http://m.raoushi.com/bbs/dpj-200966-1.html

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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