微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 浅谈PIC单片机软件开发技巧

浅谈PIC单片机软件开发技巧

时间:02-07 来源:互联网 点击:
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。整个控制系统比较复杂,因而在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表示的就是故障位,举手位。经过循环检测可以让手臂停在各位上,然而机械动作是有惯性的,机械停止位可能在该位的上一点或下一点,这就影响下面动作的进行,可能在若干动作后机械动作出现失常,也就是程序没法正常的运行。在此情况下,需要修改程序的编写方式,采用标志位来控制动作的进行。如果采用控制标志位,一定要在动作子函数中对标志位置零。程序如下:

  list p=16c73

  :

  actlonstopflag equ Ox6e ;位定义

  lefthandfla8 cqu 0x0 ;0表示停止左手动作

  rightbandflag equ Oxl ;O表示停止右手动作

  :

  movlw Ox03

  movWf actionstopflag

  call lefthanduo

  call righthandup

  L2 call readinsignal

  btfss csl_v,lefthandhght3

  call lefthatldotop

  btfss csl_v,righthandlight4

  call righthandstop

  movlw Ox00

  subwf actionstopflag,w

  btfss status,z

  goto L2

  继续下面的程序

  actionstopflag表示动作标志位参数,给动作标志位赋值,动作停止函数中将清零标志位的值。上述程序和前面所述程序的功能一样,实现两支手臂的动作。上面程序描写左手是否到达故障位,到达停止,右手是否到达举手位,到达停止。看动作标志位是否为零,不是,不断地循环检测;是,执行下面的程序。

  2 GOTO,cALL指令的不同使用

  PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片机,投资大不说,使用起来也不方便。PIC系列从低到高有几十个型号,可以满足各种需要。其中,PIC12C508单片机仅有8个引脚,是世界上最小的单片机。

  在PIC的汇编程序中,CALL与GOT0指冷使用的场合不同。一般情况下,在于程序与主程序之间大多用CALL指令;而状态转换模块之间大多用GOTO指令,即由此状态进入另一种状态不需返回。由于PIC单片机的堆栈有限,在程序中,不能无止境地使用GOTO语句,这样会使堆栈溢出,程序无法正常运行。各个小程序内部循环占用堆栈的级数不多,使用GOTO指令是可行的,但在大的程序中用GOTO则无法返回到调用前程序的下一条指令。CALL指令完成调用完子程序后返回到调用前的程序。程序如下:

  list D=16c76

  start:ca11 setCPU

  call automatlsn、statel

  L3 call readinsignal

  btfsc cs2_v,ultrasonicdetectl

  goto L3

  goto autonatlsmstate2

  :

  automatlsmstate2:

  return

  auatomatismstatel、automatismstate2表示两种状态,uhrasonicdetectl表示一个输入超声检测信号。上面程序描写调用automatistmstate1状态,执行完后进行下面的检测ultrasonicdetect],没有触发就一直循环检测,触发就进入autornatismstate2状态,执行完也不再回到下面的程序。

PIC中档产品是Microchip近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top