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串口通信初始化设置
下一篇:STM8S103定时中断初始化
推荐阅读最新更新时间:2024-11-09 18:18
设计资源 培训 开发板 精华推荐
- 老天师,您败过吗?
- LT3431 9V 至 16V 输入(具有 36V 瞬态)、5V 输出、3mm 高度全陶瓷双极性转换器
- LT1021CCN8-5 负串联电压基准的典型应用
- 使用 MaxLinear, Inc 的 SPX2951 的参考设计
- DC225A-H,具有 LTC1643AHCGN、PCI 热插拔控制器、主动高使能的演示板
- 使用 Richtek Technology Corporation 的 RT9726 的参考设计
- ESP-12F最小烧录板
- LT6656BIS6-3.3、3.3V 电压基准作为微功率稳压器的典型应用
- 【PCB】K210-Board
- LT8607IMSE 3.3V、2MHz 降压型稳压器的典型应用电路