版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 PIC16F87X系列单片机2.1 概 述2.2 内部功能及时序2.3 引脚功能2.4 存储器组织2.5数据E2PROM和闪存组织2.6振荡电路2.7复位电路与复位状态2.8 I/O端口2.9 中断组织2.10看门狗电路2.11 低功耗设置(休眠模式)2.12在线串行编程与调试功能第2章 PIC16F87X系列单片机2.1 概 述2.1 概 述PIC16F87X系列单片机是MICROCHIP公司生产的中级产品,具有FLASH程序存储器的8位CMOS单片机,品种有28引脚的PIC16F876(A)/873(A)和40/44引脚引脚的PIC16F877(A)/874(A),对应的封装形式有
2、PDIP、SOIC、SSOP、PLCC和QFP等多种。这个系列单片机采用CMOS技术和静态设计技术,实现了低功耗和宽工作电压范围,可以满足不同的应用要求。 2.1 概 述PIC16F87X系列单片机是MICRO PIC16F87X系列单片机采用高性能的哈佛结构CPU和RISC指令集,CPU通过不同的总线访问存储器的数据和指令(程序),这样提高了CPU的工作速度和效率,比传统的程序与数据共用存储体和总线的冯.偌依曼结构改善了带宽。这种结构带来两个明显的优点:其一是CPU可以同时访问程序存储区和数据存储区其二是程序存储区和数据存储区可以采用不同字节宽度的总线。正是第二点使PIC系列单片机能够采用R
3、ISC结构,提高CPU的访问速度。PIC16F87X系列的单片机指令采用14位字宽,使所有的指令操作码都为单字指令,即可以在单周期内通过14位程序存储器访问总线取出l4位指令。另外还有两级流水线结构可以重叠取指和指令执行,加快了指令执行速度。程序的运行除程序分支(跳转)需要两周期的指令外,其它指令均为单周期指令,指令集一共包含有35条单字节指令。哈佛结构CPU和RISC指令集 PIC16F87X系列单片机采用高性能的哈佛结构CPU和RPIC16F873(A)/874(A)包含4K14的程序闪存,192字节的数据随机存储器和128字节数据EEPROM存储器。PIC16F876(A)/877(A)
4、的程序闪存为8K14,数据随机存储器为368字节,数据EEPROM存储器为256字节。PIC16F873(A)/876(A)具有A、B和C三个I/O端口,内部包含13个中断源、三个定时器、两个CCP(捕捉器/比较器/PWM)模块和一个看门狗电路,同时集成了5通道A/D转换器。PIC16F874(A)/877(A)具有A、B、C、D和E五个I/O端口,内部包含14个中断源、三个定时器、两个CCP(捕捉器/比较器/PWM)模块、一个看门狗电路和一个并行从属端口PSP,同时集成了8通道A/D转换器。PIC16F87X系列既有SPI和I2C主串行通信端口,又有USART异步串行通信端口。 PIC16F
5、87X系列单片机 内涵PIC16F873(A)/874(A)包含4K14的程序闪表2.1 PIC16F87X系列单片机功能配置表2.1 PIC16F87X系列单片机功能配置2.2 内部功能及时序PIC16F87X系列单片机是一种高速度、低功耗、高性能的CMOS器件,含有ROM、RAM、EEPROM、FLASH RAM、I/O端口、A/D转换器、捕捉器/比较器/PWM、串行通信端口、定时器、中断控制器和一个中央处理器。这种结构是基于文件寄存器概念,有独立的数据/数据存储器总线和程序存储器总线。数据总线和数据存储器总线是8位的字宽,程序总线和程序存储器(FLASH PROGRAM MEMORY)是
6、14位字宽。由于数据存储器集成在片内,通过片内的8位总线与算术逻辑单元(ALU)连接,可以直接通过内部总线传送信息,所以它们都是以寄存器方式工作和寻址,程序编码简洁高效。 2.2 内部功能及时序PIC16F87X系列单片机是一种高2.2.1 内部组成 PIC16F87X系列单片机的内部结构框图如图所示。整个单片机集成了算术逻辑单元ALU,FLASH程序存储器,14位指令寄存器,13指针寄存器和8级13位的堆栈,文件寄存器RAM和特殊功能寄存器,状态寄存器,定时器,多通道10位A/D转换器,数据EEPROM,同步串行通信端口,通用异步串行通信端口,捕捉器/比较器/PWM,多功能输入/输出(I/O
7、)端口,上电定时器,振荡器起振定时器,看门狗定时器,上电和掉电复位电路,时序产生电路,从属并行端口,低电压编程电路等。2.2.1 内部组成 PIC16F87X系列单片机的内部结构PIC16F87X芯片内核心是一个ALU和工作寄存器W。ALU控制工作寄存器W的内容(数据)和任何一个文件寄存器中的内容(数据)进行算术运算和逻辑(布尔)运算,ALU的字为8位,可以用其进行加、减、移位和逻辑操作。除非特别指出,一般的操作都是以2的补码进行。在有两个操作数的指令中,典型情况是其中一个操作数放在W寄存器中,另一个操作数放在文件寄存器或是一个立即数。 根据所执行的指令,ALU会影响状态寄存器STATUS中十
8、进制数字进位标志(即半进位标志) 、二进制借位标志C和全零标志Z。当ALU运行后的结果为0时,标志位Z置1,否则为0;当进行加法运算,发生最高为进位,标志位C置1,否则为0;当进行减法运算,最高位发生借位,标志位C清零,否则为1;当进行加法运算D3向D4进位时,标志位DC置1,否则为0;当进行减法运算D3向D4借位,标志位DC清零,否则置1。工作寄存器W是操作过程中的一个过渡寄存器,它可以存放操作数,也可以存放操作结果,相当于MCS51系列中的A寄存器,不可寻址。使用起来相当灵活。ALU和工作寄存器WPIC16F87X芯片内核心是一个ALU和工作寄存器W。AL图2.1 PIC16F873(A)
9、/876(A)单片机的内部结构框图图2.1 PIC16F873(A)/876(A)单片机的内图2.2 PIC16F874(A)/877(A)单片机的内部结构框图图2.2 PIC16F874(A)/877(A)单片机的内2.2.2 指令周期和时序图时钟信号从OSCI/CLKIN引脚上输入后,在片内产生4个非重叠四个信号,分别被称作Q1、Q2、Q3和Q4,如图2.3所示。每个指令周期(TCY)包含这4个Q周期,Q周期与芯片的振荡周期(TOSC)一致。每个Q周期提供每条指令的指令译码、读、处理数据以及写等操作的定时。每个指令周期完成四部分工作:在Q1周期指令译码或不操作,在Q2周期指令读数据或不操作
10、,在Q3周期处理数据,在Q4周期写数据或不操作。2.2.2 指令周期和时序图时钟信号从OSCI/CLKIN引图2.3 芯片时序图2.3 芯片时序哈佛结构,使得程序存储器(存放指令)的访问和数据存储器(存放运算数据)的访问并行处理。在单片机的指令运行中,一般需要如下的过程:从程序存储器取出指令,根据指令进行译码,然后执行。在复杂指令集中,首先取指令需要12个周期,译码和执行指令又需要个周期。在PIC单片机中采用RISC指令集,使用指令流水线结构,在一个周期内完成两部分工作:一是执行指令,二是从程序存储器取出下一条指令。这样总的看起来每条指令只需要一个周期(个别除外)。如图2.4所示,在一个周期中
11、,完成本条指令的执行,同时取出了下一条指令。2.2.3 指令流哈佛结构,使得程序存储器(存放指令)的访问和数据存储器(存放图2.4 指令流图2.4 指令流2.3 引脚功能在PIC系列单片机种,除电源和地线引脚之外,其它的引脚基本都可能采用编程选择多功能复用。封装形式PIC16F87X系列单片机采用DIP、PLCC和QFP三种封装形式。PIC16F877/874采用40引脚的PDIP、44引脚的PLCC和44引脚的QFP,PIC16F876/873采用28引脚的PDIP或SOIC。如图2.5所示。 根据引脚的功能,可以将引脚分为下列几类。2.3 引脚功能在PIC系列单片机种,除电源和地线引脚之图
12、2.5 PIC16F87X单片机封装与引脚图图2.5 PIC16F87X单片机封装与引脚图图2.5 PIC16F87X单片机封装与引脚图(续1)图2.5 PIC16F87X单片机封装与引脚图(续1)PIC单片机的供电可以在+2.7V+5V的范围,为了减少电源噪声的影响,将电源引脚和地线引脚放置芯片的中间。2.3.1 电源VDD引脚和地VSS引脚2.3.1 电源VDD引脚和地VSS引脚在PIC单片机中有一根振荡器输入引脚OSC1/CLKIN和一根振荡器输出引脚OSC2/CLKOUT,由于PIC单片机可以采用不同的振荡器,这样使得这两根引脚可以有不同的功能。采用晶体振荡器或陶瓷谐振器,将晶体振荡器
13、的两脚直接接入OSC1/CLKIN和OSC2/CLKOUT;采用外部振荡器电路时,将OSC1/CLKIN作为输入,OSC2/CLKOUT开路;采用RC振荡器时,OSC1/CLKIN作为输入,OSC2/CLKOUT作为4分频信号输出(参见图2.26)。2.3.2 振荡器输入输出引脚在PIC单片机中有一根振荡器输入引脚OSC1/CLKIN和一主复位信号引脚用于外部电路产生复位信号使PIC单片机复位,低电平有效。在对CPU编程时,此引脚作为编程电压的输入端VPP。2.3.3 主复位信号引脚主复位信号引脚用于外部电路产生复位信号使PIC单片机复位,低在PIC单片机中,包含多个端口,且端口引脚大部分都具
14、有两种或三种功能复用。作为端口,端口A、端口B、端口C、端口D和端口E都是双向I/O口,端口B可以通过编程设置为弱上拉输入。 作为第二或第三功能口,每个引脚的功能都可能不同,主要包含有如下的功能:用于A/D转换的模拟电压输入端和参考电压输入端,用于定时器的时钟输入端和振荡器输出端,用于串行通信的数据输入/输出端和时钟端,并行从属端口和读/写/片选端等。2.3.4 端口/功能引脚在PIC单片机中,包含多个端口,且端口引脚大部分都具有两种或表2.2 PICF873(A)/876(A)引脚功能表2.2 PICF873(A)/876(A)引脚功能表2.3 PICF874(A)/877(A)引脚功能表2
15、.3 PICF874(A)/877(A)引脚功能表2.3 PICF874(A)/877(A)引脚功能(续)表2.3 PICF874(A)/877(A)引脚功能(续)2.4 存储器组织在PIC16F87X系列单片机中,有三个存储器模块。由于单片机内采用了哈佛总线结构,它的程序存储器和数据存储器的总线是独立分开的,CPU可以同时访问程序存储器和数据存储器。 2.4 存储器组织在PIC16F87X系列单片机中,有三个PIC16F87X系列单片机具有13位指针计数器(PC),可以访问8k14字的程序存储器空间。 程序存储器被分为几个区:第一是复位矢量区,占据0000H字节;第二是中断矢量区,占据000
16、4H字节;第三是程序存放区,从0005H字节开始。在程序存放区中又分为页,每页7FFH字节。 2.4.1 程序存储器PIC16F87X系列单片机具有13位指针计数器(PC),可PIC16F87X系列单片机的存储器映射和堆栈的分布状况 图 2.6 PIC16F873/873A/874/874A 图2.7 PIC16F877/877A/876/876A图2.6和图2.7PIC16F87X系列单片机的存储器映射和堆栈的分布状况 图数据存储器分为四个存储体,存储体中包含通用寄存器和专用寄存器(SFR),体的选择采用状态寄存器(STATUS)的位6(RP1)和位5(RP0)。每个存储体最多可包含128字
17、节,而每个存储体中专用寄存器放在低位存储区,专用寄存器上面是通用寄存器,通用寄存器采用静态随机访问存储器(SRAM)。2.4.2 数据存储器数据存储器分为四个存储体,存储体中包含通用寄存器和专用寄存器所有的执行存储体都包含有专用寄存器(SFR),为了达到减少编码和快速访问的目的,一些经常访问的专用寄存器可以从一个存储体映射到另一个存储体。PIC16F873/873A/874/874A数据存储器的映射图如图2.8所示,PIC16F877/877A/876/876A数据存储器的映射图如图2.9所示。对于间接地址,它表示一个具体物理寄存器;对于阴影部分,实际上不可操作,读操作结果是0。所有的执行存储
18、体都包含有专用寄存器(SFR),为了达到减少编图2.8 PIC16F873/873A/874/874A数据存储器组映射图图2.8 PIC16F873/873A/874/874A图2.9 状态寄存器STATUS图2.9 状态寄存器STATUS通用寄存器是在指令执行过程中存放数据或状态信息的存储区,上电复位后其内容随机不确定,CPU可以直接访问,也可以通过组选择寄存器(FSR)间接访问。对PIC16F87X系列不同型号的单片机,通用寄存器的范围是不一样的。具体如下:PIC16F873/873A/874/874A: 20H7FH(存储体0); A0HFFH(存储体1); 120H17FH(存储体2:
19、映射到存储体0的20H7FH); 1A0H1FFH(存储体3:映射到存储体1的A0HFFH).1 通用寄存器组通用寄存器是在指令执行过程中存放数据或状态信息的存储区,上电PIC16F877/877A/876/876A: 20H7FH(存储体0); A0HEFH(存储体1); F0HFFH(存储体1:映射到存储体0的70H7FH); 110H16FH(存储体2); 170H17FH(存储体2:映射到存储体0的70H7FH); 190H19FH(存储体3); 1A0H1FFH(存储体3:映射到存储体0的70H7FH)。图2.8和图2.9是数据存储器的映射图。1 通用寄存器组(续)PIC16F877
20、/877A/876/876A:1 通用寄存图2.8 PIC16F873/873A/874/874A数据存储器组映射图图2.8 PIC16F873/873A/874/874A图2.9 PIC16F877/877A/876/876A数据存储器组映射图图2.9 PIC16F877/877A/876/876A数供CPU使用的寄存器,或为控制外设模块需要使用的寄存器统称为专用寄存器。因此专用自然分为两类:一类用于CPU操作,另一类用于控制外设模块。第一类寄存器包含:状态寄存器(STATUS)、选择寄存器(OPTION_REG)、中断控制寄存器(INTCON)、外围接口中断允许寄存器1(PIE1)和2(P
21、IE2)、外围接口中断标志寄存器1(PIR1)和2(PIR2)、 电源控制寄存器(PCON)、程序指针计数器(PC和PCLATH)、间接寻址寄存器(INDF和FSR)等。第二类寄存器包含:定时/计数器寄存器、端口方向寄存器、端口寄存器、USART接收/发送寄存器等,如表2.5、表2.6、表2.7和表2.8所示。2 专用寄存器供CPU使用的寄存器,或为控制外设模块需要使用的寄存器统称为表2.5 专用寄存器存储体0表2.5 专用寄存器存储体0表2.5 专用寄存器存储体0(续)表2.5 专用寄存器存储体0(续)表2.6专用寄存器存储体1表2.6专用寄存器存储体1表2.6 专用寄存器存储体1(续)表2
22、.6 专用寄存器存储体1(续)表2.7 专用寄存器存储体2表2.7 专用寄存器存储体2表2.8 专用寄存器存储体3表2.8 专用寄存器存储体3状态寄存器用于记忆ALU的算术运算状态和复位状态,同时有两位用于存储器区域的选择,如图2.10所示。 和其它寄存器一样,状态寄存器STATUS可以作为任何指令的目标寄存器。但当指令操作的结果影响标志位Z、DC、C时,写入这三个标志位的操作无效,这三个标志位的置位和复位与器件的逻辑有关。另外,和标志位只读。这样,执行一条指令后,状态寄存器的内容可能与意想的不同。 为了改变状态寄存器的内容,最好采用如下的几指令:BCF、BSF、SWAF和MOVWF,因为这些
23、指令不影响状态寄存器中的Z、C和DC位。(1)状态寄存器(STATUS)状态寄存器用于记忆ALU的算术运算状态和复位状态,同时有两位图2.10 状态寄存器(STATUS)图2.10 状态寄存器(STATUS)选择寄存器(OPTION_REG)是一个可读/写的8位寄存器,它的功能是用于配置TMR8/WDT预定标器、外部INT中断、TMR8和端口B的弱上拉等。它的各位意义如图2.11所示。表2.9 是预分频计数器倍率设置表。(2) 选择寄存器(OPTION_REG)选择寄存器(OPTION_REG)是一个可读/写的8位寄存器图2.11 选择寄存器(OPTION_REG)图2.11 选择寄存器(OP
24、TION_REG)中断控制寄存器是一个可读写的8位寄存器。它的各位意义如图2.12所示。(3) 中断控制寄存器(INTCON)中断控制寄存器是一个可读写的8位寄存器。它的各位意义如图2.外围接口中断允许寄存器1(PIE1)的内容是各个外部接口中断的允许位。它是一个可读/写操作的8位寄存器,它的各位意义如图2.13所示。(4) 外围接口中断允许寄存器1(PIE1)外围接口中断允许寄存器1(PIE1)的内容是各个外部接口中断外围接口中断标志寄存器1(PIE1)的内容是各个外部接口有中断时的标志位。它的各位意义如图2.14所示。(5) 外围接口中断标志寄存器1(PIR1)外围接口中断标志寄存器1(P
25、IE1)的内容是各个外部接口有中图2.14 外围接口中断标志寄存器1(PIE1)图2.14 外围接口中断标志寄存器1(PIE1)外围接口中断允许寄存器2(PIE2)的内容包括CCP2外部接口中断允许位、SSP总线碰撞中断允许位、EEPROM写操作中断允许位。各位的具体内容如图2.15所示。(6) 外围接口中断允许寄存器2(PIE2)外围接口中断允许寄存器2(PIE2)的内容包括CCP2外部接外围接口中断标志寄存器2(PIE2)的内容为CCP2外部接口中断、SSP总线碰撞中断允许位和EEPROM写操作中断的标志位。各位的具体内容如图2.16所示。(7)外围接口中断标志寄存器2(PIR2)外围接口
26、中断标志寄存器2(PIE2)的内容为CCP2外部接口电源控制寄存器(PCON)是一个8位寄存器,但只有两位有效,其余未用。包含的内容是用于区别WDT复位、外部MCLR复位、掉电复位的上电复位标志。其内容如图2.17所示。D7:D2未用。(D1)上电复位状态位 当D1=1,表示上电复位没有发生;当D1=0,表示发生了上电复位。当发生了上电复位后,必须用软件使D1置位。(D0)掉电复位状态位 当D0=1,表示没有发生掉电复位现象;当D0=0,表示发生了掉电复位。当发生了掉电复位后,必须用软件使D0置位。(8) 电源控制寄存器(PCON)电源控制寄存器(PCON)是一个8位寄存器,但只有两位有效,程
27、序指针寄存器是一个13位寄存器,分为高5为寄存器PCH和低8位寄存器PCL。PCL寄存器是一个可读/写的寄存器,PCH是不可读寄存器,但可以通过锁存寄存器PCLATH写入,只要复位条件发生,PCH被清零。程序指针寄存器PC的装载有两种方式:一是把它当作目标寄存器;二是在执行跳转命令CALL或GOTO时装入。这两种方式的说明如图2.18所示。(9) 程序指针计数器(PC、PCLATH)程序指针寄存器是一个13位寄存器,分为高5为寄存器PCH和低在计算GOTO指令时,是通过将偏移量加入到程序指针计数器中(ADDWF PCL)。当执行读表指令时,必须注意表长是否超过PCL的存储边界(256字节)。堆
28、栈 PIC16F87X系列单片机有8级宽度为13位的硬件堆栈。堆栈既不放在程序存储器空间,也不放在数据存储器空间,而是独立的硬件空间。堆栈的指针不可读,也不可写。一旦执行CALL调用,或响应中断,PC断点地址就会被自动压入堆栈(PUSH:入栈)。一旦执行RETURN、RETLW和RETFIE等命令,堆栈的内容就被弹出(POP:出栈)到PC寄存器中。在入栈和出栈的过程中,PCLATH寄存器不受影响。 堆栈的操作采用循环缓冲方式,一旦堆栈满(已经入栈8次),第九次入栈的“数据”就被放置到第一次的堆栈上,第十次入栈的“数据”就被放置到第二次的堆栈上,依次类推。 在操作过程中,无法获取堆栈的信息,因为
29、没有指示堆栈满还是未满的标志。堆栈的入栈和出栈操作没有指令执行,只有在执行CALL、RETURN、RETLW和RETFIE指令,或获取中断向量地址时,自动完成入栈或出栈。GOTO跳转在计算GOTO指令时,是通过将偏移量加入到程序指针计数器中(PIC16F87X系列单片机有8级宽度为13位的硬件堆栈。堆栈既不放在程序存储器空间,也不放在数据存储器空间,而是独立的硬件空间。堆栈的指针不可读,也不可写。一旦执行CALL调用,或响应中断,PC断点地址就会被自动压入堆栈(PUSH:入栈)。一旦执行RETURN、RETLW和RETFIE等命令,堆栈的内容就被弹出(POP:出栈)到PC寄存器中。在入栈和出栈
30、的过程中,PCLATH寄存器不受影响。 堆栈的操作采用循环缓冲方式,一旦堆栈满(已经入栈8次),第九次入栈的“数据”就被放置到第一次的堆栈上,第十次入栈的“数据”就被放置到第二次的堆栈上,依次类推。 在操作过程中,无法获取堆栈的信息,因为没有指示堆栈满还是未满的标志。堆栈的入栈和出栈操作没有指令执行,只有在执行CALL、RETURN、RETLW和RETFIE指令,或获取中断向量地址时,自动完成入栈或出栈。堆栈PIC16F87X系列单片机有8级宽度为13位的硬件堆栈。堆所有的PIC16F87X都可以寻址8K字程序存储空间。指令CALL和GOTO提供11位地址,允许跳转的范围只有2K,因此将8K程
31、序空间分成4页,每页为2K。用寄存器PCLATH的D4和D3两位来选择页面。当执行CALL和GOTO指令前,用户必须首先确定页面选择位,使之指向所需要转移的页面。如果执行RETURN指令,整个13位的PC值从弹出堆栈,寄存器PCLATH的D4和D3两位不需要进行设置。 在执行RETURN和RETFIE指令后,PCLATH的内容不受影响,因此在字程序调用或GOTO时,用户必须重写PCLATH。例2.1给出了在页面1调用字程序的编程,程序中确保PCLATH寄存器的保存和恢复。例2.1 页面1从页面0调用字程序 ORG 0 x500 BCF PCLATH, 4 BSF PCLATH, 3 ;选择页面
32、1(800h-FFFh) CALL SUB1_P1 ;调用页面1(800h-FFFh)的子程序 ORG 0 x900 ;页面1(800h-FFFh)SUB1_P1 ;被调用的子程序(800h-FFFh) RETURN ;返回在页面0(000h-7FFh)中的调用程序程序存储器的分页所有的PIC16F87X都可以寻址8K字程序存储空间。指令C实际上单片机芯片硬件没有设置一个专门的间接寄存器,只是在进行间接寻址时,需要用到间接寄存器的概念。当对间接寄存器寻址时,实际是访问FSR寄存器内容所指的单元,即把寄存器FSR当作间接寄存器使用。读间接寄存器本身,结果会是00H;写间接寄存器本身,结果是空操作
33、(状态位可能变化)。图2.19给出了用8位FSR寄存器和状态寄存器第八位IRP组合9位地址的过程。从图中可以看出,采用间接寻址时,存储体的选择由状态寄存器的IRP和FSR的D7位决定;采用直接寻址时,存储体的选择由状态寄存器的RP1:RP0决定。(10) 间接寻址寄存器(INDF、FSR)实际上单片机芯片硬件没有设置一个专门的间接寄存器,只是在进行例2. 2是采用间接寻址方式将RAM区20H-2FH清零的编程。例2.2 间接寻址举例 MOVLW 0X20 ;初试化指针 MOVF FSR ;指向RAMNEXT CLRF INDF ;清INDF寄存器 INCF FSR,F ;指针加1 BTFSS
34、FSR,4 ;完成? GOTO NEXT ;不,循环CONTINUE: ;是,继续图2.19 直接/间接寻址例2. 2是采用间接寻址方式将RAM区20H-2FH清零的编配置寄存器又称为配置字,是一个14位宽的“不可访问”寄存器。此寄存器的地址为2007h,已超出用户访问的存储器空间。CONFIG的读/写只能通过编程实现。 CONFIG寄存器的功能是选择芯片的特殊配置,上电复位和其它复位后CPU会检测此寄存器,按照CONFIG内容配置外部设备。它的具体内容如图2.20所示。 (11) 配置寄存器(CONFIG)配置寄存器又称为配置字,是一个14位宽的“不可访问”寄存器。图2.20 (续)图2.2
35、0 (续)2.5 数据E2PROM和闪存组织 数据E2PROM和FLASH程序存储器在正常的操作中都可以读写,对E2PROM的操作是单字节,对程序存储器的操作是字。对定义的字节或字进行“写”操作,实际的过程是“先擦除然后写”的操作。 读/写两种存储器的操作都是通过一系列特殊寄存器(FSR)间接寻址的。这些寄存器包含:EEDATA、EEDATH、EEADR、EEADRH、EECON1和EECON2。2.5 数据E2PROM和闪存组织 数据E2PROM和F2.5.1 寄存器EECON1和EECON2EECON1寄存器是配置和初始化访问的控制寄存器。EECON2寄存器不是一个物理寄存器,它专用于防止
36、在存储器写序列中的非法写操作。图2.21是EECON1的内容。2.5.1 寄存器EECON1和EECON2EECON1寄存图2.21 EECON1寄存器图2.21 EECON1寄存器E2PROM数据存储器和FLASH程序存储器的读/写操作控制 EEPDG控制访问E2PROM数据存储器还是访问FLASH程序存储器:置位时,访问E2PROM数据存储器;复位时,访问程序存储器。读操作标志位RD:置1,表示希望读取存储单元的值已经输入到数据寄存器中。这标志置位后用软件无法复位,由硬件自动在读操作结束时置0。读E2PROM数据存储器,在RD置位后的下一个指令周期数据放入EEDATA。对于读程序存储器,在
37、RD置位后的下一个指令周期数据放入EEDATH:EEDATA。E2PROM数据存储器和FLASH程序存储器的读/写操作控制E2PROM数据存储器和FLASH程序存储器的读/写操作控制(续1)写操作控制位(WR和WREN)和两个状态标志位(WRERR和EEIF):控制位WREN用于设置允许或禁止写操作,当WREN=0时,禁止写操作。在执行写操作前,必须使WREN=1。控制位WR用于初始化写操作,在写操作的结束时硬件自动清零。中断标志EEIF用于显示存储器的写什么时刻完成,置位后必须在置位WR之前用软件清零。对E2PROM数据存储器,一旦WREN和WR置位,在EEADR寄存器中的地址将被擦除,紧跟
38、着EEDATA中写入存储器。这些操作不影响CPU的其它指令执行,与CPU并行工作。一旦写操作完成,标志位EEIF置位。对程序存储器,一旦WREN和WR置位,CPU停止其它指令的操作,等待写操作完成再继续执行。WREN和WR置位后,由EEADRH:EEADR指定的存储单元内容被擦除,由EEDATH:EEDATA中的数据写入。完成写操作后,标志位EEIF被置位。E2PROM数据存储器和FLASH程序存储器的读/写操作控制E2PROM数据存储器和FLASH程序存储器的读/写操作控制(续2)标志位WRERR用于表示在写操作过程芯片被复位,只有在上电复位时WRERR被清零。在正常操作过程中写操作如果被
39、复位或看门狗定时溢出复位,WREER被置位,这样用户可以检测WREER来判断复位的类型以及存储单元的是否需要重写。数据寄存器的内容、地址寄存器的内容和EEPGD标志位不受 和看门狗定时溢出复位的影响。E2PROM数据存储器和FLASH程序存储器的读/写操作控制2.5.2 E2PROM数据存储器的读和写操作1. 读操作 读E2PROM数据存储器只要求希望访问的地址写入到EEADR寄存器和EEPGD选择位清零。在RD位置1后,在下一个指令周期数据就放到EEDATA寄存器。EEDATA寄存器将保持这个值到下一个“读”操作初始化或到被软件写。 读E2PROM数据存储分为如下四个步骤: 在确保地址不超过
40、PIC16F87X芯片存储器地址范围的情况下,将地址写入EEADR。 清EEPGD选择位,表示读E2PROM数据存储器。 置位RD,初始化读操作。 从EEDATA寄存器读取数据。例2.3 给出了E2PROM数据存储器读的编程设计2.5.2 E2PROM数据存储器的读和写操作1. 读操作 BSF STATUS, RP1 ;选择BANK 2 BCF STATUS, RP0 ; MOVF ADDR, W ; MOVWF EEADR ; 写入地址 BSF STATUS, RP0 ;选择BANK 3 BCF EECON1, EEPGD ;选择E2PROM数据存储器 BSF EECON1, RD ;初始化
41、读 BCF STATUS, RP0 ;选择BANK 2 MOVF EEDATA, W ;将读出数据放入W寄存器例2.3 读E2PROM数据存储器编程 BSF STATUS, RP1 将数据写入E2PROM数据存储器需要步骤。首先是写入地址和数据,必须放入特殊功能寄存器中,然后清EEPGD位和WREN置位。WREN只有在写E2PROM数据存储器时需要置位,否则保持0。当WREN置位后,置位WR,WREN和WR不能在同一操作中置位(不能同时置位,必须WREN在前,WR在后)。在写操作完成后用软件使WREN复位,过早(在写完成前)复位WREN不影响写的过程。 在写操作前必须加入一个特殊的指令序列,以
42、防止一些非法的操作。这些操作必须在禁止中断情况下完成,因此在执行这些特殊指令之前先禁止中断。在指向写之前,必须用软件判断没有写操作在进行。写E2PROM数据存储器的步骤如下。例2.4给出了写E2PROM数据存储器的编程。2. 写操作将数据写入E2PROM数据存储器需要步骤。2. 写操作如果第10步没有执行,首先检查WR标志位,看写操作是否正在进行。在确保地址不超过PIC16F87X芯片存储器地址范围的情况下,将地址写入EEADR;写8位数据到EEDATA数据寄存器;清EEPGD选择位,表示写E2PROM数据存储器;置位WREN,允许编程操作;关中断;执行如下五个特殊指令: 用两步将55H写到E
43、ECON2(先写到W,再写到EECON2); 用两步将AAH写到EECON2(先写到W,再写到EECON2); 置位WR。开中断;清标志位WREN;完成写操作,标志位WR复位,中断标志位EEIF置位(由软件复位)。如果第1步没有执行,检查EEIF是否置位,WR是否复位,以确保写周期结束。写E2PROM数据存储器的步骤如果第10步没有执行,首先检查WR标志位,看写操作是否正在 BSF STATUS, RP1 ; BSF STATUS, RP0 ;选择BANK 3 BTFSC EECON1, WR ;等待 GOTO $-1 ;写操作完成 BCF STATUS, RP0 ;选择BANK 2 MOVF
44、 ADDR, W ; MOVWF EEADR ;写地址到EEADR MOVF VALUE, W ; MOVWF EEDATA ;写数据到EEDATA BSF STATUS, RP0 ;选择BANK 3 BCF EECON1, EEPGD ;选择数据存储器 BSF EECON1, WREN ;允许写操作例2.4 写E2PROM数据存储器编程 BSF STATUS, RP1 BCF INTCON, GIE ;如果由中断开放,禁止中断,否则此句可以不要 MOVLW 0 x55 ; MOVWF EECON2 ;写0X55到EECON2 MOVLW 0 xAA ; MOVWF EECON2 ;写0XAA
45、到EECON2 BSF EECON1, WR ; BSF INTCON, GIE ;如果需要中断,可中断,否则此句可以不要 BCF EECON1,WREN ;禁止写例2.4 写E2PROM数据存储器编程(续) BCF INTCON, GIE2.5.3 FLASH程序存储器的读和写操作1. 读操作 读FLASH程序存储器与读E2PROM数据存储器基本一样,只是在RD置位加入两个空操作NOP。插入这两个NOP以便CPU从程序存储器读出数据然后放入EEDATH:EEDATA寄存器。在第二个NOP后数据有效。EEDATH:EEDATA保持读出的数据直到下一个读周期开始,或被软件重写。读E2PROM数据
46、存储分为如下5个步骤: 在确保地址不超过PIC16F87X芯片存储器地址范围的情况下,将地址写入EEADRH:EEADR。 选择位EEPGD置位,表示读FLASH程序存储器; 置位RD,开始读操作; 执行两个NOP指令; 从FLASH程序存储器读取数据。2.5.3 FLASH程序存储器的读和写操作1. 读操作例2.5 读FLASH程序存储器编程 BSF STATUS, RP1 ; BCF STATUS, RP0 ; 选择BANK 2 MOVF ADDRH, W MOVWF EEADRH MOVF ADDRL, W ; MOVWF EEADR ; 写入地址 BSF STATUS, RP0 ;选择
47、BANK 3 BSF EECON1, EEPGD ;选择FLASH程序存储器 BSF EECON1, RD ;初始化读 NOP NOP BCF STATUS, RP0 ;选择BANK 2 MOVF EEDATA, W ;将读出数据放入W寄存器 MOVWF DATAL ;DATAL=EEDATA MOVF EEDATH ; MOVWF DATAH ;DATAH=EEDATH例2.5 读FLASH程序存储器编程 BSF 写FLASH程序存储器是很特殊的,在编程期间,CPU停止执行一切指令,振荡器和外围功能模块保持工作,如果允许中断,按次序接收中断。一旦写操作完成,CPU回到离开的位置继续执行代码。
48、 象写E2PROM数据存储器一样,写FLASH程序存储器也有很多步骤。数据和地址需要特殊寄存器,EEPGD置位,WREN置位,然后WR置位开始写操作。写操作完成后用软件使WREN清零。 在写操作前必须加入一个特殊的指令序列,以防止一些非法的操作。这些操作是5个指令,必须在禁止中断情况下完成,因此在执行这些特殊指令之前先禁止中断。这5个指令后紧跟两个NOP,以确保CPU的写操作。一旦写完成,操作沿着第二个NOP执行。2. 写操作写FLASH程序存储器是很特殊的,在编程期间,CPU停止执行写程序存储器分为如下9步: 在确保地址不超过PIC16F87X芯片存储器地址范围的情况下,将地址写入EEADR
49、H:EEADR。 写14位编程数据到EEDATH:EEDATA; 置位EEPGD,表示对FLASH程序存储器操作; WREN置位; 关中断; 执行特殊指令序列: 用两步将55H写到EECON2(先写到W,再写到EECON2); 用两步将AAH写到EECON2(先写到W,再写到EECON2); 置位WR。 执行两次NOP; 开中断; 清标志位WREN。写程序存储器分为如下9步写程序存储器分为如下9步:写程序存储器分为如下9步 BSF STATUS, RP1 ; BCF STATUS, RP0 ; 选择BANK 2 MOVF ADDRL, W ; MOVWF EEADR ; MOVF ADDRH,
50、 W ; MOVWF EEADRH ; 写入所选择程序存储器单元的地址 MOVF VALUEL, W ; MOVWF EEDATA ; MOVF VALUEH, W ; MOVWF EEDATH ;写入编程值 BSF STATUS, RP0 ;选择BANK 3 BSF EECON1, EEPGD ;选择FLASH程序存储器例2.6 写FLASH程序存储器编程 BSF STATUS, RP1 BSF EECON1, WREN ;允许写操作BCF INTCON, GIE ;如果由中断开放,禁止中断,否则此句可以不要 MOVLW 0 x55 ; MOVWF EECON2 ;写0X55到EECON2
51、MOVLW 0 xAA ; MOVWF EECON2 ;写0XAA到EECON2 BSF EECON1, WR ;开始写操作 NOP NOP BSF INTCON, GIE ;如果需要中断,可允许中断,否则此句可以不要 BCF EECON1,WREN ;禁止写例2.6 写FLASH程序存储器编程(续)BSF EECON1, WREN ;允许写操2.5.4 写校验与写保护对EEPROM的操作没有自动校验的功能,校验工作必须由用户根据实际应用在软件中完成。用户首先将数据写存储器,然后读出与原来的数据进行比较,如果一致,说明写入成功,如果不一致,说明写出错或存储器毁坏。为了防止意外的写入,在PIC1
52、6F87X芯片中已经采取多种措施:在上电时WREN被清零上电后上电延时72ms等这些措施可以有效防止误写入写操作所需要的初始化步骤和WREN功能位的设置,都有效地防止在掉电、电源故障和软件出错时的误写操作。2.5.4 写校验与写保护对EEPROM的操作没有自动校验的在PIC16F87X中,有两种代码保护机理。用一位保护位保护EEPROM,两位保护位保护FLASH程序存储器。EEPROM数据的读/写与保护位CPD无关。当设置了保护且CPD=0,不管程序保护位的状态如何,通过ICSP的外部访问将被禁止。这个功能禁止了在芯片外读取EEPROM的内容。 程序存储器代码保护位CP0和CP1不影响程序指令
53、的执行,PIC16F87X可以不考虑保护位的状态直接读程序存储器的代码。这两位代码以及WRT位对程序存储器的写操作有影响,表2.11给出了这些影响。位WRT用于FLASH程序存储器的写保护,只有在通过ICSP对PIC16F87X编程时,WRT才可以被访问。一旦代码保护允许,只有通过将全部EEPROM数据或全部程序存储器的代码删除,才能清除代码保护功能,否则代码保护一直有效。代码保护在PIC16F87X中,有两种代码保护机理。用一位保护位保护表2.11 内部FLASH存储器的读/写状态表2.11 内部FLASH存储器的读/写状态2.6振荡电路PIC系列单片机首先采用了多种振荡电路,以满足不同应用
54、场合的需要。在一般的单片机系统中,时钟电路采用晶体振荡电路。而PIC单片机系统可以采用四种振荡电路,2.6振荡电路PIC系列单片机首先采用了多种振荡电路,以2.6.1 振荡方式PIC系列单片机可工作于不同的振荡器方式,有四种振荡方式可供选择低功耗振荡LP标准晶体振荡XT 高速晶体振荡HS 阻容振荡 RC 用户可以根据其系统设计的需要,选择四种振荡方式中的一种,其振荡的频率范围在DC20/25MHz之间。PIC单片机振荡方式由配置寄存器CONFIG的F0SC1和F0SC0位选择,并在编程时写入。2.6.1 振荡方式PIC系列单片机可工作于不同的振荡器方式表2.12 振荡器类型选择表2.12 振荡
55、器类型选择2.6.2 晶体振荡器/陶瓷振荡器在标准晶体振荡XT、低功耗振荡LP和高速晶体振荡HS三种方式中,需一晶体或陶瓷谐振器连接到单片机的OSC1/CLKIN和OSC2/CLKOUT引脚上,以建立振荡,如图2.22所示。电阻Rs常用来防止晶振被过分驱动。在晶体振荡下,电阻RF10M。对于32KHZ以上的晶体振荡器,当VDD4.5V时,建议C1=C230PF。(C1:相位调节电容; C2:增益调节电容。)表2.13给出了陶瓷谐振器在不同频率下所需的电容参考值,表2.14给出了晶体振荡器在不同频率下所需的电容参考值。这些参考值因采用不同厂家的晶体或陶瓷的特性不同,会有所改变。2.6.2 晶体振
56、荡器/陶瓷振荡器在标准晶体振荡XT、低功耗图2.22 晶体/陶瓷振荡电路图2.22 晶体/陶瓷振荡电路表2.13陶瓷谐振器在不同频率下所需的电容参考值表2.13表2.13陶瓷谐振器在不同频率下所需的电容参考值表2.13表2.14晶体振荡器在不同频率下所需的电容参考值表2.14晶体振荡器在不同频率下所需的电容参考值2.6.3 外部晶体振荡器电路在标准晶体振荡XT、低功耗振荡LP和高速晶体振荡HS三种方式中,PIC芯片可以使用已集成在片内的振荡器,亦可使用由其它电路构成的振荡器电路。当外接振荡器时,外部振荡信号从OSC1端输入,OSC2端开路。如图2.23所示。 图2.24所示的是典型的外部并行谐
57、振振荡电路,应用晶体的基频来设计。74HC04反相器用来实现振荡器所需的180相移,4.7k的电阻用来提供负反馈给反相器,10k的电位器用来提供偏压,从而使反相器74HC04工作在线性范围内。图2.25所示的是典型的外部串行谐振振荡电路,也应用晶体的基频来设计。74HC04反相器用来提供振荡器所需的180相移, 330的电阻用来提供负反馈,同时偏置电压。2.6.3 外部晶体振荡器电路在标准晶体振荡XT、低功耗振荡图2.23外时钟输入工作方式图2.23外时钟输入工作方式图2.24 外部并行谐振振荡电路图2.24 外部并行谐振振荡电路图2.25 外部串行谐振振荡电路图2.24图2.24图2.25
58、外部串行谐振振荡电路图2.24图2.242.6.4 RC振荡电路RC振荡适合于对振荡频率精度要求不高的低成本应用。在RC振荡电路中,产生多谐振荡是依靠电路电容的充放电实现的,电容充放电的时间与充电电流和电容大小有关,而充电电流又与充电电压( VDD )和充电电阻等有关,充电电阻精度和充电电容精度一般受环境温度影响,因此电源VDD的稳定性、 Rext精度、 Cext精度和环境温度都会影响振荡频率的精度。同时由于工艺参数的差异,对同种型号不同芯片其振荡器频率将不同。另外,当外接电容Cext值较小时,对振荡器频率的影响更大。图2.26给出了RC振荡电路,电阻Rext取值最好在3K100K范围内。如果
59、Rext低于2.2K,振荡器将处于不稳定工作状态,甚至停振。而Rext大于1M时,振荡器又易受噪声、湿度、漏电流的干扰。电容Cext不受到过多限制,在不接外部电容Cext时,振荡器仍可工作,但为了抗干扰及保证稳定性,接一20PF以上的电容是最佳选择。2.6.4 RC振荡电路RC振荡适合于对振荡频率精度要求不图2.26 RC振荡电路图2.26 RC振荡电路2.7 复位电路与复位状态 PIC16F87X系列单片机具有多种复位方式,每种复位产生的结果不尽相同。这几种不同的复位方式是: (1)上电复位POR(Power-on Reset); (2)在正常工作状态下,当引脚为低电平时引起复位; (3)在
60、休眠期间,当引脚为低电平时引起复位; (4)在正常工作状态下,看门狗WDT超时复位; (5)在休眠期间,看门狗WDT唤醒复位; (6)掉电锁存复位BOR(Brown-out Reset)。表2.15给出了不同复位方式复位后的状态。表2.16给出了所有寄存器的复位状态。图2.27是一个简化后的片内复位电路方框图。2.7 复位电路与复位状态 PIC16F87X系列单片机表2.15 不同复位方式复位后的状态表2.15 不同复位方式复位后的状态表2.16 PIC16F87X寄存器的复位状态(部分)表2.16 PIC16F87X寄存器的复位状态(部分)图2.27 简化后的片内复位电路方框图图2.27 简
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年北京社会管理职业学院单招职业技能测试题库含答案详解(完整版)
- 2026年内江职业技术学院单招职业适应性考试题库及一套参考答案详解
- 2026年内蒙古化工职业学院单招职业倾向性测试题库及答案详解(典优)
- 2026年保定理工学院单招综合素质考试题库及答案详解(易错题)
- 2026年北海康养职业学院单招职业技能考试题库带答案详解(a卷)
- 2026年克拉玛依职业技术学院单招职业技能测试题库带答案详解
- 2026年厦门华天涉外职业技术学院单招职业技能测试题库附参考答案详解(研优卷)
- 2026年厦门华天涉外职业技术学院单招职业技能考试题库带答案详解ab卷
- 2026年内蒙古化工职业学院单招职业倾向性测试题库及一套完整答案详解
- 2026年信阳涉外职业技术学院单招职业倾向性测试题库及完整答案详解
- 智能网联汽车感知技术与应用 课件 项目1 智能网联汽车感知技术概述
- 2026年沈阳职业技术学院单招职业技能考试题库及答案详解一套
- 港口复工复产安全培训课件
- 2025年本科院校基建处招聘笔试预测试题及答案
- 2023年高考历史真题新课标卷及解析
- 歌颂内蒙古的诗歌
- uom理论考试题库及答案2025
- 2025年文字排版与设计考试试题及答案
- 不良资产差额配资合作协议6篇
- 新能源充电桩施工方案
- 2015-2024年十年高考地理真题分类汇编专题03 地球上的大气(原卷版)
评论
0/150
提交评论