51单片机定时器的使用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1
51单片机定时器/计时器的使用
步骤:
1、 打开中断允许位:
对IE 寄存器进行控制,IE 寄存器各位的信息如下图所示:
EA : 为0时关所有中断;为1时开所有中断
ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES : 为0时关串口中断;为1时开串口中断 ET1:为0时关T1中断;为1时开T1中断 EX1:为0时关1时开 ET0:为0时关T0中断;为1时开T0中断 EX0:为0时关1时开
2、 选择定时器/计时器的工作方式:
定时器TMOD 格式
CPU 在每个机器周期内对T0/T1
检测一次,但只有在前一次检测为1和后一次检测为0时才会使计数器加1。因此,计数器不是由外部时钟负边沿触发,而是在两次检测到负跳变存在时才进行计数的。由于两次检测需要24个时钟脉冲,故T0/T1线上输入的0或1的持续时间不能少于一个机器周期。通常,T0或T1输入线上的计数脉冲频率总小于100kHz 。
方式0:定时器/计时器按13位加1计数,这13位由TH 中的高8位和TL 中的低5位组成,其中TL 中的高3位弃之不用(与MCS-48兼容)。
13位计数器按加1计数器计数,计满为0时能自动向CPU 发出溢出中断请求,但要它再次计数,CPU 必须在其中断服务程序中为它重装初值。
方式1:16位加1计数器,由TH 和TL 组成,在方式1的工作情况和方式0的相同,只是计数器值是方式0的8倍。
2
方式2:计数器被拆成一个8位寄存器TH 和一个8位计数器TL ,CPU 对它们初始化时必须送相同的定时初值。当计数器启动后,TL 按8位加1计数,当它计满回零时,一方面向CPU 发送溢出中断请求,另一方面从TH 中重新获得初值并启动计数。
方式3:T0和T1工作方式不同,TH0和TL0按两个独立的8位计数器工作,T1只能按不需要中断的方式2工作。 在方式3下的TH0和TL0是有区别的:TL0可以设定为定时器/计时器或计数器模式工作,仍由TR0控制,并采用TF0作为溢出中断标志;TH0只能按定时器/计时器模式工作,它借用TR1和TF1来控制并存放溢出中断标志。因此,T1就没有控制位可以用了,故TL1在计满回零时不会产生溢出中断请求的。 显然,T0和T1设定为方式3实际上就相当于设定了3个8位计数器同时工作,其中TH0和TL0为两个由软件重装的8位计数器,TH1和TL1为自动重装的8位计数器,但无溢出中断请求产生。由于TL1工作于无中断请求状态,故用它来作为串口可变波特
3、 为计数器赋值
计数器初值计算
TC =M −C
TC :计数器初值,M :计数器模值(2k ),C :把计数器计满的计数值 定时器初值计算
T =(M −TC )T 计数
或
TC =M −T/T 计数
M :模值,T 计数:单片机时钟周期T CLK (ΦCLK 的倒数)的12倍;TC 为定时器的定时初值,T 为欲定时的时间。
TC =M −T ×ΦCLK /12
M :模值,ΦCLK :单片机时钟周期ΦCLK ;TC 为定时器的定时初值,T 为欲定时的时间。 例如:单片机主脉冲频率ΦCLK 为12MHz ,最大定时时间为: 方式0时 T MAX = 213×1us = 8.192ms 方式1时 T MAX = 216×1us = 65.536ms 方式2和方式3 T MAX = 28×1us = 0.256ms
4TR0:为0时,停T0计数;为1时,启T0计数
TF0:为0时,无T0中断(硬件复位);为1时,有T0溢出中断
TR1:为0时,停T1计数;为1时,启T1计数
TF1:为0时,无T1中断(硬件复位);为1时,有T1溢出中断
IE1:为0时,硬件复位;为1时INT1上有中断
IT1:为0时,INT1电平触发(软件复位);为1时,INT1负边沿触发
IE0:为0时,硬件复位;为1时
IT0:为0时,INT0电平触发(软件复位);INT0负边沿触发
5
在C51的C语言中使用interrupt x来指定中断入口地址,x为中断号,例T0中断:void Time0_Int() interrupt 1 //定时器T0的中断入口程序
3