本文将通过对PIC16C71片内A/D转换器的介绍,使大家了解PIC16C7×系列单片机的A/D转换器的特性和应用。最后还将简要介绍PIC单片机的开发工具。
一、 PIC16C71的硬件特性
PIC16C71是片内带有4路高速8位A/D转换器的8位单片机。它是PIC16C5×系列的增强型单片机,所以它使PIC16C5×系列向上兼容,为PIC16C5×编写的程序可以很容易地移植到PIC16C71中。熟悉了PIC16C5×将会很容易学会使用PIC16C71。PIC16C71在PIC16C5×的基础上做了很多改进:PIC16C71将指令字长增加到14位,这使得程序页面寻址及寄存器寻址的能力得到很大的提高;增加了“高位程序计数器”PCLATH来处理程序页面寻址,取消了PIC16C5×中的页面位PA2、PA1、PA0;增加了几条新指令:RETURN、RETFIE、ADDLW和SUBLW,取消了OPTION和TRIS指令功能,但仍承认其形式,以保持和PIC16C5×的兼容性;增加了4种硬件中断:RB口中断、INT中断、RTCC中断和A/D中断,中断向量放在0004H单元;程序堆栈增加到8级,使子程序嵌套更方便;睡眠状态可由中断来唤醒;RB口具备弱上拉电路,并且增加了引脚电平变化引起中断的功能,这使得用RB口来构造一个键盘矩阵显得非常简洁好用,并且由键盘操作来唤醒处于睡眠方式下的单片机,使之进入工作状态。关于更详细的硬件资料,请读者到www.microchip.com.cn上去下载相应的PDF格式文件。
二、 PIC16C71片内A/D转换器
PIC16C7×系列单片机都有片内A/D转换器。PIC16C71有4路模拟输入通道,它们共同复用一个采样/保持电路和A/D转换器,参考电压可来自内部V\(_{DD}\),也可来自外部RA3引脚输入(V\(_{REF}\)输入脚)。PIC16C71的A/D转换器属于逐次逼近型,转换的结果放到ADRES(09H)寄存器中,为8位数字量。
使用A/D转换器必须先定义TRISA寄存器,使RA口成为输入端。RA0~RA3分别对应模拟输入AIN0~AIN3,AIN3还可以作为基准电压V\(_{REF}\)输入。A/D转换器的保持和采样电路由采样开关和保持电容组成。没有专门的命令用来开启和结束采样,当A/D转换过程开始,采样即暂停,CPU对加到保持电容上的电压进行数字转换。当一次A/D转换结束后,经过2tad(tad为A/D转换时钟)的延迟,采样又重新开始。必须清楚这一点,以保证有足够的采样时间。对于模拟量源推荐使用最大10kΩ的源阻抗,以减小A/D转换器的误差。
有两个控制寄存器ADCON0、ADCON1用于设置A/D转换器,寄存器中各位的定义见图1。在ADCON0中,ADON位为A/D转换允许位:为0,关闭A/D转换且不消耗工作电流;为1,启动A/D转换。ADIF位为A/D转换完成中断标志位,A/D转换完成时置位,需用软件清除。GO/DONE为A/D转换状态位,如果ADON为1时,置该位启动A/D转换;当转换完成时该位由硬件自动清零。如果ADON为0,该位被强制为零。CHS1、CHS0为模拟通道选择,为00,选择通道0(AIN0);为01,选择通道1(AIN1);为10,选择通道2(AIN2);为11,选择通道3(AIN3)。ADCS1、ADCS0为A/D转换时钟选择位,为00,选择fosc/2;为01,选择fosc/8;为10,选择fosc/32;为11,选择frc(来自内部RC振荡)。在ADCON1中,PCFG1、PCFG0为A/D转换口配置位,将模拟口配置成不同的工作方式。具体配置见表1。


