×
单片机 > 单片机程序设计 > 详情

单片机AD7705转换程序

发布时间:2020-08-27 发布时间:
|

#include //头文件

#include//头文件

#define uint unsigned int //宏定义

#define uchar unsigned char//宏定义

#define datlcd P0

sbit lcdrs = P2^0;        //液晶读                                 

sbit lcdrw = P2^1; //液晶写

sbit lcden = P2^2;//液晶选择

#define SOFT_SPI                /* 定义此行表示使用GPIO模拟SPI接口 */

//#define HARD_SPI                /* 定义此行表示使用CPU的硬件SPI接口 */


/* 通道1和通道2的增益,输入缓冲,极性 */

#define __CH1_GAIN_BIPOLAR_BUF        (GAIN_1 | UNIPOLAR | BUF_EN)

#define __CH2_GAIN_BIPOLAR_BUF        (GAIN_1 | UNIPOLAR | BUF_EN)


/*                                                                                

        接线方法: STC89C52开发板,请使用杜邦线连接。


    TM7705模块   STC89C52开发板

      VCC   ------  5.0V (3.3V)

      GND   ------  GND

      CS    ------  P1.0

      RST   ------  P1.1   

      DIN   ------  P1.2

          SCK   ------  P1.3

      DOUT  ------  P1.4

      DRDY  ------  P1.5        

*/


#if !defined(SOFT_SPI) && !defined(HARD_SPI)

        #error "Please define SPI Interface mode : SOFT_SPI or HARD_SPI"

#endif


#ifdef SOFT_SPI                /* 软件SPI */

        /* 定义GPIO端口 */

        sbit CS     = P1^0;

        sbit RESET  = P1^1;

        sbit DIN    = P1^2;

        sbit SCK    = P1^3;

        sbit DOUT   = P1^4;

        sbit DRDY        = P1^5;


        /* 定义口线置0和置1的宏 */

        #define CS_0()                CS = 0

        #define CS_1()                CS = 1


        #define RESET_0()        RESET = 0

        #define RESET_1()        RESET = 1


        #define DI_0()                DIN = 0

        #define DI_1()                DIN = 1


        #define SCK_0()                SCK = 0 

        #define SCK_1()                SCK = 1


        #define DO_IS_HIGH()        (DOUT != 0)


        #define DRDY_IS_LOW()        (DRDY == 0)

#endif


#ifdef HARD_SPI                /* 硬件SPI */

        #error "Don't surport Hard SPI Interface mode"

#endif


/* 通信寄存器bit定义 */

enum

{

        /* 寄存器选择  RS2 RS1 RS0  */

        REG_COMM        = 0x00,        /* 通信寄存器 */

        REG_SETUP        = 0x10,        /* 设置寄存器 */

        REG_CLOCK        = 0x20,        /* 时钟寄存器 */

        REG_DATA        = 0x30,        /* 数据寄存器 */

        REG_ZERO_CH1        = 0x60,        /* CH1 偏移寄存器 */

        REG_FULL_CH1        = 0x70,        /* CH1 满量程寄存器 */

        REG_ZERO_CH2        = 0x61,        /* CH2 偏移寄存器 */

        REG_FULL_CH2        = 0x71,        /* CH2 满量程寄存器 */


        /* 读写操作 */

        WRITE                 = 0x00,        /* 写操作 */

        READ                 = 0x08,        /* 读操作 */


        /* 通道 */

        CH_1                = 0,        /* AIN1+  AIN1- */

        CH_2                = 1,        /* AIN2+  AIN2- */

        CH_3                = 2,        /* AIN1-  AIN1- */

        CH_4                = 3                /* AIN1-  AIN2- */

};


/* 设置寄存器bit定义 */

enum

{

        MD_NORMAL                = (0 << 6),        /* 正常模式 */

        MD_CAL_SELF                = (1 << 6),        /* 自校准模式 */

        MD_CAL_ZERO                = (2 << 6),        /* 校准0刻度模式 */

        MD_CAL_FULL                = (3 << 6),        /* 校准满刻度模式 */


        GAIN_1                        = (0 << 3),        /* 增益 */

        GAIN_2                        = (1 << 3),        /* 增益 */

        GAIN_4                        = (2 << 3),        /* 增益 */

        GAIN_8                        = (3 << 3),        /* 增益 */

        GAIN_16                        = (4 << 3),        /* 增益 */

        GAIN_32                        = (5 << 3),        /* 增益 */

        GAIN_64                        = (6 << 3),        /* 增益 */

        GAIN_128                = (7 << 3),        /* 增益 */


        /* 无论双极性还是单极性都不改变任何输入信号的状态,它只改变输出数据的代码和转换函数上的校准点 */

        BIPOLAR                        = (0 << 2),        /* 双极性输入 */

        UNIPOLAR                = (1 << 2),        /* 单极性输入 */


        BUF_NO                        = (0 << 1),        /* 输入无缓冲(内部缓冲器不启用) */

        BUF_EN                        = (1 << 1),        /* 输入有缓冲 (启用内部缓冲器) */


        FSYNC_0                        = 0,

        FSYNC_1                        = 1                /* 不启用 */

};


/* 时钟寄存器bit定义 */

enum

{

        CLKDIS_0        = 0x00,                /* 时钟输出使能 (当外接晶振时,必须使能才能振荡) */

        CLKDIS_1        = 0x10,                /* 时钟禁止 (当外部提供时钟时,设置该位可以禁止MCK_OUT引脚输出时钟以省电 */


        /*

                2.4576MHz(CLKDIV=0 )或为 4.9152MHz (CLKDIV=1 ),CLK 应置 "0"。

                1MHz (CLKDIV=0 )或 2MHz   (CLKDIV=1 ),CLK 该位应置  "1"

        */

        CLK_4_9152M = 0x08,

        CLK_2_4576M = 0x00,



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法