ES =0;

switch(type)

{

case 0x01:

case 0x02:

case 0x04:

case 0x08:

case 0x16:

type =0x02;

addr[1] |=0xa0;

device_addr 《《=1;

addr[1] |=device_addr;

break;

default:

type =0x03;

addr[2] |=0xa0;

device_addr 《《=1;

addr[2] |=device_addr;

}

if(rw ==0x01) //读EEPROM

{

read_eeprom();

}

else if(rw ==0x00) //写EEPROM

{

write_eeprom();

}

else //error command

{

error();

ACC =0x01;

SBUF =ACC;

while(!TI);

TI =0;

}

}

}

void read_eeprom(void)

{

uchar i;

WP =1;

iic_start();

for(i=1;i《=type;i++)

{

send_data =addr[type-i];

send_byte();

iic_ack();

if(ack_flag ==0x01)

break;

}

if(ack_flag ==0x00)

{

iic_start();

addr[type-1] |=0x01;

send_data =addr[type-1];

send_byte();

iic_ack();

if(ack_flag ==0x00)

{

for(i=0;i

//如果你对本程序或者24C01读写还有什么疑问,欢迎到的论坛去交流。

void write_eeprom(void)

{

uchar i;

WP =0;

iic_start();

for(i=1;i《=type;i++)

{

send_data =addr[type-i];

send_byte();

iic_ack();

if(ack_flag ==0x01)

break;

}

if(ack_flag ==0x00)

{

for(i=0;i

void read_byte(void)

{

uchar i,temp=0x80;

send_data =0x00;

SCL =0;

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

{

SDA =1;

SCL =1;

if(SDA)

send_data |=temp;

temp/=2;

SCL =0;

iic_delay();

}

}

void send_byte(void)

{

uchar i,temp=0x80;

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

{

if((send_data&temp)==temp)

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查