PIC单片机开发的一些经验和技巧解析

发布者:RainbowJoy最新更新时间:2020-03-11 来源: elecfans关键字:PIC  单片机开发  低功耗 手机看文章 扫描二维码
随时随地手机看文章

PIC单片机在国内日益流行,本文介绍MicroChipPIC系列单片机开发过程中软、硬件设计的一些经验、技巧。


由美国Microchip公司生产的PIC系列单片机,由于其超小型、低功耗、低成本、多品种等特点,已广泛应用于工业控制、仪器、仪表、通信、家电、玩具等领域,本文总结了作者在PIC单片机开发过程中的一些经验、技巧,供同行参考。


1 怎样进一步降低功耗

功耗,在电池供电的仪器仪表中是一个重要的考虑因素。PIC16C××系列单片机本身的功耗较低(在5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,在保证满足工作要求的前提下,可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,其电流可减小到15μA),但较低的工作频率可能导致部分子程序(如数学计算)需占用较多的时间。在这种情况下,当单片机的振荡方式采用RC电路形式时,可以采用中途提高工作频率的办法来解决。


具体做法是在闲置的一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。需进行快速运算时先置RB1= 1,由于充电时,电容电压上升得快,工作频率增高,运算时间减少,运算结束又置RB1=0,进入低速、低功耗状态。工作频率的变化量依R1的阻值而定(注意R1不能选得太小,以防振荡电路不起振,一般选取大于5kΩ)。


另外,进一步降低功耗可充分利用“sleep”指令。执行“sleep”指令,机器处于睡眠状态,功耗为几个微安。程序不仅可在待命状态使用 “sleep”指令来等待事件,也可在延时程序里使用(见例1、例2)。在延时程序中使用“sleep”指令降低功耗是一个方面,同时,即使是关中断状态,Port B端口电平的变化可唤醒“sleep”,提前结束延时程序。这一点在一些应用场合特别有用。同时注意在使用“sleep”时要处理好与WDT、中断的关系。

PIC单片机开发的一些经验和技巧解析

例1(用Mplab-C编写) 例2(用Masm编写)

Delay() Delay

{ ;此行可加开关中断指令

/*此行可加开关中断指令*/ movlw.10

for (i=0; i《=10; i ) movwf Counter

SLEEP(); Loop1

} Sleep

decfsz Counter

goto Loop1

return


2 注意INTCON中的RBIF位

INTCON中的各中断允许位对中断状态位并无影响。当PORT B配置成输入方式时,RB《7:4》引脚输入在每个读操作周期被抽样并与旧的锁存值比较,一旦不同就产生一个高电平,置RBIF=1。在开 RB中断前,也许RBIF已置“1”,所以在开RB中断时应先清RBIF位,以免受RBIF原值的影响,同时在中断处理完成后最好是清RBIF位。


3 用Mplab-C高级语言写PIC单片机程序时要注意的问题

3.1 程序中嵌入汇编指令时注意书写格式 见例3。

例3

…………

while(1) {#asmwhile(1) {

…… #asm /*应另起一行*/

#endasm ……

}/*不能正确编译*/ #endasm

…… }/*编译通过*/

……

当内嵌汇编指令时,从“#asm”到“endasm”每条指令都必须各占一行,否则编译时会出错。


3.2 加法、乘法的最安全的表示方法 见例4。

例4

#include《16c71.h》

#include《math.h》

unsigned int a, b;

unsigned long c;

void main()

{ a=200;

b=2;

c=a*b;

} /*得不到正确的结果c=400*/

原因是Mplab-C以8×8乘法方式来编译c=a*b,返回单字节结果给c,结果的溢出被忽略。改上例中的“c=a*b;”表达式为“c=a;c=c*b;”,最为安全(对加法的处理同上)。


3.3 了解乘除法函数对寄存器的占用

由于PIC片内RAM仅几十个字节,空间特别宝贵,而Mplab-C编译器对RAM地址具有不释放性,即一个变量使用的地址不能再分配给其它变量。如 RAM空间不能满足太多变量的要求,一些变量只能由用户强制分配相同的RAM空间交替使用。而Mplab-C中的乘除法函数需借用RAM空间来存放中间结果,所以如果乘除法函数占用的RAM与用户变量的地址重叠时,就会导致出现不可预测的结果。如果C程序中用到乘除法运算,最好先通过程序机器码的反汇编代码(包含在生成的LST文件中)查看乘除法占用地址是否与其它变量地址有冲突,以免程序跑飞。Mplab-C手册并没有给出其乘除法函数对具体RAM地址的占用情况。例5是乘法函数对0×13、0×14、0×19、0×1A地址占用情况。


部分反汇编代码

#include 《pic16c71》01A7081FMOVF 1F,W

#include《math.h》01A80093MOVWF 13

;借用

unsigned long Value @0x101A90820MOVF 20,W

char Xm @0x2d;01AA0094MOVWF 14

;借用

void main()01AB082DMOVF 2D,W

{Value=20;01AC0099MOVWF 19

;借用

Xm=40;01AD 019ACLRF1A

;借用

Value=Value*Xm01AE235FCALL 035Fh

;调用乘法函数

……01AF1283BCF 03,5

}01B0009FMOVWF 1F

;返回结果低字节

01B10804MOVF 04,W

01B200A0MOVWF 20

;返回结果高字节


4 对芯片重复编程

对无硬件仿真器的用户,总是选用带EPROM的芯片来调试程序。每更改一次程序,都是将原来的内容先擦除,再编程,其过程浪费了相当多的时间,又缩短了芯片的使用寿命。如果后一次编程的结果较前一次,仅是对应的机器码字节的相同位由“1”变成“0”,就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。


在程序的调试过程中,经常遇到常数的调整,如常数的改变能保证对应位由“1”变“0”,都可在原片内容的基础继续编程。另外,由于指令“NOP”对应的机器码为“00”,调试过程中指令的删除,先用“NOP”指令替代,编译后也可在原片内容上继续编程。


另外,在对带EPROM的芯片编程时,特别注意程序保密状态位。厂家对新一代带EPROM芯片的保密状态位已由原来的EPROM可擦型改为了熔丝型,一旦程序代码保密熔丝编程为“0”,可重复编程的 EPROM 芯片就无法再次编程了。使用时应注意这点,以免造成不必要的浪费。

关键字:PIC  单片机开发  低功耗 引用地址:PIC单片机开发的一些经验和技巧解析

上一篇:PIC16F874单片机为中心处理器的直流电机调速设计
下一篇:基于PIC单片机的多回路温度控制系统设计

推荐阅读最新更新时间:2024-11-02 14:17

