单片机C语言编程(定时器计数器)
51 单片机 定时器 c语言

51 单片机定时器 c语言51单片机是一款广泛应用于物联网、智能家居等领域的微控制器。
作为其重要的组成部分,定时器在系统中发挥了重要的作用。
本文将以51单片机定时器在C语言中的应用为主线,为大家详细介绍51单片机定时器的工作原理、使用方法以及应用技巧。
一、51单片机定时器的基本原理51单片机中的定时器是一种计数器,其主要功能是计时和计数。
每个定时器都是由一个计数器和一些控制寄存器组成的。
计数器负责计数,而控制寄存器则控制计数器的各项参数和工作模式。
51单片机中的定时器模块一般包括两个定时器:定时器0和定时器1。
其中,定时器0和定时器1分别有两种工作模式:定时模式和计数模式。
在定时模式下,定时器会按照一定的时间周期产生一个中断信号,以实现对系统时序的控制;而在计数模式下,定时器则可以实现对外部事件的计数和监测。
二、51单片机定时器的编程在C语言中编程使用51单片机定时器,需要从以下几个方面进行考虑:1. 定时器工作模式的选择。
在使用定时器时,需要明确定时器的工作模式,即选择定时模式或者计数模式。
根据实际需要进行选择,并设置相应的控制寄存器以控制定时器的工作状态。
2. 定时周期的设定。
在使用定时器进行定时时,需要设定定时器的定时周期,即设定定时器多长时间会产生一个中断信号。
在设定定时周期时,需要选择合适的定时器分频器,并根据分频器和计数器的计数关系来设定定时周期。
3. 中断服务程序的编写。
当定时器产生中断信号时,需要编写相应的中断服务程序来处理中断事件。
在中断服务程序中,需要进行相应的硬件操作,如清除中断标志位等,以完成对中断事件的处理。
三、51单片机定时器的应用技巧在实际的应用中,还可以通过以下几种技巧来提高定时器的使用效率:1. 使用定时器进行PWM波形发生器。
定时器可以实现高精度的PWM波形输出,可以应用于电机驱动、灯光控制等领域。
2. 通过软件编程实现多重定时器。
在需要同时控制多个硬件设备的情况下,可以通过软件编程实现多重定时器,以提高系统的效率和灵活性。
C语言电子教案-2.2定时器

0 1 1 0
方式1 方式2
1 1
方式3
3.控制寄存器
(2) T/C方式控制寄存器TMOD 例如:设定定时器1为定时工作方式,要求软件启动定 时器1按方式2工作。定时器0为计数方式,要求由软件启 动定时器0,按方式1工作。
定时器1 为定时工 作方式 定时器1 软件启动 D6 C/T=0 D7 GATE=0 D5D4 M1M0=10 定时器0 为计数方 式 定时器0 软件启动 D2 C/T=1 D3 GATE=0 D1D0 M1M0=01
6.T/C的综合应用 (2)计数器应用
5.T/C的中断设置
C51提供的中断函数格式:
void 函数名( ) interrupt n [using m] { 语句组; } 其中n 对应中断源的编号,以AT89S51单片机为例, 编号从0~3,分别对应外中断0、定时器0溢出中断、外中 断1和定时器1溢出中断。 当采用方式0、1、3时,只要不关闭定时/计数器,那 么每当计数器0溢出时,都需要在中断函数中重新装入计 数初值,以保证计数值不变。
4.T/C的初始化 (2) 计数初值的计算
计数器的初值计算 方式0 :13位计数器最大计数值 M=213=8192; 方式1 :16位计数器最大计数值 M=216=65536; 方式2 :8位计数器最大计数值 M=28=256; 若要求计数X个外部脉冲后计数器溢出,则计数初值C的求法: 因为 C+X=M,
TCON
D7
D6 TR1 8EH
D5 TF0 8DH
D4 TR0 8CH
D3 IE1 8BH
D2 IT1 8AH
D1 IE0 89H
D0 IT0 88H
51单片机定时器c语言

