📄 adc1.c
字号:
/************************************************************************************
* Copyright (c) 2004,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* 文件名称: ADC0.C
* 文件标识: none
* 适用器件: c8051f020
*
* 摘 要: 本文件是AD子程序;使用外部22.1184MHz晶振,将跳线器JP3短接
*
* 当前版本:1.1
* 作 者:刘大伟
* 完成日期:2007年2月9日
*
*************************************************************************************/
/************************************************************************************/
// 引用外部头文件
#include "c8051f020.h"
#include "ADC1.h"
#include <stdio.h>
/************************************************************************************/
/***********************************************************************************
* 函数名称:ADC1_Init;
*
* 函数功能描述:设置ADC0使用定时器Timer3溢出作为转换源,转换完成后产生中断,使用左对齐输出模式
*
* 输入参数:unsigned int类型指针,是ADC0使用时存放返回数据数组的指针;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void ADC1_Init (void)
{
ADC1_Ctr_Set; // 关闭ADC1; 低能追踪模式
REF_Ctr_Set; // 打开温度传感器, on-chip VREF
ADC1_Channel_0; // ADC1使用"0"通道
SAR1_Clk_Set; // ADC转换时钟= 2.5MHz
ADC1_Gain; // PGA gain = 1
ENABLE_ADC3; // 打开ADC1中断
}
/***********************************************************************************
* 函数名称:Timer3_Init;
*
* 函数功能描述:lcd_init;
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void Timer3_Init (int counts)
{
Timer3_Stop; // 停止Timer3; 清除TF3;
Timer3_Reload_init=-counts; // 初始化装载值
TMR3_Count_Start; // 设置立即装载
DISABLE_Tmr3; // 禁止定时器Timer3中断
Timer3_Start; // 开启Timer3
}
/***********************************************************************************
* 函数名称:ADC1_enable
*
* 函数功能描述:ADC1开关,1:打开;0:关闭
*
* 输入参数:1:打开;0:关闭
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void ADC1_enable(unsigned char flag)
{
if(flag)
{
ADC1_Start; // 打开ADC
ENABLE_INTERRUPTS; // 开启全局中断
}
else
ADC1_Stop; // 关闭ADC
}
/***********************************************************************************
* 函数名称:ADC1_ISR;
*
* 函数功能描述:中断服务响应;ADC1 采样,存储在主程序定义的全局数组中,选择下个通道转换
*
* 输入参数:none;
*
* 返回数据:none;
*
* 注意: none;
************************************************************************************/
void ADC1_ISR (void) interrupt 17
{
static unsigned char channel = 0; // ADC mux 通道 (0-8)
unsigned char ppp;
ADC1_IntFlag_Clear; // 清除ADC转换完成标志
ADC1_result[channel]=ADC1; // 读ADC值
ppp=ADC1_result[channel];
channel++; // 改变通道
if (channel == 8)
channel = 0;
ADC1_Channel = channel; // 设置mux到下个通道
}
/***********************************************************************************
* 函数名称:ADC_Value;
*
* 函数功能描述:ADC0,ADC1转换完成后数据寄存器数据转换成unsigned int型
*
* 输入参数:unsigned char类型,"0"为选择转换ADC0数据格式,非"0"为选择转换ADC1数据格式;
*
* 返回数据:unsigned int类型,当前AD转换完成后的unsigned int类型数据量;
*
* 注意: none;
************************************************************************************
unsigned int ADC_Value (unsigned char Flag)
{
unsigned int data temp,temp0,temp1;
if(Flag) //ADC1
temp0=ADC1;
else //ADC0
{
temp0=ADC0L;
temp1=ADC0H;
}
temp=temp1*256+temp0;
return temp; //取回ADC转换数据
}
/***********************************************************************************
* 函数名称:ADC_Value_Return;
*
* 函数功能描述:主程序通过此函数取得ADC0目标通道数据
*
* 输入参数:unsigned char类型,ADC0通道号;
*
* 返回数据:unsigned int类型,ADC0通道对应的数据;
*
* 注意: ADC0共有9个通道(包括温度通道),注意范围,超出范围返回0XFFFF;
************************************************************************************/
unsigned int ADC_Valud_Return (unsigned char channel)
{
if (channel<8) //通道范围有效
return ADC1_result[channel]; //取回通道对应数据
else //通道范围出错
return 0xffff; //返回错误信息
}
/************************************************************************************
* 文件结束
************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -