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

16位adc AD7705单片机例程(串口打印采集数据)

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

1.本例程适合的CPU:   STC89C52   11.0592晶振

2.编译环境: Keil_c51_v802

2.串口输出的波特率 = 9600bps  无校验 无硬件流控(请取消串口工具上的RTS CTS功能)

3.请在PC机上安装串口软件: SecureCRT(v6.1.0英文安装版).rar

4.如果你的板子经常出现SPI接口时序迷失,就请检查P1口上的上拉电阻配置。这种情况多半是波形不好所致。

  (1)如果你使用发光二极管串联电阻代替上拉电阻,则极容易迷失接口。

  (2)如果上拉电阻大于2K欧姆,波形上升沿比较缓,会影响时序。

  (3)建议: P1口增加1K-2K欧姆的上拉电阻(不要LED串联)。


5. 在bsp.c 中有ms延迟函数,该函数是按照89C52 12T指令周期, 11.0592晶振调试通过的。

  

  void bsp_DelayMS(uint16_t n)  延迟精度 99% (500ms 实测 498ms), 如果换其他CPU,请自行调整。


6. TM7705的驱动程序在 bsp_tm770.c 和.h文件。

  其中  static void TM7705_WaitDRDY(void) 函数,已经做了接口时序迷失处理。当时序迷失时,会自动重新同步。


【接线方法】

    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


单片机源程序如下:

#include "bsp.h"


/* 定义例程名和例程发布日期 */

#define EXAMPLE_NAME        "STC89C52_TM7705双路ADC模块例程"

#define EXAMPLE_DATE        "2014-04-20"

#define DEMO_VER                "1.0"


static void PrintfLogo(void);

static void PrintfHardInfo(void);

static void TM7705_Demo(void);


/*

*********************************************************************************************************

*        函 数 名: main

*        功能说明: C程序入口

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void main(void)

{

        bsp_Init();     /* 初始化底层硬件。 该函数在 bsp.c文件 */

        PrintfLogo();        /* 打印例程logo */

        PrintfHardInfo();        /* 打印硬件接线信息 */


        TM7705_Demo();

}


/*

*********************************************************************************************************

*        函 数 名: TM7705_Demo

*        功能说明: 定时读取TM7705的ADC值,并打印到串口。请通过PC机串口工具查看结果。

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

static void TM7705_Demo(void)

{

        uint16_t adc1, adc2;

        

        bsp_InitTM7705();                        /* 初始化配置TM7705 */


        TM7705_CalibSelf(1);                /* 自校准。执行时间较长,约180ms */                

        adc1 = TM7705_ReadAdc(1);                                

        

        TM7705_CalibSelf(2);                /* 自校准。执行时间较长,约180ms */

        adc2 = TM7705_ReadAdc(2);        

        

        while (1)

        {        

                bsp_Idle();                


                #if 1        

                        /* 双通道切换采样,执行一轮实际那约 160ms */                        

                        adc1 = TM7705_ReadAdc(1);        /* 执行时间 80ms */                

                        adc2 = TM7705_ReadAdc(2);        /* 执行时间 80ms */

                #else

                        /* 如果只采集1个通道,则刷新速率 50Hz (缺省设置的,最大可以设置为500Hz) */

                        adc1 = TM7705_ReadAdc(1);        /* 执行时间 20ms (50Hz速率刷新时) */                

                        adc2 = 0;

                #endif

                        

                /* 打印采集数据 */

                {

                        int volt1, volt2;

                        

                        /* 计算实际电压值(近似估算的),如需准确,请进行校准 */

                        volt1 = ((int32_t)adc1 * 5000) / 65535;

                        volt2 = ((int32_t)adc2 * 5000) / 65535;

                        

                        /* 打印ADC采样结果 */        

                        printf("CH1=%5ld (%5dmV) CH2=%5ld (%5dmV)r", (long int)adc1, volt1, (long int)adc2, volt2);

                }

        }

}


/*

*********************************************************************************************************

*        函 数 名: PrintfLogo

*        功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

static void PrintfLogo(void)

{

        /* 友情提示:

                使用STVD开发时,printf/sprintf 入口参数 %d 必须是 int 类型(16位),否则打印结果不正确。

                IAR无此问题。

        */


        printf("*************************************************************nr");

        printf("* 例程名称   : %srn", EXAMPLE_NAME);        /* 打印例程名称 */

        printf("* 例程版本   : %srn", DEMO_VER);                /* 打印例程版本 */

        printf("* 发布日期   : %srn", EXAMPLE_DATE);        /* 打印例程日期 */

        printf("* QQ    : 1295744630 rn");

        printf("* Email : armfly@qq.com rn");

        printf("* Copyright www.armfly.com 安富莱电子rn");

        printf("*************************************************************nr");

}


/*

*********************************************************************************************************

*        函 数 名: PrintfHardInfo

*        功能说明: 打印硬件接线信息

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

static void PrintfHardInfo(void)

{

        printf("接线方法: rn");

        printf("AD7705模块    51开发板(STC89C52, 11.0592M晶振)rn");

    printf("  VCC   

    printf("  GND   -------  GND       地rn");          


关键字:16位adc  AD7705  单片机  串口打印  采集数据)

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

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