在线时间11 小时
UID417456
ST金币0
蝴蝶豆0
注册时间2013-2-22
初级会员
- 最后登录
- 2019-8-3
|
a0a.1 0b0c
void I2C_Init(void)
{
I2C_close();
I2C_Ack();
I2C_FREQR=0x0f; //I2C外设时钟频率为8MHz
I2C_CCRH=0x00; //
I2C_CCRL=0x28;
I2C_TRISER=0x11;
I2C_open();
}
void I2C_Write(unsigned char highbyte_add, unsigned char lowbyte_add, unsigned char data)
{
unsigned char temp;
I2C_start();
while(!I2C_SBask);
I2C_writebyte(Write_add);
while(!I2C_addrask);
temp=I2C_SR1;
temp=I2C_SR3;
I2C_writebyte(highbyte_add);
while(!I2C_TxEask);
I2C_writebyte(lowbyte_add);
while(!I2C_TxEask);
I2C_writebyte(data);
while(!I2C_TxEask);
I2C_stop();
}
unsigned char I2C_Read(unsigned char highbyte_add,unsigned char lowbyte_add)
{
unsigned char temp;
I2C_start();
while(!I2C_SBask);
I2C_writebyte(Write_add);
while(!I2C_addrask); 连续运行时总会卡在这一步,用示波器观察是没有收到应答信号。但是一步一步仿真测试的话是能接收 到应答信号的。在写数据到EEPROM的操作中不会出现这样的问题。
temp=I2C_SR3;
I2C_writebyte(highbyte_add);
while(!I2C_TxEask);
temp=I2C_SR3;
I2C_writebyte(lowbyte_add);
while(!I2C_TxEask);
I2C_start();
while(!I2C_SBask);
I2C_writebyte(Read_add);
while(!I2C_addrask);
temp=I2C_SR3;
while(!I2C_RxNeask);
temp=I2C_DR;
return temp;
I2C_NAck();
I2C_stop();
}
哪位知道原因?我操作的是24C256。 |
|