PIC单片机16F84的内部硬件资源
成都 卫东
知识竞赛试题:
23用简单的实例说明中断在PIC单片机中的用途。
编后语:“PIC单片机系列专题”至今已刊登了十五期,余下还将刊载十期,共计二十五期。以后的内容将主要围绕PIC单片机的汇编和实际应用及开发来展开介绍,欢迎广大读者对本专题多提意见和建议。为配合本专题,“《电子报》单片机公共实验室”还为读者及会员准备一系列性价比高,适合初学者的PIC单片机、编程器、仿真器,以后本栏目将逐步加以介绍。另外,本专题的“知识竞赛”试题将于今年8月13日第32期《电子报》刊载完毕,欢迎读者踊跃参加。参加的读者务请在9月5日前,将所有试题按编号回答好后,寄往本报编辑部,或E-mail至dzb12@netdzb.com。我们将评出一、二、三等奖若干名,分别奖以奖金、PIC开发器、书刊等(详情见今年《电子报》第8期第十一版)。
10 复位
复位是单片机的初始化操作。其主要功能是把程序计数器PCL初始化为000H,可使16F84单片机从000H单元开始执行程序。
PIC16F84单片机有下列几种不同的复位方式。
(1)芯片上电复位POR。
(2)正常工作状态下通过外部MCLR引脚加低电平复位。
(3)在省电休眠状态下通过外部MCLR引脚加低电平复位。
(4)监视定时器WDT超时溢出复位。
PIC16F84单片机片内集成有“上电复位”POR电路,对于一般应用,只要把MCLR引脚接高电位即可。
在正常工作或休眠状态下用MCLR复位,只需在MCLR引脚上加一按键瞬间接地即可。
单片机16F84复位操作,对其它一些寄存器会有影响,如表1所示。
11监视定时器WDT
单片机系统常用于工业控制,在操作现场通常会有各种干扰,可能会使执行程序弹飞到一种死循环,从而导致整个单片机控制系统瘫痪。如果操作者在场,就可进行人工复位,摆脱死循环。但操作者不能一直监视着系统,即使监视着系统,也往往是引起不良后果之后才进行人工复位。由于PIC16F84单片机中具有程序运行自动监视系统,即监视定时器WDT(Watch Dog Time),直译为“看门狗”定时器。这好比是主人养了一条狗,主人在正常干活时总不忘每隔一段时间就给狗喂食,狗就保持安静,不影响主人干活。如果主人打嗑睡,不干活了,到一定时间,狗饿了,发现主人还没有给它吃东西,就会大叫起来,把主人唤醒。由此可见,WDT有如下特性:
(1)本身能独立工作,基本上不依赖CPU。
(2)CPU在一个固定的时间间隔中和WDT打一次交通(如使其清零,即喂一次狗),以表明系统目前工作正常。
(3)当CPU落入死循环后,能被WDT及时发觉(如WDT计数溢出),并使系统复位。
PIC16F84单片机内的WDT,其定时计数的脉冲序列由片内独立的RC振荡器产生,所以它不需要外接任何器件就可以工作。而且这个片内RC振荡器与OSC1/CLKIN(引脚{16})上的振荡电路无关,即使OSC1和OSC2上的时钟不工作,WDT照样可以监视定时。例如:当PIC16F84在执行SLEEP指令后,芯片进入休眠状态,CPU不工作,主振荡器也停止工作,但是,WDT照样可监视定时。当WDT超时溢出后,可激活(唤醒)芯片继续正常的操作。而在正常操作期间,WDT超时溢出将产生一个复位信号。如果不需要这种监视定时功能,在固化编程时,可关闭这个功能。附图是监视定时器的结构框图。表2是与WDT有关的寄存器。
WDT的定时周期在不加分频器的情况下,其基本定时时间是18ms,这个定时时间还受温度、VDD和不同元器件的工艺参数等的影响。如果需要更长的定时周期,还可以通过软件控制OPT/ON寄存器把预分频器配置给WDT,这个预分频器的最大分频比可达到1∶128。这样就可把定时周期扩大128倍,即达到23秒。
如果把预分频器配置给WDT,用CLRWDT和SLEEP指令可以同时对WDT和预分频器清零,从而防止计时溢出引起芯片复位。所以在正常情况下,必须在每次计时溢出之前执行一条CLRWDT指令(即喂一次“狗”),以避免引起芯片复位。当系统受到严重干扰处于失控状态时,就不可能在每次计时溢出之前执行一条CLR WDT指令,WDT就产生计时溢出,从而引起芯片复位,从失控状态又重新进入正常运行状态。
当WDT计时溢出时,还会同时清除状态寄存器中的D4位T0,检测T0位即可知道复位是否由于WDT计时溢出引起的。
成都 卫东
知识竞赛试题:
24简述PIC单片机中看门狗WDT的作用和功能。
12 E2PROM的使用方法
在PIC16F84单片机中,除了可直接寻址的由SRAM构成的数据存储器外,还另有可电擦、电写的E2PROM数据存储器。该E2PROM共有64字节,其地址为00~3FH单元。由于E2PROM具有在线改写,并在掉电后仍能保持数据的特点,可为用户的特殊应用提供方便。16F84的E2PROM在正常操作时的整个VDD工作电压范围内是可读写的,典型情况下可重写100万次,数据保存期大于40年。
PIC16F84单片机的E2PROM并未映象在寄存器组空间中,所以它们不能像SRAM通用寄存器那样用指令直接寻址访问,而需要通过专用寄存器进行间接寻址操作。因此,在16F84单片机中增加了以下四个专用寄存器,即EECON1、EECON2、EEDATA、EEADR,专门用于片内对E2PROM的操作。该专用寄存器中,EEDATA存放8位读/写数据,EEADR存放正在被访问的E2PROM存储单元的地址。
EECON1是只有低五位的控制寄存器,其高三位不存在,读作“0”。具体见下表。
D7 D6 D5 D4 D3 D2 D1 D0
- - - EEIF WRERR WREN WR RD
控制位RD和WR分别用于读写操作的启动,这两位可以由软件置1,以启动读、写操作,但不能用软件清零,原因是防止不恰当的软件操作会使写入失败。当读写操作完成后由硬件自动清零,表示此刻未对E2PROM进行读写操作。当WREN位被置1时,允许进行写操作,而在上电时该位被清零。在正常操作时,一旦有MCLR或WDT复位,WRERR位就置1,表示写操作被中止。当写操作完成时,EEIF被置1(需由软件清零);当写操作未完成或尚未启动时,EEIF为“0”。
EECON2仅是一个逻辑上的寄存器,而不是一个物理上存在的寄存器,读出时将总是为零。它只在写操作时起作用。
(1)E2PROM的读操作
为进行一次E2PROM读操作,需执行如下步骤:
1)将E2PROM的单元地址放入EEADR。2)置RD(EECON的D0位)=1。3)读取EEDATA寄存器。
程序段举例,读取25H处的E2PROM存储器数据:
…
BCF STATUS,RP0 ;选Bank0
MOVLW 25H
MOVWF EEADR ;地址25H→EEADR
BSF STATUS,RP0 ;选Bank1
BSF EECON1,RD ;启动读操作
BCF STATUS,RP0 ;选Bank0
MOVF EEDATA,W ;将E2PROM数据
… ;读入W寄存器
(2)E2PROM的写操作
要进行一次E2PROM写操作,需执行如下步骤:
1)将E2PROM单元地址放入EEADR;2)将写入数据放入EEDATA;3)执行一段控制程序段。
例如:将数据99H写入E2PROM的25H单元,需执行下列程序:
…
BCF STATUS,RP0 ;送Bank0
MOVLW 25H
MOVWF EEADR ;地址→EEADR
MOVLW 99H
MOVWF EEDATA ;写入数据→EEDATA
BSF STATUS,RP0 ;选Bank1
BSF EECON1,WREN;写操作功能允许
1 BCF INTCON,GIE ;关闭总中断
2 MOVLW 0x55
3 MOVWF EECON2
4 MOVLW 0xAA
5 MOVWF EECON2 ;操作EECON2
6 BSF EECON1,WR;启动写操作
7 BSF INTCON,GIE ;开放总中断
…
注意:上列程序中的2~6条各语句必须严格执行,否则不能启动E2PROM的写操作。而1~7条则是我们建议用户执行的操作,即在E2PROM写操作序列步骤中要关闭所有中断,以免这个序列被中断打断。
另外,WREN(EECON1的D2位)是用来保证E2PROM不会被意外写入而设置的,所以,在平时,用户程序应保持WREN=0以禁止写操作。只有当需对E2PROM写入时才置WREN=1,并在写入完成后将其恢复为0。用户只有置WREN=1后才能置WREN=1启动写操作。上电复位后WREN位自动清零。
E2PROM写操作约需10ms的时间才能完成。用户程序可通过查询WR位的状态(当WR=0时表示操作已完成),或者用E2PROM写入完成中断来判断E2PROM写操作是否完成。如要使用中断,应先置EEIF(INTCON的D6)为1,以开中断。E2PROM写完成要中断标志位EEIF,只能用软件清零。
单片机 51单片机 MCU 单片机视频教程 单片机开发 ARM单片机 AVR单片机 PIC单片机 Atmel stm32 单片机学习 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)