PIC单片机的应用技巧介绍

发布者:SerendipityRose最新更新时间:2020-02-06 来源: eefocus关键字:PIC单片机  应用技巧  在线调试器 手机看文章 扫描二维码
随时随地手机看文章

1 ICD2作为程序烧写的使用

1.1 ICD2简介

MPLAB ICD2在线调试器是一款低价位的PIC开发工具。它利用Flash工艺芯片的程序区自读写功能来实现仿真器调试功能;使用的软件平台是Microchip的MPLAB IDE(集成开发环境软件包),兼容Windows NT、Windows 2000和Windlows XP等操作系统。其通信接口方式可以是USB(最高可达2Mb/s)或RS-232串行接口方式;工作电压范围为2.O~5.5V,可支持最低2.0V的低压调试。


MPLABICD2可以支持大部分Flash工艺的芯片。它不仅可以用作调试器,同时还可以作为开发型的烧写器使用。


1.2 ICD2作为烧写器时的配置

烧写芯片的方式有两种:普通烧写和在线烧写。在线烧写是适合大批量生产方式的烧写办法。使用在线烧写时通常用户都已经把芯片焊到了板上,此时就要求用户板上有预留的烧写接口。用户板上的接口是通过一条6芯的扁平电缆与ICD2主机上同样的接口一一对应连接的。图1显示了MPLAB ICD2与目标板上模块连接插座的互连状况。


ICD连接插座有6个引脚,但只使用了其中的5个引脚,分别是VDD(电源)、VSS(地)、VPP(编程电压)、PGC(同步时钟)和PGD(数据)。


1.3 ICD2作为烧写器时容易出现的问题及解决方法

尽管MPLAG ICD2与目标板的互连非常简单,但是一不小心就会出现问题,基本上每一个PIC的入门者都会碰到类似的问题。下面就一些常见问题作简要叙述。


如图l所示,在VPP与VDD之间通常要串接一个上拉电阻(通常约为lOkΩ),这样VPP线可置为低电平来手动复位PICmicro单片机。但是对一般设计者来说,都是采用上电自动复位。如果在这里采用集成器件DMP809,那么就会导致连接不上,程序没有办法烧入。


对于PGC、PGD两根线,由于在ICD2内部已经进行了上拉,所以在外围设计中,不要冉进行上拉,否则会造成分压。对于PGC、PGD和VPP三根线,不要对地接电容.因为电容会阻碍在数据和时钟线上电平的快速转换,从而影响ICD2与目标板的连接。同样对于PGC、PGD,由于数据或时钟都是双向传输的,这时如果在中间串一个二极管,则会影响ICD2与单片机的双向通信。


但是,对PGC和PGD来说,在单片机上同时复用为普通I/O口,而有些使用上必须要接对地电容或者是串接二极管。对于这种情况,唯一的处理方式就是在烧写时从芯片的PGC和PGD端口直接跳线到程序烧写口。


2 A/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转换所占用的时间,这样就会很轻松地安排好单片机的时序。例如,如果采用4 MHz的HS振荡模式,那么单片机的时钟频率为FOSC/4,也就是说执行一条指令需要1μs;对于需要两个指令周期的指令,需要2μs。而对于A/D转换,如果A/D转换时钟位选择为FOSC/8,那么A/D转换模块转换一个位的时间Tad就为2μs。对一个8位的转换来说,需要的时间为9.5Tad,也就是完成一次A/D转换的时间为19μs。这样只需要查看源程序的行数并作简要分析,就可以计算出程序运行的时间。


3.3 存储体的选择

PIC单片机的数据存储器通常分为两个存储体,即存储体O(Bank0)和存储体1(Bankl)。每个存储体都是由专用寄存器和通用寄存器两部分组成的。两个存储体中的一毡寄存器单元实际上是同一个寄存器单元,却又具有不同的地址。


不同型号的PIC单片机,其数据存储器的组成(即功能)是不完全相同的,所以设计人员一旦选用了某个PIC单片机的型号后,就要查找该单片机的数据存储器资料,以便编程使用。


笔者所采用的PICl6F716单片机的存储区,是通过STATUS寄存器的RPl位和RP0位来选择的。当配置为00时,表示选择存储区0;当配置为01时,表示选择存储区1。因为存储区的改变只须改变RP0位,所以通常在程序编写时,只改变RP0位来选择存储区。但是这样容易造成程序的混乱,因此,笔者建议在每次更换存储区时,要分别对RPO和RPl进行置位。在程序初始化时,最好将寄存器的初始化分为两部分:第一部分为存储区O;第二部分为存储区1。然后将每个需要初始化的寄存器分别在对应的存储区进行初始化即可。


3.4 GOTO和CALL指令的不同使用

在PIC的汇编程序中,CALL与GOT0指令使用的场台不同。CALL是用来调用子程序的,在调用完子程序后返回到调用前的程序;而GOTO是无条件转移,即由此状态进入另外一个状态而不需要返回。


为了使程序更加具有可读性,使流程更加清晰、合理,通常程序都采用模块化程序设计,即将程序按照功能分成不同的子程序,而主程序则相当简洁,只须采用CALL指令对子程序进行调用。


由于PIC单片机的堆栈有限,在程序中不能无止境地使用GOTO指令,否则会使堆栈溢出,程序无法正常运行。但是在有些时候,例如当程序出现分支时,则不得不使用GOTO指令。对于PICl6F7x系列单片机,程序出现分支时只能通过STATUS寄存器的Z位或C位进行判断。这时在两种情况的前一种情况下,必须使用GOTO指令进行转移;否则在执行完第一种情况后,紧接着又执行第二种情况。程序如下:


BTFSS STATUS,Z

GOTO A

GOTO B


在跳转到A时,必须使用GOTO指令;否则执行完这条语句以后,紧接着执行GOTO B。这样无论Z为何值,程序都将跳转到B。而对于GOT0 B,则可以不必使用GOTO指令。


在上面这种情况下,由于GOTO只在子程序内部进行跳转,小程序内部循环占用堆栈的级数不多,因此使用GOTO指令是可行的。但是在大的程序中使用GOTO指令,将有可能无法返回到调用前的下一条指令。


因此,笔者建议,在使用汇编语言进行程序设计时,应该将程序分解成一级级的子程序;然后在程序之间进行调用,尽量将GOTO指令跳转的范围缩小。


3.5 对芯片的重复烧写

对没有硬件仿真器的设计者来说,总是选用带有EPROM的芯片来调试程序,通过反复的修改来观看运行结果,以便对程序进行调试。每更改一次程序.都是将原来的内容先擦除,再编程,浪费了相当多的时间,又缩短了芯片的使用寿命。如果后一次编程较前一次,仅是对应的机器码字节的相同位由1变为0,那么就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。


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


结语

在采用PIC单片机进行设计过程中,注意到PIC单片机自身的特点,可尽量少走弯路,从而缩短开发周期。同样在软件设计上采用合适的方法,可以使整个程序运行稳定,而且程序空间的使用也将有所减少,避免了调试中的Bug。以上只是笔者在实际设计过程中一些小小的体会。希望与大家一起探讨,并在共同学习中为PIC单片机的普及和推广做出贡献。

关键字:PIC单片机  应用技巧  在线调试器 引用地址:PIC单片机的应用技巧介绍

上一篇:PIC单片机的内部A/D转换
下一篇:如何实现PIC18F4550的ICSP连接电路

推荐阅读最新更新时间:2024-11-17 03:38

