📄 adc.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define a 0xf4 //a=0.95
#define b 0x0d //b=1-a=0.05
unsigned char x0,y0=0; //x0,ADCH的值;
unsigned char read_adc(unsigned char ad_chanel) //单通道AD值读取函数
{
ADMUX=1<<ADLAR|ad_chanel|1<<REFS1|1<<REFS0; //内参2.56V
ADCSRA=1<<ADEN|1<<ADSC|6<<ADPS0; //16分频做AD转换时钟
loop_until_bit_is_set(ADCSRA,ADIF);
ADCSRA=1<<ADIF;
return ADCH;
}
SIGNAL(SIG_OUTPUT_COMPARE0) //interrupt
{
x0=read_adc(0);
//if(50<x0<150)PORTB=0XF0;
//if(150<x0>250)PORTB=0X0F;
y0=(char)(((int)a*y0+(int)b*x0)>>8);
PORTB=y0;
}
int main(void)
{
DDRA=0X00;
DDRB=0XFF;
OCR0=0X0F; //设置OCR0的值,使采样频率约为500Hz
TCCR0=1<<WGM01|5<<CS00;
TIMSK=1<<OCIE0;
TIFR=1<<OCF0;
SREG=0X80;
while(1){;}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -