⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc1.c

📁 C8051F020单片机AD转换程序
💻 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 + -