;* 单片机 模拟量进行模/数转换,并用LED显示出来我们可以看到转换
;* 结果,0位AD当做8位来用了,利用 单片机 片内硬件资源TMR0和预分频器,
;* 为ADC提供定时启动信号,A/D转换的时钟源选用了系统周期的8倍,选
;* 用了电源电压VDD和VSS作为基准电压,软件方式查询其中断标志位ADIF.
;************************************************************
LIST P=16F877 ;列表伪指令
INCLUDE "P16F877.INC" ;把包含文件含入源程序
;**************************************************
__CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;************************************************************
ORG 0000H
NOP ;放置一条ICD必段的空操作指令
START
BANKSEL PORTC ;选择同PORTC寄存器相同的体
CLRF PORTC ;清PORTC
MOV LW B’010000001’ ;选择:时钟时钟源为FOSC/8,允许ADC工作
MOV WF ADCON0 ;通道AN0,暂时不启动转换过程
BANKSEL OPTION_REG ;选择寄存器OPTION_REG的体为当前体
MOV LW B’10000111’ ;设定:RB口不用上拉,分频器配给TMR0
MOV WF OPTION_REG ;分频比设为1:256
CLRF TRISC ;PORTC所有管脚设为输出(接LED)
MOV LW B’00001110’ ;转换结果左对齐,只选1个A/D通道RA0/AN0
MOV WF ADCON1 ;选择VDD和VSS作参考源
BANKSEL PORTC ;选中同寄存器PORTC的体为当前体
;---------------------------------
MAIN
BTFSS INTCON,T0IF ;等待和循环检测TMR0溢出中断标志位
GOTO MAIN ;如果没有发生TMR0溢出中断则返回循环检测
BCF INTCON,T0IF ;如果发生了TMR0溢出中断,则清除标志位T0IF
BSF ADCON0,GO ;开启A/D转换过程
WAIT
BTFSS PIR1,ADIF ;等待A/D转换过程结束,检测ADC中断标志位
GOTO WAIT ;如果没有转换结束,则返回循环检测
MOV F ADRESH,W ;如果转换完毕,则把A/D结果读到W
MOV WF PORTC ;经过W送C口LED显示
GOTO MAIN ;循环进行A/D转换
;---------------------------------
END ;源程序结束
上一篇:PIC16F877A单片机万年历程序
下一篇:PIC单片机LCD1602显示
推荐阅读最新更新时间:2024-03-16 15:48