PIC16F877资料.docx
《PIC16F877资料.docx》由会员分享,可在线阅读,更多相关《PIC16F877资料.docx(25页珍藏版)》请在冰豆网上搜索。
PIC16F877资料
第四章PIC16F877单片机概述
4.1单片机的发展和应用
4.1.1单片机的历史发展概况
单片机技术发展十分迅速,产品种类已琳琅满目。
纵横整个单片机技术发展过程,可以分为以下三个主要过程:
一、单芯片微机形成过程
1976年,Intel公司推出了MCS-48系列单片机。
该系列单片机早期产品在芯片内集成有:
8位CPU、1K字节程序存储器〔ROM〕、64字节数据存储器〔RAM〕、27根I/O线和1个8位定时/计数器。
此阶段的主要特点是:
在单个芯片内完成了CPU、存储器、I/O接口、定时/计数器、中断系统、时钟等部件的集成,但存储器的容量较小,寻址范围小〔不大于4K〕,无串行接口,指令系统功能不强。
二、性能完善提高阶段
1980年,Intel公司推出MCS-51系列单片机。
该系列单片机在芯片内集成有:
8位CPU、4K字节程序存储器〔ROM〕、128位字节数据存储器〔RAM〕、4个8位并行接口、1个全双工串行接口和2个16位定时/计数器。
寻址范围为64K,并集成有控制功能较强的布尔处理器完成处理功能。
此阶段的主要特点是:
结构体系完善,性能已大大提高,面向控制的特点进一步突出。
现在,MCS-51已成为公认的单片机经典机种。
三、微控制器化阶段
1982年,Intel公司推出MCS-96系列单片机。
该系列单片机在芯片内部集成有:
16位CPU、K字节程序存储器〔ROM〕、232字节数据存储器〔RAM〕、5个8位并行接口、1个全双工串行接口和2个16位定时/计数器。
寻址范围最大为64K。
片上还有8路10位ADC、1路PWM〔D/A〕输出及高速I/O部件等。
近年来,许多半导体厂商以MCS-51系列单片机的8051为内核,将许多测控系统中的接口技术、可靠性技术及先进的存储器技术和工艺技术集成到单片机中,生产出了多种功能强大、使用灵活的新一代80C51系列单片机。
此阶段的主要特点是:
片内面向测控系统的外围电路增强,使单片机可以方便灵活地应用于复杂的自动测控系统及设备。
因此,“微控制器”的称谓更能反应单片机的本质。
4.1.2单片机发展趋势
纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:
1.低功耗CMOS化
MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。
像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。
CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。
所以这种工艺将是今后一段时期单片机发展的主要途径。
2.微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。
甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。
此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。
现在的许多单片机都具有多种封装形式,其中SMD(外表封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。
3.主流与多品种共存
现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的Winbond系列单片机。
所以C8051为核心的单片机占据了半壁江山。
而Microchip公司的PIC精简指令集(RISC)也有着强劲的发展势头,中国台湾的HOLTEK公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场份额。
此外还有MOTOROLA公司的产品,日本几大公司的专用单片机,在一定时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成,共同发展的道路。
4.1.3单片机的应用领域
由于单片机具有良好的控制性能和灵活的嵌入品质,近年来单片机在各种领域都获得了极为广泛的应用。
概要地分成以下几个方面:
1:
智能仪器仪表
单片机用于各种仪器仪表,一方面提高了仪器仪表的使用功能和精度,使仪器仪表智能花,同时还简化了仪器仪表的硬件结构,从而可以方便地完成各种仪器仪表产品的升级换代。
如各种智能电气测量仪表、智能传感器等。
2:
机电一体化产品
机电一体化产品是集机械技术、微电子技术、自动化技术和电脑技术于一体,具有智能化特征的各种机电产品。
单片机在机电一体化产品的开发中可以发挥巨大的作用。
典型产品如机器人、数控机床、自动包装机、点钞机、医疗设备、打印机、机、复印机等。
3:
实时工业控制
单片机还可以用于各种物理量的采集与控制。
电流、电压、温度、液位、流量等物理量参数的采集和控制均可以利用单片机方便地实现。
在这类系统中,利用单片机作为系统控制器,可以根据被控对象的不同特征采用不同的智能算法,实现期望的控制指标,从而提高生产效率和产品质量。
典型应用如电动机转速控制、温度控制、自动生产线等。
4:
分布系统的前端模块
在较复杂的工业控制系统中,经常要采用分布式测控系统完成大量的分布参数的采集。
在这类系统中,采用单片机作为分布式系统的前端模块。
系统具有运行可靠,数据采集方便灵活,成本低廉等一系列优点。
5:
家用电器
家用电器是单片机的又一重要领域,前景十分广阔。
如空调器、电冰箱、洗衣机、电饭煲、高档洗浴设备、高档玩具等。
另外,在交通领域中,汽车、火车、飞机、航天器等均有单片机的广泛应用。
如汽车自动驾驶系统、航天测控系统、黑匣子等。
4.2PIC16F877单片机简介
4.2.1PIC16F877单片机的内部结构
PIC16F877单片机的功能框图如图4.1所示。
从其执行功能考虑,可以将单片机分成两大组件,即基本功能模块和专用功能模块。
1:
PIC16F877单片机的基本功能模块
PIC16F877单片机的基本功能区域的主要功能模块包括以下7部分
1)程序存储器区域
PIC16F877单片机带有Flash程序存储器结构,主要存放由用户预先编制好的程序和一些固定不变的数据。
程序存储器共有8K×14位程序单元空间,即0000H1FFFH,由程序计数器提供13条地址线进行单元选择,每个单元宽14位,能够存放一条PIC单片机系统指令。
在系统上电或其他复位情况下,程序计数器均从0000H地址单元开始工作。
如果遇到调用子程序或系统发生事件中断时,都将把当前程序断点处的地址送入8级×14位的堆栈区域进行保护。
堆栈是一个独立的存储区域,在子程序或中断服务程序执行完后,再恢复断点地址,使主程序得以继续执行。
通过14位程序总线,取出对应程序指令的机器码,送入指令寄存器,将组成的操作码和操作数进行有效别离。
如果操作数为地址,则进入地址复用器;如果操作数为数据,则进入数据复用器。
而操作码将在指令译码和控制单元中转化为相应的功能操作。
2)数据存储区域
PIC16F877单片机数据存储器主要包括特殊功能寄存器和通用寄存器两部分,用于存取CPU在执行程序过程中产生的中间数据或预置的参数。
RAM数据存储器的每个存储单元除具备普通存储器功能之外,还能实现移位、置位、复位和位测试等通常只有寄存器才能完成的操作。
PIC16F877共有512字节单元空间〔包括无效的地址单元〕,即000H1FFH.地址复用器组合9条地址线,实现512个数据存储器单元地址的有效选择。
对于不同的数据访问,地址复用器的组合方式也存在差异。
当采用直接寻址时,RAM地址的形成采用7加2模式,即7位数据来源于指令操作数,2位数据来源于STATUS
状态寄存器RP1、RP0;而采用间接寻址时,RAM地址的形成采用8加1模式,即8位数据来源于文件选择寄存器FSR,1位数据来源于STATUS状态寄存器IRP
基本功能区域配置有地址和数据两种复用器,是一种信号的选择开关,可根据指令功能的不同而选择其中的一个通路。
3)E2PROM数据存储器模块
PIC16F877单片机嵌入一个256×8位E2PROM数据存储器模块。
它与内部数据存储器最大的差异在于可在线擦/写,存储的内容掉电时不会丧失。
完成数据存取功能,PIC单片机指令集没有提供现成的机器指令,而必须采用特殊的程序段。
4)算术逻辑运算区域
PIC16F877单片机中一个非常重要的部件就是算术逻辑单元ALU,主要实现算数运
图4.1PIC16F877单片机的功能框图
算和逻辑运算。
一般对于双目操作类指令,如“加”、“减”、“与”、“或”的两个操作数将来源于工作寄存器W和数据复用器。
而执行的结果可以送入工作寄存器W或返回数据总线〔进入特定外围模块或给定的数据寄存器单元〕,同时会将运算结果的状态送入STATUS状态寄存器。
与算术逻辑运算区域关联的特殊功能寄存器有以下3种
〔1〕工作寄存器W:
相当于其它单片机中的“累加器A”,是数据传送的桥梁,是最为繁忙的工作单元。
在运算前,W可以暂存准备参加运算的一个操作数〔成为源操作数〕;
〔2〕状态寄存器STATUS:
反映最近一次算术逻辑运算结果的状态特征,如是否产生进位、借位、结果是否为零等,共涉及3个标志位〔Z、DC和C〕。
该寄存器在其他单片机中又称为标志寄存器或程序状态字〔PAW〕寄存器。
另外,状态寄存器还包括数据寄存器区域的选择信息〔IRP、RP1和RP0〕。
如下列图的状态寄存器STATUS指向数据存储器地址复用器的3条控制线,配合完成间接寻址〔IRP〕和直接寻址〔RP1和RP0〕。
〔3〕文件选择寄存器FSR:
是与INDF完成间接寻址的专用主题寄存器,用于存放间接地址,即预先将要访问单元的地址存入该寄存器。
5)输入/输出端口模式
PIC16F877单片机具有丰富的接口资源,共设置有5个输入/输出端口,分别为RA〔6位〕、RB〔8位〕、RC〔8位〕、RD〔8位〕和RE〔3位〕,合计共有33个引脚。
大多数引脚除了基本I/O功能外,还配置有其他特殊功能,例如模拟量输入通道,串/并行通信线和MPLAB—ICD专用控制线等。
这些端口引脚在使用中存在着差异,特别是RA〔6位〕和RE〔3位〕中所涉及的输入/输出通道,只有当对ADCON1进行设置后才能用作为数字累输入/输出引脚。
另外,RB端口的高4位具有特殊的电平变化中断功能,为实时监控提供了很大方便。
RC端口拥有各类串行通信功能,包括主控同步串行通信MSSP〔SPI、I2C〕和通用同步/异步收发器USART
6)多功能定时器模块
PIC16F877单片机配置有3个功能较强的多功能定时器模块:
TMR0〔8位〕、TMR1〔16位〕和TMR2〔8位〕。
他们都具有不同位宽的可编程定时器,出TMR2以外都可作为计数器使用。
每个定时器/计数器模块都配有不同比例的预分频器或后分频器。
另外,还有两个重要的专门用途;当设置在同步计数方式下,TMR1可与捕捉/比较/脉宽调制CCP模块配合实现脉宽调制输出功能。
7)核心模块
PIC16F877单片机具有多种功能强大的系统复位模式:
基于电容的效应,当系统芯片加电后,VDD电压会有一个逐渐上升的过程,只有到达1.51.8V后,上电复位电路将自动产生一个复位脉冲,使单片机复位;而为了保障系统程序安全,可靠运行,当VDD掉电跌落到VBOR(大约4V)的时间大于TBOR〔大约100us〕时,如果掉电复位功能处于使能方式,将自动产生一个复位信号并使芯片保持在复位状态;而此时如果VDD恢复到正常范围,上电延时电路再提供一个72ms延时,才使CPU从复位状态返回到原正常运行状态。
另外,核心模块还带有两种特殊的延时电路:
上电延时和起振延时电路。
在芯片加电时,上电延时定时器PWRT提供一个固定的72ms正常上电延时。
上电延时电路采用RC振荡器方式工作。
当PWRT处于延时过程时,芯片就能一直保持在复位状态,以确保电源电压在这个固定延时内到达合适的芯片工作电压;在上电延时电路提供一个72ms延时后,起振定时器OST将提供1024个振荡周期的延迟时间,以确保晶体或陶瓷谐振器能够有合适的时间起振并产生稳定的时序波形。
PIC16F877单片机嵌入了一个具有较强功能的看门狗定时器WDT,能够有效防止因环境干扰而引起系统程序“飞溢”。
WDT的定时/计数脉冲是由芯片内专用的RC振荡器产生的。
它的工作既不需要任何外部器件,也与单片机的时钟电路无关。
这样,即使单片机的时钟停止,WDT仍能继续工作。
看门狗电路在实时控制系统有着重要的应用价值,可以在18ms基本定时基础上加入1:
11:
128的预分频比例,从而到达182304ms的定时。
一旦在程序中启用看门狗电路,定时的长短将直接与看门狗复位指令CLRWDT的设置有关。
其原则是:
程序循环或程序段内插入CLRWDT,确保正常程序运行时看门狗电路执行复位〔CLRWDT〕的间隙时间小于看门狗电路设置的溢出时间。
PIC16F877单片机最具特色的内容之一就是具有强大的在线调试功能和低压编程功能,为初学者提供了一个友好的操作平台,在Microchip公司提供的集成开发环境MPLAB—IDE和实验板的支持下,完成在线调试程序的功能。
在对PIC16F877单片机进行在线串行编程时,该电路允许使用芯片工作电压VDD作为编程〔即固化〕电压,而不需要额外的高电压〔如13V〕
2:
PIC16F877单片机的专用功能模块
PIC16F877单片机内部集成了多个专用功能模块,其功能和使用方法比较复杂。
PIC16F877单片机专用功能区域主要包括了6个充分表达PIC16F877单片机特色的专用功能模块。
1〕串行通信和并行数据传送模块
在RC端口聚集有多种串行数据传送方式,主要包括同步串行端口SSP和通用同步/异步收发器USART。
SSP具有SPI和I2C两种系统内部进行数据传送的工作方式,可实现多机或外接专用器件进行特殊通信。
USART是一种常规的二线式串行通信模式,在PC机和单片机中都有配置。
它可以定义为两种工作方式:
半双工同步方式和全双工异步方式,以实现外接专用器件之间或远距离多机进行特殊通信。
另外,RD端口可作为并行从动端口PSP,是一条处于被开工作方式下数据传送的高速通道,并行数据总线的权限将由于其进行数据交换的另一方控制。
2〕捕捉/比较/脉宽调制模块
PIC16F877单片机配置有两个功能较强,颇具特色的功能模块CCP1和CCP2,分别能与TMR1和TMR2配合实现对信号的输入捕捉,输出比较和脉宽调制PWM输出功能。
(1)输入捕捉功能:
主要通过TMR1定时器,及时捕捉外加信号的边沿触发,用来间接测量信号周期,频率,脉宽等。
(2)输出比较功能:
主要通过TMR1定时器和比较电路,输出宽度可调的方波信号,以驱动那些工作于脉冲型的电气部件。
(3)脉宽调制PWM输出功能:
主要通过TMR2定时器,PR2周期寄存器和比较电路,输出周期和脉宽可调的周期性方波信号,以控制可控硅的导通状态,步进电机转动角度或调整发光器件亮度等。
3)A/D转换器〔ADC〕模块
A/D转换器是专门功能区域重要的器件之一。
PIC16F877单片机本身就嵌入了一个10位分辨率的模/数转换器,最多可带有8个模拟量输入通道,用来将外部的模拟量变换成单片机可以接受和处理的数字量。
A/D转换器采用常规的逐次比较法,参考电压即可使用标准的VDD和VSS信号,也可使用外加参考电压的方式。
A/D转换器内部配置有独立的时钟信号,即使PIC单片机处于睡眠的情况下,照样可以进行模/数转换。
4.2.2PIC16F877单片机的引脚说明
1:
PIC16F877的引脚如图4.2所示
图4.2PIC16F877引脚图
2:
PIC16F877引脚定义
PIC16F877单片机共有40个引脚,其中11、32脚是电源引脚,12、31脚是电源地,分别接到5V电源的正负极上;1脚是复位引脚,低电平复位;13、14脚时时钟输入引脚和时钟输出引脚,可由RC振荡电路或晶振振荡电路构成时钟源;其余引脚分别是RA0RA5、RB0RB7、RC0RC7、RD0RD7、RE0RE2,这些引脚除了当作普通端口使用外,很多引脚还有其他功能。
PIC16F877单片机的每个I/O端口都配有2个相关的寄存器:
一个是寄存器TRISx;另一个是端口寄存器PORTx。
TRISx是一个方向寄存器,用来设置端口的方向,也就是将端口设置为输入口或者输出口:
逻辑1代表端口是输入口,逻辑0代表端口是输出口。
需要注意的是在上电复位后,这些I/O端口的默认状态都是输入。
PORTx是端口寄存器,在作为输出口时,该寄存器中存放的是要输出的数据;在作为输入口时,该寄存器中存放的是要读取的数据。
这两个寄存器都是8位寄存器,分别与每个端口的8个引脚相对应。
1:
PORTA和TRISA寄存器
PORTA是一个6位长度的双向端口,相对应的方向寄存器是TRISA。
设置相应的位为1将使相对应的PORTA端口设置为输入口,设置相应的位为0将使相对应的PORTA端口设置为输出口。
当将端口设置为输入口时,从PORTA寄存器读取的数据表示引脚的状态;当将端口设置为输出口时,则将数据写到端口锁存器中。
所有写操作都经过读—修改—写的过程。
因此对端口的“写”意味着先读引脚,然后修改值,最后再写入到端口锁存器。
RA4引脚同时被复用为TMR0的时钟输入引脚,作为输入时,其内部是一个施密特触发器;作为输出时,则是一个漏极开路输出。
所有其他RA端口引脚的输入信号都是TTL电平,输出信号都是CMOS驱动输出。
需要注意的是,将RA4作为输出口时一定要接上拉电压。
当其他引脚复用为模拟参考电压输入时,由ADCON1寄存器进行设置。
表4.1端口A功能表
引脚名称
位
缓冲
功能
RA0/AN0
第0位
TTL
通用输入/输出口,模拟输入口
RA1/AN1
第1位
TTL
通用输入/输出口,模拟输入口,
RA2/AN2/VREF-
第2位
TTL
通用输入/输出口,模拟输入口,负参考电压
RA3/AN3/VREF+
第3位
TTL
通用输入/输出口,模拟输入口,正参考电压
RA4/TOCKI
第4位
ST
通用输入/输出口,定时器0外部时钟输入口,漏极开路输出
RA5/SS/AN4
第5位
TTL
通用输入/输出口,模拟输入口,同步串口从模式选择输入
注:
TTL=TTL输入,ST=施密特触发输入
表4.2端口A相关寄存器
地址
名称
Bit7
BIt6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
上电复位和带电锁定复位时的值
其他复位时的值
05H
POPTA
—
—
RA5
RA4
RA3
RA2
RA1
RA0
-0X0000
-0U0000
85H
TRISA
—
—
端口A方向寄存器
-111111
-111111
9FH
ADCON1
ADFM
—
—
—
PCFG3
PCFG2
PCFG1
PCFG0
-0-0000
-0-0000
表4.3ADCON1中PCFG3PCFG0的作用
PCFG3PCFG0
AN7
RE2
AN6
RE1
AN5
RE0
AN4
RA5
AN3
RA3
AN2
RA2
AN1
RA1
AN0
RA0
VREF+
VREF-
0000
A
A
A
A
A
A
A
A
VDD
VSS
0001
A
A
A
A
VREF+
A
A
A
RA3
VSS
0010
D
D
D
A
A
A
A
A
VDD
VSS
0011
D
D
D
A
VREF+
A
A
A
RA3
VSS
0100
D
D
D
D
A
D
A
A
VDD
VSS
0101
D
D
D
D
VREF+
D
A
A
VDD
VSS
011X
D
D
D
D
D
D
D
D
VDD
VSS
1000
A
A
A
A
VREF+
VREF-
A
A
RA3
RA2
1001
D
D
A
A
A
A
A
A
VDD
VSS
1010
D
D
A
A
VREF+
A
A
A
RA3
VSS
1011
D
D
A
A
VREF+
VREF-
A
A
RA3
RA2
1100
D
D
D
A
VREF+
VREF-
A
A
RA3
RA2
1101
D
D
D
D
VREF+
VREF-
A
A
RA3
RA2
1110
D
D
D
D
D
D
D
A
VDD
VSS
1111
D
D
D
D
VREF+
VREF-
D
A
RA3
RA2
2:
PORTB和TRISB寄存器
POTRB是一个8位长度的双向端口,相对应的方向寄存器是TRISB。
设置TRISB相应的值为1将使相对应的PORTB端口设置为输入口,设置相应的值为0将使相对应的PORTB端口设置为输出口。
PORTB端口中的三个端口RB3/PGM、RB6/PGC、RB7/PGD复用为低电压编程功能。
端口B中的每一个引脚都有内部的弱上拉电阻,由每一个控制位设定,即OPTION_REG寄存器中的第7位RBPU。
当RBPU-=0时打开所有的内部弱上拉电阻。
当引脚配置为输出时,自动关闭所有上拉电阻。
在电源上电复位时所有的弱上拉电阻被禁止。
RB7RB4这四个引脚在电平变化时产生中断,因此可以利用这个特点构成电平变化中断键盘。
当这些引脚配置成输入引脚后,可以自动将锁存器中的数值与当前引脚电平数值进行比较。
假设不一致,称为“失配”,则会产生一个中断,该中断可将单片机从睡眠状态中唤醒。
任何一个中断的产生都有一个中断标志位,电平变化中断标志位为RBIF,该位是中断控制寄存器INTCON的第0位。
如果有中断产生,标志位RBIF=1,那么处理完中断后将该位清零。
在中断程序中可以采用如下方法清除中断:
1〕对PORTB的任何读或写。
这将结束不一致的条件;
2〕清除标志位RBIF
失配的条件将会继续设置标志位RBIF。
读PORTB将结束失配的条件,并允许清除标志位RBIF
“电平变化中断”推荐用于键盘唤醒操作和电平变化时的中断操作。
当使用电平变化中断时,不建议用PORTB查询。
RB0/INT是一个外部中断输入引脚,使用INTEDG位进行配置,INTEDG位是OPTION_REG寄存器的第6位
表4.4端口B功能表
引脚名称
位
缓冲
功能
RB0/INT
第0位
TTL
通用输入/输出口,或外部中断输入,内部软件可编程弱上拉电阻
RB1
第1位
TTL
通用输入/输出口,内部软件可编程弱上拉电阻
RB2
第2位
TTL
通用输入/输出口,内部软件可编程弱上