PIC单片机程序设计解析_第1页
PIC单片机程序设计解析_第2页
PIC单片机程序设计解析_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、mb”有道工控wv/w.o 2 0 p lu.uompic单片机程序设计解析pic单片机程序设计解析pic单片机采用精简指令集,例如对于pic16f716单片机,只有35条单字节指令。要 用这么少的指令实现复杂的控制或计算,显然要在程序设计上多做文章,以下就程序设计需 要注意的问题谈一些看法。 美国微芯公司开发的cmos工艺pic系列单片机,特别是采 用内置第二代flash存储器的微控制器在快速应用方而具有独到之处。pic单片机系列内人 都包含运算器、存储器、a/d、pwm、输入和输出i/o、通信等常用接口。自山灵活的定义 功能可以适应不同的控制要求。一、区分指令的大小写编写pic单片机的源程

2、序,除了源程序的开始处需要严格的列表指令外,还须注意源程 序中字母符号的人小写规则,否则在pc机上汇编程序吋不会成功。在源程序中都会使用伪 指令includeo这条指令将列表中指定的单片机文件(在mplab中)渎入源程序作为源程 序的一部分,所以凡是mplab中有关该单片机己有的寄存器在源程序屮无须再用赋值指令 (equ)赋值,这就使所建立的源程序大为简化。此外,由于有了伪指令include,所以根据mplab软件中的格式,在源程序中的操作 数凡是涉及mplab已规定的寄存器名称的,其字母一律只能人写,不能小写。其余操作码、 符号字母可任意人小写,但ox小的x应小写。否则汇编不会成功。鉴于上述

3、原因,为了书 写方便,在使用mplab软件时,pic单片机的源程序均用大写字母为宜(ox例外)。以下举例有关机器人控制的实现。控制部分采用pic16f7x系列单片机,运用汇编语言 编程,运行速度较快,能够达到系统的要求。二、动作标志位的使用在整个控制小,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写 上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下 位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成f面的程 序:list p=16c73call lefthandupcall righthanduplo call readi

4、nsignalbdss csl_vjefthandligbtscall lefthandstopbfsc csl_v3righthandlight4goto locall righthandstopl1 call readinsignalbfsc csl_vjefthandlight3它砂有道工控wv/w.o 2 0 p lu.uomgoto l1call lefthandstoplefthandlight表示光电开关,由此判断是否到相应的位置。1表示在手愕最下面的位置; 2表示在手臂的握手位置;3表示在手臂的鼓掌位置;4表示在手臂的高举手位置。上而程 序描写左手臂上升到举手位置和右手臂上升到

5、鼓掌位置并停止的过程。先判断左手到达否, 到达则左手停止,接着看右手是否到达举手位,到达则停止,否则循环上述的检测,直到左 手到达鼓掌位,右手到达举手位。注意,这里的3, 4表示的就是鼓掌位、举手位。经过循环检测可以让手桦停在各位上, 然而机械动作是有惯性的,机械停止位可能在该位的上一点或f点,这就影响卜面动作的 进行,可能在若干动作后机械动作出现失常,也就是程序没法正常地运行。在此悄况下,需 要修改程序的编写方式,采用标志位來控制动作的进行。如果采用控制标志位,一定要在动 作子函数中对标志位置零。三、区分goto和call指令的使用场合在pic的汇编程序中,call与got0指令的使用比较多

6、、几容易混淆,一般情况f, 在于程序与主程序之间大多用call指令;而状态转换模块之间大多用goto指令,即山 此状态进入另一种状态不需返回。由于pic单片机的堆栈有限,在程序屮,不能无止境地 使用goto语句,否则会使堆栈溢出,程序无法正常运行。各个小程序内部循环占用堆栈 的级数不多,使用goto指令是可行的,但在大的程序中用goto则无法返回到调川前程 序的卜-一条指令。call指令完成调用完子程序后返回到调用前的程序。如在超声检测中程 序如下:list d=16c76start:call setcpucall automaflsmstatell3 call readinsignalbfs

7、c es2_v,ultrasonicdetect1goto l3goto automatlsmstate2:automatlsmstate2:returnautomafismstatel > automatlsmstate2 表示两种状态,ultras on icdetectl 表示一个输入 超声检测信号。上面程序描写调用automatlstmstatei状态,执行完后进行下而的检测 uhrasonicdetectl,没有触发就一肓循环检测,触发就进入automatlsmstate2状态,执行完 也不再回到下面的程序。由于pic单片机的堆栈有限,在程序中不能无止境地使用goto指令,否则

8、会使堆栈溢 111,程序无法正常运行。但是在冇些时候,例如当程序出现分支时,则不得不使用goto 指令。对于pic16f7x系列单片机,程序出现分支时只能通过status寄存器的z位或c 位进行判断。这时在两种情况的前一种情况下,必须使用goto指令进行转移;否则在执 行完笫一种悄况后,紧接着又执行第二种情况。因此,在使用汇编语言进行程序设计时,应 该将程序分解成一级级的子程序;然后在程序z间进行调用,尽量将goto指令跳转的范 围缩小。它砂有道工控wv/w.o 2 0 p lu.uom四、注意状态标志位z、c的不同使用情况在进行判断标志位时,z(零标志)、c(借位标志)是不同的。z为1时,表示上血的结杲为 0, z为0时,则结果不为0。c为1时,借位,c为0时,没有借位。在使用定时器的时 候,一般使用c标志位,这是由于当完成某一动作去检查定时器时,时间可能没到,或是 正好,或是已经超过时间,只要到了或超过时间,都要按照要求关闭定时器,如下而程序所 述。如果用z标志位,等于0时可能没有检测到,无法判断停止的状态,而用z可以很好 地控制吋间定吋。进行一般的计算吋大多用乙如前面的动作标志位中就是如此使用的。 list d=16c76 call openfimerol4 movlw d'30' subwf to_v2,w bfsc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论