什么是ADC的中断方式和查询方式

什么是ADC的中断方式和查询方式,第1张

AD转换是需要一定时间的,是让程序就地等待转换结果读取数据,还是让ADC转换结束之后自动处理结果,可以有两种选择。选择前者就是查询方式,选择后者就是中断方式。薯坦ADC转换结束之后有一个标志会置位,查询方式就是让程序等待这个标志位置位。而如果开放了ADC中断,这个标志位置位的同时会发生中断,程庆拿序暂时挂起,自动进入中断服务程序处理ADC转换结果,处理结束之后继续被挂起的程序。你提问中的两种方式,和其它诸如定时器、I/O、串行接口等模块的应数差桐用,道理都是一样的。当然,我说的仅限于单片机片内ADC,至于外挂的ADC那是另一番情景了。

这样写绝冲逗应该没有问题吧,没有试过,不敢妄下定论,你可以试试看。

不过,像我们一直写的程序的话,都是先读ADCL,再读ADCH,芯片手册里面有对这一过程的详细解释。

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

下面几句是对并卖新的数据求平均值。

确实,STC11F-10FXX系列不提供ADC中断功能,如果你用STC12C系列就培察举支持ADC中断了,手册里有详细的方法.

void InitADC()

{

Uint16 i

ADC_CONTR = 0xC0 //ADC模块加电,420周期转换一配碧次

for(i=0i<20000i++) //ADC电没腔源开启后,延时

//设置P口外AD模式

P1M0 = 0x03 //ADC0/1 高阻输入

P1M1 = 0x00

EADC_SPI = 1 //开放ADCSPI总中断

ADC_DATA = 0

AUXR = EADCI //开放ADC中断

memset(&ADC,0,sizeof(STADC))

//启动0号通道

ADC.Curch = 0

ADC_CONTR |= ADC.Curch//设置下一通道

ADC.Run = TRUE//标志ADC正在转换

ADC_CONTR |= ADC_START //启动AD转换器

}

void ADCISR() interrupt ADC_VECTOR

{

ADC_CONTR &= ADC_STOP //stop AD

ADC.Run = FALSE

ADC.tempCvData[ADC.CvTimes] = ADC_DATA//取转换值

ADC_DATA = 0

ADC.CvTimes++

ADC.CvTimes %= 6

if(ADC.CvTimes!=0)

{

ADC_CONTR |= ADC_START //启动AD转换器

ADC.Run = TRUE }

ADC_CONTR &= ADC_FLAG //清除ADC_FLAG 中断标志

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12336572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存