;实战七《单通道模拟量采集器》
;本实战的目的是让大家熟悉ADC模块的功能以及AD转换的方法
;项目实现的功能:从芯片RA0输入一个可以随时变化的模拟量(通过调节DEMO板VR1实现)
;则单片机就能够及时地把该模拟量进行模/数转换,并用LED显示出来,我们可以看到转换结果
;会随模拟量的变化而变化,从而以让我们了解片内ADC模块的工作情况。
;本例的软件设计思路:利用单片机片内硬件资源TMR0和预分频器,为ADC提供定时启动信号。但是
;没有利用其中断功能,而是采用了软件查询方式,转换结果采用了左对齐方式。忽略了最低2位,将
;10位AD当做8位来用了,A/D转换的时钟源选用了系统周期的8倍,本例对于ADC的电压基准要求不高
;我们就选用了电源电压VDD和VSS作为基准电压,对于A/D转换过程是否完成也没有利用ADC模块的中断功能
;而是以软件方式查询其中断标志位ADIF。本例中选用的模拟通道为AN0。
;同时,本例中使用了一些大家之前都未接触的宏指令。
;程序文件名“MCD-AD1.ASM"
;程序清单如下:
;************************************
LIST P=16F877 ;列表伪指令
INCLUDE "P16F877.INC" ;把包含文件含入源程序
ORG 0000H
NOP ;放置一条ICD必段的空操作指令
START
BANKSEL PORTC ;选择同PORTC寄存器相同的体
CLRF PORTC ;清PORTC
MOVLW B'010000001' ;选择:时钟时钟源为FOSC/8,允许ADC工作
MOVWF ADCON0 ;通道AN0,暂时不启动转换过程
BANKSEL OPTION_REG ;选择寄存器OPTION_REG的体为当前体
MOVLW B'10000111' ;设定:RB口不用上拉,分频器配给TMR0
MOVWF OPTION_REG ;分频比设为1:256
CLRF TRISC ;PORTC所有管脚设为输出(接LED)
MOVLW B'00001110' ;转换结果左对齐,只选1个A/D通道RA0/AN0
MOVWF ADCON1 ;选择VDD和VSS作参考源
BANKSEL PORTC ;选中同寄存器PORTC的体为当前体
;---------------------------------
MAIN
BTFSS INTCON,T0IF ;等待和循环检测TMR0溢出中断标志位
GOTO&nb