|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
stm8s adc 的一个例程源码
/******************** (C) COPYRIGHT 风驰iCreate嵌入式开发工作室 ***************************
* 文件名 :adc.c
* 描述 :AD配置函数库
* 实验平台:iCreate STM8开发板
* 寄存器版本 :V2.0.0
* 作者 :ling_guansheng QQ:779814207
* 博客 :
* 修改时间 :2012-6-16
* iCreate STM8开发板硬件连接
STM8的PF0口(也就是ADC2的AIN10)接的是光敏或热敏电阻
****************************************************************************************/
#include "adc.h"
#include "uart.h"
/**************************************************************************
* 函数名:ADC_conf
* 描述 :ADC模块初始化
* 输入 :无
*
* 输出 :无
* 返回 :无
* 调用 :外部调用
*************************************************************************/
void ADC_conf()
{
ADC_CR1 = (0<<4)|(1<<1)|(0<<0); //ADC时钟输入频率为16MHz 这里设置分频系数为2 连续转换模式 先禁止ADC转换
ADC_CR2 = (1<<3)|(0<<1); //设置数据右对齐 禁止扫描模式
ADC_CSR = (0<<5)|(0xa<<0); //不用外部触发 禁止转换结束中断 设置转换通道为AIN10
ADC_TDRH = 4; //禁止AIN10施密特触发器功能
ADC_CR1 |= 1; //第一次写1是从低功耗模式唤醒
ADC_CR1 |= 1; //在这一位是1的情况下再次写1启动ADC转换
}
/**************************************************************************
* 函数名:Send_ADC_Value
* 描述 :ADC转换结果显示函数
* 输入 :AD_Value--ADC转换结果值
*
* 输出 :无
* 返回 :无
* 调用 :内部调用
*************************************************************************/
static void Send_ADC_Value(u16 AD_Value)
{
UART1_SendByte(AD_Value/1000+0x30);
UART1_SendByte(AD_Value%1000/100+0x30);
UART1_SendByte(AD_Value%1000%100/10+0x30);
UART1_SendByte(AD_Value%1000%100%10+0x30);
}
/**************************************************************************
* 函数名:ADC_GetConversionValue
* 描述 :获取ADC转换结果
* 输入 :无
*
* 输出 :无
* 返回 :无
* 调用 :内部调用
*************************************************************************/
uint16_t ADC_GetConversionValue(void)
{
uint16_t value,temph;
uint8_t templ; // 定义templ存储低8位数据 temph存储高8位数据
while(!(ADC_CSR & 0x80)); //等待转换完成
templ = ADC_DRL;
temph = ADC_DRH; //读取ADC转换 在左对齐和右对齐模式下 读取数据的顺序不同 参考STM8寄存器.PDFP371
value = (unsigned int)(templ | (temph << 8)); //注意是10位的转换精度 value、temph应为unsigned int 变量
return value;
} |
|