cdcdcdcd311 发表于 2007-2-9 10:04:03

请教马老师:I2C问题

I2C主发从收,开始发和收都好着,发几组就停下来了,发现程序停在等待START发送,不知道什么问题

cdcdcdcd311 发表于 2007-2-9 10:13:51

void twi_init(unsigned char address)

{

TWSR=0x00;//1分频

TWBR=0x32;//约16.7k的SCL时钟频率

TWAR&=0xFE;//TWI广播识别禁止

TWCR=0X00;//清零

TWCR|=(1<<TWEN)|(1<<TWIE);//使能TWI应答/使能TWI/使能TWI中断

SREG|=0x80;//开全局中断

}









unsigned char I2C_Write_(unsigned int wrDAdr,unsigned char wordAdr,unsigned char *pWrDat,unsigned char num)

{

unsigned char i;

if(I2C_Start()==I2C_ERR)

{return(I2C_ERR);}

if(I2C_SendWrDAdr_(wrDAdr)==I2C_ERR)

{return(I2C_ERR);}

if(I2C_SendDat(wordAdr)==I2C_ERR)

{return(I2C_ERR);}

for(i=0;i<num;i++)

{

          if(I2C_SendDat(*(pWrDat++))==I2C_ERR )

   {return(I2C_ERR);}

}

I2C_Stop();

return(I2C_CRR);

}







void I2C_SRead(void)

{

       unsigned char slave_address;

       //从机模式下:

       EEPROMReadByte(0,&slave_address);

   slave_address=slave_address<<1;//set slave address

       slave_address&=0xFE;

       TWAR=slave_address;

       TWCR=0;

   I2CRcvAckByte();

       I2CWaitAck();

       if((TWSR&0xF8)!=TW_SR_SLA_ACK)//SLA+W已被接收ACK已返回       

       {}       

   I2CRcvAckByte();

       I2CWaitAck();

       I2c_SRdata=TWDR;                        //开始接受数据

       serial_send(I2c_SRdata);

}
页: [1]
查看完整版本: 请教马老师:I2C问题