?? i2c.c
字號(hào):
#define FOSC 48000000
#define I2Clock 400000
void i2c_idle(void);
void i2c_init(void);
void i2c_stop(void);
void i2c_start(void);
void i2c_restart(void);
unsigned char i2c_write(far ram unsigned char);
unsigned char i2c_read(unsigned char);
void i2c_init()
{
TRISBbits.TRISB0 =1;
TRISBbits.TRISB1 =1;
PORTBbits.RB0 =1;
PORTBbits.RB1 =1;
SSPSTAT = 0;
SSPADD = (((FOSC/I2Clock)/0x04) -1);
SSPCON1 =0x28;
i2c_idle();
}
void i2c_start()
{
i2c_idle();
SSPCON2bits.SEN = 1;
while(SSPCON2bits.SEN);
}
void i2c_stop()
{
i2c_idle();
SSPCON2bits.PEN = 1;
while(SSPCON2bits.PEN);
}
unsigned char i2c_write(far ram unsigned char i2c_data)
{
i2c_idle();
PIR1bits.SSPIF = 0;
SSPBUF = i2c_data;
while(!PIR1bits.SSPIF);
if(SSPCON2bits.ACKSTAT)
return 0;
else
return 1;
}
unsigned char i2c_read( unsigned char ack)// 0:ACK 1:NACK
{
unsigned char rcv_data;
i2c_idle();
PIR1bits.SSPIF = 0;
SSPCON2bits.RCEN = 1;
while(!PIR1bits.SSPIF);
rcv_data = SSPBUF;
if(!ack)
SSPCON2bits.ACKDT = 0;
else
SSPCON2bits.ACKDT = 1;
SSPCON2bits.ACKEN = 1;
while(SSPCON2bits.ACKEN);
return rcv_data;
}
void i2c_restart()
{
i2c_idle();
SSPCON2bits.RSEN = 1;
while(SSPCON2bits.RSEN);
}
void i2c_idle()
{
while(SSPSTATbits.R_W);
while((SSPCON2 & 0x1F)!= 0);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -