您的位置 首页 硬件

PIC单片机软件编程技巧

项目是有关机器人控制的实现。控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需

项目是有关机器人操控的完结。操控部分选用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表明的便是拍手位,举手位。通过循环检测能够让手臂停在各位上,但是机械动作是有惯性的,机械中止位或许在该位的上一点或下一点,这就影响下面动作的进行,或许在若干动作后机械动作呈现异常,也便是程序无法正常的运转。在此情况下,需求修正程序的编写办法,选用标志位来操控动作的进行。假如选用操控标志位,必定要在动作子函数中对标志方位零。程序如下:

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的汇编程序中,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状况,履行完也不再回到下面的程序。

3 、状况标志位Z、C的不同运用情况

在进行判别标志位时,Z(零标志)、C(借位标志)是不同的。Z为l时,表明上面的成果为0,Z为0时,则成果不为0。C为l时,借位,C为0时,没有借位。在运用守时器的时分,一般运用C标志位,这是因为当完结某一动作去查看守时器时,时刻或许没到,或是正好,或是现已超越时刻,只需到了或超越时刻,都要依照要求封闭守时器,如下面程序所述。假如用Z标志位,等于0时或许没有检测到,无法判别中止的状况,而用z能够很好地操控时刻守时。进行一般的核算时大多用Z,如前面的动作标志位中便是如此运用的。

list D=16c76

call opentimerO

L4 movlw d’30’

subwf t0_v2,W

btfss status,c

goto L4

cau closetimer0

程序检测时刻是否抵达1.5s,没有则循环等候,到了或检测时刻过了就封闭守时器,履行下面的程序。

总归,在PIC单片机的编程中选用适宜的办法,能够使整个程序运转安稳,并且程序空间的运用也将有所减小,避免了调试中的Bug。这是笔者在实践中的一点领会,还有许多缺乏或没有考虑到的问题,期望在和我们的讨论中不断学习PIC单片机的精华。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/291485.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部