PIC单片机

ICSP(In-Circuit Serial Programming)即在线串行编程,通过保持RB6和RB7引脚为低电平,VDD 为编程电压,并将MCLR(VPP)引脚电压从VIL增加到VIHH,器件便进入编程/校验模式。此时,RB6为编程时钟线,RB7为编程数据线。在该模式下,RB6和RB7都是施密特触发器输入,当RB7驱动数据时,它是CMOS输出驱动。

复位后,为使器件进入编程/校验模式,程序计数器(PC)指向00h地址。然后可向器件发送一个6位的命令,根据这一命令是装入还是读出,14位编程数据将被提供给器件或是从器件中读出。但是在线串行编程模式下,看门狗定时器电路不能产生器件复位。

硬件电路

在线串行编程电路应该注意以下问题:

1)MCLR/VPP引脚与电路其它部分相隔离

通常设计中MCLR/VPP引脚与RC电路相连,上拉电阻接VDD,电容接地。VPP电压必须与电路的其它部分隔离,根据电容器的大小,RC电路可能影响ICSP的操作。因此当RC电路与MCLR/VPP相连时,可以使用了肖特基型二极管来隔离电路。当对PICmicro ® 单片机编程时,MCLR/VPP引脚将被同时驱动至大约13V,因此应用电路必须与编程器提供的编程电压隔离。

2)RB6和RB7的负载

RB6和RB7引脚用于PICmicro®单片机的串行编程。RB6是时钟线,RB7是数据线。RB6由编程器驱动,RB7是双向引脚,编程时由编程器驱动,校验时由PICmicro®单片机驱动。这两个引脚必须与电路的其它部分隔离,从而在编程时不会对信号产生影响。将RB6和RB7与电路其它部分隔离时必须考虑编程器的输出阻抗。隔离电路必须使RB6能够作为PICmicro®单片机的输入,而RB7能够作为双向引脚(PICmicro® 单片机和编程器都能驱动它)。

为简化接口设计,使用microchip推荐的I/O引脚的最佳方法:将RB6/RB7专用于ICSP;这些端口作为输出时,具有极轻的负载;采用隔离电路,使信号满足ICSP规范。

3)VDD、MCLR/VPP、RB6和RB7引脚的电容问题

编程引脚的总电容将影响编程器输出信号的上升速率。典型电路中,一般在VDD和地之间接有几百微法的滤波电容以抑制噪声和电源电压波动。但是这种电容需要编程器必须具有相当强的驱动能力,才能满足VDD上升速率的要求。大多数编程器只能对PICmicro®单片机进行编程,而不能驱动整个应用电路。一种解决方案是在编程器和应用电路之间加一块驱动电路板。驱动电路板有独立的电源,应该满足VPP和VDD引脚电压上升速率的要求,并可为整个应用电路供电。RB6和RB7是否需要缓冲取决于具体的应用。

4)VDD的最小和最大工作电压

Microchip 编程规范规定器件应在5V电压下编程。如果应用电路只能在3V电压下工作,那么需要一些特殊的措施。例如在编程时将PICmicro®单片机与其它应用电路完全隔离。另一个问题是,必须在应用电路的最小和最大工作电压下对器件进行校验。例如,在一个使用三个1.5V电池供电的系统中,其工作电压范围是2.7V到4.5V。而编程器必须在5V电压下对器件进行编程,并且必须在2.7V和4.5V电压下对程序存储器进行校验,以确保编程正确。这样可以保证PICmicro® 单片机在整个工作电压范围内都能正常工作。

5)PICmicro®单片机的振荡器

PIC单片机在代码执行前振荡器上电延迟定时器要等候1024个振荡周期。RC振荡器不需要上电延迟时间,因此不使用上电延迟定时器。编程器必须在RC振荡器振荡4次之前,令MCLR/VPP达到进入编程模式所需的电压。如果RC振荡器振荡了4次或4次以上,程序计数器将会增加到一个不确定的值X。如果这时器件进入编程模式,程序计数器不为零,编程器将从偏移量X开始烧写代码。有一些方法可以弥补MCLR/VPP的低上升速率问题。第一种方法是先不接RC振荡器的电阻,对器件编程后再接入R电阻。另一种方法是在编程时用编程接口将 PICmicro® 的OSC1引脚短接到地,这样在编程期间便不会产生振荡。

综合考虑以上情况,使用最简方式实现PIC18F4550的ICSP连接电路。在电路中,增加了由RD0和RD1口驱动的发光二极管,由此来验证烧写电路是否能够正常工作。

PIC单片机在线串行编程(ICSP)的实现

对于ICSP接口与PIKkit™ 3连接的如下图所示,必须使PIKkit™ 3与ICSP的引脚对应。
PIC单片机在线串行编程(ICSP)的实现

转自:markmin214

围观 8
22

我们把所设计的数据采集系统功能分解为三大部分:数据采集部分、数据通信部分、数据处理部分。

数据采集部分应包含:A/D转换器,时序、模式控制,数据缓冲功能。它应能接受来自主机的命令,按不同模式控制A/D转换器采集数据,暂存于数据缓冲区,再根据主机命令发给主机。这部分功能由一个单片机及接口来实现是最优方式。

数据通信部分应包含:简单、高效、通用的数据通信模式和软硬件支持。它应能在数据采集和数据处理两部分之间实现目前最好的连接和沟通。因为USB作为一种外部总线标准,用于规范电脑与外部设备的连接和通讯,并具有传输速度快,使用方便,支持热插拔,连接灵活,独立供电等优点,所以这部分功能采用USB接口连接最好。

数据处理部分应包含:强大、高效、通用、适应性好的软硬件支持平台。它应能完成主控和数据处理两大功能。主控就是根据用户需要,给数据采集部分下达命令,采集数据,同时管理数据通信部分,实现信息的上传下达,读取数据。数据处理就是要提供方便实用的数据的分析、处理、存储、显示、输出等各种应用功能,满足用户的尽可能多的需求。这部分功能自然非PC机莫属。

系统功能安排是:PC机作为主机(也称上位机),单片机(也称下位机)负责数据采集与缓冲保存,USB接口负责两者之间的数据通信。

具体工作流程是:PC机接收用户的应用命令,按系统功能配置数据采集参数,通过USB接口,给单片机发送控制命令,单片机按下达的命令控制A/D转换进行数据采集,并将采集到的数据作缓冲保存,采集好一批数据后,再按主机要求通过USB接口发送给PC机,PC机完成数据的存储、简单分析、处理、显示、输出等基本应用。更进一步还可以对数据进行格式转换,供其它专业数据处理软件作输入数据,实现更多高级数据处理功能。

MCU选型

为实现设计要求,微处理器必须含有具有A/D转换功能和USB通信功能的两个基本模块,以及其它实现拓展功能的模块。

基于PIC单片机USB接口的数据采集系统设计

上图所示为设想的功能板图,控制器通过它的功能模块与外围设备进行联系: USB模块与PC机连接,进行USB通信;A/D模块接模拟量输入,进行A/D转换;D/A模块接模拟量输出,产生输出波形;I/O接口外接输入输出;I2C模块与传感器等含I2C的器件连接,进行I2C通信;SPI模块与外围设备相连,使单片机与各种外围设备以串行方式进行通信以交换信息。

USB总线的数据采集方案一般有两种,一种是采用专用的USB通信芯片。另一种是利用具有USB接口功能的单片机。考虑到实际情况,本设计选用第二种方案。

PIC18F4550是Microchip公司生产的带全速USB接口的8位高档单片机,该单片机具有精简指令集、哈佛结构等特点,运行速度快、执行效率高。它的硬件资源非常丰富,并集成有多个功能模块: ICSP接口模块,可以通过PICkit™ 3与PC机联系,进行程序的烧写和调试;它的全速USB 2.0接口模块,可以方便、快捷的实现USB通信。

由此,我们选用PIC18F4550单片机来进行设计。它的优势在于:

1、利用它的USB接口,可以实现与PC机之间通信,不需要另加USB接口芯片。

2、利用它的ICSP模块,可以实现PC机对单片机进行程序的直接烧写,并进行在线调试。

3、能够让电路的设计更为简洁、实用,既提高了整个设计的安全性和可靠性,又降低整个系统的功耗。

4、Microchip公司提供了集成开发环境Mplab和汇编语言、C语言编译器,使我们在程序调试,模拟运行方面更容易、更方便快捷。Microchip公司同时还提供了USB通信的范例和demo子程序,使我们在使用USB通信功能时更加的简单、快捷。

围观 8
31

所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。

在设计引脚中断程序时,有三个需要特别注意的地方。

一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBIF标志位,为下一次中断做好准备。

二是,由于端口PORTB是引脚电子变化中断,即无论引脚出现上升沿还是下降沿都会产生中断请求,所以必须处理好不需要的虚假中断。

三是,一般都利用PIC单片机的引脚功能来检测按键,所以必须处理好按键消抖的问題。

在主程序里先设置有关的寄存器。

◇设置TRISB寄存器,使RB7~RB4相关的引脚处于输入状态;

◇如果需要弱上拉,通过OPTION_REG的第7位设置;

◇RBIF=O;

◇RBIE=1;

◇GIF=1。

响应状态变化后的中断服务程序。

◇检查RBIF是否为l,为l则是引脚变化引起的中断;

◇调用延时程序,延时20~30 ms,目的是为了按键去抖;

◇判断是引脚出现上升沿还是下降沿引起的中断;

◇调用按键处理程序;

◇读PORTB口的值,取消状态变化的硬件信号;

◇清除RBIF标志。

笔者认为上面程序设计最大的问题是在中断程序里调用延时程序。大家知道,中档PIC单片机只有8层深度的硬件堆栈,在中断里调用于程序出现极易堆栈溢出的情况。另外,PIC单片机中断程序人口只有一个,在响应中断的请求时,PIC单片机就会自动把全局中断的使能位(INTCON的第7位GIF)清除,这样其他中断就暂时不能被响应(此时,如果别的中断发出的中断请求,标志位将一直保留着),直到这个中断程序退出后才会得到响应。这就要求我们设计中断程序的时候必须尽量短,避免调用子程序,更不要在中断里进行复杂的运算。

下面给出笔者设计程序时的思路。

当引脚状态变化引起中断时,在中断子程序里首先判断引起中断的原因是不是我们需要的变化引起的中断。如果是,不要在这里延时,而是设置一个标志位,接着清除中断标志,退出中断。中断程序如下:

else if((RBIE&RBlF)==1){ //如果引脚变化引起中断

if(RB4==0){ //RB4上的按钮接地

key=1; //按键标志位置位

}

RBIF=0; //清除引脚中断标志位

}

其中,if(RB4==0)语句相当于读取了PORTB端口数据寄存器,取消了状态变化的硬件信号。

下面详细介绍怎么样进行按键去抖。

首先,在定时器中断里设置一个lms的时间基准标志位“SYSlms”,每到lms,“SYSlms”便置位。程序如下:

unsigned char count;

if((ToIE&TOIF)==1){ //定时器中断

TMRO+=0x09; //每250μs中断一次

if(count==4){

count=0;

SYSlms=l; //系统时间标志

couot++;

}

T0IF=0; //清除时钟中断标志位

}

有了这个时间基准,便可以在主程序里进行按键去抖处理了。为了更好地利用这个时间基准,定义一个消息标志SYSTime,笔者把它称作时间消息。为了让这个消息有自我发布和自我消失的功能.定义了如下一个宏:

bit SYSTime;

#defincTimeEnahle()SYSTime=0,if(SYSlms){SYSTime=l;SYSlms=0;)

可以把TimeEnable()放到主程序死循环的任何地方,每当程序执行这个宏,SYSTime就会清零,这就是标志位的自我消失.如果在定时器时间基准标志位SYSlms已经置位的话,SYSTime就会置1,这样别的程序就可以利用这个时间消息了,这就是消息的自我发布。下面就是利用这个时间消息来进行按键延时去抖的,首先看一下按键扫描子程序;

void seaakey(){

unsigned char KeyTime,KeyTask;//定义任务时间参数、

//任务参数

switch(KeyTask){

case0:if(key){

KeyTime=30; //准备延时30 ms

KeyTask++; //准备好下一个任务

kcy=0;

}

break;

case I:KeyTime--; //延时30 ms

if(KeyTime==0)Key+ask++;

break;

case2;if(RB4==o){

//调按键处理程序

KeyTask=0;

}

else KeyTask=0;//退出任务

break;

}

}

在主程序的死循环中这样用:

