📄 adc.c
字号:
/********************************************************************************************************
* 文 件 名 : adc.c
* 说 明 :
********************************************************************************************************/
#define ADC_GLOBALS
#include "includes.h"
/********************************************************************************************************
* 功 能 : 获得ADC数据
* 入 口 : 'ch' 0~2 其他的通道未使用作为数字I/O使用
* 返 回 : ADC结果
* 说 明 : 1> 7us ADC1次 2000MHz的时钟 4MHz系统时钟 (实际此函数执行时间<15us)
* 2> 0~2通道激活
********************************************************************************************************/
INT16U ADCGetAdc (INT8U ch)
{
INT16U result;
OS_ENTER_CRITICAL(); // 在后台模式/中断中并用 必须禁止中断响应
ADMUX &= 0xE0; // 屏蔽掉通道 REFS1 REFS2 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0
ADMUX |= ch; // 设置新的ADC通道
SETBIT(ADCSRA, ADSC); // 开始1次ADC转换
while(GETBIT(ADCSRA, ADSC)); // 等待ADC转换结束
SETBIT(ADCSRA, ADIF); // 清除可能的ADC中断标志
result = ADCW & 0x3ff; // 右对齐10BIT ADC结果
OS_EXIT_CRITICAL(); // 退出临界
return (result); // 读->返回ADC结果 (右对齐方式)
}
/********************************************************************************************************
* 功 能 : ADC初始化
* 入 口 : 无
* 返 回 : 无
* 说 明 : 1> ADC Clock: 4000000Hz
* ADC Voltage Reference: AREF
* ADC Noise Canceler Disabled
* ADC High Speed Mode
********************************************************************************************************/
void ADCInit (void)
{
SFIOR &= B0001_1111; //
SFIOR |= 0x00; // 中断触发源禁止(高3BIT与ADC有关)
ADMUX = 0x00; // ADC参考源选择 AREF
ADCSRA = 0x80; // 只启动ADC 不中断 不连续模式 右对齐模式
}
/********************************************************************************************************
* End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -