?? 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 + -