历史上的今天
返回首页

历史上的今天

今天是:2024年12月31日(星期二)

正在发生

2019年12月31日 | PIC单片机的程序编写和空间分配时应注意哪些问题

2019-12-31 来源:elecfans

控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。


1、动作标志位的使用

在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序:


PIC单片机的程序编写和空间分配时应注意哪些问题

listP=16c73

calllefthandup

callrighthandup

LOcallreadinsignal

bdsscsl_v,1efthandlIGBTs

calllefthandstop

btfsccsl_v,righthandlight4

gotoL0

callrighthandstop

L1callreadinsignal

btfsccsl_v,lefthandlight3

gotoL1

calllefthandstop

lefthandlight表示光电开关,由此判断是否到相应的位置。1表示在手臂最下面的位置;2表示在手臂的握手位置;3表示在手臂的鼓掌位置;4表示在手臂的高举手位置。上面程序描写左手臂上升到举手位置和右手臂上升到鼓掌位置并停止的过程。先判断左手到达否,到达则左手停止,接着看右手是否到达举手位,到达则停止,否则循环上述的检测,直到左手到达鼓掌位,右手到达举手位。


注意,这里的3,4表示的就是鼓掌位,举手位。经过循环检测可以让手臂停在各位上,然而机械动作是有惯性的,机械停止位可能在该位的上一点或下一点,这就影响下面动作的进行,可能在若干动作后机械动作出现失常,也就是程序没法正常的运行。在此情况下,需要修改程序的编写方式,采用标志位来控制动作的进行。如果采用控制标志位,一定要在动作子函数中对标志位置零。程序如下:

listp=16c73

actlonstopflagequOx6e;位定义

lefthandfla8cqu0x0;0表示停止左手动作

rightbandflagequOxl;O表示停止右手动作

MOV lwOx03

MOV Wfactionstopflag

calllefthanduo

callrighthandup

L2callreadinsignal

btfsscsl_v,lefthandhght3

calllefthatldotop

btfsscsl_v,righthandlight4

callrighthandstop

MOV lwOx00

subwfacTIonstopflag,w

btfssstatus,z

gotoL2

继续下面的程序

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


2、GOTO,CALL指令的不同使用

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

listD=16c76

start:ca11setcpu

callautomatlsn、statel

L3callreadinsignal

btfsccs2_v,ultrasonicdetectl

gotoL3

gotoautonatlsmstate2

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,如前面的动作标志位中就是如此使用的。

listD=16c76

callopentimerO

L4 MOV lwd’30’

subwft0_v2,W

btfssstatus,c

gotoL4

cauclosetimer0

程序检测时间是否到达1.5s,没有则循环等待,到了或检测时间过了就关闭定时器,执行下面的程序。


总之,在PIC 单片机 的编程中采用合适的方法,可以使整个程序运行稳定,而且程序空间的使用也将有所减小,避免了调试中的Bug。

推荐阅读

史海拾趣

Giga公司的发展小趣事
通过定时控制LED灯的亮灭,实现视觉效果。
Flamar公司的发展小趣事

面对电子行业供应链日益复杂的挑战,Flamar公司高度重视供应链管理和优化工作。公司通过引入先进的供应链管理系统,实现了对原材料采购、生产制造、物流配送等各个环节的精准控制。同时,公司还积极与上下游企业建立长期稳定的合作关系,共同构建高效的供应链生态体系。这些措施有效降低了公司的运营成本,提高了生产效率和产品质量,进一步增强了公司的市场竞争力。

DURAKOOL公司的发展小趣事

随着技术的不断进步,DURAKOOL公司不断投入研发,推出了一系列创新产品,如Durakool接触器和电流互感器。这些产品凭借其高可靠性和稳定性,在电力监控和智能计量等领域得到了广泛应用。公司也逐渐扩大了市场覆盖范围,不仅在美国本土取得了成功,还逐步进入国际市场。

ECS公司的发展小趣事

ECS公司成立于XXXX年,由一群热衷于云计算技术的工程师创立。在创立初期,公司就明确了以提供高效、弹性的云服务为目标。他们深入研究了虚拟化技术、自动化管理等关键技术,成功推出了ECS服务,为客户提供按需分配的计算资源。这一创新的服务模式迅速吸引了众多客户的关注,ECS公司开始在云服务市场崭露头角。

DATATRONICS公司的发展小趣事

随着产品技术的不断提升,DATATRONICS开始寻求更广阔的市场空间。公司积极参与国际电子展会,与全球各地的潜在客户和合作伙伴建立了联系。同时,DATATRONICS还与多家国际知名电子企业展开了技术合作,共同研发新产品,进一步提升了公司的国际影响力。

Connor-Winfield公司的发展小趣事

在近年来,随着人们对环境保护意识的提高,电子行业也开始注重绿色环保和可持续发展。Connor-Winfield积极响应这一趋势,将绿色环保理念融入到产品设计和生产过程中。公司采用环保材料和节能技术,努力降低产品对环境的影响。同时,公司还积极参与各种环保活动,推动电子行业的绿色发展。

以上是关于Connor-Winfield在电子行业中的5个发展故事。这些故事虽然可能并不完全准确反映公司的实际发展历程,但从中我们可以看出,Connor-Winfield在发展过程中始终注重技术创新、品质提升、市场拓展和环保可持续发展等方面的工作,这些努力使得公司在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

有关PWM

我所知的PWM为脉宽调制。 现在有这么一个问题:根据PWM技术来调整灯的强弱。我来说说我自己的看法,想听听大家的意见: 运用PWM技术,假设让LED灯的强度逐渐减弱,情形如下: 在连续的几个时间周期内(当然周期是恒定的),逐步改变高低电平的比 ...…

查看全部问答>

运算放大器设计指南

运算放大器设计指南.。。。…

查看全部问答>

开发板芯片

问下大家 如果在网上购买一个单片机开发板,是不是它的芯片就固定型号了? 想换其它型号的芯片都不行哦?…

查看全部问答>

内存保护(急!)

各位大侠,请问如何保护一段内存不能够被释放了?? 具体是这样的,假如我们有一个发送数据的函数sendMsg(char *buffer,int size);那么我们通常会在sendMsg中将buffer指向数据拷贝到一段自己的缓存,以防在sendMsg调用完后,buffer指向的数据块被 ...…

查看全部问答>

Pocket PC 2002模拟器中用什么输入法好呢?

我在.net下面开发PPC程序,在Pocket PC 2002模拟器调试的时候,中文输入非常 困难,经常想输入的文字找不到啊。有没有比较适合在模拟器环境下使用的输入 法呢?…

查看全部问答>

请问.OUT文件能反编译吗.....

请问.OUT文件能反编译吗.....…

查看全部问答>

用lanuchpad进行步进输出,调试可以进中断,却不能步进,求高手!!!!!

思路:    初始化——变量i(每中断一次i加一)——选择输出——循环代码:#include  <msp430g2553.h>unsigned char  i=3;void main(void){  WDTCTL = WDTPW+WDTHOLD;// Stop WDT  P1DIR |= BIT7+BIT6+BIT5+BIT4 ...…

查看全部问答>

新手如此简单完成电源设计!WEBENCH Power Designer 设计工具

新手如此简单完成电源设计!WEBENCH Power Designer 设计工具 你有什么想法,欢迎跟帖发表见解! WEBENCH设计环境为您提供了创建电源或直流/直流转换器所需的全面设计和原型建立工具,能够有效地满足您的设计要求。WEBENCH工具让设计者在建立原 ...…

查看全部问答>

说的对不对?关于2A的充电器是否可以给1A的手机充电

看到这篇文章是讲关于苹果产品的充电器问题,给大家推荐, 网上有许多关于充电器能否互换的问题。例如,2A的充电器能否给1A的手机充电?(ipad的充电器能否给iphone充电),1A的充电器能否给2A的设备充电。这里我来谈谈我的见解,如有不妥,请指正 ...…

查看全部问答>