while(1){

TimeEnable();

If(SYSTime==1){scankey();)

//在此可以添加其他程序

只有有时问消息的时候才执行按键扫描程序。可以看到,进入扫描程序执行第一次的时候,程序首先判断按键标志位有没有置位,置位的话(也就是有按键按下的话),任务时间参数(KeyTime)赋值为30,这是延时30ms,去抖,当然你也可以设置为其他的时间值;同时任务参数 (KeyTask)加1。1ms后,再进入扫描程序,这个时候扫描程序执行casel的语句,这样30次后(延时了30ms),任务参数(KeyTask)加1,值为2。lms后,再进入扫描程序,将执行case 2的语句,首先在这里再次判断是不是按键还在按下,如果是就调按键的处理程序,如果不是。就退出按键扫描程序。在这里,还可以加入按键是否抬起的判断程序。

这样设计的引脚变化程序,CPU开销小,效率高,不会出现堆浅溢出的问题,提高了系统的实时性。

来源:畅学电子网

围观 6
95

在UPS等电力电子设备中,控制方法是核心技术。早期的控制方法使得输出为矩形波,谐波含量较高,滤波困难。SPWM技术较好地克服了这些缺点。

目前SPWM的产生方法很多,汇总如下:

1)利用分立元件,采用模拟、数字混和电路生成SPWM波。此方法电路复杂,实现困难且不易改进;

2)由SPWM专用芯片SA828系列与微处理器直接连接生成SPWM波,SA828是由规则采样法产生SPWM波的,相对谐波较大且无法实现闭环控制;

3)利用CPLD(复杂可编程逻辑器件)设计,实现数字式SPWM发生器;

4)基于单片机实现SPWM,此方法控制电路简单可靠,利用软件产生SPWM波,减轻了对硬件的要求,且成本低,受外界干扰小。

而当今单片机的应用已经从单纯依赖于51系列单片机向其它多种单片机发展,尤其以嵌入式PIC单片机的发展应用更为广泛。PIC单片机含具有PWM功能的外围功能模块(CCP),利用此模块更容易通过软件实现SPWM,且具有更快的执行速度。

本文采用软硬件结合设计的方法,利用面积等效法,并且基于PIC单片机实现对试验逆变系统的SPWM控制。

1、面积等效的SPWM控制算法:

目前生成SPWM波的控制算法主要有4种:
(1)自然采样法;
(2)对称规则采样法;
(3)不对称规则采样法;
(4)面积等效法。

理论分析后知自然采样法和面积等效法相对于规则采样法谐波较小,对谐波的抑制能力较强。又因为PIC单片机片内无较大空间实现在线运算,所以自然采样法不利于软件实现。本文的试验系统采用面积等效法实现SPWM控制,其原理如图1所示。

基于PIC单片机的SPWM控制技术

图1 SPWM面积等效算法 利用正弦波小块面积S1与脉冲面积S2相等原则,将正弦波的正半周分为N等分,则每一等分的宽度为π/N弧度,利用面积等效法计算出半个周期内N个不同的脉宽值,将产生的脉宽数列以列表形式存于PIC单片机的ROM中,以供程序调用。 脉宽产生的基本公式为
基于PIC单片机的SPWM控制技术

式中:M为调制度; N为载波比,即半个周期内的脉冲个数,实验中N取64; k取值为0~63。由式(1)计算出的实际脉宽转换成计时步阶后生成64个值的正弦表存入PIC的ROM中以供调用。产生的SPWM脉宽表是一个由窄到宽,再由宽到窄的64个值的表。

2、软硬件结合试验系统:

以PIC单片机内部的两个外围功能模块(CCP)为基础,利用该模块具有的PWM功能,软件控制两路SPWM波形的输出。再将这两路SPWM波利用互补导通原则变换成4路,经隔离放大后驱动IGBT逆变器,实现对输出的控制。

2.1 硬件设计

试验硬件系统如图2所示。

选择PIC单片机的中档系列,该系列单片机的主要特点有:

(1)具有高性能的RISCCPU;

(2)除程序分支指令为两个周期外,其余均为单周期指令,且仅有35条单字指令;

(3)8K%26;#215;14个FLASH程序存储器,368%26;#215;8个数据存储器(RAM)字节;

(4)中断能力强,达到14个中断源;

(5)外围功能模块丰富,含2个16位寄存器的CCP模块,具有PWM功能;

(6)含3个定时器,其中与PWM功能相关的定时器2(即TMR2)带有8位周期寄存器,且带有8位预分频器和后分频器。

基于PIC单片机的SPWM控制技术

图2 硬件试验系统 逆变部分采用自关断器件IGBT实现单相全桥逆变。IGBT是全控型电力电子器件,它的控制级为绝缘栅场效应晶体管,输出级为双级功率晶体管,因而它具有两者的优点而克服了两者的缺点。它开关频率相对高,驱动功率小,构成的功率交换器输出电压纹波小,线路简单,是当今最具有应用前景的功率器件。

2.2 软件设计

2.2.1 PIC单片机的设置

试验中设置SPWM的频率为20kHz,并外接20MHz晶振信号,计算得指令周期即计时步阶为0.2μs。PIC单片机CCP外围功能模块的PWM功能实现主要依靠相关寄存器值的设定,且以定时器2(TMR2)作为PWM的时基。

相关寄存器的设置如下:  

(1)SPWM周期的设定由寄存器PR2设定

(PWM)周期=(PR2+1)%26;#215;4%26;#215;Tosc%26;#215;(TMR2)预分频(4) 试验中Tosc为20MHz,为提高分辨率,TMR2预分频设为1:1,由此计算得PR2=0XF9;

(2)定时器TMR2的控制寄存器T2CON设定 因为SPWM频率高,周期短,在每个周期内完成脉宽的调整比较困难,故在此寄存器中设置后分频为1:3,这样每输出3个相同脉宽的SPWM波后改变一次脉宽值;

(3)2个CCP模块的控制寄存器CCP1CON及CCP2CON的设定 两个CCP模块控制寄存器的设置类似,选择CCP模块作用于PWM功能模式,即bit3:0=11ⅹⅹ。

(4)CCPR1L脉宽写入寄存器 写入的脉宽值在下个TMR2周期开始时转至CCPR1H,通过读CCPR1H的脉宽值来改变PWM脉宽。

(5)寄存器TRISC 对应于CCP1和CCP2的输入输出设置,应设置为输出形式,即TRISC的bit2:1=00。

2.2.2 SPWM波形产生的实现过程

