历史上的今天
返回首页

历史上的今天

今天是:2025年02月10日(星期一)

正在发生

2020年02月10日 | PIC单片机软件开发方法

2020-02-10 来源:eefocus

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近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达到200ns,带A/D,内部E2PROM数据存储器,双时钟工作,比较输出,捕捉输入,PWM输出,I2C和SPI接口,异步串行通讯(USART),模拟电压比较器及LCD驱动等等,其封装从8脚到68脚,可用于高、中、低档的电子产品设计中,价格适中,广泛应用在各类电子产品中。


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


在进行判断标志位时,Z(零标志)、C(借位标志)是不同的。Z为l时,表示上面的结果为0,Z为0时,则结果不为0。C为l时,借位,C为0时,没有借位。在使用定时器的时候,一般使用C标志位,这是由于当完成某一动作去检查定时器时,时间可能没到,或是正好,或是已经超过时间,只要到了或超过时间,都要按照要求关闭定时器,如下面程序所述。进行一般的计算时大多用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单片机的精髓。

推荐阅读

史海拾趣

博流(Bouffalo Lab)公司的发展小趣事

博流公司的卓越表现引起了业界的广泛关注。2019年,公司荣获了Red Herring Top 100 Asia大奖,这是对其在AIoT/边缘计算SOC芯片研发领域的快速成长和技术实力的高度认可。此外,博流还获得了多项国内外专利和荣誉,证明了公司在行业内的领先地位。

德旭电子(DEXU)公司的发展小趣事

在德旭电子的发展历程中,供应链管理和成本控制一直是公司关注的重点。为了降低生产成本和提高产品质量,公司不断优化供应链管理流程和技术手段。

德旭电子与多家优质供应商建立了长期稳定的合作关系,并通过引入先进的供应链管理软件和系统实现了供应链的数字化和信息化管理。这些措施有效提高了供应链的响应速度和灵活性,降低了库存和运营成本。

在成本控制方面,德旭电子注重精细化管理和持续改进。公司通过优化生产流程、提高生产效率、降低能耗和原材料成本等措施不断降低生产成本。同时,公司还建立了完善的成本管理体系和考核机制确保成本控制工作的有效实施。

创都(CAX)公司的发展小趣事

企业文化是企业的灵魂和精神支柱。创都公司自创立之初就注重企业文化的建设与发展。他们倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于创新、敢于担当。同时,公司还注重员工培训和职业发展规划的制定与实施,为员工提供了广阔的发展空间和良好的职业前景。这些措施不仅激发了员工的积极性和创造力还增强了企业的凝聚力和向心力使得创都公司在激烈的市场竞争中始终保持着旺盛的发展势头。

DZUS公司的发展小趣事

面对日益严峻的环境保护问题,DZUS公司积极响应国家号召,制定了可持续发展战略。公司采用环保材料和生产工艺,减少了对环境的污染和破坏。同时,公司还加大了对可再生能源的研发和应用力度,致力于推动绿色生产和可持续发展。这些举措使DZUS公司成为了行业的环保标杆,并赢得了社会各界的广泛赞誉。

CET Technology公司的发展小趣事

随着数字化转型的深入,CET Technology紧跟时代步伐,成功研发出数字化安全生产管控平台。该平台通过整合配电、给水、电梯、消防、空调、安防等各系统,建立统一的安全物联感知平台,实现对安全生产各要素的在线监测。利用3D可视化技术,关键信息得以直观呈现,为企业的安全生产管理提供了有力支持。此外,CET还引入了AI技术,对安全风险进行精准预测,助力企业防范和应对各类安全事件。

Denyo Europa Gmbh公司的发展小趣事

随着技术的成熟,Denyo Europa Gmbh公司开始将目光投向国际市场。公司利用自身的技术优势,结合对目标市场的深入调研,制定了一系列市场拓展策略。通过与当地合作伙伴的紧密合作,公司成功将产品打入多个国家和地区,实现了业务的全球化布局。这一过程中,公司不仅积累了宝贵的国际市场经验,也为公司的持续发展奠定了坚实基础。

问答坊 | AI 解惑

现场总线温度变送器原理及应用

一、引言   信息技术的飞速发展,引起了自动化系统结构的变革,逐步形成了以网络集成自动化系统为基础的企业信息系统。现场总线就是顺应这一形势发展起来的新技术。现场总线是应用在生产现场,在微机化测量控制设备(称为现场总线仪表)之间实 ...…

查看全部问答>

怎么用VHDL语言实现1602的字母的直接输入

我想通过FPGA实现与1602的控制 想显示几个英文字母 但是不知道用VHDL语言怎么实现 知道的告诉一声…

查看全部问答>

合格的电子工程师需要掌握的知识和技能

掌握了一下的硬件和软件知识,基本上就可以成为一个合格的电子工程师: 第一部分:硬件知识 一、 数字信号 1、 TTL和带缓冲的TTL信号 2、 RS232和定义 3、 RS485/422(平衡信号) 4、 干接点信号 二、 模拟信号视频 1、 非平衡信号 ...…

查看全部问答>

计数器与定时器

计数器与定时器一、计数概念的引入 从选票的统计谈起:画“正”。这就是计数,生活中计数的例子处处可见。例:录音机上的计数器、家里面用的电度表、汽车上的里程表等等,再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测 ...…

查看全部问答>

VS 中的EDIT Control 控件的问题

VS Edit Control 控件的编辑框滚动条动往下滚   随着内容的增加 而自动往下滚动 怎么设置…

查看全部问答>

求助,VxWorks异常

各位大侠,我在VxWorks下写了一个程序,在shell中敲入入口函数运行一段时间,就会出现问题,Shell中显示的错误是这样的: Error while polling for events WTX Error 0x100d2(AGENT_GOPHER_TRUNCATED) 有哪位大侠知道这是什么错误啊?多谢了。…

查看全部问答>

帮我解释两个名词?

最近在学ARM,其中提到模块的四个状态:Enable、Disable、SyncRst、SwRstDisable,请问后两个状态是什么意思啊,怎么理解呢?谢谢哦…

查看全部问答>

ST发布基于STM8的TouchSensingLibrary,支持按键、滑轮

ST刚刚发布基于STM8系列MCU的电容触摸感应固件库,相信基于STM32的库也很快就会提供。下载地址:http://www.st.com/mcu/files/mcu/1234113356.exe================================================================================ &nb ...…

查看全部问答>

基于Verilog计算精度可调的整数除法器的设计

本帖最后由 paulhyde 于 2014-9-15 09:26 编辑 基于Verilog计算精度可调的整数除法器的设计  …

查看全部问答>

线性汇编数组问题

最近刚开始接触,有个问题想请教一下各位大大们我如何在线性汇编中调用C语言中已经定义的数组 例如:int A[3]={0,1,2};B[2][3]={{0,1,2},{0,1,2},{0,1,2}}如果在线性汇编中如何定义数组并赋值(一维、二维、三维),如何调用数组针对结构体如何写成 ...…

查看全部问答>