PIC系列单片机开发过程中软、硬件设计的经验、技巧

发布者:TP9111最新更新时间:2017-12-02 来源: eefocus关键字:PIC系列  单片机  开发过程 手机看文章 扫描二维码
随时随地手机看文章

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

    由美国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、中断的关系。

      例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系列单片机开发过程中软、硬件设计的经验、技巧

上一篇:PIC系列单片机的优势
下一篇:利用PIC单片机低功耗方式设计电话远程控制器

推荐阅读最新更新时间:2024-03-16 15:48

全新SimpleLink MCU平台重新定义无线设计
物联网和工业4.0的迅速发展对于应用、设计和有线无线连接提出了新的要求。根据IHS Markit和Bain & Company的最新数据, 2020年全球互联网设备将超过307亿,到2025年该数据将增长至754亿。除了电脑、手机、包括各种家用电器和可穿戴设备都可以轻松连接上云,催生行业新业态和生活新方式。 2017年3月21日,德州仪器(TI)宣布推出其全新的SimpleLink™ 微控制器(MCU)平台。通过将一套稳健的硬件、软件和工具在单一开发环境中集成。基于驱动、框架和数据库等共享基础,其软件开发套件(SDK)能够实现可扩展性以及100%的代码重复利用,大大缩短了研发人员开发周期。同时集成了通用MCU与专门的网络处理器,可
[单片机]
全新SimpleLink <font color='red'>MCU</font>平台重新定义无线设计
基于STC15F2K61单片机的MBUSRS232转换器设计
  一、开发背景   随目前,我国城市居民的水表和热量表数据基本上都是人工抄收,然后月底结算。这种方式不仅要消耗大量的人力物力,而且抄收时间长,精度低,不利于管理部门实时掌握用户的用水或用热情况。集中器在抄表系统中占有非常重要的地位,现有市场上的集中器大部分带负载能力差,每个通信线路负载带有60个,一个集中器有2路MBUS最多带120个表。随着高层建筑越来越多,每户使用的表计数量不断增加,集中器带负载能力差的缺点越来越突出,这大大增加了抄表系统的设备成本,因此设计一种带负载能力强的集中器非常有必要。   二、结构说明   本系统主要完成mbus信号与rs232信号的相互转换,该模块自适应能力强,能够根据mbus总线负载大小动态调
[单片机]
基于STC15F2K61<font color='red'>单片机</font>的MBUSRS232转换器设计
基于AT89C51CC01单片机的CAN-LIN网关设计
  伴随着总线技术的发展,LIN(Local Interconnect Network)总线作为一种低成本的串行通信网络,其目标是为现有的现场总线控制网络提供辅助功能,特别是汽车控制网络中的总线应用,因此必然存在一个LIN总线和其它总线的通信接口实现,本文以CAN总线为例,提出了一种基于AT89C51CC03单片机的CAN-LIN网关设计方案。   LIN是一种低成本的串行通讯网络用于实现汽车中的分布式电子系统控制,LIN的目标是为现有汽车网络(例如CAN总线)提供辅助功能,因此LIN总线是一种辅助的总线网络,在不需要CAN总线的带宽和多功能的场合比如智能传感器和制动装置之间的通讯,使用LIN总线可大大节省成本。LIN通讯是基于
[单片机]
基于AT89C51CC01<font color='red'>单片机</font>的CAN-LIN网关设计
51单片机STC89C52 矩阵键盘数码管显示
WELA BIT P2.7 DULA BIT P2.6 DIOLA BIT P2.5 FM BIT P2.3 ORG 0000H SETB DIOLA MOV SP,#0E0H LOOP0: LCALL key_Scan JZ LOOP0 LCALL DELAY20MS LCALL key_Scan JZ LOOP0 MOV P1,A LCALL Smg HERE0: LCALL key_Scan ;等待按键释放 JZ LOOP0 LCALL DELAY20MS SJMP HERE0 key_Scan: SETB RS1 MOV P3,#0FH ORL P3,#0FH MOV
[单片机]
基于MSP430单片机的多路数据采集系统的设计
1 引 言 数据采集是从一个或多个信号获取对象信息的过程。随着微型计算机技术的飞速发展和普及,数据采集监测已成为日益重要的检测技术,广泛应用于工农业等需要同时监控温度、湿度和压力等场合。数据采集是工业控制等系统中的重要环节,通常采用一些功能相对独立的单片机系统来实现,作为测控系统不可缺少的部分,数据采集的性能特点直接影响到整个系统。本文设计的多路数据采集系统采用MSP430系列单片机作为MCU板的核心控制元件。MSP430系列单片机是由TI公司开发的16位单片机,其突出特点是强调超低功耗,非常适合于各种功率要求低的场合。该系统采样电路采用MSP430单片机内部12位的A/D,使系统具有硬件电路得以简单化,功耗低的特点。由于该系
[单片机]
基于MSP430<font color='red'>单片机</font>的多路数据采集系统的设计
AT89S52单片机定时器/计数器的工作方式
本文主要就这四种工作方式展开讨论,分别从其逻辑结构的角度来学习和了解各个工作方式的特点和应用方法。其中特别需要注意的是: 1.定时器初值的计算和设定方法。 2.几种工作方式之间的区别。 一、定时器/计数器的初始化 使用定时/计数器前需要对其进行初始化,使其按设定的功能工作。初始化的一般步骤如下: (1) 确定工作方式(即对TMOD赋值)。 (2) 预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1)。 (3) 根据需要开放定时器/计数器的中断。 (4) 启动定时器/计数器。 二、4种工作方式 1.工作方式0:13位定时器/计数器 当M1M0=00时,定时/计数器处于工作方式0。其电路逻辑结构见图
[单片机]
AT89S52<font color='red'>单片机</font>定时器/计数器的工作方式
飞思卡尔推出Kinetis KL03 MCU
飞思卡尔半导体(纽约证劵交易所:FSL)宣布,其Kinetis微型产品系列推出Kinetis KL03 MCU,即世上最小的、最具能效的、基于ARM®技术的32位MCU。Kinetis KL03 MCU基于上一代Kinetis KL02设备,具备全新的性能、先进的集成特性及更卓越的易用性,并采用尺寸更小的1.6 x 2.0mm2封装。借助Kinetis KL03 设备的全新功能,客户可减小产品尺寸并降低功耗,节省产品设计时间和成本。 Kinetis KL03 MCU采用高级晶圆级芯片封装,比上一代飞思卡尔 KL02设备的尺寸小15%,比32位ARM MCU的尺寸小35%。全新的片上系统(SoC)非常适合空间受限的设计,包括消费电子、
[单片机]
PIC单片机在智能双电源装置中的应用
作者Email: c8051@21cn.com 1. 智能双电源装置的简介 随着对供电可靠性的要求也越来越高,很多场合用两路电源来保证供电的可靠性。当常用电源异常,智能双电源装置能自动切换到备用电源,智能双电源装置就是这种在两路电源之间进行可靠切换、以保证供电的装置。在医院、宾馆和矿山等有广泛的应用。 智能双电源装置由开关本体和控制器两部分组成。开关本体由电机通过机械联锁机构控制常用电源的断路器和备用电源的断路器的分合,进而控制电源的切换。控制器通过对电压的采样来判断电源是否异常,如果出现异常应产生相应的切换。 2. PIC16F877A的简介 美国Microchip公司的PIC 8位单片机其生产史1
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved