;单通道模拟量采集器+数码管显示
;所用资源
;1、TMRO定时器。为保证采样精度提供所需的延时
;2、PORTA端口。AN0做为模拟输入信号口,其他做为数码管的位选
;3、PORTC端口。做为7段共阳极数码管的段信号(其中PORTC7为小数点)
;功能说明
;1、本实战的目的是让大家熟悉ADC模块的功能以及AD转换的方法
;2、项目实现的功能:从芯片RA0输入一个可以随时变化的模拟量(通过调节DEMO板VR1实现)
;则单片机就能够及时地把该模拟量进行模/数转换,并用LED显示出来,我们可以看到转换结果
;会随模拟量的变化而变化,从而以让我们了解片内ADC模块的工作情况。
;3、本例的软件设计思路:利用单片机片内硬件资源TMR0和预分频器,为ADC提供定时启动信号。但是
;没有利用其中断功能,而是采用了软件查询方式,转换结果采用了右对齐方式,
;A/D转换的时钟源选用了系统周期的8倍,本例对于ADC的电压基准要求不高,
;我们就选用了电源电压VDD和VSS作为基准电压,
;4、对于A/D转换过程是否完成也没有利用ADC模块的中断功能,而是以软件方式查询其中启动位GO是否为0。本例中选用的模拟通道为AN0。
;硬件连接
;1、拨码开关S13第2必须置ON以打开ANO模拟输入通道,S13其他位可关闭
;2、拨码开关S5数码管位信号必须置ON,但是为了影响显示效果,最好把第8位关闭。
;3、拨码开关S4数码管段信号必须置ON。
;程序文件名“ADC.ASM"
;程序清单如下:
;***************************************************************************************
#include "p16f877A.inc"
errorlevel -302
;***********************************
__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;************************************
disbuf equ 20h ;显示缓冲区20,21,22
ledtemp equ 29h
vrevh equ 2Ah
vrevl equ 2Bh
SOUH equ 40h ;子程序入口高位
SOU equ 41h ;子程序入口低位
RLTH equ 42h ;子程序入口高位
RLT equ 43h ;子程序入口低位
CNT equ 44h ;子程序用寄存器
TEMP1 equ 45h ;子程序用
TEMP2 equ 46h ;同上
TEMP3 equ 47h ;同上
TEMP4 equ 48h ;同上
;*****************************************
org 0000h
NOP
goto start
org 0005H
start:
banksel TRISA
movlw B'00000001' ;AN0>>>>DC input DC通道上输入,注意,这里是打开RA0,但是在ICD上RA0 控制第二个LED.RA1
movwf TRISA ;对应第一个LED,这一点在显示结果时请自已区分
movlw B'00000000'
movwf TRISC
movlw B'10000111' ;预分频器给TMRO,且分频比为1:256
movwf OPTION_REG
clrf STATUS
movlw 0xa0 ;TMRO初值
movwf TMR0
;***** ***************ADC初