📄 adc.c
字号:
/************************************************************************************
* Copyright (c) 2004,西安铭朗电子科技有限责任公司
* All rights reserved.
*
* 文件名称: adc.C
* 文件标识: none
* 适用器件: C8051F040
*
* 摘 要:
*
* 当前版本:1.0
* 作 者:张宁强
* 完成日期:2006年1月20日
*
* 历史版本:0.9
* 原作者 : 张宁强
* 完成日期:2005年x月xx日
*************************************************************************************/
#include "MAIN.h"
unsigned int result[9]; // AIN0-5
void ADC0_Init (void)
{
char SFRPAGE_SAVE = SFRPAGE; // 保存当前SFRPAGE
SFRPAGE = LEGACY_PAGE; // 改变页
REF0CN = 0x07; // 打开温度传感器, on-chip VREF,
ADC0CF = (SYSCLK/2500000) << 3; // ADC转换时钟= 2.5MHz
ADC0CF &= ~0x07; // PGA gain = 1
AD0EN = 1; // 打开ADC
HVA0CN = 0x88; //GAIN = 1 // 设置高压差分放大器
SFRPAGE = SFRPAGE_SAVE; // 恢复SFRPAGE
}
void ADC0_Conver (void)
{
unsigned char i; // ADC mux 通道 (0-3)
unsigned int data temp;
char SFRPAGE_SAVE = SFRPAGE; // 保存当前SFRPAGE
SFRPAGE = ADC0_PAGE; // 改变页
for (i=0;i<4;i++)
{
AMX0SL = i; // 设置mux到通道AIN0x
DelayMs(1);
AD0INT = 0; // 清除ADC转换完成标志
AD0BUSY = 1;
while (!AD0INT);
temp = ADC0H;
temp = temp*256 + ADC0L;
result[i] = temp; // 读ADC值
}
AMX0SL = 0x08; // 设置mux到温度传感器
DelayMs(1);
AD0INT = 0; // 清除ADC转换完成标志
AD0BUSY = 1;
while (!AD0INT);
temp = ADC0H;
temp = temp*256 + ADC0L;
result[4] = temp; // 读ADC值
AMX0SL = 0x04; // 设置mux到高压差分放大器
DelayMs(100);
AD0INT = 0; // 清除ADC转换完成标志
AD0BUSY = 1;
while (!AD0INT);
temp = ADC0H;
temp = temp*256 + ADC0L;
result[5] = temp; // 读ADC值
SFRPAGE = SFRPAGE_SAVE; // 恢复SFRPAGE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -