|
当我用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);//将十六进制转换成十进制
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|