51单片机-定时器工作模式

发布者:幸福家庭最新更新时间:2021-10-14 来源: eefocus关键字:51单片机  定时器  工作模式 手机看文章 扫描二维码
随时随地手机看文章

1.两种“试管”

这种“试管”有65535个刻度的型号,也有255个刻度的型号,不过我们的导管水流流速是永远不变的。


如果我们用的是大试管(65535个刻度),那么溢出时间我们可以控制的长一些,也就是定时时间可以多一点。我们要是想定时36个单位刻度的时间,那就先往试管装好65500个刻度的水量先,这样等到水位到达65535那个刻度时,再加一个刻度就溢出了,这时溢出的就是36个单位刻度的时间。


“试管”每次水溢出,试管里的水就会消失不见(归0),如果我们还想定时36个单位刻度的时间,还需要重新把65500个刻度的水量再次装好给“试管”。


如果我们用的是小试管(255个刻度),虽然它的定时时间远远没有大试管的定时时间长,但是只要我们第一次装好水量,每次它溢出之后,不会马上归0,而是试管里的水重新归为我们第一次那个时候装好的水量,所以只要在第一次确定了水量,也就确定了以后的所有定时时长。


这种叫做“试管”的东西就是我们单片机内部的另一个寄存器,51单片机有两个定时器,分别叫做定时器0和定时器1,跟外部中断有 0和1的两个硬件资源一样。这里我们先拿定时器0来讲解,定时器1大体原理都一样。

 

2.“试管”的选择

而我们想选用哪个“试管”作为定时时长,首先需要初始化寄存器TMOD相对应的位的值。先看到下面这张图

8.1.png

可以看到圈出来的左右两个紫色框,4~7位是管定时器1的,0~3位是管定时器0的。

第2和第3位我们还没学到,此时不需要理会,主要看第0和第1位,这两个位决定的是我们该选用哪个“试管”。


如果M1=0,M0=1,选用的是“大试管定时模式”。

如果M1=1,M0=0,选用的是“小试管定时模式”。


因为我们暂时没有使用到定时器1,所以4~7位(俗称高4位)可以全置为0,2~3位用不到,也是置为0,我们先选择大试管作为定时时间先,所以TMOD这个寄存器初始化就是“TMOD=0x01;”

这里要注意,因为“M1”和“M0”在“#include”头文件中并没有“sbit M0=TMOD^0;”的内容,所以我们初始化只能是“TMOD=0x01;”一次操作8个位,而在程序里书写“M1=0;”和“M0=1;”是错误的。


我们把使用“大试管”称为定时器的工作模式1,使用“小试管”称为定时器的工作模式2。

关键字:51单片机  定时器  工作模式 引用地址:51单片机-定时器工作模式

上一篇:51单片机-定时器概念
下一篇:51单片机-定时时长的作法

推荐阅读最新更新时间:2024-11-13 10:23

