如何用程序实现PIC单片机AD转换器的8路信号轮流采集

如何用程序实现PIC单片机AD转换器的8路信号轮流采集,第1张

PIC单片机在某一时间段内只能采集开启一个AD转换通道来进行采集,你可以通过模拟通道选择位来进行通道选择的先后顺序/

可以定义一个数组用来存放采集数据

先使能AD采样,进中断清标志位,配置通道(如AN0),把采样结果存入数组

轮流进行

采集时间一结束,即可启动 A/D 转

换。 可将采集时间编程设定在 GO/DONE位置1和实际

转换启动之间。

可参考pic的PDF资料

首先通道是硬件,是一种特殊的处理机;而通道程序是软件,是实现通道功能的软件(比如设备驱动程序就是一种通道程序,可以通过理解设备驱动程序的功能理解通道要做的工作)

通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。如果将设备比作一支军队的话,通道是军队的高级指挥官,而设备控制器是军队的低级指挥官

通道程序是由一系列通道指令所构成的。

通道控制方式与DMA控制方式的区别:

1)DMA控制方式中需要CPU来控制所传输数据块的大小,传输的内存地址;通道控制方式中这些信息都是由通道来控制管理的。2)一个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。所以通道控制方式可以进一步解放cpu,使cpu和I/O并行效果更好

- I/O通道与一般处理器的区别:I/O通道的指令类型单一,其所能执行的命令主要局限于与I/O *** 作有关的指令;通道没有自己的内存,通道所执行的通道程序放在主机的内存中,也就是说通道是与CPU共享内存的。

请告诉我AD芯片是什么?1563?08090832先给你贴一个0832的程序你看看。通过芯片资料的时序图你也可以自己写出来的

unsigned char A_D(bit CH)

{

unsigned char i;

CS = 0; //片选

Clk = 0; //时钟拉低

Clk = 1; //时钟拉高

DIO = 1; //启动信号

if ( CH == 0 ) //通道选择

{

Clk = 0;

Clk = 1;

DIO = 1; //通道0的第一位

Clk = 0;

Clk = 1;

DIO = 0; //通道0的第二位

}

else

{

Clk = 0;

Clk = 1;

DIO = 1; //通道1的第一位

Clk = 0;

Clk = 1;

DIO = 1; //通道1的第二位

}

Clk = 1;

Clk = 0;

for( i = 0;i < 8;i++ ) //读取八位AD值

{

Clk = 1;

Clk = 0;

if ( DIO )

adval = (adval>>1) | 0x80;

else

adval = (adval>>1) | 0x00;

}

CS = 1; //释放ADC0832

return(adval); //返回采样值

}

有些51系列单片机是自带AD的,貌似是STC89S58,貌似,以前记得有人用过

AMX0SL是一个寄存器,用来选择ADC转换的通道,而channel是函数传过来的通道号,ADC0INT是ADC0中断标志位,因为下边要用软件查询的方式进行判断转换完成,所以这里要清0。ADC0的软件启动方式有定时器启动和向ADC0BUSY位写1等方式启动,下边的就是等待ADC0转换结束,因为转换结束后ADC0INT会由硬件置1,当为0时,说明未完成转换,程序会一直执行while,直到转换结束后跳出,然后就是读取转换的结果了,c8051的ADC0是12位ad,所以转换的结果会存到两个寄存器里边ADC0H存放高4位,ADC0L存放低8位。高4位乘256加上低8位就是最终的转换结果,最后再把结果返回。

以上就是关于如何用程序实现PIC单片机AD转换器的8路信号轮流采集全部的内容,包括:如何用程序实现PIC单片机AD转换器的8路信号轮流采集、通道与通道程序的区别、求有关a/d转换的c语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9374292.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存