软件控制PIC单片机使之产生SPWM波形?首先将之前设置的寄存器值写入相关寄存器,当PIC的PWM功能开启后TMR2从0开始计数,同时CCP模块引脚输出高电平。 当TMR2≥CCPR1L时,PWM功能引脚开始输出低电平。 当TMR2≥PR2时,则TMR2=0,重新开始另一个周期计数,PWM功能引脚开始输出高电平。同时TMR2的中断标志位被系统置高,即TMR2IF=1,转去执行中断服务程序。 因实验中设置TMR2后分频为1:3,故在3个PR2周期后程序才转去执行中断服务程序。在中断服务程序中查找脉宽表,将下一个脉宽值写入寄存器CCPR1L中。

下个周期输出的PWM的脉宽即为刚写入CCPR1L中的脉宽值,也就是说脉宽的变化在中断程序中实现,中断程序流程如图3所示。

基于PIC单片机的SPWM控制技术

图3 中断服务程序流程图 程序中利用标志位F实现SPWM输出在CCP1和CCP2中的转换。在F=1时,CCP1输出PWM波形,CCP2设置输出为0电平;在F=0时,CCP2输出PWM波形,CCP1设置输出为0电平。

3、试验结果与分析

由PIC单片机产生的SPWM波可由示波器测出。由于SPWM频率为20kHz,程序中又设置每3个脉宽相等,故在示波器中不能清楚地看到脉宽从最小到最大的完整的变化过程。由PIC单片机的CCP1引脚输出SPWM波形的一段如图4所示。

基于PIC单片机的SPWM控制技术

这段波形中的脉宽由窄逐渐变宽,符合SPWM的变化规律。 图4 SPWM波形的一段 试验中由PIC单片机的两个CCP模块产生两路SPWM波,将这两路SPWM波变换成4路后经隔离驱动逆变系统的IGBT。产生的两路SPWM波形分别对应正弦波的正负半波,完整周期的两路SPWM互补波形如图5所示。
基于PIC单片机的SPWM控制技术

图5 两路互补的SPWM波 试验系统在直流电压为30V时负载运行所得正弦波如图6所示,可知周期为19.9ms,满足工频要求。
基于PIC单片机的SPWM控制技术

图6 负载正弦波 试验系统为单相全桥逆变系统,这种工作模式有明显的倍频效应。倍频效应有利滤波,也可以降低器件的开关频率,减小开关损耗。又因为本试验系统采用面积等效法,相对于规则采样法谐波抑制能力较强。谐波分析后可在低电压时基本无偶次谐波,且所含奇次谐波幅值较小,能满足UPS逆变系统对谐波的要求。

4、结语

本文介绍的基于PIC单片机的SPWM控制技术很好地把软硬件技术结合在一起,针对规则采样法谐波大的缺点,利用面积等效法较好地抑制了谐波。本文给出了具体的硬件试验系统及软件设计,分析试验结果波形后表明此方法输出谐波较小,在对输出波形质量要求较高的UPS逆变系统中有较强的实用价值。如今PIC单片机应用越来越广泛,电力电子技术发展越来越快速的阶段,这种软硬件结合的控制技术在其它很多应用领域也有较大的发展空间。

转自:博客园 - 奔流聚海

围观 5
99

一、引言

当前,能源已成为制约很多国家发展的瓶颈,特别是广大发展中国家,能源紧缺现象逐步凸现,世界各国对石油资源的争夺不断加剧,甚至引发局部战争;作为最大的发展中国家,我国必须在实现能源来源多元化的同时,加强对已有资源的有效管理和使用,杜绝浪费和无效流失现象。传统的人工加油的方式由于受人的影响较大,不仅加油量误差较大,且容易造成少加、错加、加冒等人为差错。

而该系统的优点:
1、精确定量加油
2、节约人力
3、节约时间
4、安全可靠
5、体积小
6、成本低廉;可有效避免传统加油方式的缺点。

二、工作原理

本论文所设计的精确加油系统是在传统加油管上安装智能测控系统而构成的,该测控系统主要由PIC单片机、IC卡、计量电路、电控系统以及油路控制阀、漏电检测与报警电路系统等组成。 当用户将含有油量(以加密数值形式表示)的IC卡插入表内时,控制阀在电控系统控制下开通油路。飞机每用一个计量单位,计量电路便发出一组等周期计量脉冲序列,该脉冲序列如经电控系统判定为有效,即可以从油量中减去一个计量单位,并通过液晶模块显示表内剩余油量。当剩余油量为零时,控制阀自动关闭,油路即被切断,此时须重新持卡充值。在正常情况下控制阀处于接通态,只有当特殊事件发生时控制阀才从接通态变为关闭态。

三、硬件规划

精确加油系统由低功耗单片机(PIC16C57)、IC卡读写控制电路、EEPROM存储电路、液晶显示、电源电压监测电路、电源保护电路、漏电检测及报警电路等组成。

硬件系统总体规划如下图所示:

PIC单片机在飞机加油系统中的应用分析

1、 PIC单片机及电路组成

PIC单片机是MicroChip公司近年来推出的新型单片机系列。它采用先进的RISC技术,具有低价格、低功耗、高性能、全静态、易使用等特点,目前已在仪器仪表、工业自动化、计算机通讯以及民用产品等领域得到广泛应用。本设计中采用了PIC系列中的主流型号PIC16C57作为电路系统的控制核心。该单片机在静态时处于低功耗睡眠状态,功耗小于3uA。当接收到计量脉冲或有IC卡操作时,单片机由睡眠态转为工作状态。在本系统中,单片机通过C5、C6口以I2C总线方式对IC卡进行读写操作,以模拟I2C方式与存储器IC2进行数据通讯,并通过B2、B4口分别获取实时电池电压及电源保护信号,通过输出口B6、B7控制电控阀动作,通过输出口A0、A1驱动汉字液晶模块。

2、IC卡及读写电路

IC卡由于具有存储容量大、数据保密性好、抗干扰能力强、操作速度快等突出优点,近年来在世界范围内得到广泛应用。本系统采用符合ISO7816国际标准的IC卡,用于可靠存储用户密钥、油量、用油记录等关键数据。单片机通过IC卡读写电路完成对IC卡信息的读写,本读写电路在卡口保护、辅助伪卡识别、确保准确安全读写IC卡信息等方面都进行了精心而合理的设计。

3、EEPROM存储电路