stm32定时器主从模式
TIM2作master;TIM3,TIM4作slave 定时器2事件更新被用作触发输出TRGO 从定时器TIM3,TIM4工作在从模式:门控模式 触发选择设为:ITR1,这样TIM2的TRGO就连到了TIM3和TIM4的内部触发输入ITR1上,经过一系列选择器之后TIM2的TRGO就是TIM3和tim4的TRGI; 这样一来就可以通过控制TIM2的period和Pulse来控制TIM3和TIM4输出一定的脉冲个数;
[单片机]
stm32<font color='red'>定时器</font>主从<font color='red'>模式</font>
s3c2440看门狗定时器的应用
看门狗定时器的主要作用是在程序因为干扰而跑飞后,能够使系统复位,不至于使系统永远的死下去。 它的原理与一般的定时器没有多大区别,就是先要设置好一段时间,当超过这段时间后,就从当前运行的程序中跳出进入中断处理程序中。但两者的主要差别是,一般的定时器中断是我们希望它发生的,因此我们不会在定时器中断发生前的那个时间段内干预它;而看门狗定时器中断是我们不希望它发生的,因此我们要想方设法地避免其发生。主要的方法就是在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器重新开始计时。这种方法俗称喂狗,形象地比喻就是一条看门狗每隔一段时间(比如说一个小时)就会饿,所以就要叫唤,唯一使它不叫的方法就是给它喂食,那么下次叫唤的时间就是从当
[单片机]
STM8 基本定时器初始化Time4
void Time4_Initialize(void) { TIM4_TimeBaseInit(TIM4_PRESCALER_64,24); //100μS TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE); TIM4_ClearFlag(TIM4_FLAG_UPDATE); } STM8基本定时器: TIM4_PRESCALER_64:预分频 24:计数周期,从零开始计数. 注意:若是立即启动计数,则在函数里添加TIM4_Cmd(ENABLE),否则在延时处开启.
[单片机]
基于51单片机ADC0808的proteus仿真
使用ADC0808的IN0通道,输入CLOCK为500KHZ,采用AT89C51单片机 ADC0808的ADDA、ADDB、ADDC为000对应通道IN0 ADC0808的ADDA、ADDB、ADDC为001对应通道IN1 ADC0808的ADDA、ADDB、ADDC为010对应通道IN2以此内推。 START和ALE可以共用一个I/O口,它们是同步的。 本文采用IN0通道所以ADDA、ADDB、ADDC直接接地。 数码管显示部分代码,数码管采用共阴极显示 #include REGX52.H #include Delay.h sbit we1=P3^0; sbit we2=P3^1; sbit w
[单片机]
基于<font color='red'>51单片机</font>ADC0808的proteus仿真
普通51单片机驱动3.5寸TFT的应用实例与源代码!
  前市场流行的3.5寸屏基本上都是只内置了驱动器,而不带控制器,这样给用户的使用造成了一些难度。基本上很多朋友在用彩屏时选择一些带 LCD 控制器的ARM7或ARM9去开发,对于不会ARM开发的朋友来说,只使用普通MCU,这样可以选择的3.5寸TFT模块,就很难找到了。   本文就是基于市场上一款比较使用的3.5寸TFT模块编写的,用户只需要帮该TFT模块当作普通的单色液晶的开发思路来使用,就可以很容易去编程。   一、 硬件选择   1、 MCU:AT89S51   2、 开发编译环境:Keil C51   3、 3.5寸TFT模块型号:MzT35C1   二、 TFT模块基本性能:   1、
[单片机]
普通<font color='red'>51单片机</font>驱动3.5寸TFT的应用实例与源代码!
linux2.4.18内核定时器的使用
我的内核是 2.4.18 的。 Linux 的内核中定义了一个定时器的结构: #include linux/timer.h struct timer_list { struct list_head list; unsigned long expires; // 定时器到期时间 unsigned long data; // 作为参数被传入定时器处理函数 void (*function)(unsigned long); }; 利用这个结构我们可以在驱动中很方便的使用定时器。 一: timer 的 API 函数: 初始化定时器: void init_timer(str
[单片机]
STM8S 定时器第一次使用时间不准确的问题
以前用定时器只是提供系统的5ms时基,并没有发现问题,最近做红外遥控器的解码,发现启动定时器TIM2后,第一次总是时间没到就触发中断了,之后也都正常了,也就是说问题出在刚配置好第一次使用的时候 由手册得知,定时器的预分频器PSCR并不是立即生效的,只有触发一次中断事件后,才会写入设定的分频值,系统也提供了EGR寄存器的UG位来主动软件触发中断事件,可以用来解决这个问题
[单片机]
STM8S <font color='red'>定时器</font>第一次使用时间不准确的问题
T0作定时器汇编程序(中断法)
单片机T0作定时器实现数码管显示的汇编程序(中断法) 电路是:P0口接数码管的字型码笔段,P2口接数码管的数位选择端. 下面是汇编语言源程序: SECOND EQU 30H TCOUNT EQU 31H ORG 00H LJMP START ORG 0BH LJMP INT0X START: MOV SECOND ,#00H MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR MOV P2,A MOV TCOUNT,#00H M
[单片机]

推荐帖子

RSL10-002GEVB扩展板设计
这次大赛我需要用到很多模块,特地做了一块扩展板,体验了一把在线EDA软件:立创eda,画一些简单的板子确实不错,有浏览器就可以干活,操作也和熟悉的AD差不多。特地分享一些我的原理图和pcb。RSL10-002GEVB扩展板设计立创eda在线画图,确实不错宣传说国外的用户比国内多用它画过小板和楼主的体验一样把楼主的图贴出来欣赏一下给两位点个赞!从来没接触过两位提到的立创eda在线画图,请教一下对于新器件需要自己做库才能画的情况怎么处理,也允
dql2016 安森美和安富利物联网创新设计大赛
时钟单调性问题调试
时钟单调性问题调试本文结合实际测试中遇到的时钟信号回沟问题介绍了高速信号的概念,进一步阐述了高速信号与高频信号的区别,分析了25MHZ时钟信号沿上的回沟等细节的测试准确度问题,并给出了高速信号测试时合理选择示波器的一些建议。时钟单调性问题调试时钟单调性,是需要补充一下了
安_然 测试/测量
环形铁芯,知道尺寸,怎么算他的功率
环形,材质,硅钢片高100mm,厚80mm 环形铁芯,知道尺寸,怎么算他的功率做工频变压器
longhaozheng 电源技术
怎样为pci寻找地址映射
怎样读取pcibar0中的地址,并且映射成可以使用的虚拟地址?2.6的内核。ioremap?ioportremap?dev_resource_start?怎样为pci寻找地址映射ioremap
fuhuait 嵌入式系统
PCB表面贴装电源器件的散热设计
以Micrel公司表贴线性稳压器为例,介绍如何在仅使用一个印制电路板的铜铂作为散热器时是否可以正常工作。1.系统要求:VOUT=5.0V;VIN(MAX)=9.0V;VIN(MIN)=5.6V;IOUT=700mA;运行周期=100%;TA=50℃根据上面的系统要求选择750mAMIC2937A-5.0BU稳压器,其参数为:VOUT=5V±2%(过热时的最坏情况)TJMAX=125℃。采用TO-263封装,θJC=3℃/W;θCS≈0℃/W(直接焊接在电路板上)。2.初步计算:
zbz0529 电源技术
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved