55
2 2 第 第第第第第第 第 第第第第第第 PIC16F8XX PIC16F8XX PIC PIC 单单单单单单单 单单单单单单单单单 单单单单单单单单单单 单 一,一 单单单单单单单 单单单单单单单单单 单单单单单单单单单单 单 一,一 PIC PIC 单单单单单 单单单单单单单单单单单 单 ,, 单单单单单 单单单单单单单单单单单 单 ,, 单单单单单单单单单单单单单单单 单单单单单单单单单单单单单单单单单 单单单单单单单单单单单单单 单单单单单单 ,。 单单单单单单单单单单单单单单单 单单单单单单单单单单单单单单单单单 单单单单单单单单单单单单单 单单单单单单 ,。 单单单单单 单单单单单 PIC PIC 单单单单单单单单单单单单单单单单单单单单 单单单单单单单单单单单 单单单单单单单单单单单 PIC PIC 单单 单单单单单单单单单 单单 单单单单单单单单单 PIC16F8 PIC16F8 单单单单单单单单单单单单 单单单单单单单 单单单单单单单单单单单单 单单单单单单单 单单单单单 单单单单单单单单单单单单单 、、。 单单单单单 单单单单单单单单单单单单单 、、。 PIC16F8 PIC16F8 单单单单单单单单单 单单单单单单单单单 PIC16F84A PIC16F84A PIC16F873 PIC16F873 PIC16F877 PIC16F877 单单 单单

第 2 章 新系列单片机 PIC16F8XX

  • Upload
    kale

  • View
    195

  • Download
    6

Embed Size (px)

DESCRIPTION

第 2 章 新系列单片机 PIC16F8XX. PIC 单片机的学习比一般编程要困难得多,其设计关键在于完成一个 PIC 单片机系统,不仅需要掌握编程技术,更为重要的是要知道如何针对实际系统需要选择合理的单片机方案和外围器件,并以此为基础设计硬件电路。可以说硬件电路的设计是 PIC 单片机设计开发的基础。 目前市场上有种类繁多的 PIC 芯片,本章以其中最典型的 PIC16F8 系列的单片机为研究对象,从单片机内部结构、主要电路、主要接口等方面做重点阐述。 PIC16F8 系列的单片机主要有 PIC16F84A 、 PIC16F873 、 PIC16F877 等。. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 2 章 新系列单片机 PIC16F8XX

第第 22 章 新系列单片机章 新系列单片机 PIC16F8XXPIC16F8XX

PICPIC 单片机的学习比一般编程要困难得多,其设计关键在于完成一个单片机的学习比一般编程要困难得多,其设计关键在于完成一个 PICPIC 单单片机系统,不仅需要掌握编程技术,更为重要的是要知道如何针对实际系片机系统,不仅需要掌握编程技术,更为重要的是要知道如何针对实际系统需要选择合理的单片机方案和外围器件,并以此为基础设计硬件电路。统需要选择合理的单片机方案和外围器件,并以此为基础设计硬件电路。可以说硬件电路的设计是可以说硬件电路的设计是 PICPIC 单片机设计开发的基础。单片机设计开发的基础。 目前市场上有种类繁多的目前市场上有种类繁多的 PICPIC 芯片,本章以其中最典型的芯片,本章以其中最典型的 PIC16F8PIC16F8 系列的系列的单片机为研究对象,从单片机内部结构、主要电路、主要接口等方面做重单片机为研究对象,从单片机内部结构、主要电路、主要接口等方面做重点阐述。点阐述。 PIC16F8PIC16F8 系列的单片机主要有系列的单片机主要有 PIC16F84APIC16F84A 、、 PIC16F873PIC16F873 、、 PIC16F877PIC16F877 等。等。

Page 2: 第 2 章 新系列单片机 PIC16F8XX

22..1 PIC16F84A1 PIC16F84A 单片机单片机2.1.1 PIC16F84A 基本特征 PIC16F8X 是一种 18 引脚、 Flash/EEPROM 8 比特的微单片机系列 .PIC16F8X这种系列又有多种型号,如 PIC16F83 、 PIC16F84 、 PIC16CR83 和 PIC16CR84 ,和工作电压范围大的 PIC16LF8X , PIC16LCR8X 等。 PIC16F84A 单片机是 PIC16F 系列中比较简单的一种。它仅具有 18 引脚,具有微处理器基本的功能,如输入输出口,定时计数器和外部中断输入。但不具有一些特殊功能。因此该 PIC 单片适合于要求体积小,要求简单的应用场合。 任何处理器要工作就必须给其提供一个时钟信号,确保单片机按照一定时钟节拍一步一步地执行应用程序。时钟的产生,一般有两种方式。一种是使用外部时钟源,主要通过 OSC1/CLKIN 引脚引入即可。该外部时钟还可以通过内部 4 分频后由 OSC2/CLKOUT 引脚输出,使其可能被其它功能部件使用。时钟产生的另一种方式是使用外部石英晶体或陶瓷谐振器方式,它是单片机产生时钟的经典方式。

Page 3: 第 2 章 新系列单片机 PIC16F8XX

在 PIC16F84A 芯片上有再起动输入 (inv) 引脚,输入低电平 L 就能使单片机实现再启动。任何单片机应用最多的接口就是输入输出口, PIC16F84A 也不例外,具有 RA0-RA3 ; RA4/T0CK1 ; RB0/INT ; RB1-RB7 等输入输出接口。其中 RA4/ TOCK1 属于多功能复用引脚,除了作为输入引脚外,还可作为定时计数器信号输入口。 RB0 除作为输出引脚外,还可作外部中断信号输入口。 Vss 为接地端。 VDD 为电源端,其电压范围在 +2.0V ~ +5.5V ,在此范围内单片机均可正常工作。 PIC16F84A 芯片具体引脚分布图如图 2.1 所示。

图 2.1 PIC16F84A 单片机引脚

Page 4: 第 2 章 新系列单片机 PIC16F8XX

PIC16F84APIC16F84A 芯片采用高性能的精简指令计算机系统芯片采用高性能的精简指令计算机系统(( RISC CPURISC CPU),高性能特点具体表现如下:),高性能特点具体表现如下: 全部命令都是单字节命令,命令数有全部命令都是单字节命令,命令数有 3535 个。个。 除跳转分支命令外除跳转分支命令外 (2(2 时钟时钟 )) ,均为,均为 11 时钟命令。 时钟命令。 工作速度 工作速度 DCDC ~~ 10 MHZ 10 MHZ 时钟输入时钟输入 DCDC ~~ 400ns 400ns 命令循环。命令循环。 14 14 位宽命令,位宽命令, 8 8 位 数据。位 数据。 特殊功能寄存器有特殊功能寄存器有 1515 个。个。 硬堆栈 硬堆栈 8 8 级。级。 中断源中断源 44 种种

• 外部外部 RB0/INT RB0/INT 引脚 输入中断信号引脚 输入中断信号• TMR0 TMR0 定时器的溢出中断定时器的溢出中断• PORTB<7:4> PORTB<7:4> 引脚输入信号变化中断引脚输入信号变化中断• 数据 数据 EEPROM EEPROM 写入完成中断写入完成中断

Flash Flash 程序存储器写入,可消去程序存储器写入,可消去 10001000 次。次。 EEPROM EEPROM 随机数据存储器写入,可消去随机数据存储器写入,可消去 10001000 次,数据保存 次,数据保存 > 40> 40 年。年。 表表 2.12.1 是是 PIC16F8XPIC16F8X 系列单片机的主要性能参数比较。系列单片机的主要性能参数比较。

Page 5: 第 2 章 新系列单片机 PIC16F8XX

PIC16F8X 系列 程序存储器(WORDS) 数据存储器RAM (BYTE) 数据 EEPROM (BYTE) 最大频率( MHz )

PIC16F83 512 Flash 36 64 10 PIC16F84 1K Flash 68 64 10 PIC16CR83 512 ROM 36 64 10 PIC16CR84 1K ROM 68 64 10

表 2.1 为 PIC16F8X 单片机系列的性能参数比较

PIC16F84A 外部功能特征也很独特,主要集中如下:输入输出口数有 13 引脚。输入输出电流 (LED直接驱动 I/O) ,输入最大电流 25mA ,输出最大电流 20 mA 。定时器 TMR0 为 8位定时器 / 计数器。另外 PIC16F84A 具备特殊功能:开机再初始化功能 POR( Power-on reset )、开机定时功能 PWRT( Power up Timer )、时钟开始定时功能 OST 、看门狗定时功能WDT(Watch Dog Timer) 等。

Page 6: 第 2 章 新系列单片机 PIC16F8XX

22..11..2 PIC16F84A 2 PIC16F84A 内部结构内部结构 PIC16F84A 的内部功能框图如图 2.2 所示。功能框架图主要由程序存储器、随机存储器、可擦除只读存储器、特殊功能存储器、程序计数器、 8级堆栈、指令寄存器、指令译码控制、多重控制和算术逻辑单元等组成。以下对具体的功能框进行详细说明如下: 1 .程序存储器( Flash Program Memory)    PIC16F84A 程序存储器使用了 Flash存储器。其内部实装 1024字节,每 1 个字节由 14位组成。 Flash存储器在掉电的情况下其记忆的信息也不会消去。另外存储器内容可通过程序写入器 (Writer)进行置换。

图 2.2 PIC16F84A 内部功能框图图 2.3 Flash 存储器

Page 7: 第 2 章 新系列单片机 PIC16F8XX

1)复位( Reset )处理先头存储器 ( 地址 1000h)在上电时,由于看门狗定时器WDT溢出和其它原因引起 PIC 重新置位时, PIC运行都从此程序地址开始执行。2)中断处理先头存储器 ( 地址 0004h)定时器( Timer )溢出中断或外部输入中断时程序运行从该地址执行。 3)执行状态字节 (2007h) 该存储器单元存有该 PIC运行的基本设置。比如,上电定时器的要否,看门狗定时器的要否,或时钟晶振的选择等设定。该存储器单元地址通常在程序存储器以后,这里不能用程序来设定,必须是用写入器(Writer )写入来设定。

图 2.4 2007h 程序存储单元 (14 位 ) R : 只读出不能写入 位 P : 可编程位 -n : 上电后的逻辑 u : 无变化 位 13-4 : 程序码保护设定位 CP 1 -不保护程序代码 0 -保护全部程序代码。 一但设成该模式, PIC 的程序存储器的程序代码不能读出。 位 3 : Power up 定时器指定位 (PWRTE inv) 1 - Power up定时器不使用 0 - Power up定时器使用 该定时器在上电后约 72ms间 PIC Reset。 通常设定为使用 位 2 : WDT看门狗定时器设定位 (WDTE) 1 -WDT 定时器使用 0 -WDT 定时器不使用 位 1-0 : 时钟类型指定位

Page 8: 第 2 章 新系列单片机 PIC16F8XX

2.随机存储器 RAM (Random Access Memory) RAM 是以相同速度高速地、随机地写入和读出数据(写入速度和读出速度可以不同)的一种半导体存储器。 RAM 的优点是存取速度快、读写方便,缺点是数据不能长久保持,断电后自行消失,因此主要用于计算机主存储器等要求快速存储的系统。随机存储器结构如图 2.4 所示。随机存储器分为两部分。管理结构是以称为存储块( Bank )方式的结构。每个存储块的最初部分 12 位 ( 地址 00h-0Bh) 部分称为特殊功能寄存器区 SFR 。它包括了 PIC 的动作状态, I/O 输入输出口的状态和其它各类程序动作的状态。 13位后的 68位 ( 地址 0Ch-4Fh) 部分称为通用寄存器 GPR (General Purpose Registers) 。它们用于寄存程序运行过程中的中间数据、中间状态以及最终结果等。

图 2.5 RAM 随机存储器

Page 9: 第 2 章 新系列单片机 PIC16F8XX

3.可擦除只读存储器 EEPROM (Electrically Erasable Programmable Read Only Memory) 与 RAM相比, EEPROM存储器在关电源后,存储器内数据不会丢失。 EEPROM存储器可通过程序再写入置换。该存储器容量 64字节。使用寿命 100万次。它们不能用于存储程序运行途中的数据,通常用于存储常量,变化较少的数据等。虽然 100万次不是个小数,但与程序运行速度比较就不算多了。该存储器数据可保持 40年。

4.特殊功能寄存器 SFR (Special Function Registers) 在存储块切换动作的基础上, SFR 特殊寄存器共有 16 种。详细寄存器分配如图 2.3 所示。虽通过存储块切换寄存器数可达到 160字节,但是带箭头的寄存器在不同的存储块中都是同样的寄存器。另有一部分寄存器在存储块切换时,寄存器是不相同的。灰色部分的寄存器是不存在的。

Page 10: 第 2 章 新系列单片机 PIC16F8XX

55 .程序计数器(.程序计数器( Program CounterProgram Counter ) ) 为读出存于程序存储器中的程序数据而设置的地址计数器。它是为读出存于程序存储器中的程序数据而设置的地址计数器。它是 1313位计数器。 位计数器。 通常在执行完一个命令后自动加通常在执行完一个命令后自动加 11 使之指向下一执行命令。但是在遇到跳转命令时,使之指向下一执行命令。但是在遇到跳转命令时,该计数器的值被写为跳转目的地址。该计数器的值被写为跳转目的地址。66 .八级硬堆栈.八级硬堆栈 被称为堆栈的硬件其实也是存储器。主要用于存储程序因各种原因跳转后且在执被称为堆栈的硬件其实也是存储器。主要用于存储程序因各种原因跳转后且在执行完规定程序后返回地址。比如,同样的处理可能存在于整个程序多个地方,这个行完规定程序后返回地址。比如,同样的处理可能存在于整个程序多个地方,这个处理程序通常用子程序的方式来实现。 在子程序最后用返回处理程序通常用子程序的方式来实现。 在子程序最后用返回 RETURNRETURN命令来返回命令来返回主程序。这种子程序的做法可以达到节省程序存储器的目的。 在主程序中用主程序。这种子程序的做法可以达到节省程序存储器的目的。 在主程序中用 CALLCALL命令来调用子程序,为了从子程序返回主程序,此刻在堆浅中应该存储好返回地址。命令来调用子程序,为了从子程序返回主程序,此刻在堆浅中应该存储好返回地址。程序的这个动作通常叫压栈程序的这个动作通常叫压栈 (PUSH)(PUSH) 。在子程序处理完。在子程序处理完 RETURNRETURN命令后,程序运命令后,程序运行从存储于堆浅中的返回地址开始运行,这个动作通常叫出栈行从存储于堆浅中的返回地址开始运行,这个动作通常叫出栈 (POP)(POP) 。在整个程。在整个程序中,可以有子程序中套子程序,这样需要多级堆栈。在此,八级堆栈就是子程序序中,可以有子程序中套子程序,这样需要多级堆栈。在此,八级堆栈就是子程序套子程序最多到八级。 编写程序不能超八级堆栈使用,子程序必须以套子程序最多到八级。 编写程序不能超八级堆栈使用,子程序必须以 RETURNRETURN命命令结束。其原理图请见图令结束。其原理图请见图 22..66 ,跳转命令是不使用堆栈的,也不需返回地址。,跳转命令是不使用堆栈的,也不需返回地址。77 .指令寄存器(.指令寄存器( Instruction RegisterInstruction Register )) 程序计数器所指向的程序命令程序计数器所指向的程序命令 (Instruction)(Instruction) 被写入该指令寄存器,这个流程通常被写入该指令寄存器,这个流程通常称为称为 FECTCHFECTCH。。88 .指令译码.指令译码 换行控制部对指令存储器的数据换行控制部对指令存储器的数据 ((指令指令 ))进行解读、分析并对其代表的指令内容进行解读、分析并对其代表的指令内容进行相应的动作。进行相应的动作。

Page 11: 第 2 章 新系列单片机 PIC16F8XX

图 2.6 八级堆浅程序跳转示意图

Page 12: 第 2 章 新系列单片机 PIC16F8XX