EEPROM存储器IC2采用24LC02B芯片,该芯片可以在无电源状态下长期可靠存储系统内重要数据,工作寿命可达106次。当用户卡插入系统时,卡内密码、卡号、油量及用户用油记录等关键数据将以密文形式存储在24LC02B芯片中。

4、液晶显示

液晶显示电路采用PHILIP标准I2C通讯块制作,可汉字显示欠压、充值、关阀、卡误和油量五种信息状态及其任意组合。

5、电源电压监测电路

系统采用S80751芯片进行电压实时监测,当系统电池电压在正常值时,S80751的输出1脚为高电平;当电池电压低于保护值时,该芯片的1脚变为低电平,单片机检测到该信号后,即控制液晶模块显示欠压,以提醒用户更换电池。

6、电源保护电路

为有效保护系统电源,本电路可对电池盒位置进行高灵敏检测。当电池盒被拉开时,保护电路输出低电平,单片机监测该信号后,即控制阀门使其关断。直到电池安装好并将电池盒推入表内正常位置时,单片机才会再次控制阀门使重新开阀供油。

7、漏电检测及报警电路

由于电控系统工作场合复杂,因此需具备漏电检测与报警功能。漏电检测由漏电检测线圈的输出经整形后输入到RC6口,电路原理图如图 (a)所示。当漏电流超过一定阈值时,比较器输出低电平,否则保持高电平,再通过一单稳态触发器电路产生如图 (b)所示波形,低电平保持时间t可由单稳态触发器进行调整设定。在本系统中t为10ms,由于PIC16C57没有中断功能,因此程序中必须每隔一定时间(小于10ms)对RC6口进行查询,以检测是否漏电,一旦检测到RC6变低,经过确认后进行报警,同时关闭控制阀。PIC16C57本身具有看门狗定时器,当系统出现异常时,能自动进行掉电保护和系统复位。

PIC单片机在飞机加油系统中的应用分析
图 (a)电路原理图

PIC单片机在飞机加油系统中的应用分析
图 (b)波形图

四、系统软件设计

系统软件采用PIC16C5X精简指令集编写。软件设计紧密结合精确加油系统的工作原理,充分体现了对PIC单片机对信息读写、卡类型判断、计量信号判断与数据处理、电压监测、电源保护和漏电监测及报警的实时控制功能。

系统流程框图如图所示。

PIC单片机在飞机加油系统中的应用分析

五、结束语

经过调试,本设计能够在脱离在线仿真器的情况下,上电后独立的运行程序,并能在PC机软件的控制下,实现对IC卡中任意位置的读写,其中读写的起始地址、读写数据的个数以及数据内容可以在PC机端输入或选择。 本设计硬件电路简单,功能齐全,加油精确定量,安全可靠且体积小、成本低廉,是加强部队油料管理的绝佳选择。

最后需要指出的是,本设计不仅可以用于飞机加油系统中,还可以应用到部队和地方与油料相关的所有系统中,虽然其具体应用到与油料相关的系统中还要根据具体环境和需要做进一步的规划和改进,但是其基本的应用价值已得到体现,希望其优良的性能能够为部队和地方的油料资源管理作出贡献。同时如果该系统能应用于地方加油站,就能大大简化加油站人力、物力,实现精确加油,避免浪费现象,为节约能源和提高效率做出贡献。

来源:广电电器

围观 5
130

八位单片机由于内部构造简单,体积小,成本低廉,在一些较简单的控制器中应用很广。即便到了本世纪,在单片机应用中,仍占有相当的份额。由于八位单片机种类繁多,本文仅将常用的几种在性能上作一个简单的比较,供读者在使用时作参考。

1. 51系列

应用最广泛的八位单片机首推Intel的51系列,由于产品硬件结构合理,指令系统规范,加之生产历史“悠久”,有先入为主的优势。世界有许多著名的芯片公司都购买了51芯片的核心专利技术,并在其基础上进行性能上的扩充,使得芯片得到进一步的完善,形成了一个庞大的体系,直到现在仍在不断翻新,把单片机世界炒得沸沸扬扬。有人推测,51芯片可能最终形成事实上的标准MCU芯片。

51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。虽然其他种类的单片机也具有位处理功能,但能进行位逻辑运算的实属少见。51系列在片内RAM区间还特别开辟了一个双重功能的地址区间,十六个字节,单元地址20H~2FH,它既可作字节处理,也可作位处理(作位处理时,合128个位,相应位地址为00H~7FH),使用极为灵活。这一功能无疑给使用者提供了极大的方便,因为一个较复杂的程序在运行过程中会遇到很多分支,因而需建立很多标志位,在运行过程中,需要对有关的标志位进行置位、清零或检测,以确定程序的运行方向。而实施这一处理(包括前面所有的位功能),只需用一条位操作指令即可。

  例1:如对21H的第0位(相应位地址为08H)置位,只需用一条位指令,
   SETB08H
  对周围的其他位不会产生影响。
  有的单片机并不能直接对RAM单元中的位进行操作,如AVR系列单片机中,若想对RAM中的某位置位时,必须通过状态寄存器SREG的T位进行中转。
  例2:如对RAM中的R0寄存器的第4位置位,则
  BSET6 ;状态寄存器T置位
  BLD R0, 4 ;将T位复制到R0的第4位
  显然,后者比前者要复杂。

51系列的另一个优点是乘法和除法指令,这给编程也带来了便利。八位除以八位的除法指令,商为八位,精度嫌不够,用得不多。而八位乘八位的乘法指令,其积为十六位,精度还是能满足要求的,用的较多。作乘法时,只需一条指令就行了,即 MULAB(两个乘数分别在累加器A和寄存器B中。积的低位字节在累加器A中,高位字节在寄存器B中)。很多的八位单片机都不具备乘法功能,作乘法时还得编上一段子程序调用,十分不便。

  在51系列中,还有一条二进制-十进制调整指令 DA,能将二进制变为BCD码,这对于十进制的计量十分方便。而在其他的单片机中,则也需调用专用的子程序才行。

Intel公司51系列的典型产品是8051,片内有4K字节的一次性程序存储器(OTP)。Atmel公司就将其改为电可改写的闪速存储器(Flash),容许改写1000次以上,这给编程和调试带来极大的便利,其产品AT89C51、AT89C52 ……等成为了当今最流行的八位单片机。

