em ngẫm mãi mà không hiểu đoạn code giao tiếp I2C dưới đây, mong các anh chỉ giáo !
bit I2C_Write(unsigned char dat){
unsigned char i;
bit outbit;
for (i = 1; i <= 8; i++){
outbit=dat&0x80;
SDA = outbit;
dat = dat << 1;
SCL_high();
SCL_low();
}
SDA = 1;
SCL_high();
outbit = SDA;
SCL_low();
return(outbit);
}
//----------------------------------------------------
unsigned char I2C_Read(bit ack){
unsigned char i, dat;
bit inbit;
dat = 0;
for(i=1;i<=8;i++) {
SCL_high();
inbit = SDA;
dat = dat << 1;
dat = dat | inbit;
SCL_low();
}
if (ack) SDA = 0;
else SDA = 1;
SCL_high();
SCL = 0;
SDA = 1;
delay();
return(dat);
}
em không hiểu ở chỗ tại sao sau khi truyền 8 bit lên bus dữ liệu, để ghi dữ liệu thì phải truyền bít 0 chứ sao lại truyền bit 1? Và có thể dùng mạch nạp avr910 để nạp cho chip 89S52 không?
bit I2C_Write(unsigned char dat){
unsigned char i;
bit outbit;
for (i = 1; i <= 8; i++){
outbit=dat&0x80;
SDA = outbit;
dat = dat << 1;
SCL_high();
SCL_low();
}
SDA = 1;
SCL_high();
outbit = SDA;
SCL_low();
return(outbit);
}
//----------------------------------------------------
unsigned char I2C_Read(bit ack){
unsigned char i, dat;
bit inbit;
dat = 0;
for(i=1;i<=8;i++) {
SCL_high();
inbit = SDA;
dat = dat << 1;
dat = dat | inbit;
SCL_low();
}
if (ack) SDA = 0;
else SDA = 1;
SCL_high();
SCL = 0;
SDA = 1;
delay();
return(dat);
}
em không hiểu ở chỗ tại sao sau khi truyền 8 bit lên bus dữ liệu, để ghi dữ liệu thì phải truyền bít 0 chứ sao lại truyền bit 1? Và có thể dùng mạch nạp avr910 để nạp cho chip 89S52 không?
Comment