PIC单片机应用设计经验与技巧

合集下载

PIC单片机的程序设计经验分享

PIC单片机的程序设计经验分享

PIC单片机的程序设计经验分享
PIC单片机(Peripheral Interface Controller)是一种用来开发去控制外围设备的集成电路(IC)。

一种具有分散作用(多任务)功能的CPU。

本内容讲述了PIC单片机中的程序设计方面的学习
1、PIC单片机程序的基本格式
先介绍二条伪指令:
EQU ——标号赋值伪指令
ORG ——地址定义伪指令
PIC16C5X单片机在RESET后指令计算器PC被置为全“1”,所以PIC16C5X几种型号芯片的复位地址为:
PIC16C54/55:1FFH
PIC16C56:3FFH
PIC16C57/58:7FFH
一般来说,PIC单片机的源程序并没有要求统一的格式,大家可以根据自己的风格来编写。

但这里我们推荐一种清晰明了的格式供参考。

TITLE This is ……;程序标题
;--------------------------------------
;名称定义和变量定义
;--------------------------------------
F0 EQU 0
RTCCEQU 1
PC EQU 2
STATUS EQU 3
FSR EQU 4
RA EQU 5
RB EQU 6
RC EQU 7。

PIC单片机软件编程技巧.

PIC单片机软件编程技巧.

PIC单片机软件编程技巧PIC单片机软件编程技巧类别:单片机/DSP笔者的项目是有关机器人控制的实现。

控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。

在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。

在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。

整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。

1、动作标志位的使用在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。

如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。

用简单的理解可以写成下面的程序: list P=16c73 call lefthandup call righthandup LO call readinsignal bdss csl_v,1efthandligbts call lefthandstop btfsc csl_v,righthandlight4 goto L0 call righthandstop L1 call readinsignal btfsc csl_v,lefthandlight3 goto L1 call lefthandstop :lefthandlight表示光电开关,由此判断是否到相应的位置。

1表示在手臂最下面的位置;2表示在手臂的握手位置;3表示在手臂的鼓掌位置;4表示在手臂的高举手位置。

上面程序描写左手臂上升到举手位置和右手臂上升到鼓掌位置并停止的过程。

先判断左手到达否,到达则左手停止,接着看右手是否到达举手位,到达则停止,否则循环上述的检测,直到左手到达鼓掌位,右手到达举手位。

注意,这里的3,4表示的就是鼓掌位,举手位。

经过循环检测可以让手臂停在各位上,然而机械动作是有惯性的,机械停止位可能在该位的上一点或下一点,这就影响下面动作的进行,可能在若干动作后机械动作出现失常,也就是程序没法正常的运行。

PIC单片机原理及应用第三版课程设计

PIC单片机原理及应用第三版课程设计

PIC单片机原理及应用第三版课程设计一、前言PIC单片机原理及应用是一门非常重要的课程,它是在电子工程、计算机科学等领域中必须学习的基础课程之一。

本文将介绍PIC单片机的原理和应用,并且将会介绍一份课程设计,希望对读者有所帮助。

二、PIC单片机的原理单片机是一种集成电路,它包含了一些用于控制和处理数据的硬件设备。

PIC单片机是由美国微芯科技公司(Microchip Technology Inc.)生产的,是一种非常流行的单片机,它广泛应用于各种计算机和电子系统中。

PIC单片机的结构包括三个部分:处理器核心、外围设备和存储器。

1. 处理器核心PIC单片机的处理器核心采用RISC(Reduced Instruction Set Computing,精简指令集)结构,该结构在指令的执行速度和效率方面相对较高。

PIC单片机的处理器核心包括了一个15位或33位的存储器指针、一个独立的数据寄存器和一个常量移位器等。

2. 外围设备PIC单片机的外围设备包括了很多种外设,比如通用输入/输出端口(GPIO)、模拟模块、定时器、计数器、USART(通用异步收发传输器)等。

这些外设可以用于很多种不同的应用中。

3. 存储器PIC单片机的存储器包括了程序存储器和数据存储器两种。

程序存储器存储了单片机的指令和程序,而数据存储器可以存储程序中用到的数据。

三、PIC单片机的应用PIC单片机在很多领域都有着广泛的应用,包括电子、工业、计算机等。

1. 电子应用在电子应用领域中,PIC单片机由于体积小、功耗低、成本低等优点,被广泛应用于各种控制系统、智能家居、数字音频处理等方面。

2. 工业应用在工业应用领域中,PIC单片机被用于控制和监控各种工业设备和生产过程。

比如说,一些自动化工厂中的计数器、条码扫描器、工艺控制器等都是由PIC单片机控制的。

3. 计算机应用在计算机应用领域中,PIC单片机和各种其他的硬件设备一起被用于开发各种类型的计算机系统。

PIC单片机控制触摸屏心得

PIC单片机控制触摸屏心得

PIC单片机控制触摸屏一、触摸屏基本原理:触摸屏并非液晶显示屏,而是显示屏前面的透明薄膜。

它有三层构成:X电极层、Y电极层、中间隔离层。

两电极层平常是相互绝缘的,当手指触摸屏幕时,平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层接通Y轴方向的5V均匀电压场,使得侦测层的电压由零变为非零,控制器侦测到这个接通后,进行A/D转换,并将得到的电压值与5V相比即可得触摸点的Y轴坐标,同理得出X轴的坐标,这就是所有电阻技术触摸屏共同的最基本原理。

二、PIC单片机pic16f77简介:1、我所使用的是40脚封装的芯片。

管脚如下图:I/O口的方向有TRISX寄存器设置。

0是输出1是输入,若为输出,则PORTX寄存器和RXw位可以控制引脚的高低电平。

2、AD转换模块:AD转换模块有三个寄存器:ADCON0、ADCON1、ADRES。

AD转换的步骤:其中第4步中需要等待的采集时间有时不能按照文档中所说的16us左右。

如果单纯的用一路AD通道,则16us的采集时间是可以的。

但是若涉及到多通道之间的相互转换后,这个时间就不能保证采集的信号是正确的,应该延长采集时间。

我看到网上有人说用1ms 的延时,具体延时应根据实际情况测量一下。

AD转换结果位于ADRES寄存器中,8位。

3、通用串口USART:建议大家调试程序的时候多用一下USART,太好用了。

下面是有关寄存器:TXREG :发送缓冲器,RCREG :接收缓冲器。

4、中断:下面是与中断有关的寄存器:中断编程需要注意的问题:PIC单片机的编程软件是MPLAB,它只有一个中断函数,并且有interrupt关键字。

多个中断同时使能时,需要在中断函数里判断中断标志位,来判断是哪个外设发生了中断。

三、控制电路:程序设计:(1)、检测是否有触控操作:首先使T1、T3导通,T2、T4截止,AD转换ADY 的电压值,若为0或某一范围内,则认为没有触控操作,否则有触控操作。

PIC单片机的应用设计技巧

PIC单片机的应用设计技巧

