PIC16F877单通道模拟量采集
模拟量可以是温度,湿度,压力等物理量,它们都需要借助传感器变换为能够被ADC直接采集电压值才可以,下图是PIC16F877单通道模拟量采集实验电路图
如果想知道更多模拟量的知识请点击这里
如图所示,让连接在RA0/AN0引脚上1K电位器RI充当模拟量提供者,当调电位器时,可以提供一个量程在VDD至VSS范围之内变化的模拟电压,利用定时器TMR0来控制周期性启动A/D转换过程,将每次A/D转换结果令RC端口指示灯发光.右是流程图,程序如下:
list p=16f877 ;例表伪指令
include "p16f877.inc ;
org 0X00
nop
start: banksel PORTC ;选中体0
clrf PORTC ;將PORTC清0
movlw B'01000001' ;选择时钟源为8分频,允许ADC工作
movwf ADCON0 ;通道AN0,暂时不启动转换过程
banksel OPTION_REG
movlw B'1000111';设定;RB口不用上拉,分频器配给TMR0
movwf OPTION_REG ;分频比设为1:256
clrf TRISC;TRISC所有引脚设置为输出
movlw B'00001110' ;转换结果左对齐,只选1 个A/D通道RA0/AN0
movwf ADCON1;选择VDD和VSS作为参考源
banksel PORTC ;选中体0
Main: btfee INTCOM,TOIF;等待和循环检测TMR0溢出中断标志位
goto Main ;如果没有发生TMR0中断。则返回
bef INTCON,TOIF ;如果发生了TMR0中断。则清除TOIF标志
bsf ADCON0,GO;开始A/D转换过程
wait: btfss PIR1,ADIF ;等待A/D转换过程结束,检测ADC中断标志位
goto wait ;如果没有转换完毕,则返回继续检测
movf ADRESH,w ;如果转换完毕,则把A/D结果读到w
movwf PORTC ;经过w送到C口8只LED上显示
goto main;循环进行A/D转换
end