99 .多重控制和算术逻辑单元(.多重控制和算术逻辑单元( Multiplexer and Arithmetic Logic UnitMultiplexer and Arithmetic Logic Unit )) 多重控制和算术逻辑单元就是多重控制和算术逻辑单元就是 PICPIC 芯片中进行计算动作的部分。是运算器和芯片中进行计算动作的部分。是运算器和控制的核心。几乎所有的算术运算、逻辑运算和移位操作由此单元控制完成。控制的核心。几乎所有的算术运算、逻辑运算和移位操作由此单元控制完成。如果如果 CPUCPU 芯片中没有该部分,该芯片就不能称之为单片机。芯片中没有该部分,该芯片就不能称之为单片机。 1010 .工作寄存器.工作寄存器 工作寄存器也称为工作寄存器也称为 W RegisterW Register 寄存器。它通常用于存储算术逻辑单元的计算寄存器。它通常用于存储算术逻辑单元的计算结果。它是计算过程中必须使用的寄存器。该寄存器存储的数据可转存到其结果。它是计算过程中必须使用的寄存器。该寄存器存储的数据可转存到其他寄存器或通过他寄存器或通过 I/OI/O 口输出。口输出。1111 .状态寄存器(.状态寄存器( Status RegisterStatus Register )) 状态寄存器中各位单元存储有存储算术逻辑单元的计算结果的状态状态寄存器中各位单元存储有存储算术逻辑单元的计算结果的状态 (( 如结果如结果正或负,零或非零等状态指示正或负,零或非零等状态指示 )) ,定时计数器状态 及存储块寄存器的切换状,定时计数器状态 及存储块寄存器的切换状态等。态等。1212 .文件选择寄存器.文件选择寄存器 FSR (File Select Register)FSR (File Select Register) 地址的指定,有间接地址方式和直接地址方式二种。地址的指定,有间接地址方式和直接地址方式二种。 FSRFSR寄存器通常用于寄存器通常用于 RAMRAM寄存寄存器的地址在使用间接地址方式指定时使用。直接地址方式是在命令码中直接指定寄存器的地址在使用间接地址方式指定时使用。直接地址方式是在命令码中直接指定寄存器的地址。在此情况下,地址指定有器的地址。在此情况下,地址指定有 77位,指定地址可从位,指定地址可从 00到到 127127 。这个指定范围只。这个指定范围只有一个存储块的范围。要指定另一存储块,使用状态寄存器的有一个存储块的范围。要指定另一存储块,使用状态寄存器的 RP0 RP0 位来区分。位来区分。 FSRFSR寄存器是寄存器是 88位寄存器,它能指定各存储块的范围。所以可方便地用它来象表格式的连位寄存器,它能指定各存储块的范围。所以可方便地用它来象表格式的连续指定地址。这样地址的指定、 处理就方便简洁。续指定地址。这样地址的指定、 处理就方便简洁。 PIC16F84APIC16F84A 芯片没有从芯片没有从 80(50h)80(50h) 到到127(7Fh)127(7Fh) 范围的存储器。范围的存储器。

Page 13: 第 2 章 新系列单片机 PIC16F8XX

1313..地址合成译码器( Address Multiplexer ) 在在 RAMRAM 寄存器的地址指定时,直接地址方式是需用命令的动作码寄存器的地址指定时,直接地址方式是需用命令的动作码 (7(7位位 )) 和和状态寄存器的状态寄存器的 RP0RP0位的组合形成真实地址。间接地址方式是需命令的动作码位的组合形成真实地址。间接地址方式是需命令的动作码(7 (7 位位 )) 和和 FSRFSR寄存器的组合形成真实地址。这些地址的组合都是在地址合成寄存器的组合形成真实地址。这些地址的组合都是在地址合成译码器中完成。译码器中完成。14. EEDATA 寄存器 EEDATAEEDATA寄存器是在对寄存器是在对 EEPROMEEPROM 进行数据写入时或数据读出时使用的寄存器。进行数据写入时或数据读出时使用的寄存器。1515.. EEADR 寄存器 EEADREEADR寄存器是寄存器是 EEPROMEEPROM 的地址指定寄存器。它是的地址指定寄存器。它是 88 位寄存器,可位寄存器,可指示从指示从 00 到到 255255 的地址范围。的地址范围。 PIC16F84APIC16F84A 芯片内部只有芯片内部只有 6464 位,只用位,只用

6 6 位就能指定完整位就能指定完整 EEPROMEEPROM 范围。范围。 16.定时器( Timer ) PIC16F84APIC16F84A 芯片内部有一个芯片内部有一个 88 位的定时计数器称为位的定时计数器称为 TMR0TMR0 。。 88位定位定时计数器计数范围时计数器计数范围 256256 。即当输入。即当输入 256256脉冲后,定时计数器溢出归脉冲后,定时计数器溢出归零。同时在零。同时在 SFRSFR 的的 INTCONINTCON 寄存器的寄存器的 TOIF TOIF 位置 位置 11 。在定时计数器。在定时计数器溢出时也可使用中断处理功能。为激活中断功能,溢出时也可使用中断处理功能。为激活中断功能, SFRSFR 的的 INTCOMINTCOM寄存器的寄存器的 GIFGIF 位及位及 TOIETOIE 位必须先置位必须先置 11 。。

Page 14: 第 2 章 新系列单片机 PIC16F8XX

17. I/O 输入输出口 PIC16F84A 芯片输入输出口有 13位。每一个输入输出口引脚又可通过程序设置为输入口或输出口,但两者不能同时兼用。 13 引脚分为 5 引脚和 8 引脚两组。 5 引脚组称为 A 口, 8 引脚组称为 B 口。在控制系统设计中,由于需不同的定时信号,这 13 引脚都可单独进行设定与控制。 18.时钟脉冲速度控制 时钟脉冲速度决定 PIC 单片机的动作速度, PIC 内部包含了时钟脉冲速度控制单元。通过石英晶体振荡器或陶瓷振荡器与起振电容连接就能产生时钟脉冲信号。如果系统需要稳定度高的时钟,通常采用水晶振子。另外,振子与发振用电容经常可做成单一部件以方便使用。 PIC 的动作也可用外部输入时钟来控制。 PIC16F84A采用的是串行控制结构,通常执行一个命令 (1循环 ) 需 4 个时钟脉冲。但跳转命令由于需要地址变换需要 8 时钟 (2循环 ) 。以 20MHz的时钟为例,脉冲周期是 1/20MHz, 50ns ,通常执行一命令需 200ns 。 PIC在 1秒间可执行 500万条命令。

Page 15: 第 2 章 新系列单片机 PIC16F8XX

22..11..3 PIC16F84A 3 PIC16F84A 初始化初始化 PIC16F84A初始化,主要指对其内部多种控制电路进行初始设置。其初始化步骤明细如下: 定时器上电( Power-on ) 上电时,为保证 PIC 正常上电运行所设置的定时器。目的是使电源电压稳定前 PIC 不动作。 开始定时器( Oscillator Start-up Timer ):上电时,为保证时钟正常起振所设置的定时器。目的是使时钟稳定正常后 PIC才动作。 再初始化( Power-on Reset ):上电时, PIC 内部电路进行初始化。 看门狗(Watchdog )定时器:该定时器是用于时常监视 PIC 程序运行状态的定时器。 PIC 程序需定时对该定时器进行处理设置。如 PIC 程序未对该定时器进行处理设置, PIC将重新再上电初始化。这就使得在程序运行不正常或动作异常时, PIC 能自动进行复原动作。

Page 16: 第 2 章 新系列单片机 PIC16F8XX

22..2 PIC16F8732 PIC16F873 单片机单片机22..22.. 1 PIC16F8731 PIC16F873 硬件结构硬件结构 在上节中介绍了在上节中介绍了 PICPIC 家族中体积小,功能较低的芯片家族中体积小,功能较低的芯片 PIC16F84APIC16F84A ,,但在实际的运用中需要功能更强大,内存容量更大,功能类别更多的但在实际的运用中需要功能更强大,内存容量更大,功能类别更多的芯片。本节所涉及到的芯片。本节所涉及到的 PIC16F873PIC16F873 芯片就是其中的一种。以下介绍芯片就是其中的一种。以下介绍 PPIC16F873IC16F873 芯片与芯片与 PIC16F84APIC16F84A 功能不同的部分。基本功能部分可参照功能不同的部分。基本功能部分可参照前节的内容。 前节的内容。 PIC16F873PIC16F873 是一种比是一种比 PIC16F84APIC16F84A性能更高、功能更全的单片机芯片。性能更高、功能更全的单片机芯片。它的内部程序存储器容量有它的内部程序存储器容量有 4 K 4 K 字节,随机存储器字节,随机存储器 RAM RAM 容量有容量有 192192字节,字节, EEPROMEEPROM 有有 128128 字节。另外定时计数器有三种类型以满足不字节。另外定时计数器有三种类型以满足不同的需要。也装配有模拟数字(同的需要。也装配有模拟数字( A/DA/D )转换功能及通用通信输入输出)转换功能及通用通信输入输出口。与口。与 PIC16F84APIC16F84A 同样采用程序存储器,这使得能方便兼容同样采用程序存储器,这使得能方便兼容 PIC16FPIC16F84A84A 程序写入器来进行程序开发写入。程序写入器来进行程序开发写入。 图图 22..77 是是 PIC16F873PIC16F873 芯片引脚图,在此先介绍它的引脚功能如下:芯片引脚图,在此先介绍它的引脚功能如下: RA0RA0-- 5 5 : 输入输出口 : 输入输出口 A MCKLR : Master Clear (A MCKLR : Master Clear ( 低电平有效低电平有效 ) ) RB0RB0 -- 7 : 7 : 输入输出口 输入输出口 B Vpp : B Vpp : 程序写入控制程序写入控制 RC0RC0-- 7 : 7 : 输入输出口 输入输出口 C THV : Test Mode C THV : Test Mode 测试模式控制测试模式控制 AN0AN0-- 4 : 4 : 模拟输入 模拟输入 VREF+/‐: VREF+/‐: 基准电压 基准电压 (A/D(A/D转换转换 )) RX : USARTRX : USART非同步接收口 非同步接收口 SS : Sleep SS : Sleep 选扯选扯

Page 17: 第 2 章 新系列单片机 PIC16F8XX

TX : USART非同步发送口 T0CK1 : 定时计数器 0 时钟输入SCK : 同步串行输入口 T1OSO : 定时计数器 1 发振器输出口SCL : SPI , I2Cmode输出 T1OSI : 定时计数器 1 发振器输入口DT : 同步数据 T1CK1 : 定时计数器 1 时钟输入CK : 同步时钟 PGD : 编程数据输入SDO : SPI 数据输出 PGC : 编程时钟输入SDI : SPI 数据输入 PGM : 编程低电压输入SDA : 数据输入输出 (I2Cmode) INT : 外部中断输入OSC1/CLKIN : 时钟输入 VDD : 电源OSC2/CLKOUT: 时钟输出 Vss : 接地 (Ground)CCP1 , 2 : Capture输入 / 比较输出 / PWM 输出

Page 18: 第 2 章 新系列单片机 PIC16F8XX

1. PIC16F873 的特殊功能寄存器 SFR (Special Function Register)    PIC16F873PIC16F873 的的 RAMRAM寄存器空间分为寄存器空间分为 4 4 存储块(存储块( BankBank )。每一个存储块)。每一个存储块拥有拥有 128128位容量。特殊寄存器位容量。特殊寄存器 SFRSFR 分别占用每个存储块的上分别占用每个存储块的上 3232位容量。位容量。 33 33 字节以后的空间均为用户可自由使用空间。每一个存储块中有字节以后的空间均为用户可自由使用空间。每一个存储块中有 9696位。第位。第 22 和和第第 33存储块与第存储块与第 00 和第和第 11存储块是镜象相同的,所以实际能使用的容量只有存储块是镜象相同的,所以实际能使用的容量只有2 2 存储块的空间存储块的空间 192 192 字节。字节。2. PIC16F873 的配置( Configuration)字 PIC16F837 内部程序存储器中有一特殊区域为配置区域。它的地址为 2007h 。通常的程序不能对该配置区域进行读写。只能由写入器在进行程序写入时进行读写。 配置的设置决定 PIC 的动作环境。图 2.9 为配置字的各位功能及设置。

图 2.9 配置字结构及各控制位

Page 19: 第 2 章 新系列单片机 PIC16F8XX

22.2.2.2.2 PIC16F873 PIC16F873 输入输出接口输入输出接口 PIC16F837PIC16F837 芯片的输入输出有芯片的输入输出有 AA 、、 BB 、、 CC三个口。三个口。 AA 口有口有 66 个,个, BB 口有口有 88个,个, CC 口有口有 88 个。共有输入输出口个。共有输入输出口 2222 个。作为数字信号的输入输出口,个。作为数字信号的输入输出口, AA 、、BB 、、 CC 口都可以使用。口都可以使用。 PIC16F873PIC16F873 芯片芯片 AA ,, BB ,, CC各输入输出口不仅可用各输入输出口不仅可用于数字信号的输入和输出,还兼有其它功能,比如于数字信号的输入和输出,还兼有其它功能,比如 A/DA/D模拟信号输入输出,模拟信号输入输出,定时计数器的时钟输入等。以下详细介绍定时计数器的时钟输入等。以下详细介绍 PIC16F873PIC16F873 芯片的各输入输出口。芯片的各输入输出口。

Page 20: 第 2 章 新系列单片机 PIC16F8XX

1.输入输出 A 口 输入输出 A 口由 RA0- RA5 等 6 个口构成。该输入输出口可用于输入输出数字信号,模拟信号输入,模拟信号的基准信号输入及定时计数器 0 的外部时钟输入。具体电路类似于 PIC16F84A ,但其中增加有模拟信号的处理部分电路。 如输入输出信号是数字信号,输入输出模式(Mode )的指定由 TRISA寄存器中设定位来指定。在非数字信号输入输出模式时,其设定由 ADCON0 和 ADCON1寄存器指定。既使在模拟信号输入模式下, TRISA寄存器的设置依然有效。如需设定为模拟信号模式时,一定要在 TRISA寄存器中对应位设为输入模式 (1) 。输入输出 A 口的电原理图如图 2.10 所示。

图 2.10 输入输出 A 口逻辑图

Page 21: 第 2 章 新系列单片机 PIC16F8XX

2 .输入输出 B 口   输入输出 B 口由 RB0- RB7 等 8 个端口构成。该输入输出口可用于数字信号的输入输出。也作为程序数据的写入口。在作为程序数据写入口时,不存在设定寄存器。在线串行编程 (ICSP)模式下, B 口自动作为编程口使用。PIC16F873 的 ICSP 和 PIC16F84A 具同样结构。 RB4- RB7 的 4 端口还具有状态变化检测功能。在使用该功能时, B 口方向寄存器 TRISA 是一个 4位寄存器,有 4 个端口, 4 个端口的设置位设为输入模式。端口的状态变化结果通过 INTCOM寄存器的 RBIF位体现,同时程序运行计数器强制置为 0004h ,进入中断处理状态。 另外, RB0/INT 这个端口同样具有中断功能。在使用此功能时, INTCON寄存器的 INTE 位需置为 1 。该中断是脉冲上升沿还是下降沿中断,由 OPTION寄存器的 RBPU位设定。该位为 1 时,上升沿中断, 0 时为下降沿中断。

图 2.11 输入输出 B 口逻辑图

Page 22: 第 2 章 新系列单片机 PIC16F8XX

3.输入输出 C 口 输入输出 C 口同 B 口一样由 8 个输入输出端口构成。 C 口不仅用作数字信号的输入输出口,还兼用作定时计数器 1 的时钟输入口,以及各种外部通信用的信号输入输出口。 RC0 端口可作为定时计数器 1 的外接振荡器的接续端口和它的外部时钟输入口。两者功能的切换由 T1CON寄存器来设定。 RC1 端口也可作为定时计数器 1 的外部振荡器的接续端口和 CCP2 (Capture2 input/Compare2 output/Pulse Width Modulation2 (PWM2) output) 口兼用。定时计数器 1 功能的切换由 T1CON寄存器来设定。关于 CCP2 的功能切换将由 CCP2CON寄存器来设定。

图 2.12 输入输出 C 口逻辑图

Page 23: 第 2 章 新系列单片机 PIC16F8XX

2.2.3 PIC16F873 定时计数器 PIC16F837 具有 3 种定时计数器。各定时计数器的特征、性能不尽相同,下面分别介绍。

定时计数器 0 PIC16F873 的定时计数器 0同 PIC16F84A 的定时计数器 0 基本功能相同,相比较具有以下特定功能: 定时计数器 0 是 8位定时计数器,计数最大可达 255 。 允许对定时计数器进行读写。 可做为 8位长的程序 Pre-scale使用。 可使用内部或外部时钟。 定时计数器溢出中断 (溢出后定时计数器由 FFh清为 00h) 在使用外部时钟时,对时钟前沿和后沿计数均可。

Page 24: 第 2 章 新系列单片机 PIC16F8XX

定时计数器 1 定时计数器 1 如图 2.13 所示,是具有 16位长的计数器 (TMR1H, TMR1L) 。可分为 2 个 8位定时计数器使用。各自具有独立的 Pre-scale,可设置为 1 ,2 , 4 , 8段使用。在 TMR1IE寄存器 PIE 位置 1 时,定时计数器溢出中断有效。计数器数据由 FFFFh清为 0000h 时由 TMR1IF表示溢出,同时产生中断。 定时计数器 1 可作为定时器或计数器使用。两种模式的切换由 T1CON寄存器 TMR1CS位设置。 TMR1CS位置 0 时,作定时器。置 1 时作为计数器使用。另外在两种模式下又有不同定时器模式和计数器模式的设置。

图 2.13 定时计数器 1 电逻辑图

Page 25: 第 2 章 新系列单片机 PIC16F8XX

定时计数器 2 定时计数器是一个具有 8 位长的计数器 (TMR2) 和周期寄存器构成的定时计数器。 它具有独立的 4位长的可编程的预分频器和 4位长的可编程的后分频器。 预分频器有 1 , 4 , 16三段控制功能。后分频器具有 1至 16 为止 16段的分段控制功能。 定时计数器电原理逻辑如图 2.14 所示。定时计数器的计数值与周期寄存器所存值相等时,下一次计数时从 00h 开始计数。 由于有该功能使得定时计数器 2 能从 0到周期寄存器所存值为止反复计数。周期寄存器所存初始值在上电时为 FFh 。可通过程序改写。在计数器和周期寄存器所存值一致时输出信号到后分频器,再由它进行中断控制。例如后分频器设置为 5 ,计数器和周期寄存器所存值一致 5回后,第一外设中断屏蔽寄存器( PIR1) TMR2IF位置 1 后产生中断。 定时计数器 2 也可通过 T2CON寄存器 TMR2ON位来控制它的动作或停止。

图 2.14 定时计数器 2 电逻辑图

Page 26: 第 2 章 新系列单片机 PIC16F8XX

22..22..4 PIC16F873 CCP4 PIC16F873 CCP 功能功能 CCP 功能是 PIC16F873 特有的功能。CCP缩写由英文 Capture, Compare和 PWM (Pulse Width Modulation) 的开头英文字母组成,分别代表输入捕捉、输出比较和脉冲宽度调制。 PIC16F873有二个 CCP模块。。

CCP1 CCP2 限制条件捕获功能 捕获功能 共用定时计数器 1捕获时点与定时计数器值可以不同,但可同时使用捕获功能 比较功能 启动比较功能,自动对定时计数器 1清零在此状态下,最好不使用 CCP1的捕获功能捕获功能 PWM 因定时计数器 1与定时计数器 2是独立的,在此情况下无特别的限制条件比较功能 捕获功能 启动比较功能,自动对定时计数器 1清零在此状态下,最好不使用 CCP2的捕获功能比较功能 比较功能 只要启动比较功能,自动对定时计数器 1清零所以,不能同时使用比较功能比较功能 PWM 因定时计数器 1与定时计数器 2是独立的,在此情况下无特别的限制条件PWM 捕获功能 因定时计数器 1与定时计数器 2是独立的,在此情况下无特别的限制条件PWM 比较功能 因定时计数器 1与定时计数器 2是独立的,在此情况下无特别的限制条件PWM PWM 由于两者共用,定时计数器 2只需设定为相同值即可工作

表 2.3 CCP1 和 CCP2 功能及制约条件

Page 27: 第 2 章 新系列单片机 PIC16F8XX

以下详细介绍 CCP三种功能模式1.输入捕捉( Capture )模式在输入捕捉模式下, RC2/CCP1 引脚( 13 引脚)的电平变化时定时计数器的计数值读入 CCPR1 (CCPR1L 和 CCPR1H) 寄存器中。在 TRISC寄存器中必须把 RC2/CCP1 引脚设为输入模式。 详细功能框图见图 2.15 。关于 RC2/CCP1 引脚 ( 引脚 13) 的电平变化检测有多种方式。它的指定由 CCP1CON寄存器的 CCP1M 0 位到 CCP1M 3 位共 4位来控制。

图 2.15 CCP 的输入捕捉功能

Page 28: 第 2 章 新系列单片机 PIC16F8XX

22 .输出比较(.输出比较( CompareCompare )模式)模式 输出比较模式就是 CCPR1寄存器的内容和定时计数器 1(TMR1) 的内容进行比较功能模式。 其功能原理框图如图 2.16 所示。 当两者内容一致时,根据 CCP1寄存器的 CCP1M0 位到 CCP1M3 位的不同设置完成不同的控制功能。 其详细的功能表请见表 2.5 。 设置时,必须由 TRISC寄存器设置 RC2/CCP1 端 ( 引脚 13) 为输出模式。 同时定时计数器 1 必须设置为同步定时器模式。 如果设为非同步定时器模式,输入捕捉的功能不动作。

图 2.16 CCP 的输出比较功能

Page 29: 第 2 章 新系列单片机 PIC16F8XX

PWM模式 在设置为 PWM (Pulse Width Modulation) 模式时,通过 CCP1 端口 ( 引脚 13) 可输出连续的脉冲。 其功能框图和脉冲信号见图 2.17 所示。为使用 PWM模式,由 CCP1CON寄存器的 CCP1M3 位和 CCP1M2 位置 1来设定。

图 2.17 PWM模式功能框图及脉冲信号

Page 30: 第 2 章 新系列单片机 PIC16F8XX

以下着重介绍 PWM周期和脉冲 Duty时间的计算设置1) PWM周期Pulse 脉冲周期是 TRM2 和 PR2 的值一致时所需时间,可通过以下公式计算PWM脉冲周期 = (PR2 的值 + 1)*4*振荡器周期 *定时计数器 2 的预分频值计算例 1 (10MHz时的最大周期 ) 条件 PR2 = 255 振荡器周期 = 0.1 μs (10MHz时钟 ) 定时计数器 2 的 Prescaler 值 = 16 PWM周期 = (255+1)*4*0.1*1E-06*16 = 1.6384 ms(610Hz)2) PWM 的高电平持续时间高电平持续时间是输出 Pulse 脉冲高电位时间,可通过以下公式计算计算例 3 (10MHz时最大 Duty时间 ) 条件 CCPR1L+ CCP1X +CCP1Y =1023 振荡器周期 = 0.1 μs (10MHz时钟 )

定时计数器 2 的 Prescaler 值 = 16 PWM 高电平持续时间 = 1023*0.1*1E-06*16 = 1.6368 ms

Page 31: 第 2 章 新系列单片机 PIC16F8XX

最后总结以下, PWM模式设置方式及顺序: 用 PR2寄存器设置 PWM周期。 用 CCPR1L寄存器和 CCP1CON寄存器设置 PWM Duty 值。 用 TRISC寄存器设置 CCP1 ( 引脚 13) 为输出模式。 用 T2CON寄存器设置定时计数器设置 Prescaler 值。 用 CCP1CON寄存器 CCP1M3位和 CCP1M2位设置 PWM模式 (11XX) 。

Page 32: 第 2 章 新系列单片机 PIC16F8XX

2.2.5 PIC16F873 模数转换( A/D)功能 模数转换功能就是能对输入模拟信号进行测量,且测量结果变成数字信号的功能。 PIC16F873 具有 10位长的模数转换功能,测量的最大范围内具有 1/1024 的测量精度。 最大测量范围在 0 V到 +5 V之间。如最大为 +5V ,测量精度可达 5/1024 V ,即 0.004883 V (约 5 mV) 。 1 .输入端口设置 虽然 PIC16F873 芯片最大可指定用 5 个模拟信号输入端口 (AN0- AN4) ,模数转换功能却只有一种。某一时刻 PIC16F873只能对 1 个端口进行测量。如设计对各端口进行轮流测量程序,可实现对多个端口的模拟信号的测量功能。 1次测量需时间约 40us ,对变化不是很快的模拟信号可进行多端口的轮流测试。但不能测量高频率的信号。 哪些端口作为模拟信号输入口由 ADCON1寄存器 PCFG0位到 PCFG3位的 4 位来设定。 PIC 对哪个模拟输入端口进行处理由 ADCON0寄存器的 CHS0位, CHS1位及 CHS2位来指定设置。 被指定的端口还得由 TRISA寄存器的该位置 1 使之为输入模式。其电原理框图如图 2.18 所示。

Page 33: 第 2 章 新系列单片机 PIC16F8XX

2 测量档和测量精度调整 虽然芯片测量范围在 Vss (0V) 到 VDD (5V) 之间,但也可根据 VREF- (下限电平 ) 和 VREF+ ( 上限电平 ) 来重新设定测量范围。虽如此, VREF- 和 VREF+ 必须设置在从 Vss到 VDD之间。 比如,低电平设置在 Vss ,高电平设置在 3V 时,测量范围为 3V 。在此范围里测量精度为它的 1/1024 ,即 3/1024=0.002929 (约3mV) 。 VREF- 和 VREF+ 的使用,设置由 ADCON1寄存器 PCFG0位到 PCFG3位组合来设定。 一旦 VREF- 和 VREF+ 被设置后,测量范围就为 AN2 端口和 AN3 端口输入电压差。 如仅设定了 VREF+ , VREF-自动设置为 Vss 。如两者均未设定,下限电平为 Vss ,上限电平为 VDD 。

图 2.19 测量范围设定及测量精度

Page 34: 第 2 章 新系列单片机 PIC16F8XX

3模数转换结果存储模数转换结果存储在 ADRESH和 ADRESL寄存器中。其存储原理图如图 2.20 所示。由图所示两个 8位长的寄存器组成了 16位长的寄存器。 ADRESH为高位, ADRESL 为低位。模数转换后的 10位结果可存储在 16 位长的寄存器的上 10位或下 10位中,可由 ADCON1寄存器的 ADFM命令位来设置。如图 2.20 所示, ADFM 为 0 ,存上 10位, 1 时存下 10位。

图 2.20 模数转换结果存储

Page 35: 第 2 章 新系列单片机 PIC16F8XX

模拟电平测量原理 如图 2.21 示,首先在采样开关 ON 时,在模拟信号输入口 ANx输入的模拟电压首先对采样保持电容 CHOLD充电,然后开关断开后模数转换功能块才对电容的电压进行测定、 数字信号的转换。由于此原因,在由 ADCON0寄存器 CHS0 , CHS1 和 CHS2位指定输入口后,电容的充电完成需要一定时间,所以模数转换功能块需要等待。该时间也不会自动识别,输入口的指定到模数转换开始的时间的处理要由应用程序控制。 这个时间大约20 us 。 充电完成后即可开始模数转换。 转换时间长短因变换时钟不同也不同,最短需约 20 us 。 转换中,输入口与模数转换功能块是断开的,所以转换过程中输入口电压变动时不影响转换结果。

图 2.21 模拟电平测量输入口电原理图

Page 36: 第 2 章 新系列单片机 PIC16F8XX

5 模数转换的时钟问题 模数转换必须在模数转换时钟控制下动作。变换 1位需要 1.6us (TAD) 。模数转换时钟可通过 ADCON0寄存器的 ADCS0位和 ADCS1位来控制选择。 2位控制即可有 4 种时钟选择。 虽然可用 1.6 us 以上的转换时间,但模数转换时钟来自于 PIC 工作时钟,转换时间尽量做到 1.6 us 为好。以上表中, RS 选择应采用在 SLEEP模式时的模数转换。

图 2.22 模数转换

Page 37: 第 2 章 新系列单片机 PIC16F8XX

6 .模数转换软件处理方法模数转换软件处理方法通长有两种:不使用中断功能和使用中断功能。SLEEP模式下的模数转换为避免 PIC 动作时产生的干扰信号对模数转换的影响,可采用在 SLEEP模式下的模数转换功能。在使用该功能时需使用 RC 振荡器,也就需设置 ADCON0寄存器 ADCS0位和 ADCS1位置 1 。 1 位转换时间需 4 us 。 ADCON0寄存器 GO位置 1 后 SLEEP命令执行使 PIC 处于 SLEEP模式。 SLEEP模式的解除需要中断方式来确认,该方法需使用中断功能。其程序控制流程图如图

2.23 所示。

图 2.23 SLEEP 模式下的模数转换流程

Page 38: 第 2 章 新系列单片机 PIC16F8XX

2.2.6 PIC16F873 串行通信接口 USART PIC16F873装配有两种类型不同的串行通信模块,即通用同步 /异步收发器USART (Addressable Universal Synchronous Asynchronous Receiver Transmitter)模块和主控同步串行端口 MSSP(Master Synchronous Serial Port)模块。 USART 口可选择以下三种动作模式:非同步通信 (全双工通信 ) 、同步通信-主 Master (半双工通信 ) 和同步通信-从 Slave (半双工通信 ) 。 USART 通信通常传输数据是以数据块为单位。通常每个数据块由 8位构成。为实现多终端处理,多加一位地址指定位,则每数据块就可由 9 位构成。 。

Page 39: 第 2 章 新系列单片机 PIC16F8XX

1 .异步通信数据通信时,数据发送口输出的数据 1 或 0 必须在接收口被识别,这样才能正确地进行双向通信。非同步通信原理就是在被传送数据块 (8 位 或 9 位长 ) 的开头加上开始认知位,在块末加上传送结束位来实现通信。开始识别位采用低电位信号,传送结束位采用高电位信号。在通信线路上,传数据时线路处于 H电位。这样线路由 H电位变为 L 低电位 (START) 时,收信口就能识别数据传送开始,随后,系统根据事先设置好的通信速率开始接收数据。最后检出STOP 位 (H电位 ) 完成整个数据块的传送。 USART 通信中,数据传送速率在送信端和收信端由不同的定时计数器控制,如果两者设置等出现误差将不能实现正确有效地通信。另外,非同步通信发送线路 Tx和收信线路 Rx为独立线路,可实现同时收发功能 (全双工通信 ) 。

Page 40: 第 2 章 新系列单片机 PIC16F8XX

2 指定输入输出数据口 异步通信使用 RC6/TX/CK (17 引脚 ) 作为数据输出口, RC7/RX/DT (18 引脚 ) 为数据输入口。由于这两端口作为 USART 通信端口,TX 和 RX 口的输入输出设置由 TRISC寄存器设定,即 C 端口第 6 位设置为 0 ( 输出模式 ) ,第 7位设置为 1( 输入模式 ) 。另外 RC6和 RC7 作为 USART 端口用,接收状态兼控制寄存器(接收状态兼控制寄存器) SPEN 位需置位,且清 TXSRA寄存器 SYNC 位。 USART 通信原理如图 2.24 所示。

图 2.24 USART 通信原理

Page 41: 第 2 章 新系列单片机 PIC16F8XX

3 USART 通信速率设置 USART 通信速率由波特率发生器 BRG (Baud Rate Generator)控制。且非同步通信和同步通信均由 BRG控制。控制寄存器有波特率寄存器 SPBRG,它是个 8位的定时器控制寄存器。在非同步 USART模式下,发送状态兼控制寄存器( TXSTA)的 BRGH位用来控制设置通信速率。