A/D转换器从设置控制寄存器GO/DONE为1时,即开始进行A/D转换,在转换前,要选择模拟输入通道及设置足够的采样时间。最快转换时间为20μs。当A/D转换结束时,GO/DONE位被自动清零,并且发出A/D完成中断请求。
三、 PIC16C71 A/D转换器的软件设置
与PIC16C71的A/D转换器有关的特殊功能寄存器有控制寄存器ADCON0、ADCON1,中断寄存器INTCON,A/D转换结果寄存器ADRES。通过对这4个寄存器的赋值,完成A/D转换器的设置。
设置A/D转换器的程序流程见图2:
程序清单:
STATUS EQU 03H ;寄存器定义
ADCON0 EQU 08H
ADCON1 EQU 88H
INTCON EQU 0BH
ADRES EQU 09H
ORG 0000H
GOTO MAIN ;复位地址
ORG 0004H ;中断向量入口
……
MOVF ADRES,W ;将A/D的转换结果给W寄存器
…… ;A/D数据处理
RETFIE ;中断返回
MAIN :
……
BSF STATUS,5 ;选寄存器页面1
MOVLW 00000010B ;因为ADCON1(88H)在页面1
MOVWF ADCON1
BCF STATUS,5 ;选寄存器页面0
MOVLW 11000001B ;tad=trc
MOVWF ADCON0
MOVLW 11XXXXXXB ;使能A/D中断
MOVWF INTCON
BSF ADCON0,2 ;启动A/D转换
四、 PIC16C71 的应用
因为PIC16C71片内带有4路8位A/D转换器,可以利用PIC16C71作为模拟量数据采集控制CPU,完成4路通道的模拟输入的数据采集,然后可以把采集的数据保存到数据存储器,也可根据上位机的命令,通过RS-232串行通讯,上传采集数据,也可以设计成多点的数据采集,通过RS-485组成网,上位机对各个点进行配置和控制,并读回各点采集的数据结果。如果对A/D的精度要求不高,可以直接使用V\(_{DD}\)作为电压基准,否则可增加外部电压基准。硬件组成框图见图3。

五、 PIC单片机的开发工具
MPLAB软件是Microchip公司推出的适用于PIC16/17单片机系列的基于Windows的集成开发环境。这种集成开发环境使开发工程师能灵活地编辑、编译、仿真、开发和调试PIC16/17系列单片机的应用程序。
MPLAB集成开发环境包括下列开发工具:
1. MPLAB项目管理程序。
项目管理程序是MPLAB的核心部分。不创建项目就不能进行符号调试。在整个项目管理程序中,可以进行下列操作:创建项目、把源代码文件加入到项目中、汇编或编译源代码、编辑源代码、重建所有源文件或编译单个文件、调试源代码。
2. MPLAB编辑程序。
MPLAB编辑程序使你能编写与编辑固件源文件或其他适用于PIC16/17微控制器的文本文件。
3. MPASM汇编程序。
使用该程序汇编源程序代码,可以不退出MPLAB便可生成各种目标代码格式以支持Microchip开发工具与其他编程工具。
4. MPLAB-SIM软件模拟仿真程序。
该软件可以模拟PIC16/17系列单片机的指令与I/O。通过模拟仿真,可以找出代码问题并调试源程序。
5. PICMASTER仿真器是高性能的在线仿真器。
它能实时地运行目标应用程序同时执行硬件调试操作。
6. PICSTAR PLUS编程器。
它是Microchip公司推出的全系列单片机编程器,可以用来编程PIC16/17系列的单片机。
有了这样一个集成开发环境,用户将会很容易完成应用程序的编写、编译、软件调试和编程芯片。有新型号芯片后,MPLAB可以通过软件升级,支持新的芯片功能。本系列讲座不具体对其进行介绍。
六、 PIC单片机讲座小结
通过对PIC单片机的结构特点、指令系统及3个系列单片机的应用例子的介绍,大家对PIC单片机有了一定的了解,在学习和使用PIC单片机的时候,还要注意两点:
1. 要熟悉PIC单片机的内部功能模块,根据功能的要求,选择合适的单片机。
PIC单片机有多个系列,每个系列又有多种型号。每种型号之间的差异主要是功能模块的不同。所以,要熟悉各个系列的特点,了解各个型号的差异,每个系列在我刊介绍的网站上均有详细的硬件资料。这样,在具体设计时,根据应用的需要和功能的要求,选择最合适的单片机,可避免不必要的硬件资源浪费。
2. 发挥PIC单片机的开发软件功能强的特点,缩短开发周期。
MPLAB是一个功能比较强的集成开发环境,设计、调试、编程芯片等工作都在此完成。它的软件模拟仿真功能非常灵活、方便,编译好源程序后,可通过模拟仿真调试、检测应用程序功能,不需要烧写芯片测试程序。
(陈伟)