基于AT89C2051的电子琴方案设计
入计数器TR1(或TR0)要为1,开关才能合上,脉冲才能过来。因此,TR1(O)称之为运行控制位,可用指令SErB来置位以启动计数器,定时器运行,用指令CLR来关闭定时/计数器的工作。当计数脉冲进入计数器后,计数脉冲加到TL1的低5位,从预先设置的计数初值开始不断增1。TL1计满后,向THl进位。当TL1和TH1都计满后,置位T1的定时器回零标志TF1,从此表明定时时间或计数次数已到,单片机可以根据标志位判断定时器的状态,从而执行相应的程序。
1.工作方式0
定时器,计数器的工作方式O称之为13位定时/计数方式。它由TL(1/0)的低5位和TH(0/1)的8位构成13位的计数器,此时TL(1/0)的高3位未用。
对于定时器的工作模式可以根据定时器的寄存器TMOD来设置:
①M1M0:定时/计数器共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。
②C/T:定时/计数器即可作定时用也可用计数用,如果C/T为O就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的。
③GATE:当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢? 有两种情况
GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR1是1,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1。
GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1引脚的控制,只有TRl为1,且INT1引脚也是高电平,开关才合上,计数脉冲才得以通过。这个特性可以用来测量一个信号的高电平的宽度。
2.工作方式1
工作方式1是16位的定时/计数方式,将M1M0设为01即可,其它特性与工作方式0相同。
3:工作方式2
8位自动装入时间常数方式。由TL1构成8位计数器,TH1仅用来存放时间常数。看图5所示,每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,计预置数进入低8位。这是由硬件自动完成的,不需要由人工干预。通常这种式作方式用于波特率发生器,用于这种用途时,定时器就是为了提供一个时间基准。计数溢出后不需要做事情,要做的仅仅只有一件,就是重新装入预置数,再开始计数,而且中间不要任何延迟,可见这个任务用工作方式2来完成是最妙不过了。
4.工作方式3
2个8位的计数器,只适合于定时器0。这种式作方式之下,定时/计数器0被拆成2个独立的定时/计数器来用。其中,TL0可以构成8位的定时器或计数器的工作方式,而THO则只能作为定时器来用。我们知道作定时、计数器来用需要控制位TR0,计满后溢出需要有溢出标记TF0。T0被分成两个来用,那就要两套控制及溢出标记,TLO还是用原来的T0的标记,而TH0则借用T1的标记。如此T1就无标记、控制可用因此一般只有在T1以工作方式2运行(当波特率发生器用)时,才让T0工作于方式3的。
(二)定时器/计数器的定时/计数范围
工作方式O:13位定时/计数方式,因此,最多可以计到2^13,也就是8192次。对于12MHz的晶振,单片机的机器周期是1us。则工作方式0最大定时时间是8.192us。
工作方式1:16位定时/计数方式,因此,最多可以计到2^16,也就是65536次。对于12MHz晶振,工作方式1最大定时时间是65536 μ s。
工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多可以计到2^8,也说是256次。对于12MHz晶振,工作方式1最大定时时间是256 μ s。
计数初值的计算方法:用最大计数量减去需要的计数次数即可。例:如果T0运行于定时状态,单片机的晶振是12MHz,要求定时lOOus,那么定时器要计 100个机器周期,当TO工作在工作方式O时计数初值应该是8192—100=8092;工作在方式1时的计数初值应该是65536-100= *36;工作在方式2,3时的计数初值应该是256—100=156。
系统软件流程图如图所示。
开机时。第一步是对定时器T0进行初始化,设定它的工作状态(对于本系统将T0设定为工作方式O);然后判断是否有键按下,如果没有按键按下,继续判断,如果有按键按下,则判断是哪个键按下;再根据按键的功能将计数初值装入定时器T0中中并启动T0,当T0定时完毕后,重新装入计数初值继续定时并将P3. 6取反,再次定时完毕后再一次的装入计数初值继续定时并将P3.6取反,一直循环此操作直到按键释放为止,按键释放后停止T0工作并再次判断是否又有按键
- AT89S51与AT89C2051单片机引脚介绍(12-03)
- AT89C2051单片机超声波测距系统硬件原理(11-30)
- 自己写的AT89C2051电子温度计(11-29)
- AT89S51与AT89C2051单片机介绍(11-26)
- AT89C2051利用中断产生PWM(11-25)
- 基于AT89C2051+ds18b20的温度计程序设计(11-23)