Bác nào đã dùng I2C của LPC chỉ giúp mình với ,mình thử dùng đoạn code sau giao tiếp với PCF8574 nhưng không thấy chạy .Debug đến đoạn
while((I2C0STAT)!= 0x18){;;} là chương trình dừng ,có lẽ chưa nhận được ack từ slave PCF8574 ????
void write_PCF8574(unsigned char Addr,unsigned char Data) // Write Output PCF8574A
{
I2C0CONCLR = 0x6C; // Reset all I2C Status
I2C0CONSET |= 0x40; // Enable I2C Interface
I2C0CONSET |= 0x20; // Send Start Condition
// Wait I2C Status Return
while((I2C0STAT)!= 0x08){;;} // Wait Start Condition Complete
I2C0DAT = Addr; // Send PCF8574A+[Read/Write]
I2C0CONCLR = 0x28; // Clear Start Bit + Interrupt Flag
// Wait I2C Status Return
while((I2C0STAT)!= 0x18){;;} // Wait Slave Address+W, ACK
I2C0DAT = Data; // Send Output Data to PCF8574A
I2C0CONCLR = 0x0C; // Clear Acknowledge Bit + Interrupt Flag
// Wait I2C Status Return
while((I2C0STAT)!= 0x28){;;} // Wait Slave Address+W, ACK
I2C0CONSET |= 0x10; // Send Stop Condition
I2C0CONCLR = 0x0C; // Clear Acknowledge Bit + Interrupt Flag
}
while((I2C0STAT)!= 0x18){;;} là chương trình dừng ,có lẽ chưa nhận được ack từ slave PCF8574 ????
void write_PCF8574(unsigned char Addr,unsigned char Data) // Write Output PCF8574A
{
I2C0CONCLR = 0x6C; // Reset all I2C Status
I2C0CONSET |= 0x40; // Enable I2C Interface
I2C0CONSET |= 0x20; // Send Start Condition
// Wait I2C Status Return
while((I2C0STAT)!= 0x08){;;} // Wait Start Condition Complete
I2C0DAT = Addr; // Send PCF8574A+[Read/Write]
I2C0CONCLR = 0x28; // Clear Start Bit + Interrupt Flag
// Wait I2C Status Return
while((I2C0STAT)!= 0x18){;;} // Wait Slave Address+W, ACK
I2C0DAT = Data; // Send Output Data to PCF8574A
I2C0CONCLR = 0x0C; // Clear Acknowledge Bit + Interrupt Flag
// Wait I2C Status Return
while((I2C0STAT)!= 0x28){;;} // Wait Slave Address+W, ACK
I2C0CONSET |= 0x10; // Send Stop Condition
I2C0CONCLR = 0x0C; // Clear Acknowledge Bit + Interrupt Flag
}
Comment