这个完全可以人为控制。如:AD0EN = 1;意思是ADC开始工作,同理AD0EN = 0;就是停止了。
当然这里还需要注意一下这些标志位,原理与中断等是类似的。
AD0BUSY = 1; // 开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
/************************************************************************************/
// 引用外部头文件
/************************************************************************************/
#include "ADC.h"
/************************************************************************************/
// 常量及全局变量定义
/************************************************************************************/
#define AIN1 0x04
#define AIN2 0x05
#define GND 0x1f
#define TEMP 0x1E
#define ADC_CLK 1600000
#define T_US 20
#define sysclk 48000000
/*************************************************************************************/
//
// ADC硬件驱动程序函数定义
//
/*************************************************************************************/
/***********************************************************************************
* Function: ADC_Init;
*
* Description: ADC初始化函数;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Init (void)
{
//REF0CN = 0x07;//使用ref电压基准
AMX0P = TEMP;//选择TempSensor
AMX0N = GND;//选择GND
ADC0CF=(sysclk/ADC_CLK)<<3;//ADC转换时钟
ADC0CN = 0x00;
}
/***********************************************************************************
* Function: ADC_Enable;
*
* Description: ADC使能函数, ADC开始工作;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Enable(void)
{
AD0EN = 1;
}
/***********************************************************************************
* Function: ADC_Disable;
*
* Description: ADC关闭函数, ADC停止工作;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Disable(void)
{
AD0EN = 0;
}
/***********************************************************************************
* Function: ADC_Read;
*
* Description: 读取ADC转换数据函数;
*
* Input: none;
*
* Output: *p, 通道1采样值; *(p+1),通道1采样值; *(p+2),温度通道采样值;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_Read(int *p)
{
AD0INT = 0; // 清除中断标志
AMX0P = AIN1; //改变AD通道
Delay_us(T_US);
AD0BUSY = 1; //开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
*p++ = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
AMX0P = AIN2; //改变AD通道
Delay_us(T_US);
AD0BUSY = 1; //开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
*p++ = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
AMX0P = TEMP; //改变AD通道
Delay_us(T_US);
AD0BUSY = 1; //开始转换
while(!AD0INT); // 等待转换完成
AD0INT = 0; // 清除中断标志
*p = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
}
/***********************************************************************************
* Function: ADC_ISR;
*
* Description: 中断服务响应,完成ADC采样数据存储及通道切换;
*
* Input: none;
*
* Output: none;
*
* Return: none;
*
* Note: none;
************************************************************************************/
void ADC_ISR (void) interrupt 10 using 3 //执行时间: 8uS
{
}
/***********************************************************************************/
// 文件结束
/***********************************************************************************/