C-V测量技术、技巧与陷阱—— C-V测量方法与应用的匹配
交流阻抗技术是最常用的电容测量技术 。它最适合于一般的低功率门电路,也适用于大多数测试结构和大多数探针。其优势在于所需的设备相对便宜,大多数电子实验室都可以直接找到。但是,它也有一些缺点,例如它的校正方法不如射频测量中使用的校正方法那样精确。另外一个明显的缺点是要求交流阻抗的测试频率必须接近DUT的工作频率,否则必须内插一些测量结果。 尽管准静态C-V是最所有测量方法中最廉价的,其中只需要使用一对SMU,但是它适用的技术范围是有限的,例如低漏流 高k材料、有机器件或显示器领域。不幸的是,在准静态C-V测量中,测量误差 很容易破坏测量结果,尤其对于具有少量漏流器件的特征分析是不准确的。 射频C-V测量是超薄栅、漏电电介质特征分
[测试测量]
SED1520与PIC单片机的接口设计
1引言 智能仪器仪表设计中,通常都要对测控信息进行显示。受仪器功耗、体积及其它条件的影响,一般CRT显示器往往不太适用。而半导体数码管,虽能显示数码及少数字母,却无法灵活显示各种文字、图形、表格等,有着较大的局限性。而LCD显示器由于具有功能强、功耗低、显示清晰、构造轻巧等优点,被广泛运用于各类智能仪器仪表的显示。PIC单片机是美国MICROCHIP公司推出的高性能单片机,对比传统MCS51系列单片机,它具有内置功能模块多、抗干扰性好、速度快、功耗低等优点,被广泛应用于工业控制领域 。本文将以SED1520与PIC16F874为例介绍LCD显示器与PIC单片机接口的实用方法。 2 SED1520的结构、指令及其与PIC单片
[单片机]
PIC单片机与MCS-51系列单片机有哪些区别?
PIC单片机与MCS-51系列单片机的区别 应该说有三个主要特点: (1)总线结构:MCS-51单片机的总线结构是冯-诺依曼型,计算机在同一个存储空间取指令和数据,两者不能同时进行;而PIC单片机的总线结构是哈佛结构,指令和数据空间是完全分开的,一个用于指令,一个用于数据,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率。正因为在PIC单片机中采用了哈佛双总线结构,所以与常见的微控制器不同的一点是:程序和数据总线可以采用不同的宽度。数据总线都是8位的,但指令总线位数分别位12、14、16位。 (2)流水线结构:MCS-51单片机的取指和执行采用单指令流水线结构,即取一条指令,执行完后再取下一条指令;而PIC的取指和执行
[单片机]
介绍嵌入式应用中存储器类型的选择技巧
存储器的类型将决定整个嵌入式系统的操作和性能,因此存储器的选择是一个非常重要的决策。 无论系统是采用电池供电还是由市电供电,应用需求将决定存储器的类型(易失性或非易失性)以及使用目的(存储代码、数据或者两者兼有)。另外,在选择过程中,存储器的尺寸和成本也是需要考虑的重要因素。对于较小的系统,微控制器自带的存储器就有可能满足系统要求,而较大的系统可能要求增加外部存储器。为嵌入式系统选择存储器类型时,需要考虑一些设计参数,包括微控制器的选择、电压范围、电池寿命、读写速度、存储器尺寸、存储器的特性、擦除/写入的耐久性以及系统总成本。 图1列出了在嵌入式应用系统中最常用的存储器类型。下面讨论在选择存储器时应遵循的基本原则。 选择
[缓冲存储]
PIC单片机如何定义配置字与芯片标记
PICC提供了相关的预处理指令以实现在源程序中定义单片机的配置字和标记单元。 1)定义工作配置字 在源程序中定义PIC单片机工作配置字的重要性在前面章节中已经阐述。在用PICC写程序时同样可以在C原程序中定义,具体方式如下: __CONFIG(HS&UNPROTECT&PWRTEN&BORDIS&WDTEN); 上面的关键词“__CONFIG”(注意前面有两个下划线符)专门用于是芯片配置字的设定,后面括号中的各项配置位符号在特定型号单片机的头文件中已经定义(注意不是pic.h头文件),相互之间用逻辑“与”操作符组合在一起。这样定义的配置字信息最后将和程序代码一起放入同一个HEX文件。 在这里列出了适用于16F7
[单片机]
PIC单片机或运算指令XORWF的设计和实现
大家都知道,PIC单片机的大多数寄存器,包括RAM数据存储器的每个存储单元都能实现移位、清位、位测试等系列复杂操作功能。然而,协调它们运行的(应用最广泛的基本级、中级)精简指令集中,却没有对寄存器的某"位"进行"取反"运作的现成指令,而在实际应用中对某些"位"进行取反运作是很需要的。如下图所示。单片机PIC16C622单片机的端口RB作为输出端口的8个引脚,分别控制着8个不同的电器设备。按动按钮AN一下,继电器J吸合,再按一下J释放,即按动AN一下,端口RB3引脚的输出状态改变一下,而RB口的其它7个引脚输出保持原有状态不变。在这种情况下最好的方法是按动一下AN,对PORTB(3)"取反一次"--这对于MCS-51单片机来讲是极
[单片机]
<font color='red'>PIC单片机</font>或运算指令XORWF的设计和实现
PIC单片机的USB接口的应用 一个简单的USB CDC 测试程序
单片机的USB接口,通常用法, 1)HID 是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。(参考百度 https://baike.baidu.com/item/USB-HID ) 2)CDC 虚拟串口,可与PC机直接联机通讯,如同RS232。 3)USB MSC (Mass Storageclass) MSC是一种计算机和 移动设备 之间的传输协议,它允许一个通用串行总线(USB)设备来访问主机的计算设备,使两者之间进行文件传输。设备包括: 移动硬盘 ,移动光驱,U盘,S
[单片机]
<font color='red'>PIC单片机</font>的USB接口的<font color='red'>应用</font> 一个简单的USB CDC 测试程序
Flowcode在PIC单片机中的应用
  什么是FlowCode   Flowcode软件允许你创建复杂的程序PIC单片机。您可以创建你想要的程序流程图。当您已经完成的流程图,Flowcode可以检查它的表现如何运行模拟,前流程图翻译和转移到PIC??芯片。这往往涉及到添加的虚拟组件,如开关和LED的。Flowcode所有辛勤工作流程图转换成机器代码PIC的理解。   该图显示了一个典型的Flowcode屏幕布局。您可以通过拖放图标工具栏的图标上的主要工作区域的流程图。      当Flowcode运行时,屏幕上可以显示不同的窗口数量,浮动的主要工作区域。这表明你正在发生什么内外PIC芯片和重视它,当程序运行时的设备,。输出高电压(= '1'),在低电
[单片机]
Flowcode在<font color='red'>PIC单片机</font>中的<font color='red'>应用</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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