美国微芯公司推出的CMOS 8位PIC系列单片机,采用精简指令集(RISC)、哈佛总线结构、2级流水线取指令方式,具有实用、低价、指令集小、简单易学、低功耗、高速度、体积小、功能强等特点,体现了单片机发展的一种新趋势,深受广大用户的欢迎,已逐渐成为单片机发展的新潮流。
PIC16F877A(见图3-8)是微芯公司的中档产品。它采用14位的类RISC指令系统,在保持低价格的前提下,增加了A-D转换器、内部E2PROM存储器、比较输出、捕捉输入、PWM输出(加上简单的滤波电路后还可以作为D-A输出)、I2C总线和SPI总线接口电路、异步串行通信(USART)接口电路、模拟电压比较器、LCD驱动、Flash程序存储器等许多功能,可以方便地在线多次编程和调试,特别适用于初学者学习和在产品的开发阶段使用;它也可以作为产品开发的终极产品。微芯公司还将Flash芯片做成与OTP芯片价格相近,以致可用Flash芯片代替OTP芯片。微芯公司的单片机是品种最丰富的单片机系列之一,被广泛地应用于各种仪器和设备中,凭借性能高、速度快、体积小、价格低、稳定可靠等优点,在过程检测、数据采集、智能仪表,机电一体化、智能家居工程及网络技术等领域中发挥着越来越重要的控制作用。
PIC16F877A拥有5组通用I/O口,其中端口A是一个6位双向端口,它和另一个3位双向端口E共同组成8路10位A-D端口,实现模拟输入采样。端口A和端口E默认为模拟输入模式,故在数字模式使用时必须通过设置ADCON1寄存器设置。
端口B是一个8位双向端口,除完成普通输入输出功能外,RB0脚可实现外部中断,RB7~RB4脚则可实现电平变化检测。端口C则主要和通信、计时功能引脚复用。
图3-8 PIC16F877A管脚分布
PIC16F877A单片机采用了通用同步/异步串行接收/发送器(Universal Synchronous/A-synchronous Receiver/Transmitter,USART),支持全双工操作(相互独立地接收数据寄存器和发送数据寄存器);支持同步和异步操作,同步操作时,可主机时钟同步,也可从机时钟同步;采用独立的高精度波特率发生器,不占用定时器/计数器;支持5、6、7、8和9位数据位,1或2位停止位的串行数据帧结构;由硬件支持的奇偶校验位发生和检验;具有数据溢出检测和帧错误检测;包括错误起始位的检测噪声滤波器和数字低通滤波器;拥有3个完全独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;支持多机通信模式;支持倍速异步通信模式。
USART收发模块一般分为三大部分:时钟发生器、数据发送器和接收器。控制寄存器为所有的模块共享。时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理不同帧结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多帧数据无延时的通信。接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接收单元用作异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的帧结构,同时支持帧错误、数据溢出和校验错误的检测。
PIC16F877A单片机内集成了TMR0、TMR1、TMR2三个可编程定时器。其中,TMR0为8位宽,TMR1、TMR2为16位宽,所有的定时器还可以作为计数器使用。除此之外,TMR1与CCP模块配合使用可实现捕捉和比较功能,TMR2和CCP模块配合使用可实现脉宽调制输出功能。CCP即捕捉、比较、脉宽调制(Capture Compare PWM)。捕捉功能可捕捉外部输入脉冲的上升沿或下降沿,产生相应中断,从而可用于测量外部信号的周期、频率、脉宽等;比较功能用于从引脚上输出不同宽度的矩形脉冲和延时信号;脉宽调制功能将产生占空比可调的周期性方波信号,可用来实现直流电机的调速、D-A转换以及步进电动机的控制等。
下面从PIC16F877A单片机的内核特色和外围特色两个方面简要介绍一下PIC16F877A。
1.精简指令集技术
传统单片机采用复杂指令集(CISC),指令通常有50~110条,且多为多周期指令。PIC的指令系统是专门根据小型机特点而设计的,力求每一条指令都有更高的效率,减少指令功能的重复。可以使代码的利用率大大提升,有利于提高执行效率使编程和调试相对容易,节约开发时间。
2.哈佛双总线结构(见图3-10)
与之相对的是冯·诺依曼结构(见图3-9),该结构限制工作带宽、可靠性没有保障。数据和指令传输总线完全分开以避免复杂指令集(CISC)设计中经常出现的瓶颈问题。PIC的存储器分为数据存储器和程序存储器,而且运算处理单元和数据存储单元之间分别用的是不同的总线连接。由于程序存储区是独立的,指令长度可以任意,任何指令都可用一个字长来构成。
图3-9 冯·诺依曼体系结构
图3-10 哈佛双总线体系结构
3.单字节指令
PIC16F877A采用的单字节指令对单片机系统是一个革新性的变化。由于数据总线和指令总线的分离,8位机的指令总线可以不是8位,即可使用宽字位指令。高中低档的PIC单片机的指令位数分别为16位、14位、12位。
这使得寻址方式变得简单,PIC单片机只有4种寻址方式,而51单片机为7种;节省存储器空间,提高了代码压缩率,与同类单片机相比,相同的存储空间可以存储更多的指令。(www.xing528.com)
4.两级流水线指令结构
由于PIC系列单片机采用了前面所提到的哈佛总线结构,使用了两种不同位数的总线,因此取指令和执行指令有可能同时进行,所以在PIC系列微控制器中取指令和执行指令就采用指令流水线结构。
如图3-11所示,时钟振荡器电路产生的时钟信号,经内部4分频后形成4个不重叠的方波信号Q1~Q4四个节拍。由四个节拍构成一个指令周期TCYC,所以一个指令周期内部包括4个时钟周期。在前一个指令周期内完成取指操作,在后一个指令周期内完成指令的译码和执行操作。很明显CPU的效率提高了。
图3-11 两级流水线指令结构时序图
5.寄存器组结构
PIC的所有寄存器,包括I/O、定时器和程序计数器等均采用RAM结构形式,并且只需要一个指令周期就可以完成访问和操作而许多其他单片机则需要两个或以上的周期才能改变寄存器内容。
6.中断丰富
内置8级硬件堆栈,支持多种中断源。
PIC外部中断是一个边沿触发的中断。当INTEDG==1时上升沿触发,为0时下降沿触发。当引脚检测到有效的跳变沿时系统硬件自动将外部中断标志位INTF置1,终端服务程序执行完后,INTF不会有硬件自动清零,需编程清零。若在单片机进入睡眠状态前开启了外部中断使能,则外部中断可将芯片从睡眠中唤醒。唤醒后的程序去向取决于全局中断位GIE。
PIC16F87X系列单片机响应一个中断后,全局中断屏蔽位GIE被自动清零,不再受理其他一切中断申请;中断返回时,GIE自动置1。若想嵌套中断,则需在中断服务程序中将GIE手动置1。但PIC16F87X系列单片机的硬件堆栈深度为8级,故最多只能嵌套8级中断。
PIC16F87X系列单片机只有一个中断矢量(0004h),且各个中断源之间没有优先级的差别,也没有非屏蔽中断,故在进入中断服务程序时,必须通过检测所有开放中断的标志位来判断是哪个中断源。从检测中断标志位的顺序可以人为地设定优先级,先检查优先级高的,多个中断源同时发出中断申请时,即可按优先级逐项处理,或清除其他优先级较低的中断标志位。
不论中断屏蔽位的状态如何,只要中断源满足中断条件,中断标志位都会置位。在进行查表操作期间最好禁止中断响应,避免中断返回后跳转到错误地址。在对INTCON进行修改时,最好清零GIE,禁止响应一切中断,改完后再将GIE恢复为1。
7.功耗低
4MHz 3V时,耗电电流不超过6mA;睡眠模式下耗电电流低于1μA。
8.驱动能力强
I/O端口灌电流和拉电流最大可达25mA,可直接驱动二极管、光耦合器等器件。
9.片上看门狗(WDT)
无需外接专用看门狗芯片,节约硬件资源。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。