郭天祥51单片机教程— IIC总线
#include <reg52.h>
#define uchar unsigned char
sbit SDA = P2^0;
sbit SCL = p2_1;
void delay()
{
;;
}
void delay1(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void wirte_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
wirte_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 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;
SCL = 1;
}
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;
SDA = 1;
delay();
}
uchar read_byte()
{
uchar i,j,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 main()
{
init();
wirte_add(23,0xaa);
delay1(100);
P1 = read_add(23);
while(1);
}