有没有单片机程序,是把IIC的数据读出来。是有应答的。。具体还没想到思路,还想有人执教一下

有没有单片机程序,是把IIC的数据读出来。是有应答的。。具体还没想到思路,还想有人执教一下,第1张

此测试程序是先写后读,已经测度通过,希望对你有用!!! /

24c02测试程序 20111201 wqz

/

#include<reg52h>

#include<intrinsh>typedef unsigned char uchar;#define delay5us() _nop_();_nop_();_nop_();_nop_();_nop_();

// _nop_();_nop_();_nop_();_nop_();_nop_(); //延时sbit SDA=P2^7; //IIC总线

sbit SCL=P2^6;

sbit IO =P1^7; //595控制信号

sbit RLK =P1^6;

sbit CLK =P1^5;void my_delay1ms(int t); //晶振频率为110592时,延时为1ms

void Start(); //起始信号

void stop(); //结束信号

void ACK(); //写应答

bit test(); //测试应答信号

void nn(); //不应答

void write_1byte(uchar num);//写一字节数据

uchar read_1byte(); //读一字节数据

uchar write_data(uchar addr,uchar Data,uchar num); //将数据写入24C02中

void write_mpage(uchar addr,uchar Data,uchar num); //页写

void read_data(uchar addr,uchar p,uchar num2); //从24C02中读出数据/

主函数

/void main()

{

uchar i,j,aa; uchar dis1[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,<br> 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0--F

uchar dis2[16]; //将dis1中的数据写入24C02后读出存在dis2中

write_mpage(0,dis1,16); //写

my_delay1ms(10);

read_data(0,dis2,16); // 读

my_delay1ms(10); while(1)

{

for(j=0;j<16;j++) //将读出的数据显示在数码管上,测试正确性

{

aa=dis2[j];

RLK=0;

for(i=0;i<8;i++)

{

aa<<=1;

IO=CY;

CLK=0;

CLK=1;

}

RLK=1;

my_delay1ms(2000);

}

}

}//void my_delay1ms(int t) //晶振频率为110592时,延时为1ms

{

uchar i,j; while(t--)

{

for(i=10;i>0;i--)

for(j=41;j>0;j--);

}

}//void Start() //起始信号

{

SDA=1;

SCL=1;

delay5us();

SDA=0;

delay5us();

SCL=0;

delay5us();

SDA=1;

}//void stop() //结束信号

{

SDA=0;

delay5us();

SCL=0;

SCL=1;

delay5us();

SDA=1;

}//void ACK() //写应答

{

SDA=0;

SCL=1;

delay5us();

SCL=0;

delay5us();

SDA=1;

}//bit test() //测试应答信号

{

bit a; SDA=1;

delay5us();

SCL=1;

a=SDA;

SCL=0;

return(a);

}//void nn() //不应答

{

SDA=1;

SCL=0;

delay5us();

SCL=1;

}//void write_1byte(uchar num)//写一字节数据

{

uchar i,date; date=num;

for(i=0;i<8;i++)

{

date<<=1;

SDA=CY;

delay5us();

SCL=1;

delay5us();

SCL=0;

}

}//uchar read_1byte() //读一字节数据

{

uchar i,tember=0; for (i=0;i<8;i++)

{

tember<<=1;

if(SDA)

tember|=0x01;

SCL=1;

delay5us();

SCL=0;

}

return tember;

}//uchar write_data(uchar addr,uchar Data,uchar num) //将数据写入24C02中

{

uchar i,diz; diz=addr;

Start();

write_1byte(0xa0);

test();

write_1byte(diz);

test();

for(i=0;i<num;)

{

write_1byte(Data++);

test();

i++;

diz++;

if((diz&0x07)==0) break;

}

stop();

return (num-i);

}//void write_mpage(uchar addr,uchar Data,uchar num) //页写

{

uchar ff; ff=num;

do

{

ff=write_data( addr+(num-ff),Data+(num-ff),ff);

my_delay1ms(10);

}

while(ff);

}//void read_data(uchar addr,uchar p,uchar num2) //从24C02中读出数据

{

uchar i; Start();

write_1byte(0xa0);

test();

write_1byte(addr);

test();

Start();

write_1byte(0xa1);

test();

for(i=0;i<num2-1;i++)

{

p++=read_1byte();

ACK();

}

p=read_1byte();

nn();

stop();

}

在器件在有它各自的址,但它们有两不同的区分方法,如:EEPROM芯片它不仅有内部地,它还有外接的几个引脚用于区分不同的EEPROM芯片,而温度传感器它的内部地址每一个都不同(出厂时就已写入)。有还有就是I2C有8位地址和10位地址两种。

有一个51单片机

/

                LED闪烁的简单试验              

     连接方法: JP11(P2)和JP1用8PIN排线连接起来              

                       

/

#include <reg51h>    //此文件中定义了51的一些特殊功能寄存器

void delay(unsigned int i);  //声明延时函数

main()

{

P1  = 0x00; //置P0口为低电平

delay(600); // 调用延时程序

P1  = 0xff; //置P0口为高电平

delay(600); // 调用延时程序

}

/延时函数/

void delay(unsigned int i)

{

unsigned char j;

for(i; i > 0; i--)

for(j = 255; j > 0; j--);

}

单片机是连线

以上就是关于有没有单片机程序,是把IIC的数据读出来。是有应答的。。具体还没想到思路,还想有人执教一下全部的内容,包括:有没有单片机程序,是把IIC的数据读出来。是有应答的。。具体还没想到思路,还想有人执教一下、单片机IIC总线上24c02写数据问题。、编写一个c程序来控制LED闪烁,通过iic总线,就是sbit sda....sbit scl.... 求告知 应该怎么编写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10066970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存