您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制PIC单片机延时与可可逆计数器程序 正文
PIC单片机延时与可可逆计数器程序

PIC单片机延时与可可逆计数器程序

点击数:7565 次   录入时间:03-04 12:03:00   整理:http://www.55dianzi.com   电脑-单片机-自动控制

  PIC单片机的汇编指令,可分为三大类,即面向位的指令、面向字节的指令和面向常数和控制的操作指令。
  
  一、面向位的指令
  
  面向位的指令是指参与指令的操作数,如应用技术讲座(一)中,表1的特殊功能寄存器、通用寄存器(RAM)等,是8位中的某一位,而不是全部字节(8位)。面向位指令的格式如下:
  
  操作码f,b
  
  式中的操作码是指PIC汇编指令的助记符;f代表寄存器及其所在的地址:b代表0~7中的某个位。
  
  对PIC单片机的基本级产品和中级产品,其“位”的指令共4条,其功能如表所示。

功能


  
  附表中的后两条位测试(或位判断)指令,只需掌握其中任何一条指令的应用,均可学会它们的用途。位测试(或称位判断)指令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方波发生器的硬件电路

  PIC16F84方波发生器的流程如下图所示;源程序(命名为PIC03.ASM)清单如下:

PIC16F84方波发生器流程图

程序清单

  说明:
  
  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单片机常用的时钟频率和指令周期的关系表


  
  查阅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]  下一页


本文关键字:单片机  程序  计数器  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制