avr adc中断程序读取adc和结果转换

SIGNAL(SIG_ADC){ uchar i; uint tap,sum=0; tap=ADC; for(i=1;i<maxadcbufsize-1;i++) { adcbuffer[i]=adcbuffer[i+1]; sum+=adcbuffer[i]; } adcbuffer[maxadcbufsize-1]=tap; sum+=adcbuffer[maxadcbufsize-1]; adcbuffer[0]=(sum>>3); //右移3位除以8求均值}为什么读取adc的时候直接就tap=ADC了?不是应该读取ADCH和ADC里面的数值吗?直接tap=ADC的结果是什么呢?还有后面一大串程序的作用是什么,可以不要这些吗?在线等,,,谢谢了。
2026年09月21日 23:01
有2个网友回答
网友(1):

这样写应该没有问题吧,没有试过,不敢妄下定论,你可以试试看。
不过,像我们一直写的程序的话,都是先读ADCL,再读ADCH,芯片手册里面有对这一过程的详细解释。

后面那几句,是对数据进行一个移位求平均值的过程。上面几句是把数据整体向后移一个字节位置,空出一个新的位置,然后把此次的AD值放进去,组成一组新的数据。
下面几句是对新的数据求平均值。

网友(2):

这个是由编译器处理的,处理后也是先读取ADCL,再读取ADCH的值。也可以分两条指令写,结果是一样的