PIC单片机的应用设计技巧

时间:2022-06-03 06:19 作者:Yabo亚搏手机版App
本文摘要:美国微芯公司(Microch{pTechnologyInc.)研发的CM0S工艺PIC系列8位单片机(RISC微控制器),尤其是使用内置第二代Flash存储器(40年存储寿命)的微控制器在较慢应用于方面具备独到之处。由于其易用性和高可靠性,该系列微控制器位居8位单片机全球出货量之首。

Yabo亚搏手机版App下载

美国微芯公司(Microch{pTechnologyInc.)研发的CM0S工艺PIC系列8位单片机(RISC微控制器),尤其是使用内置第二代Flash存储器(40年存储寿命)的微控制器在较慢应用于方面具备独到之处。由于其易用性和高可靠性,该系列微控制器位居8位单片机全球出货量之首。

PIC系列单片机具备指令集简练、非常简单易学、速度低、功能强劲、功耗较低、价格低廉、体积小巧、适用性好及抗干扰能力强劲等特点,大量应用于汽车电气控制、电机掌控、工业掌控仪表和仪表、通信、家电、玩具、低功耗的测控应用于等领域,在国内更加受到广大设计者的青睐,微芯公司的单片机早已沦为目前单片机世界的主流产品。  PIC8位单片机内早已包括运算器、存储器、A/D、PWM、输出和输入I/O(溪边电流平均25mA)、通信等常用模块,权利灵活性的定义功能可以适应环境有所不同的掌控拒绝。而不用减少额外的IC芯片。

这样电路结构很非常简单,开发周期将深感延长。  PICl6系列单片机归属于PIC8位单片机的中级型产品,使用14位的RISC指令系统。笔者用于PICl6F716单片机设计了一个电动机保护器,在设计过程中遇上很多问题,通过多方查询资料以及向Microchip公司技术人员谋求反对,问题一一获得解决问题。现将部分问题记录如下,与大家一起探究。

  1ICD2作为程序烧写的用于  1.1ICD2概述  MPLABICD2在线调试器是一款低价位的PIC开发工具。它利用Flash工艺芯片的程序区自读取功能来构建仿真器调试功能;用于的软件平台是Microchip的MPLABIDE(构建研发环境软件包),相容WindowsNT、Windows2000和WindlowsXP等操作系统。

其通信接口方式可以是USB(最低平均2Mb/s)或RS-232串行接口方式;工作电压范围为2.O~5.5V,可反对低于2.0V的高压调试。  MPLABICD2可以反对大部分Flash工艺的芯片。它不仅可以用于调试器,同时还可以作为开发型的烧写器用于。

  1.2ICD2作为火烧写出器时的配备  烧写芯片的方式有两种:普通烧写和在线烧写。在线烧写是合适大批量生产方式的烧写办法。

用于在线烧写时一般来说用户都早已把芯片焊到了板上,此时就拒绝用户板上有腾出的烧写模块。用户板上的模块是通过一条6芯的扁平电缆与ICD2主机上某种程度的模块一一对应相连的。  ICD相连插座有6个插槽,但只用于了其中的5个插槽,分别是VDD(电源)、VSS(地)、VPP(编程电压)、PGC(实时时钟)和PGD(数据)。

  1.3ICD2作为火烧写出器时更容易经常出现的问题及解决问题方法  尽管MPLAGICD2与目标板的点对点非常简单,但是一不小心就不会经常出现问题,基本上每一个PIC的入门者都会遇到类似于的问题。下面就一些常见问题不作详细描述。

  如图l右图,在VPP与VDD之间一般来说要串联一个上拉电阻(一般来说大约为lOk),这样VPP线可置为低电平来手动废黜PICmicro单片机。但是对一般设计者来说,都是使用上电自动废黜。如果在这里使用构建器件DMP809,那么就不会造成相连不上,程序没办法烧入。

  对于PGC、PGD两根线,由于在ICD2内部早已展开了上拉,所以在外围设计中,不要冉展开上拉,否则不会导致分力。对于PGC、PGD和VPP三根线,不要对地相接电容.因为电容不会妨碍在数据和时钟线上电平的较慢切换,从而影响ICD2与目标板的相连。

某种程度对于PGC、PGD,由于数据或时钟都是双向传输的,这时如果在中间串一个二极管,则不会影响ICD2与单片机的双向通信。  但是,对PGC和PGD来说,在单片机上同时适配为普通I/O口,而有些用于上必需要接对地电容或者是串联二极管。对于这种情况,唯一的处理方式就是在烧写时从芯片的PGC和PGD端口必要跳线到程序火烧写出口。

  2A/D切换地下通道转换问题  笔者所设计的电动机保护器必须展开很多A/D切换,比如三相电流切换、零序电流切换以及各种定位器等。但是笔者所使用的PIC16F716单片机只有5路A/D切换地下通道,因此可选了一个多位选择开关对一个A/D地下通道展开适配。而在调试中找到这样一个问题,就是A/D切换值不精确,甚至有点乱,但从程序流程以及代码角度皆查不出任何问题。

后查明PICl6F716单片机展开A/D切换地下通道转换时,必须一定的延时,延时时间是毫秒级。解决办法是:在地下通道问转换时,当第一个地下通道切换已完成后,再行转至另一个地下通道;然后延时1ms左右,再行展开A/D切换。

而对同一个地下通道信号转换时,要在第一个信号切换已完成后,禁令信号输出,延时1ms左右;然后赢人信号,再行展开A/D切换。  这种作法较为困难,也很闲置时间,并且从调试结果来看,问题并没解决问题。在重复展开调试中,最后获得的优化解决办法是:对于地下通道间切换以及同一地下通道信号切换,要对每一个信号最少展开两次A/D切换;第一次的切换结果,抛弃未予处置,只取第二次A/D切换的结果。从调试结果来看,很好地解决了这一问题。

  3软件开发小技巧  PIC单片机使用精简指令集,例如对于PICl6F716单片机,只有35条单字节指令。要用这么较少的指令构建简单的掌控或计算出来,似乎要在软件设计上多下功夫,并且PIC的指令系统与51系列单片机有相当大有所不同,这让PIC初学者很不适应环境。下面笔者就自己的体会,讲一些软件设计必须留意的问题。

  3.1指令的大小写问题  撰写PIC单片机的源程序,除了源程序的开始处必须严苛的列表指令外,还需留意源程序中字母符号的大小写规则,否则在PC机上汇编程序时会顺利。在源程序中都会用于伪指令INCLUDE。

这条指令将列表中登录的单片机文件(在MPLAB中)读取源程序作为源程序的一部分,所以凡是MPLAB中有关该单片机有数的寄存器在源程序中需要再行用赋值指令(EQU)赋值,这就使所创建的源程序深感修改。  此外,由于有了伪指令INCLUDE,所以根据MPLAB软件中的格式,在源程序中的操作数凡是牵涉到MPLAB已规定的寄存器名称的,其字母不准不能大写,无法小写。其余操作码、符号字母可任意大小写,但0x中的x不应小写。否则编撰会顺利。

鉴于上述原因,为了书写便利,在用于MPLAB软件时,PIC单片机的源程序皆用大写字母为宜(0x值得注意)。  3.2振荡器的配备以及时序的计算出来  PIC系列单片机可以工作于以下4种有所不同的振荡器方式:LP(低功耗晶体振荡器)、XT(晶体谐振器)、HS(高速晶体谐振器)和RC(阻容振荡器)。用户可以根据其系统设计的必须,通过对配备位(FOSC1和F0SC2)编程,自由选择其中一种工作模式。

  而一旦振荡器配备已完成,那么根据用户的配备,可以精彩地计算出来出有程序运行的时间以及A/D切换所闲置的时间,这样就不会很精彩地决定好单片机的时序。例如,如果使用4MHz的HS波动模式,那么单片机的时钟频率为FOSC/4,也就是说继续执行一条指令必须1s;对于必须两个指令周期的指令,必须2s。而对于A/D切换,如果A/D切换时钟位自由选择为FOSC/8,那么A/D切换模块切换一个位的时间Tad就为2s。对一个8位的切换来说,必须的时间为9.5Tad,也就是已完成一次A/D切换的时间为19s。

这样只必须查阅源程序的行数作过详细分析,就可以计算出来出有程序运行的时间。  3.3存储体的自由选择  PIC单片机的数据存储器一般来说分成两个存储体,即存储体O(Bank0)和存储体1(Bankl)。

每个存储体都是由专用寄存器和通用寄存器两部分构成的。两个存储体中的一毡寄存器单元实质上是同一个寄存器单元,却又具备有所不同的地址。  有所不同型号的PIC单片机,其数据存储器的构成(即功能)是不完全相同的,所以设计人员一旦搭配了某个PIC单片机的型号后,就要查询该单片机的数据存储器资料,以便编程用于。

  笔者所使用的PICl6F716单片机的存储区,是通过STATUS寄存器的RPl位和RP0位来自由选择的。当配备为00时,回应自由选择存储区0;当配备为01时,回应自由选择存储区1。

因为存储区的转变只须转变RP0位,所以一般来说在程序撰写时,只转变RP0位来自由选择存储区。但是这样更容易导致程序的恐慌,因此,笔者建议在每次替换存储区时,要分别对RPO和RPl展开置位。在程序初始化时,最差将寄存器的初始化分成两部分:第一部分成存储区O;第二部分成存储区1。然后将每个必须初始化的寄存器分别在对应的存储区展开初始化才可。

  3.4GOTO和CALL指令的有所不同用于  在PIC的汇编程序中,CALL与GOT0指令用于的场台有所不同。CALL是用来调用子程序的,在调用完了子程序后回到到调用前的程序;而GOTO是无条件移往,即由此状态转入另外一个状态而不必须回到。  为了使程序更为具备可读性,使流程更为明晰、合理,一般来说程序都使用模块化程序设计,将要程序按照功能分为有所不同的子程序,而主程序则非常简练,只须使用CALL指令对子程序展开调用。

  由于PIC单片机的堆栈受限,在程序中无法无止境地用于GOTO指令,否则不会使堆栈阻塞,程序无法长时间运营。但是在有些时候,例如当程序经常出现分支时,则被迫用于GOTO指令。对于PICl6F7x系列单片机,程序经常出现分支时不能通过STATUS寄存器的Z位或C位展开辨别。

Yabo亚搏手机版App下载

这时在两种情况的前一种情况下,必需用于GOTO指令展开移往;否则在继续执行完了第一种情况后,紧接着又继续执行第二种情况。程序如下:  BTFSSSTATUS,Z  GOTOA  GOTOB  在函数调用到A时,必需用于GOTO指令;否则继续执行完了这条语句以后,紧接着继续执行GOTOB。

这样无论Z为何值,程序都将函数调用到B。而对于GOT0B,则可以不用用于GOTO指令。

  在上面这种情况下,由于GOTO只在子程序内部展开函数调用,小程序内部循环闲置堆栈的级数不多,因此用于GOTO指令是不切实际的。但是在大的程序中用于GOTO指令,将有可能无法回到到调用前的下一条指令。  因此,笔者建议,在用于汇编语言展开程序设计时,应当将程序分解成一级级的子程序;然后在程序之间展开调用,尽可能将GOTO指令函数调用的范围增大。

  3.5对芯片的反复烧写  对没硬件仿真器的设计者来说,总是搭配具有EPROM的芯片来调试程序,通过重复的改动来观赏运营结果,以便对程序展开调试。每变更一次程序.都是将原本的内容再行读取,再行编程,浪费了相当多的时间,又延长了芯片的使用寿命。

如果后一次编程较前一次,仅有是对应的机器码字节的完全相同位由1变成0,那么就可在前一次编程芯片上再度载入数据,而不用读取原片内容。  在程序调试  过程中,常常遇上常数的调整。如果常数的转变能确保对应位由1变0,则都可在原片内容的基础上之后编程。

另外,由于指令NOP对应的机器码为00,调试过程中指令的移除,可先用NOP指令替代,编译器后也可在原片内容上之后编程。  结语  在使用PIC单片机展开设计过程中,注意到PIC单片机自身的特点,可尽可能少走弯路,从而延长开发周期。某种程度在软件设计上使用适合的方法,可以使整个程序运行平稳,而且程序空间的用于也将有所增加,防止了调试中的Bug。

以上只是笔者在实际设计过程中一些小小的体会。期望与大家一起探究,并在联合自学中为PIC单片机的普及和推展作出贡献。


本文关键词:PIC,单片机,的,应用,设计,技巧,美国,微芯,公司,Yabo亚搏手机版App

本文来源:Yabo亚搏手机版App-www.lzgongju.com