单片机定时器2的使用

合集下载

52单片机定时器2作为串行口波特率发生器使用(C语言程序)

52单片机定时器2作为串行口波特率发生器使用(C语言程序)

52
53 i=0;
54 while(str[i]!='\0')
55 {
56 TI=0;
57 SBUF=str[i];
58 while(!TI);
59 TI=0;
60 i++;
61 }
62 while(1);
本文是关于52单片机定时器计数器2做为串行口波特率发生器使用的例子,类似于定时器1作为波特率发生器工作在模式1下,但是不同的是:定时器2作为波特率发生器是16位自动重装的,位数比定时器1作为波特率发生器要高(定时器1作为串口波特率发生器是8位自动重装的),所以可以支持更高的传输速度,性能也比定时器1要好,老鲁推荐使用。以下程序在Keil 2和Keil 3下调时通过,下载在本校的实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。
view sourceprint?01 /*
02 程序功能:52系列单片机定时器计数器2作为串行口波特率发生器使用
03 程序设计:燕山大学 鲁信琼
04
05 晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位;
63 }
25 void delay_ms(uint xms)
26 {
27 uint x,y;
28 for(x=xms; x>0; x--)
29 for(y=248; y>0; y--);
30 }
31
32 // 主函数初始化,24MHz晶振 28800bps波特率,有误差,建议大家使用11.0592MHz或者22.1184MHz

STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用

STC89C52单片机定时器2的使用实现定时和计数的方法一般有:软件定时、专用电路和可编程定时器/计数器三种方法。

软件定时:执行一个循环程序进行时间延迟。

定时准确,不需要外加硬件电路,但会增加CPU 开销。

专用硬件电路定时:可以实现请精确的定时和计数,但参数调节不方波。

可编程定时器/计数器:不占用CPU 时间,能与CPU 并行工作,实现精确的定时和计数,又可以通过变成设置其工作方式和其他参数,使用方便。

以下说明仅试用宏晶的STC89C52!!定时器2:T2MOD,T2CON,TH2,TL2,RC2H,RC2L.T2MOD:0C9H(不可位寻址)000000T2OEDCENT2OE:定时器输出使能位DECN:向上/向下计数使能位。

定时器2 可配制成向上/向下计数器。

0:向上计数(模式状态) 1:向下计数(尽量不使用)T2CON:0XC8H(可位寻址)TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2TF2:7 上/下溢出标志位,定时器2 溢出时置位,必须有用软件清零!当RCLK 或TCLK=1 时,TF2 将不会置位。

EXF2:6 定时器2 外部标志,当EXEN2=1 且T2EX 的负跳变产生捕获或重装时,EXF2 置位。

定时器2 中断使能时,EXF2=1 将使CPU 从中断向量处执行定时器2 中断子程序。

EXF2 位必须用软件清零。

在递增/递减计数器模式(DCEN=1)中,EXF2 位不会引起中断。

RCLK:5 接收时钟标志。

RCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的接收时钟。

RCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 的接收时钟。

TCLK:4 发送时钟标志位。

TCLK 置位时,定时器2 的溢出脉冲作为串口模式1 和模式3 的发送时钟。

TCLK=0 时,将定时器1 的溢出脉冲作为串口模式1 和模式3 发送时钟。

EXEN2:3 定时器2 外部使能标志。

单片机定时器的使用

单片机定时器的使用

由于TL0既能作定时器也能作计数器使用,而 TH0只能作定时器使用而不能作计数器使用,因此在 方式3模式下,定时/计数器0可以构成二个定时器或 者一个定时器和一个计数器。
如果定时/计数器0工作于工作方式3,那么定时/ 计数器1的工作方式就不可避免受到一定的限制,因 为自己的一些控制位已被定时/计数器借用,只能工 作在方式0、方式1或方式2下,如果设置T1工作在方 式3,则T1停止工作,相当于其他方式时令TR1=0。
在工业检测、控制中,很多场合都要用到计数或者定 时功能。例如对外部脉冲进行计数、产生精确的定时时间、 作串行口的波特率发声器等。MCS-51单片机内部有两个 可编程的定时器/计数器,以满足这方面的需要。它们具 有 两种工作模数(计数器模式、 定时器模式)和四种工 作方式( 方式0、方式1、方式2、方式3),其控制字均 在相应的特殊功能寄存器(SFR)中,通过对它的SFR的 编程,可以方便的选择工作模数和工作方式。
C/T位:计数器模式和定时器模式的选择位。
C/T=0,为定时器模式,内部计数器对晶振脉冲12分频 后的脉冲计数,该脉冲周期等于机器周期,所以可以理 解为对机器周期进行计数。从计数值可以求得计数的时 间,所以称为定时器模式。
C/T=1,为计数器模式,计数器对外部输入引脚T0 (P3.4)或T1(P3.5)的外部脉冲(负跳变)计数,允许 的最高计数频率为晶振频率的1/24。
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF0、TF1分别是定时器/计数器T0、 T1 的溢出标志位, 加法计数器计满溢出时置 1, 申请中断, 在中断响应后自动复 0。TF产生的中断申请是否被接受, 还需要由中断是否开放 来决定。
TR1、TR0 分别是定时器 /计数器T1、 T0 的运行控制位, 通过软件置 1 后, 定时器 /计数器才开始工作, 在系统复位时 被清 0。

单片机定时器的使用方法

单片机定时器的使用方法

单片机定时器的使用方法在嵌入式系统的开发中,定时器是一种非常重要且常用的功能模块,它能够为我们提供时间计数和计时的功能,对于许多实时应用来说,定时器更是必不可少的。

本文将介绍单片机定时器的使用方法,帮助读者更好地掌握该功能。

一、概述定时器是单片机中的一个计数器,它能够按照一定的时钟源频率进行计时。

单片机中的定时器一般包括一个或多个计数寄存器以及相关的控制寄存器。

通过设置不同的参数,我们可以实现不同的定时功能。

二、定时器的基本操作流程1. 初始化:在使用定时器之前,首先需要对定时器进行初始化设置。

这包括选择时钟源、设置定时器的工作模式、设置计数器初值等。

具体的初始化步骤和寄存器配置会根据不同的单片机型号而有所不同,因此在使用前需要查阅相关的芯片手册。

2. 启动定时器:初始化完成后,我们需要将定时器启动,开始执行计时功能。

启动定时器的方式也会因芯片而异,有的需要设置特定的控制位,有的则是通过特定的命令来启动。

3. 定时中断处理:在定时器工作期间,当计数器的值达到设定的阈值时,定时器会触发中断。

这个中断可以用于执行用户自定义的操作,比如数据处理、状态更新等。

在中断服务程序中,我们需要进行相应的处理,并清除中断标志位,以确保下一次定时正常触发。

4. 停止定时器:当我们不再需要定时器时,可以通过相应的操作将其停止。

这样可以节省系统资源和功耗。

三、定时器的常见应用单片机的定时器功能非常灵活,可以应用于各种实际场景。

以下是一些常见的应用示例:1. 延时函数:通过定时器可以实现精确的延时功能,比如延时100毫秒后再执行某个操作。

这对于需要进行时间控制的任务非常有用。

2. 脉冲宽度调制(PWM):定时器可以通过设置不同的计数值和占空比,生成不同周期和占空比的脉冲信号。

这在控制电机、调光、音频发生器等场景中非常常见。

3. 计时功能:定时器可以用于实现计时功能,比如计算程序执行时间、测量信号的周期等。

这在需要精确时间测量的场景中非常有用。

stc32g12k128定时器0的用法范例

stc32g12k128定时器0的用法范例

stc32g12k128定时器0的用法范例【stc32g12k128定时器0的用法范例】一、概述stc32g12k128是一款功能强大的单片机芯片,内置了多个定时器模块,其中定时器0作为其中之一的模块,在实际应用中有着广泛的用途。

二、基本原理定时器0是stc32g12k128中一个重要的定时器模块,它的主要作用是产生精确的定时信号,并可以根据需求进行配置和使用。

在实际应用中,定时器0常常被用来控制脉冲信号的产生、定时触发某些事件以及测量时间等。

三、配置方法1. 初始化定时器0在使用定时器0之前,首先需要对其进行初始化配置。

通过编程设置寄存器的值来配置定时器0的工作模式、计数器初值、定时器中断使能等,以确保其能够按照预期工作。

2. 设定工作模式定时器0支持多种工作模式,包括定时器模式和计数器模式。

根据具体需求,可以通过设置相关寄存器来选择定时器0的工作模式,并进行相应的参数设置。

3. 设置定时器中断定时器中断可以在定时器计数满足一定条件时触发,通过设置相应的中断使能位和中断优先级,可以实现定时器定时触发中断的功能。

四、使用范例以下是一个简单的使用范例,演示了如何使用stc32g12k128的定时器0模块来产生一定时间间隔的脉冲信号。

```c#include <stc89c.h>void timer0_init(){// 设置定时器0为工作模式1,16位定时器TMOD |= 0x01;TL0 = 0x00; // 初始值设置为0TH0 = 0x00;// 定时器0中断使能ET0 = 1;EA = 1; // 总中断使能TR0 = 1; // 启动定时器0}void timer0_isr() interrupt 1 {// 每次定时器0计数溢出时触发中断// 在中断服务程序中可以编写产生脉冲信号的相关操作}void main(){timer0_init(); // 初始化定时器0while(1){// 主函数中可以进行其他操作}}```通过上述范例,我们可以看到定时器0的基本使用方法,以及如何通过定时器中断来实现脉冲信号的生成。

stc8 定时器延时写法

stc8 定时器延时写法

stc8 定时器延时写法“stc8定时器延时写法”是关于使用STC8系列单片机的定时器来进行延时操作的方法。

在本文中,我们将一步一步地介绍如何使用stc8单片机的定时器来实现精确的延时功能。

第一步:了解STC8单片机的定时器功能STC8系列单片机具有多个定时器模块,常见的有定时器0(Timer0)、定时器1(Timer1)和定时器2(Timer2)。

这些定时器模块可以用于生成准确的延时,通过设置其相关寄存器可以调整定时器的计时周期和工作模式。

第二步:选择合适的定时器模块根据具体的应用需求,选择合适的定时器模块。

一般情况下,定时器0和定时器2经常被用来进行延时操作。

这是因为定时器0具有外部输入引脚T0,可以通过外部信号触发计时,而定时器2则有更高的计时精度。

定时器1通常用于产生PWM信号,不适合用于延时操作。

第三步:配置定时器的工作模式和计时周期在使用定时器之前,需要根据需求来配置定时器模块的工作模式和计时周期。

这可以通过设置相关的寄存器来实现。

具体的配置步骤如下:1. 选择定时器模式:根据定时器的工作需要,选择定时器模式。

STC8系列单片机的定时器模式包括定时器、计数器和捕获模式。

2. 设置计时周期:根据需要延时的时间和单片机的主频来计算定时器的计时周期。

定时器的计时周期由相关的寄存器来控制,具体的寄存器名称和寄存器位偏移量可以查看STC8系列单片机的相关文档。

第四步:编写延时函数编写用于延时的函数,可以通过调用定时器模块的相关寄存器来实现准确的延时。

以下是一个示例代码:cvoid delay_ms(unsigned int ms){unsigned int i;TMOD = 0x01; 选择定时器0为模式1for(i=0;i<ms;i++){TH0 = 0xFC; 定时器0计时周期为1ms时的高8位赋初值TL0 = 0x67; 定时器0计时周期为1ms时的低8位赋初值TR0 = 1; 启动定时器0while(TF0 == 0); 等待定时器0溢出TR0 = 0; 关闭定时器0TF0 = 0; 清除溢出标志位}}上述代码中,delay_ms函数通过循环调用定时器0来实现毫秒级的延时。

proteus与keil Cx51的单片机仿真(定时器应用2)

proteus与keil Cx51的单片机仿真(定时器应用2)

proteus 与keil Cx51 的单片机仿真(定时器应用2)使用定时器产生PWM 波调节P0 和P2 口VD 的亮度,当按下K01 时,VD 亮度减小,当按下K02 时,VD 亮度增加,设P0 和P2 口低高电平灯亮,反之灯灭。

电路图:C 程序:#include#includesbit K01=P1;//增加键sbit K02=P1 ; //减少键sbit BEEP=P3;//蜂鸣器unsigned char PWM=0x7f;//赋初值void Beep();void delayms(unsigned char ms);void delay(unsigned t);void main(){P0=0xff;P1=0xff;P2=0xff;P3=0xff;TMOD=0x21;TH0=0xfc;//1ms 延时常数12MTL0=0x18;//频率调节TH1=PWM;//脉宽调节TL1=0;EA=1;ET0=1;ET1=1;TR0=1;while(1){do{if(PWM!=0xff){PWM++;delayms (10);}else Beep();}while(K01==0);//K01 按下,亮度变暗do{if(PWM!=0x01) {PWM--;delayms(10);}else Beep();}while(K02==0);//K02 按下,亮度变亮} }void timer0() interrupt 1 //定时器0 中断服务程序{TR1=0;TH0=0xfc;TL0=0x66;TH1=PWM;TR1=1;P0=0x00;P2=0x00; //启动输出} void timer1() interrupt 3//定时器1 中断服务程序{TR1=0;P0=0xff;P2=0xff;}//结束输出void Beep()//蜂鸣器子程序{unsigned char i;for(i=0;itips:感谢大家的阅读,本文由我司收集整编。

单片机定时器方式2的工作原理

单片机定时器方式2的工作原理

单片机定时器方式2的工作原理
单片机定时器方式2的工作原理如下:
在定时器方式2中,定时器/计数器被配置为一个16位的定时器模式。

当定时器/计数器的计数达到最大值(对于8051单片机,最大值为65535)时,计数器会自动回滚到0,并产生一个溢出事件。

当定时器/计数器溢出时,定时器/计数器的输出比较寄存器将被立即加载到输出比较寄存器中。

这意味着在溢出发生后,输出比较寄存器的值将立即被复制到输出比较寄存器中,并产生一个中断请求。

在定时器方式2中,输出比较寄存器的值可以通过编程来设置。

当输出比较寄存器的值被设置后,定时器/计数器的当前计数值将与输出比较寄存器的
值进行比较。

如果定时器/计数器的计数值小于输出比较寄存器的值,则定
时器/计数器的计数值将递增,直到定时器/计数器的计数值等于输出比较寄存器的值。

当定时器/计数器的计数值等于输出比较寄存器的值时,输出比较寄存器的
值将被复制到输出比较寄存器中,并产生一个中断请求。

此时,定时器/计
数器的计数值将被清零,并重新开始计数。

因此,通过设置输出比较寄存器的值,可以控制定时器/计数器的计数值何时达到溢出值,从而控制定时器的定时时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sfr T2MOD=0xC9; //定时器 2 模式控制寄存器地址;可以在<reg52.h>头文件中定义
/*-----------------------------------------------定时器初始化子程序
------------------------------------------------*/
/*----------------------------------------------名称:定时器 2 内容:通过定时让 LED 灯闪烁,数据口为: P0 口 ------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
//自动重装,无需再次赋初值! TF2=0;//!!!注意!!! 定时器 2 必须由软件对溢出标志位清零,硬件不能清零,这里与定 时器 0 和定时器 1 不60000)/256;//晶振 12M 60ms 16bit 自动重载
RCAP2L = (65536-6000)%256;
ET2=1;
//打开定时器中断
EA=1;
//打开总中断
TR2=1;
//打开定时器开关
}
/*-----------------------------------------------主程序
------------------------------------------------*/
main()
{
T2_init();
while(1);
}
/*-----------------------------------------------定时器中断子程序
------------------------------------------------*/ void T2_ISR(void) interrupt 5 using 1//定时器 2 中断 {
void T2_init(void)
{
T2CON=0;
//配置定时器 2 控制寄存器,这里其实不用配置,T2CON 上
电默认就是 0,这里赋值只是为了演示这个寄存器的配置
T2MOD=0;
//配置定时器 2 工作模式寄存器,这里其实不用配置,T2MOD
上电默认就是 0,这里赋值只是为了演示这个寄存器的配置
相关文档
最新文档