单片机
返回首页

STM8S103 ADC初始化设置

2021-09-02 来源:eefocus

adc.h


#ifndef __ADC_H_

#define __ADC_H_

#include “define.h”

//ADC通道号定义

#define ADC_Channel0 (unsigned char)0x00

#define ADC_Channel1 (unsigned char)0x01

#define ADC_Channel2 (unsigned char)0x02

#define ADC_Channel3 (unsigned char)0x03

#define ADC_Channel4 (unsigned char)0x04

#define ADC_Channel5 (unsigned char)0x05

#define ADC_Channel6 (unsigned char)0x06

#define ADC_Channel7 (unsigned char)0x07

#define ENB 1

extern void adc_init(uint8 mode);

extern void adc_switch(uint8 channel);

extern void adc_mode_scan(uint8 value);

extern void read_adc(uint8 channel);

#endif


adc.c


#include “adc.h”

#include “uart.h”

//*****************************

//函数名称:adc_init

//函数功能:对ADC初始化,开启或关闭ADC电路

//入口参数:ADC电路使能参数

//出口参数:无

//*****************************

void adc_init(uint8 mode)

{

    uint16 i;

    if(mode == ENB) //启动ADC电路

    {

        //F/4转换时间分频 Fadc = Fmaster/ADC_CR1[4..6]

        //[000 F/2] [001 F/3] [010 F/4]

        ADC_CR1 = (ADC_CR1&0x8f)|0x00;  //f/2

        //数据左对齐

        ADC_CR2 &= ~0x08;

        //启动ADC

        ADC_CR1 |= 0x01;

        //等待ADC电路稳定

        for(i=0; i<500; i++)

            ;

        ADC_CSR &= ~0x80;   //转换结束标志清0

        return;

    }

    else

    {

        ADC_CR1 &= ~0x01;   //关闭ADC电路

        return;

    }

}


//********************************

//函数名称:adc_switch

//函数功能:在单通道模式下转换某一通道的ADC值

//                  在(扫描模式下)连续转换1-Channel的ADC值

//入口参数:要转换的ADC通道号

//出口参数:无

//********************************

void adc_switch(uint8 channel)

{

    //选择转换通道

    ADC_CSR = (ADC_CSR&0xf0)|channel;

    //启动ADC

    ADC_CR1 |= 0x01;

    //等待转换

    while(!(ADC_CSR&0x80))

        ;

    ADC_CSR &= ~0x80;

    return;

}


//********************************

//函数名称:adc_mode_scan

//函数功能:ADC扫描模式设置函数

//入口函数:扫描模式开启函数

//出口参数:无

//********************************

void adc_mode_scan(uint8 value)

{

    if(value==ENB)

    {

        ADC_CR2 |= 0x02;

    }

    else

    {

        ADC_CR2 &= ~0x02;

    }

}

void read_adc(uint8 channel)

{

    unsigned char tmpH, tmpL;

    uint8 temp;

    adc_switch(channel);

    tmpH = ADC_DRH;

    tmpL = ADC_DRL;

    temp = tmpH;

    temp *= 50;

    temp /= 256;

    //uart1_send_byte(tmpH);

    //uart1_send_byte(tmpL);

    uart1_send_byte(temp);

}


在主函数里直接调用 read_adc(channel)


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • CCD图像传感器在微光电视系统中的应用

  • 离子检测器电路分析

  • 一个简单的立体声平衡指示器电路

  • 分享一个电网倾角计电路

  • 使用NE555和磁簧开关的橱柜照明电路

  • 电谐波图形均衡器示意图

    相关电子头条文章