/*-----------------------------------
MSP430单片机对AT24C64的读写操作子程序
来源:晖创电子网www.schuitron.comMSP430程序
---------------------------------------*/
#ifndef_I2C_H
#define_I2C_H
#defineSDA_1P4OUT|=0x02//SDA=1
#defineSDA_0P4OUT&=~0x02//SDA=0
#defineSCL_1P4OUT|=0x01//SCL=1
#defineSCL_0P4OUT&=~0x01//SCL=0
#defineSDA_INP4DIR&=~0x02;//I/O口为输入
#defineSDA_OUTP4DIR|=0x02//I/0口为输出
#defineJ_SDA_1_or_0(P4IN&0x02)==0x02
/*--------------------------------------------
以下为24C64读写子函数
DELAY函数程序
功能:延时子程序
-----------------------------------------------*/
statICvoidDelay(unsignedintn)
{
while(n!=0)
{n--;}
}
//=========================================
//START函数程序
//功能:开始闪存操作
//==========================================
voidStart(void)
{
SDA_OUT;
SDA_1;
Delay(10);
SCL_1;
Delay(10);
SDA_0;
Delay(10);
SCL_0;
Delay(10);
}
//=========================================
//STOP函数程序
//功能:停止闪存操作
//==========================================
voidStop(void)
{
SDA_0;
Delay(10);
SCL_1;
Delay(10);
SDA_1;
Delay(10);
}
voidTX_Byte(unsignedcharWritEDAta)
{
unsignedchari,j;
j=WriteData;
SDA_OUT;
for(i=0;i<8;i++)
{
if((j&0x80)==0)
{SDA_0;}
else
{SDA_1;}
j<<=1;
Delay(10);
SCL_1;
Delay(10);
SCL_0;
Delay(10);
}
}
unsignedcharRX_Byte(void)
{
unsignedchari;
unsignedcharTempData=0;
SDA_IN;
for(i=0;i<8;i++)
{
Delay(10);
SCL_1;
Delay(10);
TempData<<=1;
if(J_SDA_1_or_0)
{TempData++;}
SCL_0;
Delay(10);
}
SDA_OUT;
return(TempData);
}
//=========================================
//ACK函数程序
//功能:挂高电平表示闪存时钟信号
//==========================================
voidReceiveAck(void)
{
SDA_IN;
SCL_1;
Delay(10);
while(J_SDA_1_or_0)
{}
SCL_0;
SDA_OUT;
Delay(10);
}
unsignedcharReadWord(unsignedlongintunit/*address*/)
{
unsignedcharLowAdd=0;
unsignedcharHighAdd=0;
unsignedcharTempData=0;
LowAdd=(unsignedchar)unit;
HighAdd=(unsignedchar)(unit>>8);
SDA_OUT;
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
Start();
TX_Byte(0xa1);
ReceiveAck();
TempData=RX_Byte();
Stop();
Delay(8000);
return(TempData);
}
voidWriteWord(unsignedlongintunit/*address*/,unsignedcharWriteData)
{
unsignedcharLowAdd=0;
unsignedcharHighAdd=0;
LowAdd=(unsignedchar)unit;
HighAdd=(unsignedchar)(unit>>8);
Start();
TX_Byte(0xa0);
ReceiveAck();
TX_Byte(HighAdd);
ReceiveAck();
TX_Byte(LowAdd);
ReceiveAck();
TX_Byte(WriteData);
ReceiveAck();
Stop();
Delay(8000);
}
#endif
上一篇:MSP430两种串口升级方式对比
下一篇:MSP430F149的串口RS485接口
推荐阅读最新更新时间:2024-11-10 01:30
设计资源 培训 开发板 精华推荐
- 用于高度内核电源的 LTC3407EDD-2 降压稳压器的典型应用电路
- 用于 LCD 背光的 5-LED 白光 LED 驱动器
- 超小两路光敏电阻传感器模块(GL5616 & LM393)
- 用于 SRC Crowbar 的 NCP431A 可编程精密基准的典型应用
- CWH-CTP-COP-YE: 面向CodeWarrior®TAP的Power Architecture®处理器( COP)调试器接头
- PCB元素周期表
- 使用 Analog Devices 的 LTC2435CGN 的参考设计
- 用于确定绝缘电阻的泄漏电流测量参考设计
- LTC4269-1 演示板,带有 48V 隔离辅助装置的 PoE 受电设备,Vout = 3.3V,Iout = 7A
- LT3970IMS-3.3 5V 降压转换器的典型应用