51系列的I/O脚的设置和使用非常简单,当该脚作输入脚使用时,只须将该脚设置为高电平(复位时,各I/O口均置高电平)。当该脚作输出脚使用时,则为高电平或低电平均可。低电平时,吸入电流可达20mA,具有一定的驱动能力;而为高电平时,输出电流仅数十μA甚至更小(电流实际上是由脚的上拉电流形成的),基本上没有驱动能力。其原因是高电平时該脚也同时作输入脚使用,而输入脚必须具有高的输入阻抗,因而上拉的电流必须很小才行。作输出脚使用,欲进行高电平驱动时,得利用外电路来实现(见附图),I/O脚不通,电流经R驱动LED发光;低电平时,I/O脚导通,电流由该脚入地,LED灭(I/O脚导通时对地的电压降小于1V,LED的域值1.5~1.8V)。

51系列I/O脚使用简单,但高电平时无输出能力,可谓有利有弊。故其他系列的单片机(如PIC系列、AVR系列等)对I/O口进行了改进,增加了方向寄存器以确定输入或输出,但使用也变得复杂。

一些简装的51产品也相应出现,如Atmel公司的AT89C1051、AT89C2051、AT89C4051等(闪速存储器分别为1K、2K、4K等,但不能外接数据存储器),指令系统与AT89C51完全兼容,但引脚均为20脚,不光体积小,而且价格低廉,这使得其他的公司竞相仿照。

不过,原51系列也有许多值得改进之处,如运行速度过慢等。当晶振频率为12MHz时,机器周期达1μs,显然适应不了现代高速运行的需要。华邦公司(Winbond)生产的产品型号为W77系列和W78系列,W78系列与AT89C系列完全兼容。W77系列为增强型,对原有的8051的时序作了改进,每个机器周期从12个时钟周期改为4个周期,使速度提高了三倍,同时,晶振频率最高可达40MHz。W77系列还增加了看门狗WatchDog、两组UART、两组DPTR数据指针、ISP等多种功能。

特别是双数据指针,能给编程带来很大的便利。在51系列中,数据指针DPTR是片内与片外的数据存储器打交道的主要途径(由片外数据存储器读入片内累加器A或由片内累加器A 写入片外数据存储器),也是程序存储器与累加器A之间的数据传送的必由之路。由于频繁的数据交换,特别是数据块的搬运和比较,数据指针非常吃紧,它需要不断地实施现场保护与还原,不光编程变得复杂,而且运行速度也减慢。而当采用两个数据指针时,可以各负其责,互不相扰,轻松地完成上述过程。两个数据指针的选取取决于特殊功能寄存器AUXR1的第D0位DPS。当DPS为0时,选中数据指针DPTR0(复位时DPS也为0);DPS为1时,选中数据指针DPTR1。DPS位不能位寻址,故不能进行布尔操作,但由于AUXR1的D1位被强制为逻辑“0”,不可能发生由D0位向D1位进位之可能,因而可以通过对AUXR1进行增1来使D0位由0变为1或由1变为0,从而达到双数据指针的快速切换的目的,如:

  例3:
  MOVAUXR1,#0 ; DPS为0,DPTR0有效
   ……
  INC AUXR1 ; DPS为1,DPTR1有效
   ……
   INC AUXR1 ; DPS为0,DPTR0有效
   ……

ISP功能能实现在系统可编程,可以省去通用的编程器,单片机在用户板上即可下载和烧录用户程序,而无需将单片机从生产好的产品上取下。未定型的程序还可以边生产边完善,加快了产品的开发速度,减少了新产品因软件缺陷带来的风险。由于可以将程序下载并观看运行结果,故也可以不用仿真器。

单片机的提速运行、双数据指针及ISP功能并非是W77系列所特有的,一些新的型号的51系列产品大都有该功能,如Philips的51LPC系列、AT89系列中的某些型号、STC89C系列等等。有的单片机还附有A/D、D/A转换、片内EEPROM数据存储器、PWM输出、I2C总线、上电复位检测、欠压复位检测等等,这些新系列的单片机,它们都兼容8051的指令系统。增强功能的实现,大都是由片内新增的特殊功能寄存器来进行设置,这些寄存器被安排在片内特殊功能寄存器区间(80~FFH)的预留地址上。

比较有代表性的产品还有STC89C51RC、C8051F331/330等等。可以这么说,新的51产品几乎可以涵盖所有新的功能。由于新型号的芯片种类太多,此处不可能一一列举,读者可根据使用的需求查阅相关的资料.

2.PIC系列

PIC单片机系列是美国微芯公司(Microship)的产品,是当前市场份额增长最快的单片机之一。CPU采用RISC结构,分别有33、35、58条指令(视单片机的级别而定),属精简指令集。而51系列有111条指令,AVR单片机有118条指令,都比前者复杂。采用Harvard双总线结构,运行速度快(指令周期约160~200ns),它能使程序存储器的访问和数据存储器的访问并行处理,这种指令流水线结构,在一个周期内完成两部分工作,一是执行指令,二是从程序存储器取出下一条指令,这样总的看来每条指令只需一个周期(个别除外),这也是高效率运行的原因之一。此外,它还具有低工作电压、低功耗、驱动能力强等特点。

PIC系列单片机共分三个级别,即基本级、中级、高级。其中又以中级的PIC16F873(A)、PIC16F877 (A) 用的最多,本文以这两种单片机为例进行说明。这两种芯片除了引出脚不同外(PIC16F873(A)为28脚的PDIP或SOIC封装;PIC16F877(A)为40脚的PDIP或44脚的PLCC/QFP封装),其他的差别并不很大。

PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器(TRISn , 其中n对应各口,如A、B、C、D、E等),从而解决了51系列I/O脚为高电平时同为输入和输出的状态。当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点,它可以直接驱动数码管显示且外电路简单。它的A/D为10位,能满足精度要求。具有在线调试及编程(ISP)功能。

该系列单片机的专用寄存器(SFR)并不像51系列那样都集中在一个固定的地址区间内(80~FFH),而是分散在四个地址区间内,即存储体0(Bank0:00~7FH)、存储体1(Bank1 :80~FFH)、存储体2(Bank2 :100~17FH)、存储体3(Bank3 :180~1FFH)。只有5个专用寄存器PCL、STATUS、FSR、PCLATH、 INTCON在4个存储体内同时出现。在编程过程中,少不了要与专用寄存器打交道,得反复地选择对应的存储体,也即对状态寄存器STATUS的第6位(RP1)和第5位(RP0)置位或清零。如:

  例4:
  CLRFSTATUS ;清零RP1, RP0。选择存储体0
   ……
  BSF STATUS,RP0;置位RP0。选择存储体1
   ……
  BCF STATUS,RP0;清零RP0。选择存储体0
   ……

