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

📄 att7028.c

📁 三相电能量计量芯片ATT7028的驱动程序。C51源程序
💻 C
字号:
// ATT7028底层驱动模块
// 编制: jinys
// 时间: 2004-08-19 v1.0

#include "..\..\a\main\main.h"
#include "ATT7028.h"

union Long_byte_st
{
    tLong ul;
    tByte uc[4];
};

#define DELAY()  _nop_(), _nop_(), _nop_();

//-----------私有参数------------------------------------------------------------//
#define CS_ATT7028    AD_CS
#define SCK_ATT7028   AD_SCLK
#define SI_ATT7028    AD_DIN
#define SO_ATT7028    AD_DOUT
#define RST_ATT7028   AD_RST
#define SIG_ATT7028   AD_SIG

/******************************
** 原型: ATT7028_Init()      **
** 功能: 初始化7028          **
** 入口: 无                  **
** 出口: 无                  **
******************************/
void ATT7028_Init(void)
{
    RST_ATT7028 = 0;
    CS_ATT7028 = 1;
    SCK_ATT7028 = 0;
    SI_ATT7028 = 1;
    SO_ATT7028 = 1;
    RST_ATT7028 = 1;
}

/*********************************
** 原型: ATT7028_rCmd()         **
** 功能: 从7028读取一个数据     **
** 入口: uCmd(命令字)           **
** 出口: 读回的数据             **
*********************************/
tLong ATT7028_rCmd(tByte uCmd)
{
    tByte ucA;
    tLong data uData = 0;

    ucA = 8;
    CS_ATT7028 = 0;
    EA_OFF();
    do
    {
        SI_ATT7028 = (bit)(uCmd & 0x80);
        uCmd <<= 1;
        SCK_ATT7028 = 1;
        DELAY();
        SCK_ATT7028 = 0;
        DELAY();
    }while(--ucA);

    // delay 3us
    DELAY();

    ucA = 24;
    do
    {
        uData = _lrol_(uData, 1);
        uData |= SO_ATT7028;
        SCK_ATT7028 = 1;
        DELAY();
        SCK_ATT7028 = 0;
        DELAY();
    }while(--ucA);

    CS_ATT7028 = 1;
    EA_ON();
    return(uData);
}

/*********************************
** 原型: ATT7028_wCmd()         **
** 功能: 向7028写一个数据       **
** 入口: uCmd(命令字)           **
**       ulData(数据)           **
** 出口: 无                     **
*********************************/
void ATT7028_wCmd(tByte uCmd, tLong ulData)
{
    tByte ucA, ucB;

    ucB = mCMD_W + uCmd;
    CS_ATT7028 = 0;
    ucA = 8;
    EA_OFF();
    do
    {
        SCK_ATT7028 = 1;
        DELAY();
        SI_ATT7028 = (bit)(ucB & 0x80);
        ucB <<= 1;
        SCK_ATT7028 = 0;
        DELAY();
    }while(--ucA);

    ucA = 24;
    do
    {
        SCK_ATT7028 = 1;
        DELAY();
        SI_ATT7028 = (bit)(ulData & 0x800000);
        ulData = _lrol_(ulData , 1);
        SCK_ATT7028 = 0;
        DELAY();
    }while(--ucA);

    CS_ATT7028 = 1;
    EA_ON();
}

/*------------------------------------------------------------------*-
  ---- END OF FILE -------------------------------------------------
-*------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -