您当前的位置:五五电子网电子知识单片机-工控设备51单片机AD转换器ADS11XX驱动程序 正文
AD转换器ADS11XX驱动程序

AD转换器ADS11XX驱动程序

点击数:7855 次   录入时间:03-04 11:39:06   整理:http://www.55dianzi.com   51单片机

//-----------------------函数声明IIC通用变量定义--------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
sbit SDA=P1^0;                          // 将p1.0口模拟数据口
sbit SCL=P1^1;                          // 将p1.1口模拟时钟口
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};                     
bit   bdata SystemError;                // 从机错误标志位
//-----------------------ADS专用变量定义--------------------------------------------------------
#define  READ_ADD  0x91          //写配置寄存器时对应的器件地址
#define  WRITE_ADD 0x90          //读转换结果时对应的器件地址
#define  CFG_setting 0x8C        //配置寄存器的预设值
unsigned char H_AD;      //H_AD 用于存储高八位A/D转换结果
unsigned char L_AD;      //L_AD 用于存储低八位A/D转换结构
//--------------------------------------------------------------------------------------------------
// 函数名称: iic_start()
// 函数功能: 启动I2C总线子程序
//--------------------------------------------------------------------------------------------------
void iic_start(void)
{     EA=0;            //时钟保持高,数据线从高到低一次跳变,I2C通信开始
    SDA = 1;         
    SCL = 1;
    delayNOP();      // 延时5us 
    SDA = 0;
    delayNOP();
    SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: iic_stop()
// 函数功能: 停止I2C总线数据传送子程序
//--------------------------------------------------------------------------------------------------
void iic_stop(void)

    SDA = 0;          //时钟保持高,数据线从低到高一次跳变,I2C通信停止
    SCL = 1;
    delayNOP();
    SDA = 1;
    delayNOP();
    SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: slave_ACK
// 函数功能: 从机发送应答位子程序
//--------------------------------------------------------------------------------------------------
void slave_ACK(void)
{
    SDA = 0;    
    SCL = 1;
    delayNOP();            
    SDA = 1;
    SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: slave_NOACK
// 函数功能: 从机发送非应答位子程序,迫使数据传输过程结束
//--------------------------------------------------------------------------------------------------
void slave_NOACK(void)

    SDA = 1;   
    SCL = 1;
    delayNOP();
    SDA = 0;
    SCL = 0;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: check_ACK
// 函数功能: 主机应答位检查子程序,迫使数据传输过程结束
//--------------------------------------------------------------------------------------------------
void check_ACK(void)

    SDA = 1;      // 将p1.0设置成输入,必须先向端口写1
    SCL = 1;
    F0 = 0;
    if(SDA == 1)    // 若SDA=1表明非应答,置位非应答标志F0
        F0 = 1;
    SCL = 0;
}

//--------------------------------------------------------------------------------------------------
// 函数名称: IICSendByte
// 入口参数: ch
// 函数功能: 发送一个字节
//--------------------------------------------------------------------------------------------------
void IICSendByte(unsigned char ch)

    unsigned char idata n=8;     // 向SDA上发送一位数据字节,共八位
    while(n--)
    { 
        if((ch&0x80) == 0x80)    // 若要发送的数据最高位为1则发送位1
        {
            SDA = 1;    // 传送位1
            SCL = 1;
            delayNOP();
            SDA = 0;
            SCL = 0;    
        }
        else
        {  
            SDA = 0;    // 否则传送位0
            SCL = 1;
            delayNOP();
            SCL = 0;  
        }
        ch = ch<<1;    // 数据左移一位
    }
}
//--------------------------------------------------------------------------------------------------
// 函数名称: IICreceiveByte
// 返回接收的数据
// 函数功能: 接收一字节子程序
//--------------------------------------------------------------------------------------------------

[1] [2]  下一页


本文关键字:转换器  程序  51单片机单片机-工控设备 - 51单片机