每次按键中断,程序让TIME清0。因此,只有在5分钟内都没按键,TIME才有可能达到3000。只有当TIME值大于3000时才让单片机进入休眠状态,即在定时器中断时,如果TIME的值超过3000就进入休眠。
有两种模式,睡眠和空闲。利用单片机汇编指令“SLEEP”来进入模式。在MPLAB里面的C语言语句是asm("SLEEP")//也可能是单引号。输入SLEEP指令之后,
OSCCON寄存器里面的IDLEN标志位会影响单片机具体是进入睡眠还是空闲模式。
我说的是pic18f4520的情况。pic12、pic18系列我都用过SLEEP这个指令。应该都差不多。如果我说的不行,那你要自己去查你那款单片机的手册了。更高级的pic也有用PWRSAV这个指令的,例如pic33e/f。
有问题可以再交流
PIC8位单片机的基本组成
PIC系列8位单片机为适应各种不同的用途,有多种型号可供选用。但是,尽管PIC单片机有不同的档次和型号,但其最基本的组成则大同小异。因此,在这里先从型号PIC16F84的单片机入手,讨论其基本组成。PIC16F84是双列直插式(DIP)塑料封装,最大时钟频率可达4MHz。现为Microchip公司的独家产品,关于其具体技术指标,可查阅该公司的产品手册,或在网址www.microchip.com上查找。
PIC16F84单片机的引脚排列可参阅本期本版的16F8X系列简介一文。本文的附图是该器件的主要组成部分。PIC16F84虽然体积不大,但仍然是一个完整的计算机,它有一个中央处理器(CPU)、程序存储器(ROM)、数据寄存器(RAM)和两个输入/输出口(I/O口)。
和其它品种的单片机一样,CPU是此单片机的“首脑”,它从程序存储器中读取和执行指令。在取指和执行时,还可同时对数据寄存器进行取数(前已介绍PIC16F84采用哈佛结构)。由附图可明显看出,程序存储器和数据存储器各有一条总线与CPU相连。有些CPU将CPU内部的寄存器与其外部的RAM是分开管理的,但PIC单片机不是这样,它的通用数据RAM也归为寄存器,称为File寄存器。在PC16F84中,有68个字节的通用RAM,其地址为0CH~4FH。
除了通用数据寄存器外,还有一些专用寄存器,其中最常用的工作寄存器为“W寄存器”。CPU将工作数据存放在W寄存器中。寄存器W的作用与其它单片机中的“累加器A”相似。此外,还有几个专用寄存器,它们分别以某种方式控制PIC的运作。
PIC16F84的程序存储器是由Flash(闪速)EPROM构成,它可用电来记录和擦除,而在断电时,仍可保留其内容。PIC单片机有些型号的程序存储器用的是EPROM,需要用紫外线来擦除;还有一些型号是一次性可编程(OTP)的产品(一经编程便不能再擦除)。
PIC16F84有两个输入/输出口,即A口和B口。每个口的每个引脚可单独设定为输入或输出。各个口的位是从0开始编号的。当A口为输出方式时,其第4位(即RA4)为开路集电极(或开路漏极)输出,而B口及A口其它各位为常规的全CMOS驱动电路。这些功能必须注意,否则会在编程时出错。CPU对每个端口都按一个字节8位来处理,但A口只有5位引脚。
PIC输入与COMS兼容,所以PIC输出可驱动TTL或CMOS逻辑芯片。每个输出引脚可以流出或吸入20mA电流,即使一次只用了一个引脚亦是如此。
摘 要:在介绍空调室内机控制器功能的基础上,从软件的规划着手,详细介绍了室内机软件的总体设计过程、详细设计过程以及编码的实现,并在此基础上重点给出了空调室内机运行模式的特点和结合这些特点如何用MPLAB集成开发环境去实现各运行模式。
关键词:空调;控制器;单片机;软件设计
单片机软件实现是单片机系统应用的重点,他是在硬件设计基础上实现程序设计的重要环节。单片机程序设计一般包括以下几个步骤:软件规划、流程图编制、代码编写。由于单片机系统具有软硬件紧密结合的特点,因此在基于某种单片机系统的软件开发时,应充分了解该系统实现的硬件环境,同时也应该在系统设计与硬件设计阶段,对软件设计有一个大体的规划。因此,本文在介绍室内机控制器功能的基础上,重点讨论如何用软件实现该室内机的功能。
一:PIC16C71的问题和对策
问题1:在芯片进入低功耗睡眠模式 (SLEEP MODE)后,其振荡脚将处于浮态,这将使芯片的睡眠功耗上升,比原手册中的指标高了10μA以上。
对策:在振荡脚OSC1和地 (GND)之间加一10MΩ电阻可防止OSC1进入浮态,且不会影响正常振荡。
问题2:RA口方向寄存器TRISA目前只是一个4位寄存器,对应于RA0~RA3,并非手册中所言是8位寄存器,对应于RA0~RA4,即RA4并没有相应的输入/输出方向控制位,它是一个具有开极输出,施密特输入I/O脚。
对策:避免使用对RA口进行读-修改-写指令(如BCF RA, BSF RA),以免非意愿地改变RA4的输入/输出状态。对于RA口的 *** 作应采用寄存器的 *** 作方式(MOVWF RA)。
问题3:当CPU 正在执行一条对INTCON寄存器进行读-修改-写指令时,如果发生中断请求,则读中断例程会被执行二次。这是因为当中断请求发生后INTCON寄存器中的GIE位会被硬件自动清零(屏蔽所有中断),并且程序转入中断例程入口(0004H)。当GIE位被清零后,如果这时正好CPU在执行一条对 INTCON的读-修改-写指令(如BSF INTCON等),则 GIE位还会被写回 *** 作重新置1,这样会造成CPU二次进入中断例程。
对策:如果在程序中需对INTCON的某一中断允许位进行修改,则应事先置GIE=0
,修改完成后再恢复GIE=1。
…………..
BCF INTCON, GIE
BSF INTCON, ×××
BSF INTCON, GIE
…………..
图1
问题4:当芯片电压VDD加电上升时间大于100μs时,电源上电复位电路POR和电源上电延时器PWRT可能不能起正常的作用,而使芯片的复位出现不正常(即PC≠复位地址)。一般在这种情况下建议不要采用PWRT。
对策:如果VDD上升时间很长,此芯片一般需较长的电源上电延时,可靠的电源上电延时方法如图1所示,在MCLR端外接复位电路。
问题5:如果在A/D转换中用RA3作为参考电压输入,则最大满量程误差(NFS)要大于手册中的指标。实际情况如表1所示。
表1 A/D满量程误差表
VREF源
(5.12V) 满量程误差
(NFS)
VDD <±1 LSb
RA3 <±2.5 LSb
二:PIC16C84的问题和对策
问题1:PIC16C84的内部的E2PROM数据存储器的E/W周期偶尔会超出最大值(10ms)。
对策:在程序中应该用EECON1寄存器中的WR位来判断写周期的完成,或是启用“写周期完成中断”功能,这两种方法可保证写入完成。
问题2:VDD和振荡频率的关系如表2所示。
VDD 振荡方式 最高频率
2V-3V RC, LP 2MHZ,200MHZ
3V-6V RC,XT,LP 4MHZ,200MHZ
4.5V-5.5V HS 10MHZ
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)