/**************************************************
msp430f149单片机
IIC AT24C64A 先读一下里面的内容
然后,再写入,6MHZ的时钟
***************************************************/
#include <msp430x14x.h>
#include "msp430.h"
unsigned char BUF[128];
unsigned char BUF1[128];
unsigned int IIc_WrAddr; //最大是0X03FF
unsigned int IIc_RdAddr;
unsigned int addr_ji;/////////////////////////////////
unsigned int addr_ou;/////////////////////////////////
/**************************************************
主程序
***************************************************/
void main(void)
{
unsigned int i;
unsigned char value;
//unsigned char byte,value;
//unsigned char temp,temp1,temp2;
value = 0;
IIc_WrAddr = 0X0000; //最大是0X03FF
IIc_RdAddr = 0X0000;
addr_ji = 1;
addr_ou = 1;
WDTCTL = WDTPW + WDTHOLD; //WDT
BCSCTL1 &= ~XT2OFF; //XT2on
do
{
IFG1 &= ~OFIFG; //Clear OSCFault flag
for (i = 0xFF; i > 0; i--); //Time for flag to set
}
while ((IFG1 & OFIFG)); //OSCFault flag still set?
BCSCTL2 |= SELM_2 + SELS;
Sys_Init();
while(1)
{
Delay(300);
value =0;
for(i=0;i<128;i++)
{
I2c_Write(IIc_WrAddr,value); //写入自己的内容
IIc_WrAddr++;
value++;
}
Delay(300);
/*
I2c_Write(0,3); //写入自己的内容
I2c_Write(2,5); //写入自己的内容
//I2c_Write(10,17); //写入自己的内容
temp = I2c_Read(0);
temp1 = I2c_Read(2);
//temp2 = I2c_Read(10);
*/
IIc_WrAddr = 0;
_NOP();
for(i=0;i<128;i++)
{
BUF[i] = I2c_Read(IIc_WrAddr);
IIc_WrAddr++;
}
Delay(300);
/*
bufnum = 0;
for(i=0;i<128;i++)
{
byte = BUF[bufnum++]; //用串口打印出来
while((IFG2&UTXIFG1)==0);
TXBUF1 = byte;
Delay(5000);
}
*/
}
}
/**************************************************
系统初始化程序
***************************************************/
void Sys_Init(void)
{
IIC_Init();
//UART1_Init();
}
/**************************************************
IIC初始化程序
***************************************************/
void IIC_Init(void)
{
SCL_OUT; //CLK为输出状态
SDA_OUT;
SDA_1;
SCL_1;
}
/**************************************************
IIC读程序
***************************************************/
unsigned char I2c_Read(unsigned int i2caddr)
{
unsigned char tempdata;
i2c_start();
i2c_bytewrite(DEVADDR_WR); //写地址
Acknowledge();
i2c_bytewrite(i2caddr>>8); //写高地址
Acknowledge();
i2c_bytewrite(i2caddr); //写低地址
Acknowledge();
i2c_start();
i2c_bytewrite(DEVADDR_RD); //读地址
Acknowledge();
tempdata = i2c_byteread();
i2c_stop();
Delay(20);
return tempdata;
}
/**************************************************
IIC写程序
***************************************************/
void I2c_Write(unsigned int i2caddr,unsigned char i2cdata)
{
i2c_start();
i2c_bytewrite(DEVADDR_WR); //写地址
Acknowledge();
i2c_bytewrite(i2caddr>>8); //写高地址
Acknowledge();
i2c_bytewrite(i2caddr); //写低地址
Acknowledge();
i2c_bytewrite(i2cdata);
Acknowledge();
i2c_stop();
Delay(4800);
}
/**************************************************
IIC启动程序:SCL高时,SDA有高变低
***************************************************/
void i2c_start(void)
{
SDA_OUT;
SDA_1; //将数据置1
NOP2;
SCL_1; //时钟置1
NOP2;
SDA_0; //启动
NOP2;
SCL_0; //start
NOP2;
}
/**************************************************
IIC停止程序
***************************************************/
void i2c_stop(void)
{
SCL_1;
NOP2;
NOP2;
SDA_OUT;
SDA_0;
NOP2;
NOP2;
SCL_1;
NOP2;
NOP2;
SDA_1;
NOP2;
}
/**************************************************
IIC字节写程序
***************************************************/
void i2c_bytewrite(unsigned char writedata)
{
unsigned char i;
for(i=0; i<8; i++)
{
if (writedata & BIT7)
SDA_1;
else
SDA_0;
writedata <<= 1;
SCL_1;
NOP4;
SCL_0;
NOP2;
}
}
/**************************************************
IIC字节读程序
***************************************************/
unsigned char i2c_byteread(void)
{
unsigned char i,tempdata=0;
SDA_IN; //置为输入
for (i=0; i<8; i++)
{
SCL_1;
_NOP();
tempdata <<= 1;
if (SDA_VAL)
tempdata |= 1;
SCL_0;
NOP4;
}
return tempdata;
}
/**************************************************
IIC发送一个0看单片机是否接收到的发送0程序
***************************************************/
void Acknowledge(void)
{
SCL_0;
NOP2;
SDA_OUT;
SDA_0;
SCL_1;
NOP2;
SCL_0;
}
/**************************************************
接收确认程序
***************************************************/
void ReceiveAck(void)
{
unsigned char i = 0;
SCL_1;
SDA_IN; //送回应脉冲
NOP2;
while ((SDA_VAL) && (i < 20))i++;
SDA_OUT;
SCL_0;
NOP2;
}
/**************************************************
延时程序
***************************************************/
void Delay(unsigned int count)
{
unsigned int i;
for(i=0;i<count;i++);
}
IIC.rar_iic能调试吗
版权申诉
9 浏览量
2022-09-22
19:23:55
上传
评论
收藏 22KB RAR 举报
林当时
- 粉丝: 100
- 资源: 1万+
评论0