⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s3530a.c

📁 msp430 非常经典的教材 希望对 msp430 的学者有帮助
💻 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 + -