PIC单片机软件开发方法

发布者:紫色小猫最新更新时间:2020-02-10 来源: eefocus关键字: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近年来重点发展的系列产品,品种最为丰富,其性能比低档产品有所提高,增加了中断功能,指令周期可达到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单片机的精髓。

关键字:PIC单片机  软件开发  开关控制 引用地址:PIC单片机软件开发方法

上一篇:基于Microchip PIC32MM开发板的电机控制
下一篇:怎样解决pic单片机读修改写问题

推荐阅读最新更新时间:2024-11-17 04:19

开关电源的实现数字化控制实现方案
尽管业内不少人都认为,模拟和数字技术很快将争夺 电源 调节器件控制 电路 的主导权,但实际情况是,在反馈回路控制方面,这两种技术看起来正愉快地共存着。 的确,许多 电源管理 供应商都提供了不同的方案。一些数字控制最初的可编程优势现在甚至在采用模拟反馈回路的控制器和稳压器中也有了。当然,数字电源还是有一些吸引人之处。 本文主要讨论脉冲宽度调制(PWM)、脉冲密度调制(PDM)和脉冲频率调制(PFM)开关稳压器和控制器IC。其中一些集成了控制实际开关的一个或多个晶体管的驱动器,另一些则没有。还有一些甚至集成了开关FET,如果它们提供合适的负荷的话。因此,数字还是模拟的问题取决于稳压器的控制回路如何闭合。 图
[电源管理]
<font color='red'>开关</font>电源的实现数字化<font color='red'>控制</font>实现方案
pic单片机p18f458上实现发送
//该程序运行在p IC 单片机 p18f458上实现发送 缓冲器 0向接收缓冲器0发送数据的自测试模式,其中接收采用中断方式 //发送采用查询方式 #include p18f458.h int CAN _FLAG; //定义标志寄存器 //**************初始化子程序*************** void initcan() { TRISB=(TRISB|0X08)&0XFB; //设置CANRX/RB3为输入,CANTX/RB2为输出 //设置CAN的波特率为125K,在Fosc=4M时,Tbit=8us,假设BRP=01h //则TQ= /Fosc=2*(1+1)/4=1us。 //NOMINAL BIT
[单片机]
LCD驱动HT1621的PIC单片机源代码
STATUS EQU 3H FSR EQU 4H RB EQU 6H RC EQU 7H OPTIONA EQU 81H TRISB EQU 86H TRISC EQU 87H GENR0 EQU 053H GENR1 EQU 054H WD_RG EQU 055H DA_AG0 EQU 056H ;SEG0 SEG1 DA_AG8 EQU 05EH ;SEG16 SEG17 ;............................. C EQU 0 Z EQU 2 RP0 EQU 5 RP1 EQU 6 CS
[单片机]
PIC单片机】-- LCD的相关知识
00 写在前面 该系列的文章,源自于担任过PIC单片机课程的助教,主要向学弟们讲解了几节实验课的内容。在此记录上课的一些知识。 本系列文章主要介绍的内容: 实验1–介绍和基本I/O–按钮和LED(学习嵌入式的第一步就是点一个灯,就像学习编程语言的第一步都是写一个“hello world”代码) 实验2–MPLAB+PICkit 3+LCD+I/O(这次主要是介绍液晶显示屏的使用,很多时候我们系统的调试都需要用到,比如做一个测温系统,那我们就可以通过液晶显示屏,显示传感器采集的数值,然后再通过软件来做进一步的处理) 实验3–ADC(这个是模数转化实验,就是之前模数电学习那些知识的一个综合运用) 实验4–串行通信–UA
[单片机]
【<font color='red'>PIC单片机</font>】-- LCD的相关知识
医疗设备软件开发--模型驱动
在当今的互连世界,医疗设备理所当然地容纳了更多具有智能功能的创新性能。这些新型性能通常采用软件进行设计;因此,用于实现这些新功能的软件日益复杂。同时,FDA及其它管理机构也逐步对医疗设备制造商施加压力,以确保产品安全和有关医疗设备报告信息的准确性。   市场上面临产品复杂性增加、上市压力、产品安全和监管,对于医疗设备公司来说应对这些挑战成为良好的商业常识。本文探究一种开发医疗设备软件的模型驱动方法。   设备制造商正处于软件开发的转折点,几种工具可能会帮助他们改良生产率和质量。一种模型驱动的开发流程集成了产品开发的多样阶段,从需求分析到系统设计、实现、文档制作和测试。此工作流程有助于使复杂的需求和架构能图形化地以图表形式表
[工业控制]
医疗设备<font color='red'>软件开发</font>--模型驱动
PIC单片机人机接口模块元器件选择分析
   PIC单片机人机接口模块元器件选择说明:     (1)芯片引脚。   12~20根为PIC16C5X的双向可独立编程I/O口,每根I/O口都可由程序来编程决定其输入/输出方向。PIC16C5X有5种型号,如表1所示   表一 PIC16C5X管脚   PIC16C5X管脚图如图1所示 图1 PIC16C5X管脚图   各引脚的功能描述如表2所示   表2 各引脚的功能   (2)内部结构。   PIC16CSX在一个芯片上生成了一个8位算术逻辑单元ALU和工作寄存器W;384bit~2KB的12位程序存储器ROM;32~80个8行数据寄存器RAM;12~20个I/O
[单片机]
<font color='red'>PIC单片机</font>人机接口模块元器件选择分析
CODARTS建模方法在嵌入式软件开发中的应用
摘要:嵌入式系统的工作环境基础上都是并发和实时的。随着应用需求的增长,嵌入式系统软件不得不变得越来越复杂,越来越庞大。CODARTS方法融入了COBRA方法和DARTS方法的优点,提出了针对并发和实时系统软件的设计方法,为嵌入式软件开发工作提供了一条捷径。本文结合实时检测系统的具体应用,简要介绍CODARTS的实际开发过程。 关键词:嵌入式系统 CODARTS 并发性 实时性 随着半导体制造行业的迅速发展,微处理器的价格在实际性能大幅度提升的同时却在大幅度降低,使得基于嵌入式处理器和微型计算机系统的实时多任务系统成为解决诸多应用问题的一种高效率、低成本的有效方案。目前,囊括工业、消费电子、医疗、军事等许多方面的产品都是基于嵌
[应用]
电流控制型脉宽调制器UC3842在开关电源中的应用
引言 开关稳压电源被誉为“新型高效节能电源”,它代表着稳压电源的发展方向。由于内部器件工作在高频开关状态,因此本身消耗的能量极低,电源效率可以达到80%以上,比串连调整线性稳压电源的效率提高近一倍。随着电源技术的飞速发展,开关稳压电源正朝着小型化、高频化、集成化的方向发展,高效率的开关稳压电源已得到越来越广泛的应用。本文首先概述开关稳压电源的基本工作原理,接着介绍电流型脉宽调制器UC3842芯片,着重论述了UC3842在开关稳压电源中的应用,并以一个实际应用实例分析了电源电路的构成和参数计算。 开关电源的基本工作原理 相对于线性稳压电源功耗较大的缺点,开关电源的效率可达90%以上,而且造价低、体积小。开关电源的工作原理如图1所示
[电源管理]
电流<font color='red'>控制</font>型脉宽调制器UC3842在<font color='red'>开关</font>电源中的应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved