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)
下一篇:STM8S103定时中断初始化