基于PIC单片机的病房呼叫系统设计
0 引言 病房呼叫系统是一种应用于医院病房、养老院等地方,用来联系沟通医护人员和病员的专用呼叫系统,是提高医院护理水平的必备设备之一。病房呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。它要求及时、准确可靠、简便可行、利于推广。 目前市场上存在着许多种型号不一功能各异的医院病房呼叫系统,主要为两大类:有线式和无线式。传统的有线式病房呼叫系统往往采用集中式结构,电源线、数据通信线、语音通信线分开传输,具有铺设线路较多、成本高、安装调试困难、实时性差、故障率较高等缺点。无线式病房呼叫系统不存在铺设线路的问题,但是可靠性差,而且无线电波会干扰其它医疗仪器设备,目前大多数医院不采用此类无线呼叫系统。 本文设计的
[单片机]
基于<font color='red'>PIC</font><font color='red'>单片机</font>的病房呼叫系统设计
一种轨至轨输入的低压低功耗运放的设计
引言    电源电压逐步下降,晶体管的阈值电压并没有减小,但是运放的共模输入范围越来越小,这使设计出符合低压低功耗要求,输入动态幅度达到全摆幅的运放成为一种必须。本文所设计的具有轨至轨 (R-R) 输入功能的低压低功耗 CMOS 运算放大电路,在各种共模输入电平下有着几乎恒定的跨导,使频率补偿更容易实现,适合应用于 VLSI 库单元及其相关技术领域。 理论模型 基本的轨至轨输入结构    在较低的电源电压下,运算放大器的输 入级设计是非常重要的。传统的 PMOS 差动输入级的共模输入电压范围 V CM 可表示为 : 740)this.width=740" borde
[模拟电子]
STM8 8位MCU 开发环境搭建
1 安装STVD和STVP 安装完成后,出现以下图标。 根据安装过程中的提示,这个时候需要关机重起。 重启完成之后,就可以用ST Visual Develop 打开工程了。 点击编译按钮,这个时候消息提示框出现一个错误提示: 提示 找不到cxstm8 ,原来STVD里面没有包含编译器。 安装编译器 安装完成,多了一个这个图标。 编译成功。
[单片机]
STM8 8位<font color='red'>MCU</font> <font color='red'>开发</font>环境搭建
低功耗开关电源零空载功耗的设计实现
现在,许多消费类产品OEM制造商所生产的电子设备都具有超低待机功耗,但真正的目标还是要尽可能地接近零功耗。Power Integrations新推出的两款高压MOSFET可以帮助设计师将电路中的耗能元件隔离开,从而达到优化设计和实现零空载功耗的目的。   消除待机功率   此类电量的节省会对整个国家的发电站配备要求产生直接影响,并且,它已成为各监管机构所颁布的能效法规中的关键内容。以电视机接收器为例,包括能源之星和欧盟生态标签(EU Eco-Label)在内的众多能效计划现在都将最大待机功耗规定为1瓦。作为其节能计划的组成部分,欧盟委员会已针对用能产品(EuP)的待机和关断模式损耗颁布了用能产品指令Lot 6。Lot 6于2009
[电源管理]
超<font color='red'>低功耗</font>开关电源零空载功耗的设计实现
铁路交通信息系统PDA的低功耗设计
摘要:阐述在集成传呼功能、基于嵌入式处理器EP7211开发实现的二合一铁路交通信息系统PDA中,为了降低系统的功耗,从硬件和软件两方面采取的各种措施。这些措施基于一定的低功耗设计原则,具有普遍性,适合一般的嵌入式系统开发。 关键词:PDA EP7211 低功耗 时间复杂度 引言 PDA即Personal Digital Assitant(个人数字助理)的缩写,是近年来继寻呼机和移动电话之后,在国内市场迅速崛起的便携式电子产品。目前,国内传统性能的PDA产品经过前几年的高速发展后,市场需求基本饱和。不过,经过行业应用改造后的PDA产品,如文曲星、蓝火等已经在国内市场大显身手了。分析市场需求,我们研发了集成传呼功能的、专门面向
[嵌入式]
PIC单片机的红外遥控与解码
今天玩红外遥控的解码! 先了解红外接收的原理: 遥控器使用方便,功能多.目前已广泛应用在电视机、VCD、DVD、空调等各种家用电器中,且价格便宜,市场上非常容易买到。如果能将遥控器上许多的按键解码出来.用作单片机系统的输入.则解决了常规矩阵键盘线路板过大、布线复杂、占用I/O口过多的弊病。而且通过使用遥控器,操作时可实现人与设备的分离,从而更加方便使用。 一、编码格式 1、0和1的编码 遥控器发射的信号由一串O和1的二进制代码组成.不同的芯片对0和1的编码有所不同。通常有曼彻斯特编码和脉冲宽度编码。TC9012的O和1采用PWM方法编码,即脉冲宽度调制,其O码和1码如图1所示(以遥控接收输出的波形为例)。O码由O.56
[单片机]
<font color='red'>PIC</font><font color='red'>单片机</font>的红外遥控与解码
【硬件】PIC32单片机烧写器以及线序说明
1. PIC32单片机烧写器,使用Pckit3烧写。 如下图 2.仿真器端线序如下: 注: LVP在板子上连接GND,同VSS 3.板上连接器 如下图,MCU原理图详见附件 4.烧写步骤: 1)import 2)programer-select tool (ICD3 PICK3…) 3) 点击烧写图标
[单片机]
【硬件】<font color='red'>PIC</font>32<font color='red'>单片机</font>烧写器以及线序说明
Maxim推全新低功耗参考设计 加速并简化工厂自动化设计
Maxim Integrated Products, Inc. 推出三款全新的低功耗参考设计,提供信号链的端到端整合,大大简化工厂自动化设计,帮助设计人员以前所未有的速度将其工业设计推向市场。 Carmel、Monterey和Fremont工业参考设计是经过完全测试的子系统,提供完备的电路图、布板文件和固件,可直接使用或进行定制化设计。每款参考设计均集成多个功能,为工厂自动化应用提供高精度解决方案。电路板现已开放购买,可实现快速原型开发、早期软件开发,加速设计进程。 Carmel Carmel (MAXREFDES18#)子系统提供高精度、低噪声模拟输出。Carmel理想用于可编程逻辑控制器(PLC)和分布式控制系
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved