| 
这里给出IIC初始化的程序,谢谢大家关注| #define     bit_is_set(sfr, bit)                   ( sfr & _BV(bit) )
 #define     bit_is_clear(sfr, bit)                 ( ! (sfr & BIT(bit)) )
 #define     loop_until_bit_is_set(sfr, bit)     do { } while (bit_is_clear(sfr, bit))
 #define     loop_until_bit_is_clear(sfr, bit)     do { } while (bit_is_set(sfr, bit))
 #define     cbit(sfr, bit)                         ( sfr &= (~bit) )
 #define     cbi(sfr, bit)                         ( sfr &= ~ BIT(bit) )
 #define     sbi(sfr, bit)                        ( sfr |= BIT(bit) )
 #define     inb(sfr)                             sfr
 #define     outb(sfr, val)                         ( sfr = (val) )
 #define     outp(val, sfr)                         outb(sfr, val)
 #define     inp(sfr)                             inb(sfr)
 #define     inw(sfr)                            sfr
 #define     outw(sfr, val)                         ( sfr =  val )
 /* ---- MIN/MAX/ABS macros ----- */
 
 #define     MIN(a,b)            ((a<b)?(a):(b))
 #define         MAX(a,b)            ((a>b)?(a):(b))
 #define     ABS(x)                ((x>0)?(x):(-x))
 
 
 /**********************************************************************************************************
 * 函数介绍:
 * 输入参数:--
 * 输出参数:--
 * 返 回 值:--
 **********************************************************************************************************/
 void i2cSetBitrate(U16 bitrateKHz)
 {
 U8 bitrate_div;
 // set i2c bitrate
 // calculate bitrate division
 bitrate_div = ((F_CPU/1000l)/bitrateKHz);
 if(bitrate_div >= 16)
 bitrate_div = (bitrate_div-16)/2;
 outb(TWBR, bitrate_div);
 }
 
 //////////////////////////////////////////////////////////////////////////////
 /**********************************************************************************************************
 * 函数介绍:
 * 输入参数:--
 * 输出参数:--
 * 返 回 值:--
 **********************************************************************************************************/
 void i2cInit(void)
 {
 
 // set i2c bit rate to 100KHz
 i2cSetBitrate(100);
 // enable TWI (two-wire interface)
 sbi(TWCR, TWEN);
 // set state
 //    I2cState = I2C_IDLE;
 // enable TWI interrupt and slave address ACK
 sbi(TWCR, TWIE);
 sbi(TWCR, TWEA);
 //outb(TWCR, (inb(TWCR)&TWCR_CMD_MASK)|BV(TWINT)|BV(TWEA));
 // enable interrupts
 SEI();
 }
 
 | 
 |