这多少给编程带来了一些麻烦。对于上述的单片机,它的位指令操作通常限制在存储体0区间(00~7FH)。

数据的传送和逻辑运算基本上都得通过工作寄存器W(相当于51系列的累加器A)来进行,而51系列的还可以通过寄存器相互之间直接传送(如:MOV 30H,20H;将寄存器20H的内容直接传送至寄存器30H中),因而PIC单片机的瓶颈现象比51系列还要严重,这在编程中很有感受。

3.AVR系列

AVR单片机是Atmel公司推出的较为新颖的单片机,其显著的特点为高性能、高速度、低功耗。它取消机器周期,以时钟周期为指令周期,实行流水作业。AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指令的读取。通常时钟频率用4~8MHz,故最短指令执行时间为250~125ns。该系列的型号较多,但可用下面三种为代表:AT90S2313(简装型)、AT90S8515、AT90S8535(带A/D转换)。

通用寄存器一共32个(R0~R31),前16个寄存器(R0~R15)都不能直接与立即数打交道,因而通用性有所下降。而在51系列中,它所有的通用寄存器(地址00~7FH)均可以直接与立即数打交道,显然要优于前者。

AVR系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在AVR中,没有像51系列的数据指针DPTR,而是由X(由R26、R27组成)、Y(由R28、R29组成)、Z(由R30、R31组成)三个16位的寄存器来完成数据指针的功能(相当于有三组DPTR),而且还能作后增量或先减量等的运行,如:

  例5:
  LDRd, X ;将X所指的地址的内容装入寄存器Rd中。
  LDRd,Y+;将Y所指的地址的内容装入寄存器Rd
   中,然后Y的地址增1。
  LDRd,-X ;将X的地址减1所指的地址的内容装入
   寄存器Rd中。

在51系列中,所有的逻辑运算都必须在A中进行;而AVR却可以在任两个寄存器之间进行,省去了在A中的来回折腾,这些都比51系列强。

AVR的专用寄存器集中在00~3F地址区间,无需像PIC那样得先进行选存储体的过程,使用起来比PIC方便。AVR的片内RAM的地址区间为0060~$00DF(AT90S2313) 和 0060~025F(AT90S8515、AT90S8535),它们占用的是数据空间的地址,这些片内RAM仅仅是用来存储数据的,通常不具备通用寄存器的功能。当程序复杂时,通用寄存器R0~R31就显得不够用;而51系列的通用寄存器多达128个(为AVR的4倍),编程时就不会有这种感觉。

AVR的I/O脚类似PIC,它也有用来控制输入或输出的方向寄存器,在输出状态下,高电平输出的电流在10mA左右,低电平吸入电流20mA。虽不如PIC,但比51系列强。

以上的三种AVR型号其管脚与对应的51系列兼容,如AT90S2313与51系列的AT89C2051的管脚兼容(PDIP-20脚),AT90S8515、AT90S8535与51系列的AT89C51兼容

转自: eepw.com

围观 7
903

1 PIC 单片机 简介

PIC系列 单片机 是美国Microchip技术公司推出的高性能价格比的8位嵌入式控制器(Embedded Controller),它采用了精简指令集计算机RISC(Reduced Instruction Set Computer)和哈佛(Harvard)双总线以及两级指令流水线结构。具有高速度、低工作电压、低功耗等特点和优良的性能价格比,因而PIC系列单片机越来越受到单片机开发与应用工程技术人员的青睐。该系列独特的结构和中断资源使其在使用时与其它系列的单片机有许多不同之处。下面以PIC16CXX系列微控制器为例来介绍PIC系列单片机的中断资源特点以及应用方法。

2 中断资源的开发与屏蔽

PIC单片机的中断资源及应用

图1是PIC16C64/64A/65/65A的中断逻辑电路图,其它型号芯睡的中断资源也大致相同,只是资源多少不一而已,但它们的中断入口只有一个(入口地址在004H)。PIC 单片机 的中断大致可以分为两类。
第一类是由中断控制器INTCON直接控制的中断,包括外部引脚中断INT的RB口电平变化中断以及定时器TMRO溢出中断,它们的中断允许位和中断标志都在INTCON寄存器中。引脚中断INT和定时器TMRO溢出中断与其它微处理器相同。RB口电平变化中断是PIC 单片机 特有的中断,当把RB口高4位I/O口线设置为输入时,只要这4位I/O口线上的电平发生变化就会引起中断。RB口的电平中断特性对用户是非常有用的。用户可以直接利用这些口线的关键部位进行电平检测,并可利用中断进行保护性控制等操作;另一方面,电平中断特性还可以利用RB口的软件控制弱上拉特性组成一个矩阵键盘,并用按键唤醒CPU,这对于那些以电池供电的系统特别有用。

另一类是外围接口中断,包括定时器TMR1溢出中断、TMR溢出或匹配中断、同步串行口中断、异步串行口中断、并行从动口中断和CCP(Capture/Compare/PWM)中断等,而带A/D功能的PIC16C7X系列微处理器还有A/D转换完成中断。这些中断的允许位分别在PIE1和PIE2寄存器,而中断标志则分别在PIR1和PIR2中。

所有的中断都有自己的中断允许位和中断标志,外围接口中断不仅受各自的中断允许位控制,同时还共同受外围中断控制允许位的控制。全局中断允许位GID能够控制所有的中断。无论全局中断允许位GIE和相应的中断允许位状态如何,只要满足中断条件,各个中断标志位都会被置1。与其它微处理器不同的是:当CPU响应中断时全局中断允许闰GIF会自动被清零,中断标志位不能用硬件清零而只能用软件清零;当执行中断返回指令RETFIE时,全局中断允许位GIE会被自动置1而重新开放中断。因此,在重新开放中断之前要用软件清零有关的中断标志位,以避免产生不断地中断请求而反复进入中断。由于全局中断允许位GIE会被中断服务程序(RETFIE指令)自动置1,因此用软件清零GIE并不可靠,这一点要特别注意。用下面的程序可确保整个中断被禁止。
***************
LOOP BCF INTCON,GIE ;禁止整个中断
BTFSC INTCON,GIE ;判断全局中断是否被禁止
GOTO LOOP ;否,重新清零
…… ;继续
***************
对于外部中断事件,例如:INT引脚中断和RB口引脚电平变化中断等为边沿触发,因此,CPU在响应中断时对外部信号的要求并不苛刻。一般情况下,中断花费的时间需要3或4个指令周期,确切时间取决于中断事件发生的时刻而与指令本身的周期数无关。