I D连 接 插 座 有 6个 引 脚 , 只 使 用 了 其 中的 5个 引 C 但 脚 , 别是 V D 电源 ) V s 地 ) V p 编 程 电 压 )P C 分 D( 、 s( 、 p ( 、G
( 同步 时 钟 ) P 和 GD( 据 ) 数 。
1 I 2作 为 程序 烧 写 的使 用 CD
烧 写 芯 片 的方 式 有 两 种 : 通 烧 写 和 在 线烧 写 。在 线 普
可 靠 性 , 系 列 微 控 制 器 稳 居 8位 单 片 机 全 球 出 货 量 之 该 首 。PC 系列 单 片 机 具 有 指 令 集 简 洁 、 单 易 学 、 度 高 、 I 简 速 功能 强 、 耗 低 、 格 低 廉 、 积 小 巧 、 用 性 好 及 抗 干 扰 功 价 体 适 能 力 强 等 特 点 , 量 应 用 于 汽 车 电气 控 制 、 大 电机 控 制 、 业 工 控 制 仪 表 和 仪 表 、 信 、 电 、 具 、 功 耗 的 测 控 应 用 等 通 家 玩 低 领 域 , 国 内越 来 越 受 到 广 大 设 计 者 的 欢 迎 , 芯 公 司 的 在 微 单 片机 已经 成 为 目前 单 片机 世 界 的 主流 产 品 。 PC8位 单 片 机 内 已 经 包 含 运 算 器 、 储 器 、 / I 存 A D、 P M 、 入 和 输 出 IO( 电 流 可 达 2 W 输 / 灌 5mA) 通 信 等 常 用 、 接 口, 自由灵 活 的定 义 功 能 可 以适 应 不 同 的 控 制 要 求 , 而
维普资讯

PC单 片机 的应 用设 计技 巧 I
■ 同济 大 学 黄 世 泽 曾 萍 郭 其 一
美 国 微 芯 公 司 ( co hp Te h oo y I c ) 发 的 Mir c i c n lg n . 开 C M0S工 艺 P C系 列 8位 单 片 机 ( S I RIC微 控 制 器 ) 特 别 ,

关于PIC单片机的应用和设计

关于PIC单片机的应用和设计

关于PIC单片机的应用和设计关于PIC单片机的应用和设计[复制链接]PIC系列单片机具有指令集简洁、简单易学、速度高、功能强、功耗低、价格低廉、体积小巧、适用性好及抗干扰能力强等特点,大量应用于汽车电气控制、电机控制、工业控制仪表和仪表、通信、家电、玩具、低功耗的测控应用等领域,在国内越来越受到广大设计者的欢迎,微芯公司的单片机已经成为目前单片机世界的主流产品。

PIC 8位单片机内已经包含运算器、存储器、A/D、PWM、输入和输出I/O(灌电流可达25 mA)、通信等常用接口,自由灵活的定义功能可以适应不同的控制要求,而不必增加额外的IC芯片。

这样电路结构很简单,开发周期将大为缩短。

PIC16系列单片机属于PIC 8位单片机的中级型产品,采用14位的RISC指令系统。

笔者使用PIC16F716单片机设计了一个电动机保护器,在设计过程中遇到很多问题,通过多方查找资料以及向Microchip公司技术人员寻求支持,问题一一得到解决。

现将部分问题记录如下,与大家一起探讨。

1 ICD2作为程序烧写的使用1.1 ICD2简介MPLAB ICD2在线调试器是一款低价位的PIC开发工具。

它利用Flash工艺芯片的程序区自读写功能来实现仿真器调试功能;使用的软件平台是Microchip的MPLAB IDE(集成开发环境软件包),兼容Windows NT、Windows 2000和Windows XP等操作系统。

其通信接口方式可以是USB(最高可达2 Mb/s)或RS-232串行接口方式;工作电压范围为2.0~5.5 V,可支持最低2.0 V 的低压调试.MPLAB ICD2可以支持大部分Flash工艺的芯片。

它不仅可以用作调试器,同时还可以作为开发型的烧写器使用。

1.2 ICD2作为烧写器时的配置烧写芯片的方式有两种:普通烧写和在线烧写。

在线烧写是适合大批量生产方式的烧写办法。

使用在线烧写时通常用户都已经把芯片焊到了板上,此时就要求用户板上有预留的烧写接口。

PIC单片机开发的经验、技巧总结分享

PIC单片机开发的经验、技巧总结分享

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。

PIC单片机原理及应用

PIC单片机原理及应用

PIC单片机原理及应用PIC单片机的原理是基于微处理器的原理,它包含了CPU、存储器、输入输出(I/O)端口、定时/计数器等功能单元。

其中,CPU负责执行指令,通过存储器存储数据和程序,通过输入输出端口与外部设备进行数据交互,通过定时/计数器实现计时和计数功能。

PIC单片机的应用非常广泛。

首先,它可以用于各种嵌入式系统中,如智能家居系统、工业自动化系统等。

在智能家居系统中,PIC单片机可以控制家电设备的开关和状态,实现智能化的控制;在工业自动化系统中,PIC单片机可以根据不同的传感器信号,控制设备的运行状态和生产流程。

其次,PIC单片机还可以用于电子产品设计中,如手机、数码相机等。

在手机中,PIC单片机可以实现电池电量显示、充电管理、触摸屏控制等功能;在数码相机中,PIC单片机可以控制图像处理、曝光控制、对焦等功能。

此外,PIC单片机还可以应用于通信设备、医疗设备、汽车电子等领域。

在PIC单片机的开发过程中,需要使用相应的开发工具和软件。

Microchip公司提供了一系列的开发工具和编程软件,如PICkit系列的编程器、MPLAB X IDE集成开发环境等,方便开发者进行开发和调试。

同时,PIC单片机采用C语言进行编程,可以通过编写代码实现相应的功能和控制。

总之,PIC单片机作为一种强大的单片微控制器,具有体积小、功耗低、性能稳定等特点,广泛应用于各种电子设备中。

它的原理基于微处理器的原理,具有CPU、存储器、输入输出端口、定时/计数器等功能单元。

通过合理使用PIC单片机的开发工具和软件,可以实现各种应用需求,为电子行业的发展提供了有力的支持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PIC单片机应用设计经验与技巧PIC单片机是Risc架构内最主要的单片机。

美国微芯公司(Microch{p Technology Inc.)开发的CM0S工艺PIC系列8位单片机(RISC微控制器),特别是采用内置第二代Flash存储器(40年存储寿命)的微控制器在快速应用方面具有独到之处。

由于其易用性和高可靠性,该系列微控制器稳居8位单片机全球出货量之首。

PIC系列单片机具有指令集简洁、简单易学、速度高、功能强、功耗低、价格低廉、体积小巧、适用性好及抗干扰能力强等特点,大量应用于汽车电气控制、电机控制、工业控制仪表和仪表、通信、家电、玩具、低功耗的测控应用等领域,在国内越来越受到广大设计者的欢迎,微芯公司的单片机已经成为目前单片机世界的主流产品。

PIC 8位单片机内已经包含运算器、存储器、A/D、PWM、输入和输出I/O(灌电流可达25mA)、通信等常用接口,自由灵活的定义功能可以适应不同的控制要求。

而不必增加额外的IC芯片。

这样电路结构很简单,开发周期将大为缩短。

PICl6系列单片机属于PIC8位单片机的中级型产品,采用14位的RISC指令系统。

笔者使用PICl6F716单片机设计了一个电动机保护器,在设计过程中遇到很多问题,通过多方查找资料以及向Microchip公司技术人员寻求支持,问题一一得到解决。

现将部分问题记录如下,与大家一起探讨。

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,ZGOTO AGOTO B在跳转到A时,必须使用GOTO指令;否则执行完这条语句以后,紧接着执行GOTO B。

这样无论Z为何值,程序都将跳转到B。

而对于GOT0 B,则可以不必使用GOTO指令。

在上面这种情况下,由于GOTO只在子程序内部进行跳转,小程序内部循环占用堆栈的级数不多,因此使用GOTO指令是可行的。

但是在大的程序中使用GOTO指令,将有可能无法返回到调用前的下一条指令。

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

3.5 对芯片的重复烧写对没有硬件仿真器的设计者来说,总是选用带有EPROM的芯片来调试程序,通过反复的修改来观看运行结果,以便对程序进行调试。

每更改一次程序.都是将原来的内容先擦除,再编程,浪费了相当多的时间,又缩短了芯片的使用寿命。

如果后一次编程较前一次,仅是对应的机器码字节的相同位由1变为0,那么就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。

在程序调试过程中,经常遇到常数的调整。

如果常数的改变能保证对应位由1变0,则都可在原片内容的基础上继续编程。

另外,由于指令NOP对应的机器码为00,调试过程中指令的删除,可先用NOP指令替代,编译后也可在原片内容上继续编程。

相关文档
最新文档