atmega16内部AD多路采集
当我用atmega16内部AD一路采集信号时用到了AD的中断,我现在想是想三路测量,还要用到中断函数吗,新手上路,请大家多多指教???#include <iom16v.h>
#include <macros.h>
#include "12864.h"
void adc_init(void)//ADC端口初始化
{
DDRA &= ~BIT(0);//设置AD0端口为输入(一定要设置成输入)
PORTA &= ~BIT(0);//PORTA |= BIT(0);(设置成1、0都可以,)
ADMUX = 0X40;//参考电压为AVCC,ADC结果为有对齐,单端输入为ADC0
ADCSRA = 0XEa;//ADCSRA=0XF8;ADC时钟分频为4分频
SFIOR = 0X00;//设置为连续自由转换
SREG |= BIT(7);//打开总中断
}
void adc_zh(uchar value_L,uchar value_H)
{
long int value;
int V;
value = value_H * 256;//十六进制转换成十进制
value = value + value_L;
V =(int)(value*5000/1024);//转换成电压显示
Lcd_DisplayOnenum(1,1,V);
}
void main()
{
lcdport_init();
lcd_init();
lcd_clr();
adc_init();
while(1);
}
#pragma interrupt_handler adc_isr:15
void adc_isr(void)//中断函数的服务程序
{
uchar adc_H,adc_L;
adc_L = ADCL;//读出低位
adc_H = ADCH;//读出高位
adc_zh(adc_L,adc_H);//将十六进制转换成十进制
} {:sleepy:} 其实只有一个内核不能同时采集多路 本帖最后由 zhanyanqiang 于 2012-7-20 10:14 编辑
完全可以,我用主循环里面轮番切换端口和AD中断里面切换3次端口都实现了,反正实现了3路采集,其实是一个个来采集...只不过时间快,可以看做是一个时刻取了3个通道3个数据回来 恩,看了说明书后好好研究了一下,最后写出来了,谢谢你啊 帮帮忙http://www.amobbs.com/thread-5541729-1-1.html 以前用M16做过4路AD采样,挺好用的啊。
页:
[1]