3 中断的优先级

PIC系列 单片机 只有一个中断入口(004H),所有的中断都通过该入口进入中断服务子程序,至于是哪一个中断源,只有在进入中断服务子程序后查询中断标志才能确认。该单片机没规定中断的优先级,也没有用于设定中断优先级的寄存器,中断的优先级是由于中断服务子程序中断查询中断标志的顺序确定的。CPU响应一个中断并进入中断服务程序后,全局中断允许位GIE被自动清零,CPU在此期间不响应其它中断,也不能形成中断嵌套。因此,在使用中断时要合理安排查询中断标志的顺序,尽量缩短CPU在中断服务程序中逗留的时间。在用PIC系列单片机构成系统时应尽量减少中断源的个数,对于那些执行时间较长且不需采用中断方式来处理的事件,应尽量采和查询标志的方式进行处理;对于那些必须采用中断方式处理的事件,在中断服务程序中要尽量先查询对系统至关重要的事件的中断标志。另外,在退出中断服务程序时,只清除处理过的中断标志即可,而不需要将所有的中断标志清除。对于RB口电平变化中断,一方面要保存RB口每次变化后的状态,以便在下次中断时判断是哪根口线上的电平发生了变化;另一方面可以设置产生中断的口线标志,并将由于该中断而未执行的程序在中断服务程序外通过查询口线标志来执行,以减少CPU在中断服务程序中逗留的时间。

4 程序跨页时的中断处理

PIC系列 单片机 的程序存储空间是分页处理的,每页空间的大小为512字节到4k字节不等。页程序计数器PC是一个13位宽的增量寄存器,其低8位PCL是一个可读/写寄存器,其高字节PCH(有效位为5位)不能直接进行读/写操作,它通过一个8位保护寄存器PCLATH把高5位地址传递给程序计数器的高字节。当一个中断被响应时,PC中的断点地址自动被压栈(PUSH)保护;而当执行RETFIE指令时,堆栈中的断点地址回弹到(POP)程序存储器PC中。无论是压栈操作还是出栈操作,它们都不影响PCLATH寄存器的内容。同时,CPU响应中断并跳转到中断入口地址时,都只能在本页内跳转而不影响PLCATH寄存器的内容。另外,在中断入口安排的是GOTO语句,而GOTO语句也只能在本页跳转。当中断服务程序存放在程序存储器的第一页且CPU在执行非第一页内程序时,响应中断将导致中断入口地址和中断返回地址错误而引起程序混乱。下面以PIC16C65A来说明这个问题的解决办法。

PIC16C65A的片内程序存储器为4k,分为两页,每页2k。假设中断服务程序存放在第一页(0000H-07FFH),通常这样做是因为中断入口地址在第一页,因而可以减少程序量)。那么,具体程序如下:

***************
ORG 0000H
0000H GOTO START
ORG 0004H
***************
0004H GOTO PRO-INT
ORG 0005H
0005H START ……
……
0234H PRO-INT……
……
RETFIE
***************

通过汇编程序编译可知,在程序存储器0004H单元存放的代码是2A34H,当CPU在程序存储器第一页响应中断时,程序先跳到0004H,然后跳到0234H执行,正常进入中断,执行完后能正常返回。当CPU在程序存储器第二页响应中断时,由于PCLATH的D4D3(页选择位)为01,CPU4执行“GOTO PRO-INT”时的代码虽然是2A34H,但程序不是跳到0234H执行,而是跳至0A34H执行。显然,程序执行错误。

解决这一问题的方面是在程序存储器0A34H处安排一段程序,在中断程序结束时判断CPU响应中断时程序所处的位置,从而使程序根据该信息合理设置页选择位,然后再返回中断。

******************
ORG 0A34H
BSF RAM,b ;设置在程序执行到第二页时CPU响应中断的标志
BCF PCLATH,3 ;将PC切换到第一页
GOTO PRO-INT ;程序跳转到中断服务程序
*******************
在指令RETFIE前应增加的程序如下:
******************
BTFSC RAM,b ;判断CPU响应中断前程序所在位置
BSF PCLATH,3 ;设置页选择位
RETFIE
******************

以上程序中的RAM是一个内存单元,b是该单元的某一位,该位在程序初始化时清零,CPU在执行程序存储器第二页的程序并响应中断时该位置“1”。经过上述处理,CPU不管在程序存储器第一页还是第二页响应中断,都能正确进入中断服务程序并能正确返回中断前的地址。

5 利用中断唤醒CPU

PIC系列 单片机 具有休眠(SLEEP)省电工作模式,当执行一条SLEEP指令后,芯片就进入低功耗休眠模式。进入休眠状态后,主振荡器停止工作,此时芯片消耗的电流极低(在3V工作电压,32kHz时钟时典型值约1μA),这一特点对于电池供电的系统非常有利。利用中断可以将CPU从休眠状态唤醒。这些中断源包括外部INT引脚中断、RB口引脚电平改变中断和部分外围接口中断。用于唤醒休眠状态的CPU外围接口中断有:工作在异步计数器方式下的TMR1中断、SSP起始/停止位检测中断、CCP捕捉方式中断和从动并行口读写中断。其它外围接口中断因需要片内Q时钟而无法产生中断。

利用中断事件唤醒CPU与全局中断允许位GIE无关,任意一个中断允许位置1的中断源,只要产生中断就会将相应的中断标志置1,芯片将立入中断服务程序与全局中断允许位GIE的状态和紧接SLEEP指令后的那条指令有关。由于PIC系列 单片机 采用了两级指令流水线结构,在执行SLEEP指令时,下一条指令已预先取出,因此在GIE位为0时,芯片被唤醒后首先执行预先取出的那条指令;如果GIE位为1,则芯片被唤醒后执行预先取出的那条指令后紧接着转入中断入口地址再执行中断服务程序。在这种情况下,应在SLEEP指令后安排一条空操作指令NOP,以便CPU被唤醒后能立即进入中断服务程序。

总之,PIC系列单片机 是一种性能价格比很高的微控制器,正确、合理地使用其中断资源可以使系统更加完善,工作更加稳定。

来源: 电子工程世界

围观 21
543
订阅 RSS - PIC单片机