51单片机定时器c语言51单片机是一款广泛应用于嵌入式系统中的芯片,其具有强大的功能和较高的性能表现。
在51单片机中,定时器是其中一项非常重要的功能,因为它可以帮助我们完成很多任务。
在51单片机中使用定时器,我们需要编写相应的c语言程序。
接下来,我将为大家介绍一些关于51单片机定时器c语言编程的知识。
首先,我们需要了解51单片机定时器的工作原理。
51单片机中的定时器是一个计数器,它的计数值会随着时间的流逝而增加。
当计数值达到了设定的阈值时,定时器就会产生一个中断信号。
我们可以通过对这个中断信号进行相应的处理,来完成各种任务。
为了使用51单片机的定时器,我们需要用c语言编写相应的程序。
比如,我们可以通过以下代码来初始化定时器:void timer_init(int time) {TMOD &= 0xF0; // 设定计数模式TL0 = time; // 设置定时器初值TH0 = time >> 8; // 设置定时器初值TR0 = 1; // 开始定时器}这段代码中,我们首先设定了计数模式,并且通过设置初值来调节定时器的计数时间。
最后,我们开启了定时器,让它开始进行计时。
除了初始化定时器之外,我们还需要为定时器编写中断处理程序。
比如,下面是一个简单的定时器中断处理程序:void timer_interrupt() interrupt 1 {// 处理中断信号}在这个中断处理程序中,我们可以编写相应的代码来完成各种任务。
比如,我们可以通过判断定时器计数的次数来控制LED的闪烁频率,或者通过定时器中断信号来完成数据发送等任务。
总结来说,51单片机定时器是非常重要的一个功能,它可以帮助我们完成很多任务。
要使用定时器,我们需要首先了解定时器的工作原理,并且编写相应的c语言程序实现。
如果我们掌握了这些技能,就可以开发出更加完善的嵌入式系统。
单片机定时器 计数器

单片机定时器计数器单片机定时器/计数器在单片机的世界里,定时器/计数器就像是一个精准的小管家,默默地为系统的各种操作提供着精确的时间控制和计数服务。
无论是在简单的电子时钟、还是复杂的通信系统中,都能看到它们忙碌的身影。
那什么是单片机的定时器/计数器呢?简单来说,定时器就是能够按照设定的时间间隔产生中断或者触发事件的模块;而计数器则是用于对外部脉冲或者内部事件进行计数的功能单元。
我们先来看看定时器的工作原理。
想象一下,单片机内部有一个像小闹钟一样的东西,我们可以给它设定一个时间值,比如说 1 毫秒。
当单片机开始工作后,这个小闹钟就会以一个固定的频率开始倒计时,当倒计时结束,也就是 1 毫秒到了,它就会发出一个信号,告诉单片机“时间到啦”!这个信号可以用来触发各种操作,比如更新显示、读取传感器数据等等。
定时器的核心在于它的时钟源。
就好比小闹钟的动力来源,时钟源决定了定时器倒计时的速度。
常见的时钟源有单片机的内部时钟和外部时钟。
内部时钟一般比较稳定,但精度可能会受到一些限制;而外部时钟则可以提供更高的精度,但需要额外的电路支持。
再来说说计数器。
计数器就像是一个勤劳的小会计,不停地数着外面进来的“豆子”。
这些“豆子”可以是外部的脉冲信号,也可以是单片机内部产生的事件。
比如,我们可以用计数器来统计电机旋转的圈数,或者计算按键被按下的次数。
计数器的工作方式也有多种。
可以是向上计数,就是从 0 开始,不断增加,直到达到设定的最大值;也可以是向下计数,从设定的最大值开始,逐渐减少到 0。
还有一种更灵活的方式是双向计数,根据需要在向上和向下之间切换。
那么,定时器/计数器在实际应用中有哪些用处呢?比如说,在一个智能温度控制系统中,我们可以用定时器每隔一段时间读取一次温度传感器的数据,然后根据温度的变化来控制加热或者制冷设备的工作。
而计数器则可以用来统计设备运行的次数,以便进行维护和保养。
在电子时钟的设计中,定时器更是发挥了关键作用。
AVR单片机C语言编程

定时器与计数器的工作原理
定时器
定时器是单片机内部的一个硬件资源,可以通过编程控制其产生一定时间间隔的时序。定时器的工作原理是将 单片机内部的某个固定时间单位(通常为时钟周期)进行计数,当达到设定的计数值时,定时器就会产生一个 中断信号或者输出一个脉冲信号。
计数器
计数器是单片机内部另一个重要的硬件资源,用于对外部信号进行计数。计数器的工作原理是当外部信号输入 时,计数器的值就会自动加1或者减1。通过编程控制计数器的初始值和溢出值,可以实现不同的计数功能。
定时器与计数器的编程实例
要点一
定时器的编程实例
以AVR单片机的定时器0为例,通过编程控制定时器的 初始值和溢出值,实现一个1秒的定时器。首先需要设 置定时器的控制寄存器,包括选择定时器模式、设置定 时器初始值和启动定时器。然后通过读取定时器的当前 值,判断是否已经到达设定的溢出值,如果到达则产生 一个中断信号或者输出一个脉冲信号。
如用于设置中断的寄存器、设置时钟频率的寄 存器等
AVR单片机的内存管理
了解AVR的内存映射以及如何使用指针访问内存地址等
C语言编译器及开发环境
GCC for AVR
是AVR单片机常用的编译器,可以将C语言源代码编译成AVR能 理解的汇编代码
Atmel Studio
Atmel公司提供的集成开发环境,内含GCC for AVR,可用于编 写、编译和调试AVR的C语言代码
中断处理函数
编写中断处理函数,用于处理各个中断源 的中断事件。
中断使能
通过使能全局中断或特定中断源来启动中 断处理。
中断处理的扩展方法
中断嵌套
支持多层嵌套中断,确保关键任务得到优先处理。
可编程中断控制器
通过可编程中断控制器对中断进行更灵活的控制。
单片机计数器的编程

单片机计数器的编程概述单片机计数器是基于单片机的硬件模块,可以实现数值的增加和减少的功能。
通过编程控制计数器的工作模式和计数范围,可以实现各种应用场景下的数字计数功能。
本文将介绍单片机计数器的基本原理、编程方法和应用案例,帮助读者理解和掌握单片机计数器的编程技巧。
单片机计数器的基本原理单片机计数器通常采用定时器/计数器模块实现,这个模块集成在单片机芯片内部。
具体实现方式和功能会因单片机型号和厂家而有所差异,但基本原理是相通的。
单片机计数器通常由以下几个主要组成部分构成: - 器件选择:根据需要选择合适的单片机型号和计数器模块。
- 计数寄存器:用于存储计数器的当前值。
- 预设值寄存器:用于设置计数器的初始值或比较值。
- 控制寄存器:用于控制计数器的工作模式、计数范围等参数。
- 时钟源:提供计数器的时钟信号,以确定计数的时间间隔。
根据计数器的工作模式和计数范围的不同,单片机计数器可以实现多种功能,如:- 简单计数:按照固定时间间隔进行自增或自减操作。
- 定时/延时:在一定时间后触发中断或执行特定操作。
- 脉冲计数:计算外部脉冲信号的频率或脉冲数。
- 频率计数:测量外部信号的频率。
单片机计数器的编程方法单片机计数器的编程方法主要包括以下几个方面: 1. 初始化计数器:设置计数器的初始值和工作模式。
2. 控制计数器:控制计数器的启动、停止、清零等操作。
3. 处理计数器溢出:处理计数器达到最大值后的溢出操作。
4. 读取计数器值:读取计数器的当前值,并根据需要进行处理。
具体编程方法在不同的单片机和编程语言环境下可能会有所不同,以下是一个C语言编写的单片机计数器的代码示例:#include <reg51.h>// 单片机寄存器定义// 定义计数器全局变量unsigned int counter = 0;// 中断处理函数void Timer0Interrupt() interrupt 1{TF0 = 0; // 清除中断标志位counter++; // 计数器自增}// 初始化计数器void InitTimer0(){TMOD = 0x01; // 定时器0工作在模式1,16位定时/计数模式TH0 = 0xFF; // 设置计数器的初始值,定时溢出时间为65536个机器周期TL0 = 0xFF;ET0 = 1; // 允许定时器0中断EA = 1; // 允许总中断TR0 = 1; // 启动定时器0}// 主函数void main(){InitTimer0(); // 初始化计数器while(1){// 在这里执行其他操作// 读取并处理计数器的值if(counter > 100){// 当计数器值大于100时执行特定操作// 可以触发中断、改变计数器的工作模式等counter = 0; // 重置计数器的值}}}单片机计数器的应用案例单片机计数器的应用非常广泛,在各种嵌入式系统和电子设备中都有重要作用。
如何用C语言编写计数器

单片机计数器C语言练习要求:编写一个计数器程序,将T0作为计数器来使用,对外部信号计数,将所计数字显示在数码管上。
该部分的硬件电路如图所示,U1的P0口和P2口的部份引脚构成了6位LED数码管驱动电路,数码管采用共阳型,使用PNP型三极管作为片选真个驱动,所有三极管的发射极连在一起,接到正电源端,它们的基极则分别连到P2.0…P2.5,当P2.0…P2.5中某引脚输是低电平时,三极管导通,给相应的数码管供电,该位数码管点亮哪些笔段,则取决于笔段引脚是高或低电平。
图中看出,所有6位数码管的笔段连在一起,通过限流电阻后接到P0口,因此,哪些笔段亮就取决于P0口的8根线的状态。
编写程序时,首先根据硬件连线写出LED数码管的字形码、位驱动码,然后编写程序如下:#include "reg51.h"#define uCHAR unsigned CHAR#define uint unsigned intuCHAR code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //位驱动码uCHAR codeDispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0 xA1,0x86,0x8E,0xFF}; //字形码uCHAR DispBuf[6]; //显示缓冲区void Timer1() interrupt 3{ uCHAR tmp;uCHAR Count; //计数器,显示程序通过它得知现正显示哪个数码管TH1=(65536-3000)/256;TL1=(65536-3000)%256; //重置初值tmp=BitTab[Count]; //取位值P2=P2|0xfc; //P2与11111100B相或P2=P2&tmp; //P2与取出的位值相与tmp=DispBuf[Count];//取出待显示的数tmp=DispTab[tmp]; //取字形码P0=tmp;Count++;if(Count==6)Count=0;}void main(){ uint tmp;P1=0xff;P0=0xff;TMOD=0x15; //定时器0工作于计数方式1,定时器1工作于定时方式1 TH1=(65536-3000)/256;TL1=(65536-3000)%256; //定时时间为3000个周期TR0=1; //计数器0开始运行TR1=1;EA=1;ET1=1;for(;;){ tmp=TL0|(TH0<<8); //取T0中的数值DispBuf[5]=tmp%10;tmp/=10;DispBuf[4]=tmp%10;tmp/=10;DispBuf[3]=tmp%10;tmp/=10;DispBuf[2]=tmp%10;DispBuf[1]=tmp/10;DispBuf[0]=0;}}这个程序中用到了一个新的知识点,即数组,首先作一个先容。
51单片机 定时器 c语言

51单片机定时器 c语言51单片机是目前较为流行的一种单片机芯片,定时器是其重要的功能之一,可以用于实现各种定时任务,而c语言则是51单片机常用的编程语言之一。
下面将结合实例,阐述51单片机定时器在c语言中的使用方法。
一、引入头文件及定义定时器首先需要引入头文件“reg51.h”,然后需要定义一个定时器变量和一个计数变量。
在本文中,我们将使用定时器0,所以定义如下:```c#include<reg52.h>sbit led = P2^0; //定义led信号端口P2.0unsigned char count = 0; //计数变量unsigned char timerVal = 56; //定时器初值```需要注意的是,定时器初值的计算方法如下:$$定时器初值 = 256 - \frac{所需延时时间× 晶振频率}{12}$$在本例中,晶振频率为11.0592MHz,所需延时时间为0.001秒,则计算得到定时器初值为56。
二、设置定时器参数设置定时器参数前,需要先关闭定时器0。
设置完成后,再通过TR0位将定时器0启动。
```cvoid initTimer(){TMOD &= 0xF0; //定时器0, 方式1TMOD |= 0x01;TH0 = timerVal; //定时器初值高位TL0 = timerVal; //定时器初值低位ET0 = 1; //打开定时器0中断EA = 1; //打开总中断}void main(){initTimer(); //初始化定时器0while(1){if(count >= 100){led = !led; //LED翻转count = 0; //计数器清零}}}void timerHandler() interrupt 1{TH0 = timerVal;TL0 = timerVal;count++; //计数器+1}```在上述代码中,通过设置TMOD寄存器,将定时器工作在方式1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本章制作:刘晓霞
第6章 MCS-51单片机定时器/计数器
目 录
6.1 MCS-51定时器/计数器 的结构及原理 6.2 定时器T0、T1 6.3 定时器T2 6.4 定时器应用举例
第6章 MCS-51单片机的定时器/计数器
本章主要讨论MCS-51单片机定时器/计 数器的逻辑结构和工作原理。内容主要有 MCS-51单片机定时器T0、T1、T2的逻辑结 构,工作方式的选择和应用。 本章为单片机的主要内容,也是第七章 串行口的学习的基础。
6.1.3 定时器/计数器的方式和控制寄存器
TR1、TR0:T1、T0启停控制位。 置1,启动定时器; 清0,关闭定时器。 IE1、IE0:外部中断1、0请求标志位 IT1、IT0:外部中断1、0触发方式选择位 注意: GATE=1 ,TRx与P3.2(P3.3) 的配 合。
6.2 定时器T0、T1的工作模式及应用
例6-1 设单片机的振荡频率为12MHz,用 定时器/计数器0的模式1编程,在P1.0引脚产 生一个周期为1000µ s的方波,定时器T0采用 中断的处理方式。 定时器的分析过程。 工作方式选择 需要产生周期信号时,选择定时方式。定 时时间到了对输出端进行周期性的输出即可。 工作模式选择 根据定时时间长短选择工作模式。 首选模式2,可以省略重装初值操作。
6.1.2 MCS-51单片机定时器/计数器的工作原理
③ C/T =1 ,为计数方式。
计数信号由Tx引脚(P3.4、P3.5和P1.0) 输入,每输入一有效信号,相应的计数 器中的内容进行加1。
④ 控制信号TRx=1时,定时器启动。 ⑤ 当定时器由全1加到全0时计满溢出,从0 开始继续计数,TFx=1 ,向CPU申请中 断。
6.1.3 定时器/计数器的方式和控制寄存器
2、T0、T1的控制寄存器TCON
TCON D7 D6 D5 D4 D3 D2 D1 D0 (88H) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
图6-4 定时器的控制寄存器
TF1、TF0:T1、T0的溢出标志位 计数溢出,TFx=1。 中断方式:自动清零; 查询方式:软件清零。
6.1.2 MCS-51单片机定时器的工作原理
定时器/计数器T0、T1、T2 的内部结构简 图如下图所示。
振荡器
12分频
C/T=0
TLx THx (8位) (8位)
Tx C/T=1 控制 TRx
TFx
中断请求
6.1.2 MCS-51单片机定时器/计数器的工作原理
从上图可以看出: ① 定时器的实质是一个加1计数器。 ② C/T =0 ,为定时器方式。 计数信号由片内振荡电路提供,振 荡脉冲12分频送给计数器,每个机器周期计 数器值增1。 例如:如果晶振频率为12MHz,则最高 计数频率为0.5MHz
//包含特殊功能寄存器库 //进行位定义
//T0做定时器,模式1
//设置定时器的初值 //允许T0中断 //允许CPU中断 //启动定时器 //等待中断
6.2.4 模式3的逻辑结构及应用
void time0_int(void) interrupt 1 { //中断服务程序 TL0=0x0c; TH0=0xfe; //定时器重赋初值 P1_0=~P1_0; //P1.0取反,输出方波 } 汇编语言程序: ORG 0000H SJMP MAIN ORG 000BH LJMP TIME0
T0(P3.4) TR0
&
GATE P3.2
+
工作过程:当TL0计满时,向TH0进1;当 TH0计满时,溢出使TF0=1,向CPU申请中断。 MCS-51单片机之所以设置几乎完全一 样 的方 式0和方式1,是出于与 MCS-48单片机兼容的。
6.2.3 模式2的逻辑结构及应用
M1 M0 =10时,选择模式2。逻辑结构 如图6-7所示。 T0的结构: TL0:8位的定时器/计数器; TH0:8位预置寄存器,用于保存初值。 工作过程:当TL0计满溢出时,TF0置1, 向CPU发出中断请求;同时引起重装操作 (TH0的计数初值送到TL0),进行新一轮 计数。
M1M0=01时,选择模式1。逻辑结构如下 页图所示。 T0的结构:16位定时器/计数器。 TL0:存放计数初值的低8位。 TH0存放计数初值的高8位; 定时时间=(216-定时初值)×机器周期 最大定时时间:216×机器周期
6.2.2 模式1的逻辑结构及应用
振荡器
12分频 C/T=0 C/T=1 TL0 TH0 (8位) (8位) TF0 中断
6.1 MCS-51单片机定时器/计数器的结 构及原理
主要内容
6.1.1 MCS-51单片机定时器的结构 6.1.2 MCS-51单片机定时器的工作原理 6.1.3 定时器/计数器的控制寄存器
6.1.1 MCS-51单片机定时器的结构
MCS-51单片机定时器/计数器逻辑结构图:
T0(P3.4) 定时器 0 TH0 溢 出 控 制 TL 0 模 式 溢 出 定时器 1 TH1 控 制 TL 1 模 式 溢 出 RCAP 2H RCAP 2L T1(P3.5) T2EX(P1.1)
6.1.3 定时器/计数器的方式和控制寄存器
GATE=0,不使用外部门控制计数器 C/T——定时或计数方式选择位 。 C/T=0时,为定时器 C/T=1时,为计数器 采样过程:CPU在每机器周期S5P2期间, 输入信号进行采样。若前一机器周期采样值 为1,下一机器周期采样值为0,则计数器增 1,随后的机器周期S3P1期间,新的计数值 装入计数器。
12分频
C/T=0 TL 1 (8位) C/T=1 重新装入 TH 1 (8位) 串行口
T1(P3.5)
思考:T0工作在模式3,T1怎么进行方式设置?
6.2.4 模式3的逻辑结构及应用
1、定时器/计数器工作模式的选择方法
(1)首先计算计数值N (2)确定工作模式 原则是尽可能地选择模式2 若 N ≤ 256选择模式2,否则选择模式1 (3)如果需要增加一个定时器/计数器 选择模式3。
主要内容
6.2.1 模式0的逻辑结构及应用 6.2.2 模式1的逻辑结构及应用 6.2.3 模式2的逻辑结构及应用 6.2.4 模式3的逻辑结构及应用
6.2.1 模式0的逻辑结构及应用
M1M0=00,选择模式0。逻辑结构如图6-5 所示。(以T0为例) T0的结构:13位定时器/计数器。 由TH0的8位、TL0的低5位构成(高3位未 用) 工作过程:TL0溢出后向TH0进位,TH0溢 出后将TF0置位,并向CPU申请中断。 定时时间=(213-定时初值)×机器周期 最大定时时间:213×机器周期
振荡器
12分频 C/T=0 TL1 TH1 (5位)1 (a)T1模式0
振荡器
12分频 C/T=0 TL1 TH1 (8位) (8位) 串行口
T1(P3.5)
C/T=1 (b)T1模式1
振荡器
图6-9 模式3下,T1的逻辑结构图
12分频 C/T=0 TL1
振荡器
6.2.4 模式3的逻辑结构及应用
振荡器
12分频
C/T=0 C/T=1 TL0 (8位) TF0 中断
T0(P3.4) TR0
&
GATE P3.2 振荡器 TR1 12分频
+
TH0 (8位) TF1 中断
图6-8 模式3下T0的逻辑结构图
6.2.4 模式3的逻辑结构及应用
2、T0模式3时T1的工作模式
6.2.4 模式3的逻辑结构及应用
定时时间计算:周期为1000µ s的方波要 求定时器的定时时间为500µ s,每次溢出时, 将P1.0引脚的输出取反,就可以在P1.0上产 生所需要的方波。 定时初值计算: 振荡频率为12MHz,则机器周期为1µs。 设定时初值为X,
(65536-X)×1µ s=500µ s X=65036=0FE0CH
T2(P1.0) 定时器 2
TH 2 TL2 重装 捕获
CPU
控 制
模 式 T2MOD
中断
中断
TCON
TMOD
T2CON
6.1.1 MCS-51单片机定时器的结构
MCS-51主要由如下构成: ① 三个16位的可编程定时器/计数器:定时 器/计数器0、1和2。 ② 每个定时器有两部分构成:THx和TLx ③ 特殊功能寄存器T2MOD和T2CON ,主 要对T2进行控制。 ④ 特殊功能寄存器TMOD和TCON ,主要 对T0和T1进行控制。
6.1.3 定时器/计数器的方式和控制寄存器
M1、M0——工作模式选择位。 如下表所示:
表6-1 定时器/计数器的工作模式
M1 M0 工作模式 功 能 0 0 模式0 13位定时器/计数器 0 1 模式1 16位定时器/计数器 1 1 0 1 模式2 模式3 8位自动重置定时器/计数器 定时器0:TL0为8位定时器/计 数器,TH0为8位定时器。 定时器1:无此方式
6.2.1 模式0的逻辑结构及应用
C/T=1,计数方式。计数脉冲由P3.4引脚输 入。 C/T=0时,定时方式。
振荡器
12分频
C/T=0 C/T=1
T0(P3.4) TR0
TL0 (5位)
TH0 (8位)
TF0
中断
&
GATE P3.2
+
图6-5 模式0的逻辑结构图
6.2.2 模式1的逻辑结构及应用
T1可以模式0~模式2工作。 T1的结构如图6-9所示 由于TF1及中断矢量被TH0占用,所以T1 仅用作波特率发生器或其它不用中断的地方。 T1作波特率发生器,其计数溢出直接送 至串行口。设置好工作方式,串行口波特率 发生器开始自动运行。 TMOD中T1的M1M0=11,T1停止工作。
6.2.4 模式3的逻辑结构及应用