微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用24c02记录开机次数

用24c02记录开机次数

时间:10-02 整理:3721RD 点击:
真心找不到错误了,程序已经写了两遍了求助啊
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P2^0;
sbit sda=P2^1;
void delay()
{
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}
void start()
{
        scl=0;
        delay();
        sda=1;
        delay();
        scl=1;
        delay();               
        sda=0;
        delay();
        scl=0;
        delay();
        scl=1;
        delay();       
}
void stop()
{
        scl=0;
        delay();
        sda=0;
        delay();
        scl=1;
        delay();
        sda=1;
        delay();
        scl=0;
        delay();
}
void respond()
{
        uchar i=0;
        scl=1;
        delay();
        while((sda==1)&&(i<255))
                i++;
        scl=0;
        delay();
        scl=1;
        delay();
}
void no_respond()
{
        sda=1;
        delay();      
        scl=1;
        delay();  
        scl=0;                //清时钟线,钳住I2C总线以便继续接收
        delay();
}
void write_byte(uchar dat)
{
        uchar i=0;
        scl=0;
        for(i=0;i<8;i++)
        {
             if((dat<<i)&0x80)sda=1;   //判断发送位
        else  sda=0;               
        delay();
             scl=1;               //置时钟线为高,通知被控器开始接收数据位
        delay();        
        scl=0;
        }
        sda=1;
        delay();
        scl=1;
        delay();
}
uchar read_byte(void)
{
        uchar dat,i;
        scl=0;
        delay();
        sda=1;
        delay();
        for(i=0;i<8;i++)
        {
                scl=1;
                delay();
                dat=(dat<<1)|sda;
                scl=0;
                delay();
        }
        scl=0;
        delay();
        sda=1;
        delay();
        return dat;
}
void write_add(uchar add,uchar num)
{
        start();
        write_byte(0xae);
        respond();
        write_byte(add);
        respond();
        write_byte(num);
        respond();
        stop();
}
uchar read_add(uchar add)
{
        uchar dat;
        start();
        write_byte(0xae);
        respond();
        write_byte(add);
        respond();
        start();
        write_byte(0xaf);
        respond();
        dat=read_byte();
        no_respond();
        stop();
        return dat;
}
void main()
{
        uchar num;
        num=read_add(5);
        if(num>=15)num=0;
        num++;
        P1=~num;
        write_add(5,num);
        while(1);
}

什么错误不讲 光让人看程序?

说说,错误在哪?

根本写不到24c02里面,就是不知道iic哪里模拟错了

I didn't your mean.

问一下,你的WP控制了吗?

自己检查一下读写时序吧

建议你再检查一下自己的时序,然后给程序加一下注释,方便别人看,也方便自己检查错误!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top