您的位置:网站首页 > 电器维修资料网 > 正文 >
PIC单片机延时与可可逆计数器程序
来源: 日期:2013-11-14 15:25:52 人气:标签:
附表中的后两条位测试(或位判断)指令,只需掌握其中任何一条指令的应用,均可学会它们的用途。位测试(或称位判断)指令btfss(或btfsc)主要是判断pic单片机的a口或b口某个位是否有电平发生了变化,若有变化,程序会按指定的方向进行。该两条指令常用于pic单片机,用人功方法起动输入口去执行某种功能,或pic单片机的a口、b口有输入脉冲作用时,使输出口执行一系列的程序功能。pic单片机面向位的指令其操作十分简单,是很常用的指令。
二、面向字节的指令
面向字节指令是指参与指令的操作数为pic芯片内寄存器的所有位即字节(8位),其指令格式如下:
操作码 f,d
以上格式中的操作码和寄存器f的功能与面向位的指令相同。
格式中的d称为目标码选择指示符,其指示功能是规定操作的结果存放在哪个寄存器中。如果d=0,则结果存放在工作寄存器w中;如果d=l,则结果存放在指令所使用的寄存器中;d缺省,默认d=l。pic单片机面向字节的指令近20条,以下将逐步介绍它们的应用。
1.寄存器f内容递减为零间跳指令
格式:decfszf,d
功能:这是一条具有条件判断性质的指令,即寄存器f的内容减1(即递减),若不为零,程序顺序执行;若为零,则程序跳过下一条指令(即间跳)再执行。寄存器内容减l结果存人寄存器f(指示符d=l)或存人工作寄存器w(指示符d=0)。
2.寄存器f内容递增为零间跳指令
格式:incfszf,d
该条incfsz的指令,与decfsz的逻辑功能完全相同,不同的地方只需把上述的递减(减1)改为递增(加1)即可。
上述两条指令的操作,均不影响状态位的变化。
三、方波发生器和延时程序
利用pic16f84制作方波发生器是pic单片机 简单的一种应用。
发生的方波其 高频率与单片机时种频率(晶体频率)有关,而频率的下限可由软件任意设置:方波的占空比也可由软件任意设置;方波的输出电压和驱动能力为5v/25ma。pic16f84方波发生器的硬件电路如下图所示。电路中的晶振xl为2mhz(对16f84芯片 高可取20mhz),cl、c2和xl组成时钟振荡器;rl、c3、二极管d和kl组成手动复位电路;ra0口上的r2和k2组成方波发生的起动电路。rb7口为方波输出,其中led2为方波输出指示器。rb0~rb6口都未接有led,该7个输出端这里暂时不用,在后面介绍的可逆计数器时将被派上用场:r3、r4为发光二极管的限流电阻。
pic16f84方波发生器的流程如下图所示;源程序(命名为pic03.asm)清单如下:
说明:
1.关于复位电路
pic单片机的复位通常有几种方式:(1)芯片上电复位。因芯片内集成有上电复位电路(por),所以一旦给芯片供电,芯片会自动复位。所以读者会发现,许多pic单片机产品,常把mclr的反端(pic16f84的④脚)直接接芯片的电源vdd端或通过电阻接vdd,使芯片上电自动复位。在图l电路中若要简化电路,c3、d和开关kl均可不用,同样可到复位效果。(2)外部mlr引脚加低电平复位。对于一些特殊应用,可在mclr的反端引入复位电路。如图1中,在pic16f84的mclr的反④脚引入c3、d、rl和kl组成的复位电路,是为了后面介绍可逆计数器而设置的。当手动使kl按下时,给mclr(的反)端一个低电平脉冲,达到外部使pic16f84复位目的。(3)正常工作状态下,监视定时器wdt(又称看门狗)超时溢出复位(后文有专门介绍其用途)。当然还有其它一些复位方式。
2.关于指令周期
pic单片机采用了精简指令集(risc)结构,内部总线又采用了各自独立的数据总线和指令总线的哈佛结构。数据总线是8位的,而指令总线可以是多位单字长指令。pic单片机内部cpu执行指令通常是一行接着一行顺序执行其指令(由程序存储器的低位地址向高位地址执行)。执行一条指令所用的时间称为一个指令周期。指令周期的时间与pic单片机配置的时钟频率有关,即以pic单片机配置的晶振频率除以4为一个指令周期的时间。为了本文计算方波频率方便,下表列出了pic单片机常用的时钟频率和指令周期的关系表。
查阅pic系列单片机的指令表集,将发现指令表中除了程序分支指令是双周期指令外,其余指令全都是单周期指令。所以上述介绍的有关指令中,除了goto跳转指令和btfss/btfsc间跳时的指令是双周期外,其余都是单周期指令。
3.关于方波发生器
方波发生器电路其输出方波如下图所示。方波的产生全部用汇编软件的延时程序来实现。在上述的源程序中,若ra0口无电平变化,程序会在标号loop地址处于等待状态;若rao口有电平变化,程序依次执行延时程序而使输出产生方波,所以ra0口外接的开关k2是方波发生器的人工起动开关。一旦人工触动开关k2,程序开始执行,首先令b口的d7位置l,然后通过计数器counter1和counter2不断加1,以执行标号delayl的延时程序,形成图3方波周期t的tl时间:
然后又令b口的d7位置0,再利用标号delay2的延时程序,形成方波周期的t2时间。所以方波的周期t=t1+t2。
4.关于方波频率
pic16f84方波发生器硬件电路输出方波频率f的计算可分两个步骤,其一是计算上述程序中产生方波有关指令执行周期的总次数;其二是利用表2,查阅指令周期的时间(当图1电路的时钟频率xl为2mhz时,单周期指令为2μs),再乘以上述周期总的次数,即为方波的周期t=t1+t2,其对应的频率f=l/t。计算时,指令周期数应从btfss之后的标号occur开始(方波启动);计数器counter1、couter2的 大值为255;跳转指令为双周期的。则,方波pic03.asm的执行指令周期的总次数
我们可以将上述pic03.asm源程序汇编,生成pic03.hex目标码文件,再用pic实验编程器或其它pic编程器将pic03.hex烧写到pic16f84中,按图1装配好印板电路,或直接用pic实验编程器配套的实验板即可演示方波的功能。操作时只需将电路板接通电源,启动k2开关,此时可用人工记录led的闪动为每分钟76次,计算值和演示值十分一致。
5.关于pic03.asm程序
上述源程序简单的实例,是为了给初学者提供一种方波振荡器工作过程和计算方波频率(延时程序)的一种思维方法。学会上述的计算方法也是为下次设计秒脉冲发生器打下基础。从上述计算可以看出,方波周期的起始时间,是以产生方波的有效时刻开始的,而不是所有源程序的执行时间。
值得注意:在上述源程序中,方波tl的延时程序用了加l判断指令;而t2的延时用了减1的判断指令,这里它们的延时量是完全等效的,所以加、减判断指令,在这里可以互相替换。
- 1
- 2
- 下一页
【看看这篇文章在百度的收录情况】
相关文章
- 上一篇: 电路设计中的电感线圈及变压器
- 下一篇: 揭开IC卡的神性面纱