Page 42: 第 2 章 新系列单片机 PIC16F8XX

4 . USART 发送电路工作原理USART异步通信时,接收状态兼控制寄存器 SPEB位使 RC6 端口作为 TX 端口。在 TXREG寄存器设置发送数据后,由硬件读取到 TSR (Transmit Shift Register) 寄存器后由 TX 端口发送。另外通过发送状态兼控制寄存器( TXSTA)的 TXEN 位置 1来实施数据发送。数据由最低位开始逐位发送。

图 2.25 USART非同步通信发送电路原理

Page 43: 第 2 章 新系列单片机 PIC16F8XX

图 2.26 单字节 USART送信时间示意图

图图 22.27 .27 多字节连续多字节连续 USARTUSART 发送时序示意图发送时序示意图

Page 44: 第 2 章 新系列单片机 PIC16F8XX

55 .. USARTUSART 接收电路工作原理接收电路工作原理 图 2.28 所示为 USART异步通信接收电路原理。在设置 USART异步通信时,首先需设置接收状态兼控制寄存器的 SPEN 位为 1 使端口 RC7 为 USART 的接收端口 RX 。图中所示,从 RX 端口接收数据通过数据补偿电路后送入RSR寄存器。接收数据的高低电平的判断,对每位接收数据要进行 3次采样。接收数据按 SPBRG寄存器与发送状态兼控制寄存器( TXSTA)的 BRGH 位设置的通信速率存入 RSR寄存器。存储的格式为 RSR寄存器格式。在检测出STOP 位后,存入 RSR寄存器的数据转存入 RCREG寄存器。数据转存入 RCREG寄存器后, PIR1 中断控制寄存器的 RCIF 位置 1 发生中断响应。为产生中断响应,得先使第一外设中断标志寄存器( PIE1)的 RCIE 位置 1 开放。 如图 2.28 所示, RCREG寄存器具有 2段先入先出 FIFO 缓冲寄存器结构,其中能存入 2块数据。目的是在软件读取数据时如出现迟后时能对数据进行保护。另外请注意, RCIF 位为专读取位,在 RCREG寄存器数据全部读出后,由硬件自动清 0 。

图 2.28 USART异步通信接收电路原理

Page 45: 第 2 章 新系列单片机 PIC16F8XX

接收数据存入 RSR寄存器完成后,如 RCREG的 2段先入先出 FIFO (First In First Out) 缓冲寄存器均存有数据时 RCSTA寄存器的 OERR 位自动置位表示产生了 Overlay 溢出错误。产生此错误会使得 RSR寄存器中的接收数据丢失。此后中断 USART 数据接收。如要恢复正常接收状态,必须对 RCSTA寄存器的 CREN 位清位,再设置。 CREN位设置后 OERR位自动清位。 另外前些章节中介绍了 USART异步通信可使用奇偶校验检测位发送。在接收端自然就需要进行奇偶校验帧检测。如检测出 RSR寄存器数据出现帧错误, RCSTA寄存器的 FERR 位置位以示帧错误。于是 RERR 位和存入 RCSTA寄存器的 RX9D 位的情况反应了当前接收的 1块数据的正确与否。由于此功能,在 RCREG寄存器数据读出前需读出 RCSTA寄存器的数据并对其 FERR 位进行检查。

Page 46: 第 2 章 新系列单片机 PIC16F8XX

22..3 PIC16F8773 PIC16F877 单片机单片机

众所周知众所周知 PICPIC 系列单片机是由美国系列单片机是由美国 MicrochipMicrochip公司生产的单片机公司生产的单片机产品,具有较好的抗干扰性能、简洁的指令集,所需硬件配置较少的产品,具有较好的抗干扰性能、简洁的指令集,所需硬件配置较少的特点。特点。 PIC16F877PIC16F877 单片机是其开发的新产品,具有单片机是其开发的新产品,具有 FlashFlash 编程的功编程的功能,用户可以直接在单片机上进行如暂停能,用户可以直接在单片机上进行如暂停 CPUCPU 执行、观察寄存器内执行、观察寄存器内容等操作,非常适用于教学和进行新产品的开发。容等操作,非常适用于教学和进行新产品的开发。 PIC16F877PIC16F877 单片单片机是目前应用最广泛的一种机是目前应用最广泛的一种 PICPIC 单片机。在电脑的外设、家电控制、单片机。在电脑的外设、家电控制、电信通信、智能仪器、汽车电子以及金融电子等各个领域得到了广泛电信通信、智能仪器、汽车电子以及金融电子等各个领域得到了广泛的应用。的应用。

Page 47: 第 2 章 新系列单片机 PIC16F8XX

2.3.1 PIC16F8772.3.1 PIC16F877 特性特性 PIC16F877PIC16F877 具有具有 PIC16F87XPIC16F87X 系列单片机的共同特点,主系列单片机的共同特点,主要性能如下:要性能如下: 高性能高性能 RISC CPURISC CPU 3535条单字指令条单字指令 除程序分支指令为除程序分支指令为 22 个周期外,其余为单周期指令个周期外,其余为单周期指令 运行速度:运行速度: DCDC ~~ 20MHZ20MHZ时钟输入,时钟输入, DCDC ~~ 200ns200ns指令周期指令周期 8K*148K*14 个个 FLASHFLASH 程序存储器程序存储器 中断能力(达到中断能力(达到 1414 个中断源)个中断源) 88级深度的硬件堆栈级深度的硬件堆栈 直接、间接和相对的寻址方式直接、间接和相对的寻址方式 上电复位(上电复位( PORPOR)、上电定时器、振荡启动定时器)、上电定时器、振荡启动定时器 可编程的代码保护可编程的代码保护 全静态设计全静态设计 在线串行编程(在线串行编程( ICSPICSP))

Page 48: 第 2 章 新系列单片机 PIC16F8XX

其外围特征其外围特征 Timer0Timer0 :带有预分频器的:带有预分频器的 88 位定时器位定时器 // 计数器计数器 Timer1Timer1 :带有预分频器的:带有预分频器的 1616位定时器、计数器,在使位定时器、计数器,在使用外部晶振时,在用外部晶振时,在 SleepSleep 期间仍能工作期间仍能工作 Timer2Timer2 :带有:带有 88 位周期寄存器,预分频器和后分频器的位周期寄存器,预分频器和后分频器的88 位定时器位定时器 // 计数器计数器 1010 个多通道个多通道 A/DA/D转换器转换器 带有带有 SPI(SPI( 主模式主模式 )) 和和 I2CI2C (主(主 // 从)模式的从)模式的 SSPSSP 带有带有 99 位地址探测的通用同步异步接收位地址探测的通用同步异步接收 // 发送器发送器

(( USART/SCIUSART/SCI )) 带有带有 RDRD ,, WRWR 和和 CSCS控制(只控制(只 40/4440/44 引脚)引脚) 88 位字宽位字宽的并行端口的并行端口 带有降压复位的降压检测电路带有降压复位的降压检测电路

Page 49: 第 2 章 新系列单片机 PIC16F8XX

PIC16F877PIC16F877 具有 具有 Flash program Flash program 程序内存功能,可以重程序内存功能,可以重复烧录程序,而其内有 复烧录程序,而其内有 ICD(In Circuit Debug)ICD(In Circuit Debug) 功能,可功能,可以让使用者直接在单芯片电路或产品上,进行如暂停微处以让使用者直接在单芯片电路或产品上,进行如暂停微处理器执行、查看缓存器内容等新功能,理器执行、查看缓存器内容等新功能, PIC16F877PIC16F877 单芯单芯片有片有 PLCC(Plastic Leaded Chip Carrier)PLCC(Plastic Leaded Chip Carrier) 与 与 QFP(Quad FQFP(Quad Flat Package)lat Package) 两种形式的包装,依照不同的需求,寻找不两种形式的包装,依照不同的需求,寻找不同的包装形式。 同的包装形式。 PIC16F877PIC16F877 (见图(见图 2.302.30) 属于闪控式) 属于闪控式 (Flash)(Flash) 单芯片,单芯片,可以重复烧录,其 可以重复烧录,其 ROM ROM 的容量总共是 的容量总共是 8K 8K 字节,以 字节,以 2K 2K 为一页,区分为 为一页,区分为 44页;内部 页;内部 RAM RAM 总共有 总共有 512 512 个字节个字节 (0(00f~1FFh)0f~1FFh) ,以 ,以 128 128 个字节为一个存储块,共区分为 个字节为一个存储块,共区分为 4 4 个存储块,每个存储块 的前半段都具有特殊用途,分别连个存储块,每个存储块 的前半段都具有特殊用途,分别连接到特殊功能模块,例如 接到特殊功能模块,例如 I/OI/O 、、 CCPCCP 、、 TimerTimer 、、 USARTUSART 、、MSSP MSSP 等。 等。

