📄 s3530a.c
字号:
#include <msp430xw42x.h>
#include "s3530a.h"
#include "i2c.h"
//定义管脚
#define SCL BIT6
#define SDA BIT5
//设备码 0110
///////////////////////////////////////////
// 获取时间信息,成功返回 1,错误返回 0
int I2C_Read (char *pBuf)
{
int nTemp = 0;
// 启动数据总线
I2C_START();
// 发送读时间信息命令
I2C_TxHToL(0x65);
// 等待 ACK
nTemp = I2C_GetACK();
pBuf[0] = I2C_RxByte();
I2C_SetACK();
pBuf[1] = I2C_RxByte();
I2C_SetACK();
pBuf[2] = I2C_RxByte();
I2C_SetACK();
pBuf[3] = I2C_RxByte();
I2C_SetACK();
pBuf[4] = I2C_RxByte();
I2C_SetACK();
pBuf[5] = I2C_RxByte();
I2C_SetACK();
pBuf[6] = I2C_RxByte();
I2C_SetACK();
pBuf[7] = I2C_RxByte();
I2C_SetACK();
// 停止总线
I2C_STOP();
return nTemp;
}
///////////////////////////////////////
// 写时间信息,成功返回 1,错误返回 0
int I2C_Write(char *pBuf)
{
int nTemp = 0;
// 启动数据总线
I2C_START();
// 发送写时间信息命令
I2C_TxHToL(0x64);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[0]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[1]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[2]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[3]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[4]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[5]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
I2C_TxLToH(pBuf[6]);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return 0;
// 停止总线
I2C_STOP();
return (nTemp & SDA);
}
int I2C_Reset(void)
{
int nTemp = 0;
// 启动数据总线
I2C_START();
// 发送复位命令
I2C_TxHToL(0x60);
// 等待 ACK
nTemp = I2C_GetACK();
// 停止总线
I2C_STOP();
return (nTemp & SDA);
}
int I2C_ReadSta(void)
{
unsigned char nTemp = 0;
// 启动数据总线
I2C_START();
// 发送读状态寄存器命令
I2C_TxHToL(0x63);
// 等待 ACK
nTemp = I2C_GetACK();
nTemp = I2C_RxByte();
I2C_SetACK();
// 停止总线
I2C_STOP();
return nTemp;
}
void I2C_WriteSta(int nValue)
{
int nTemp = 0;
char chrTemp = 0;
chrTemp = (char)(nValue & 0x00ff);
// 启动数据总线
I2C_START();
// 发送写时间信息命令
I2C_TxHToL(0x62);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return;
I2C_TxLToH(chrTemp);
// 等待 ACK
nTemp = I2C_GetACK();
if(nTemp & BIT3) return;
// 停止总线
I2C_STOP();
return;
}
void Set24TimeMode(void)
{
int nTemp;
nTemp = 0;
//读出状态寄存器内容
nTemp = I2C_ReadSta();
nTemp |= BIT6;
//写入状态寄存器
I2C_WriteSta(nTemp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -