该程序有很多问题 小弟找不出来 求高手找错 谢谢

2019-07-16 04:03发布

求高手找错  谢谢
AT24c02.zip 下载积分: 积分 -1 分
23.32 KB, 下载次数: 12, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
lstcspring
2019-07-16 14:49
//一定要记住:data是关键字
#include<reg51.h>
#include<intrins.h>
#include"timer0.h"
//#include"IIC.h"
typedef unsigned int uint;
typedef unsigned char uchar;
sbit SDA=P2^1;
sbit SCL=P2^0;

void delay()//4~5us延时  11.0592M晶振
{ ;; }

void IIC_start()//启动IIC:SCL在高电平期间,SDA一个下降沿启动信号。
{
        SDA=1;
        SCL=1;
        delay();
        SDA=0;
        delay();
}

void IIC_respons()//应答信号:SCL在高电平期间,SDA被从设备拉为低电平表示应答。
{
        SCL=1;
        delay();
        SDA=0;
        delay();
        SCL=0;
        delay();       
}

void IIC_stop()//停止信号:SCL在高电平期间,SDA一个上升沿停止信号。
{
        SCL=1;
        delay();
        SDA=0;
        delay();
        SDA=1;
        delay();       
}

void IIC_writebyte(uchar date)//一定要记住:data是关键字
{
        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 IIC_readbyte()// 读一个字节:串行接收一个字节时需要8位一位位接收,然后再组成一个字节。
{
        uchar i,k;
        SCL=0;
        delay();
        SDA=1;
        for(i=0;i<8;i++)
        {
                SCL=1;
                delay();
                k=(k<<1|SDA);
                SCL=0;
                delay();
        }
        delay();
        return k;
}

void IIC_write_add(uchar address,uchar date)//指定地址的写操作
{
        IIC_start();
        IIC_writebyte(0xa0);
        IIC_respons();
        IIC_writebyte(address);
        IIC_respons();
        IIC_writebyte(date);
        IIC_respons();
        IIC_stop();       
}

uchar IIC_read_add(uchar address)//指定地址读操作
{
        uchar date;
        IIC_start();
        IIC_writebyte(0xa0);//先把地址写进去
        IIC_respons();
        IIC_writebyte(address);
        IIC_respons();
        IIC_start();
        IIC_writebyte(0xa1);
        IIC_respons();
        date=IIC_readbyte();
        IIC_stop();
        return date;
}










一周热门 更多>