|
楼主 |
发表于 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);
} |
|