C语言程序>>ADC

这篇博客介绍了如何在AVR微控制器上初始化和使用ADC(模数转换器)。通过包含必要的头文件如<avr/io.h>、<avr/interrupt.h>和自定义的"adc.h",并设置ADCBuffer进行数据存储,博主详细阐述了初始化ADC、读取ADC值以及处理ADC转换完成中断的过程。此外,还提到了一个名为ADCTest的测试函数,用于验证ADC的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include <avr/io.h>
#include <avr/interrupt.h>
#include "adc.h"
#include "key.h"

#define MaxAdcBufSize 9
#define AdcBufStep 3

static volatile unsigned int ADCBuffer[MaxAdcBufSize];

/********************************************************
ADC初始化
********************************************************/
void InitADC(void)
{
 ADMUX |= (1<<REFS1)|(1<<REFS0);
 ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
 //ADC使能;ADC开始转换;连续转换;中断使能;128分频
}

/********************************************************
读取ADC
********************************************************/
unsigned int ReadADC(void)
{
 return ADCBuffer[0];
}

/********************************************************
ADC转换完成中断
********************************************************/
SIGNAL(SIG_ADC)
{
 unsigned char i;
 unsigned int tmp,sum = 0;
 tmp = ADC;
 
 for(i=1;i<MaxAdcBufSize - 1;i++)
 {
  ADCBuffer[i] = ADCBuffer[i+1];
  sum += ADCBuffer[i];
 }
 ADCBuffer[MaxAdcBufSize - 1] = tmp;
 sum += ADCBuffer[MaxAdcBufSize - 1];
 ADCBuffer[0] = (sum >> AdcBufStep);
}

#ifndef __ADC__
#define __ADC__
void  InitADC(void);
void  UnInitADC(void);
unsigned int ReadADC(void);
void  StartADC(void);
void ADCTest(void);
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值