Page 50: 第 2 章 新系列单片机 PIC16F8XX

2.3.2 2.3.2 特殊内嵌功能 特殊内嵌功能 PIC16F877 PIC16F877 属于内嵌功能较多的单芯片,除了 属于内嵌功能较多的单芯片,除了 CPUCPU 、、 POPOMM 、、 RAMRAM 、、 I/O I/O 等基本构造外,还包括以下各种功能,简等基本构造外,还包括以下各种功能,简介如下: 介如下: A/D converterA/D converter :模拟数字转换器,最多可以读取 :模拟数字转换器,最多可以读取 8 8 组模组模拟输入信号。 拟输入信号。 CCPCCP:输入捕捉、输出比较、:输入捕捉、输出比较、 PWMPWM ,用于控制直流马达。 ,用于控制直流马达。 TimerTimer,内部定时器,有 ,内部定时器,有 Timer0Timer0 、、 Timer1Timer1 、、 Timer2 Timer2 等等33 个。 个。 USARTUSART:: Universal Synchronous Asynchronous ReceiveUniversal Synchronous Asynchronous Receiver Transmitterr Transmitter,同步∕异步串行传输,如 ,同步∕异步串行传输,如 RS232RS232 、、 RS485 RS485 等。 等。 MSSPMSSP ;; Master Synchronous Serial PortMaster Synchronous Serial Port,两线式,两线式 (I2C)(I2C)与三线式与三线式 (SPI)(SPI)标准同步标准同步 串行传输协定,常用于 串行传输协定,常用于 EEPROM EEPROM 内存资料的烧录与读取,内存资料的烧录与读取,或是与其他集成电路沟通与联系,形成多芯片网络。或是与其他集成电路沟通与联系,形成多芯片网络。

Page 51: 第 2 章 新系列单片机 PIC16F8XX

图 2.31 PIC16F877 RAM配置图

图 2.30 PIC16F877 引脚说明

Page 52: 第 2 章 新系列单片机 PIC16F8XX

2.3.3 PIC16F877 基本电路 1 . PIC 振荡电路 单芯片振荡电路与整体系统工作速度有直接的关系,例如同步∕异步串行传输、定时器等,都与“振荡频率”有关,不同系列单芯片有不同振荡频率,根据产品资料手册, PIC16F877 振荡频率最高可到20MHz;振荡电路接于引脚 13(OSC1/CLKIN)与引脚 14(OSC2/CLKOUT) ,而振荡电路有如下 4 种形式: LP :使用低功率振荡晶体 (Low Power Crystal) XT :使用振荡器∕谐振器 (Crystal/Resonator) HS :使用高速振荡器 (High Speed Crystal/Resonator) RC :使用电阻∕电容 (Resister/Capacitor)

图 2.32 振荡源电路图

Page 53: 第 2 章 新系列单片机 PIC16F8XX

22 .外加电源与重置电路 .外加电源与重置电路 PIC16F877 PIC16F877 的工作电压为 的工作电压为 5V5V ,连接 引脚,连接 引脚 11 11 与 引脚与 引脚 3232 ,引脚,引脚 12 12 与 引脚与 引脚 31 31 为地线接脚,为地线接脚,重置电路连接 引脚重置电路连接 引脚 11 ,按下 ,按下 Reset Reset 后,内部指令重头开始执行,系后,内部指令重头开始执行,系统重新运作。电路见图统重新运作。电路见图 2.332.33 。。3.3. 输入输出区输入输出区 PIC16F877 PIC16F877 除了上述基本电路所占用的 除了上述基本电路所占用的 7 7 根引脚外,其余的 根引脚外,其余的 33 33 支引脚都可当成输出、输入引脚,输入输出端口是单芯片基本界面,支引脚都可当成输出、输入引脚,输入输出端口是单芯片基本界面,可以与周边电路进行电路控制和信号传输与检测。可以与周边电路进行电路控制和信号传输与检测。 PIC PIC 是 是 88 位的单位的单芯片,以引脚特性分组,每组尽量凑满 芯片,以引脚特性分组,每组尽量凑满 8 8 支引脚,并将 支引脚,并将 I/O I/O 命名为 命名为 PORTA(RA0PORTA(RA0 ~~ RA5)RA5) 、、 PORTB(RB0PORTB(RB0 ~~ RB7)RB7) 、、 PORTC(RC0PORTC(RC0 ~~ RC7)RC7) 、、PORTD(RD0PORTD(RD0 ~~ RD7)RD7) 和 和 PORTE(RE0PORTE(RE0 ~~ RE2)RE2) 等,各分组特性说明如等,各分组特性说明如下:下:

Page 54: 第 2 章 新系列单片机 PIC16F8XX

PORTA PORTA PIC16F877PIC16F877 的的 PORTA PORTA 总共有总共有 66位位 (RA0(RA0 ~~ RA5)RA5) ,, PORTA PORTA 的引脚可作为的引脚可作为数据输出输入端口,而系统重置后,数据输出输入端口,而系统重置后, PORTA PORTA 自动成为模拟输入状态,可自动成为模拟输入状态,可读取模拟输入信号。 读取模拟输入信号。 PORTB PORTB PORTB PORTB 总共有总共有 88 位位 (RB0(RB0 ~~ RB7)RB7) ,可以编写程序规划输入输出方向、状,可以编写程序规划输入输出方向、状态,其中,要进行烧录时,使用到三个引脚,分别是 引脚态,其中,要进行烧录时,使用到三个引脚,分别是 引脚 36(RB3/PGM)36(RB3/PGM) 、、引脚引脚 39(RB6/PGC)39(RB6/PGC)与 引脚与 引脚 40(RB7/PGD)40(RB7/PGD) 。 。 PORTC PORTC PORTC PORTC 总共有总共有 88 位位 (RC0(RC0 ~~ RC7)RC7) ,除了可作为数据 ,除了可作为数据 I/O I/O 外,还和一些外,还和一些特殊功能的外围电路共享引脚,例如 特殊功能的外围电路共享引脚,例如 CCPCCP (直流马达控制)、(直流马达控制)、 I2CI2C 、、 SPISPI(同步串行通信电路)、(同步串行通信电路)、 UARTUART (异步串行传输电路)等。 (异步串行传输电路)等。 PORTD PORTD PORTD PORTD 总共有总共有 88 位位 (RD0(RD0 ~~ RD7)RD7) ,可作一般数据 ,可作一般数据 I/OI/O 外,并与 外,并与 PSP(PaPSP(Parallel Slave Port)rallel Slave Port) 并行传输区共享。当整体系统需要多单芯片时,彼此可并行传输区共享。当整体系统需要多单芯片时,彼此可以经由并行传输区来快速传输资料。 以经由并行传输区来快速传输资料。 PORTE PORTE PORTE PORTE 总共有总共有 33 位位 (RE0(RE0 ~~ RE2)RE2) ,, PORTE PORTE 的 引脚的 引脚 88 、、 99 、、 10 10 有三种有三种功能,除了基本 功能,除了基本 I/O I/O 功能,还有模拟输入功能,而上述 功能,还有模拟输入功能,而上述 PORTD PORTD 的并行的并行传输区设定所需的控制引脚,如传输区设定所需的控制引脚,如 /RD/RD 、、 /WR/WR 、、 /CS /CS 等,也是属于等,也是属于 PORTE PORTE 引脚。引脚。

Page 55: 第 2 章 新系列单片机 PIC16F8XX

表 2.11 建议电容参考表图 2.33 电源与重置电路