• 学而时习之专栏
  • 温故而知新专栏



  • PIC16F877单通道模拟量采集



    模拟量可以是温度,湿度,压力等物理量,它们都需要借助传感器变换为能够被ADC直接采集电压值才可以,下图是PIC16F877单通道模拟量采集实验电路图


    如果想知道更多模拟量的知识请点击这里

    模拟流程图“ width=

    如图所示,让连接在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