内容正文:
任务一 输出1 000 Hz的方波
任务二 每秒闪烁一次的LED
任务三 简易频率计
课题六 建议频率计
在实践中,往往需要利用单片机实现间隔一较短时间重复执行某一事件的功能。使用单片机可输出不同频率的方波,既可以作为其他电路的信号源,也可作为报警器、简易音乐等的信号提供电路,直接驱动发声器件发出对应的声音。
本任务的内容是使用AT89S51单片机的定时/计数器模块,利用定时中断实现从P1.0输出1 000 Hz方波的功能。
任务提出
任务一 输出1 000 Hz的方波
根据任务目标,要实现从P1.0输出1 000 Hz的方波,实际上就是要求从P1.0连续输出周期为1 ms的方波,或者说按标准时间间隔改变P1.0引脚的高低电平。由于单片机的定时/计数器属于单片机内部功能模块,所以整个系统的硬件仅需要单片机的最小系统即可。
任务分析
要完成标准时间间隔,可以采用空循环指令的方式实现延时,其缺点是单片机在定时期间内不能进行其他操作,使单片机的工作效率极低;也可以采用执行其他任务来兼顾延时,但执行其他任务的耗时与期望定时的时间不尽相同,因此不能实现精确定时。
为了解决精确定时与执行其他任务之间的矛盾,常采用单片机定时/计数器定时中断的方式来实现精确定时。
采用定时中断时,定时的任务是由单片机的定时/计数器硬件单独完成的,而单片机就可以正常地执行其他程序任务,只有当定时时间到了,才中断正在执行的程序,转去执行中断服务程序,中断服务程序执行完成后,自动回到断点,继续执行被中断的程序。
一、定时/计数器简介
在8051系列单片机中有两个可编程的定时/计数器,分别叫做T0和T1。在8052系列单片机除了上述两个定时/计数器外,还有一个定时/计数器2(T2),它的功能更强一些。它们既可以编程作为定时器使用,也可以编程作为计数器使用。T1和T2还可以作为串行接口的波特率发生器。
相关知识
定时/计数器实质上就是一个加1计数器,定时器实际上也是以计数方式工作的,只是它对固定频率的脉冲进行计数,由于脉冲周期固定,由计数值可以计算出定时时间,由此实现定时功能。
当定时/计数器工作于定时器方式时,它对具有固定时间间隔的内部机器周期进行计数,每个机器周期使定时器的值增加1。而每个机器周期等于系统石英晶体振荡器的12个振荡周期,故计数频率为系统振荡器工作频率的1/12,当采用12MHz的晶振时,计数频率为1 MHz,计数周期为1 μs。
定时/计数器的寄存器是一个16位的寄存器,由两个8位寄存器组成。对应定时器T0的寄存器是由TL0和TH0组成的,对应定时器T1的寄存器是由TL1和TH1组成的。定时/计数器的初始值通过计数寄存器进行设置,定时或计数的脉冲个数也可以从计数寄存器读出。
T0和T1由模式控制寄存器TMOD来设置工作方式,由控制寄存器TCON来控制T0、T1的启动、停止和设置溢出标志。
当计数溢出(计数器计数到所有位全为“1”时,下一个计数脉冲到达时,使计数各位全部回到零)时,使定时器控制寄存器TCON的TF0或TF1位置1,向CPU发出中断请求,在定时/计数器中断允许的情况下,将引起定时中断。当发生溢出时,如果定时/计数器工作于定时模式,则表示定时时间已到,如果工作于计数模式,则表示外部脉冲个数已超过定时/计数器设置的工作方式允许的最大计数值。
二、定时/计数器的模式控制寄存器TMOD
模式控制寄存器TMOD是对定时器0和定时器1的计数方式和计数器控制方式进行设置的寄存器,低4位用于T0,高4位用于T1。TMOD位于内部特殊寄存器区的89H单元,TMOD不能位寻址,即只能对其整体赋值或读取。CPU复位时TMOD所有位清0。TMOD寄存器的八位控制功能如下所示:
定时/计数器有4种工作方式,由M1、M0位进行设置。工作方式的设置见表。
定时/计数器工作方式
1.方式0
定时/计数器工作方式0的结构图
2.方式1
定时/计数器工作方式1的结构图
3.方式2
定时/计数器工作方式2的结构图
4.方式3
定时/计数器工作方式3的结构图
四、定时/计数器中断的实现过程
在外部中断模块中已介绍过中断控制寄存器TCON,TCON的低4位用于外部中断控制,而TCON的高4位则用于定时/计数器的启动和中断申请,TCON位于内部特殊寄存器区的88H单元,高4位功能如下所示:
为了说明定时/计数器中断时各寄存器的设置和工作过程,图给出了定时/计数器T0中断设置和工作示意图。
定时/计数器中断设置和工作示意图
五、定时/计数器的初始化设置
定时/计数器的初始化是非常重要的,以定时器0为例,初始化编程格式如下所示:
TMOD=方式字; //选择定时器的工作方式,高4位为T1的设置
TH0=高8位初始值;//装入T0时间常数
TL0=低8位