TA的每日心情 | 奋斗 2016-12-1 10:22 |
---|
签到天数: 33 天 连续签到: 1 天 [LV.5]常住居民I
|
发表于 2013-3-16 15:55:13
|
显示全部楼层
ming1006 发表于 2013-3-16 15:41
就是直接复制到回复框,文字直接显示
/#define uchar unsigned char
void init_clock() //时钟初始化
{
WDTCTL=WDTPW+WDTHOLD; //关看门狗
BCSCTL1&= ~XT2OFF;
do //判断晶振是否起振
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (int i = 0x47FF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2=SELM_2+SELS; //MCLK 和 SMCLK 选择 XT2时钟源16MHZ
}
void init_pio()
{
P5SEL|=0x06;//p5.1SDA,p5.2SCL
}
void EEPROM_I2C_init(void)//iic初始化函数
{
P5SEL |= BIT1 + BIT2; //设置p5.1,p5.2口为外围模块功能
UCB1CTL1 |=UCSWRST;
UCB1CTL0 |= UCMST + UCMODE_3+UCSYNC; //设置为IIC主机模式
UCB1CTL1 |= UCSSEL_2+UCSWRST; //USCI时钟源选择SMCLK
UCB1BR0 = 0xc8; //SMCLK/30
UCB1BR1 = 0;
UCB1CTL1 &=~UCSWRST; //进入I2C模式
}
void init() //初始化
{
init_clock();
init_pio();
EEPROM_I2C_init();
}
void msec(int x) //
{
int j=0;
while(x>=0)
{
for (j=0; j<600; j++);
x--;
}
}
void EEPROM_I2C_Write_ONEByte(uchar adderss_pre,uchar adderss_curr,uchar data) //EEPROM_I2C写1字节函数
{
while(UCB1STAT&UCBBUSY);
UCB1I2CSA=(deviceaddress|adderss_pre); //设定从机地址为50
UCB1CTL1 |= UCTR + UCTXSTT; //发送起始条件
while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
while(UCB1CTL1&UCTXSTT); //ack(me)
UCB1TXBUF=adderss_curr; //发送第1个8位数据地址
while(UCB1CTL1&UCTXSTT); //ack(me) //等待高位发送完毕
while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
UCB1TXBUF=data;
while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
UCB1CTL1 |=UCTXSTP; //置位发送停止位
UC1IFG &=~UCB1TXIFG;
while(UCB1CTL1&UCTXSTP); //等待主发送停止位发送完毕
msec(1);
}
void EEPROM_I2C_Read_ONEByte(int adderss_pre,int adderss_curr,char *carry) //读
{
UCB1I2CSA=(deviceaddress|adderss_pre); //设定从机地址为50
UCB1CTL1 |= UCTR ;
UCB1CTL1 |= UCTXSTT; //发送起始条件
while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
UCB1TXBUF=adderss_curr;
while(UCB1CTL1&UCTXSTT); //
while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
UCB1I2CSA=(deviceaddress|adderss_pre); //设定从机地址为50
UCB1CTL1 &=(~UCTR); //接收起始条件
UCB1CTL1|=UCTXSTT;
UCB1CTL1|=UCTXSTP;
while(UCB1CTL1&UCTXSTT); //
while((UC1IFG&UCB1TXIFG)!=UCB1TXIFG);
*carry=UCB1RXIFG;
while((UC1IFG&UCB1RXIFG)!=UCB1RXIFG);
UCB1CTL1|=UCTXSTP; //接收停止位
while(UCB1CTL1&UCTXSTP);
temp=*carry;
}
void EEPROM_I2C_read_write_ONEByte(void)//eeprom读写函数
{
EEPROM_I2C_Write_ONEByte(0,0,0x02);//eeprom写函数
EEPROM_I2C_Read_ONEByte(0,0,&carry);//eeprom读函数
}
|
|