URL: http://blog.csdn.net/liming0931/article/details/7517747

http://blog.csdn.net/desert2009sz/article/details/6903443

定时计数器2是一个16位定时/计数器,通过T2CON寄存器的C/T2位可以选择定时还是计数功能。定时器2 有3种操作模式:捕获、自动重新装载(递增或递减计数)和波特率发生器,这3种模式由T2CON 中的位进行选择,具体的选择方式见表1。定时器2有两个8为寄存器:TH2和TL2。在定时模式状态下,TL2寄存器每一个机器周期加1,。由于52单片机的每一个机器周期等于12的振荡周期,所以他的计数频率是振荡频率的1/12。

表1

RCLK+TCLK

CP/RL2

TR2

MODE

0

0

1

16位自重载

0

1

1

16位捕获

1

X

1

波特率发生器

X

X

0

在计数状态下,外部引脚由1-0的负跳变是,寄存器就加1。并且在这种情况下,每当一个机器周期的S5P2的时科,单片机就对外部引脚进行采样,如果在下一个周期里信号变为低电平,则计数器加1。在下一个周期的S3P1时刻,若检测到有跳变,则计数器计数加1。识别1-0的跳变需要两个机器周期(24个振荡周期),所以计数信号的最大的频率只能是振荡频率的1/24。为了确保采样频率能够被采样,被采用的电平必须保持一个机器周期不变。

1、      捕获模式

在捕获模式,寄存器T2CON的位EXEN2有两方式可供选择:

若EXEN2=0,定时器2为16位定时/计数器,当计数溢出是,T2CON中的TF2置1,并向CPU申请中断;

若EXEN2=1,定时器2出来拥有和上述一样的功能外,还有捕获功能:即在引脚T2EX有1-0跳变的时候,RCAP2H和RCAP2L分别捕获并保存TH2和TL2的当前值(即RCAP2H=TH2,RCAP2L=TL2),另外T2EX脚的跳变也会使T2CON寄存器里的位EXF2值1,和TF2一样向CPU申请中断。

2、      自重载模式(递增/递减计数器)

定时器2可以设置为递增/递减自动重载计数器,并通过DCEN(Down Counter Enable)位来控制其模式。见表2,一旦CPU复位,DCEN被清0,意味着定时器2默认是递增计数器,当DCEN置为1时,允许定时器2递增或递减计数,由T2EX的电平来控制器计数方向。

表1

T2MOD Address = 0C9H                                 Reset Value = XXXX XX00B

Not Bit Address

Bit

-

-

-

-

-

-

T2OE

DCEN

7

6

5

4

3

2

1

0

Symbol

Function

-

保留

T2OE

定时器2输出使能

DCEN

DCEN=1,允许定时器2递增或递减计数

图1   T2捕获原理图

图2所示为定时器2自动递增模式(DCEN=0)原理图。在这种模式下由T2CON中的EXEN位选择。

当EXEN=0;当计数器向上计数到0FFFFH是就会置位溢出标志位TF2,此时,寄存器RCAP2H和RCAP2L的值会自动装载到寄存器TH2和TL2中。寄存器RCAP2H和RCAP2L的值有软件预设。

当EXEN=1;16位重载可由两个方式触发:计数溢出或T2EX引脚的负跳变。同时置位EXF2为1。在中断允许的条件下,TF2和EXTF2都可以触发中断。

图2   T2自重载模式(DCEN=0)原理图

当DCEN为1时,允许定时器2递增计数或者递减计数,就如图2所示。在这种模式下,T2EX引脚控制计数的方向。

T2EX若为逻辑“1”,定时器2递增计数,直到0FFFFH是计数器溢出,置位TF2为1,同时溢出之后,寄存器RCAP2H和RCAP2L的值会自动装载到寄存器TH2和TL2中。

T2EX若为逻辑“0”,定时器2递减计数,当寄存器TH2和TL2的值分别和寄存器RCAP2H和RCAP2L的值相等时,计数器向下溢出,同时立即置位TF2,并把定时计数器赋值为0FFFFH。

//The EXF2 bit toggles wheneverTimer 2 overflows or underflows and can be used as a 17th bit of resolution. Inthis operating mode, EXF2 does not flag an interrupt.

// (这段话不好翻译)

本文是关于52单片机定时器计数器2做为普通的16位自动重装定时器使用,类似于定时器计数器0和定时器计数器1工作在方式1下。以下程序在Keil 2和Keil 3下调时通过,下载在本校的实验板上达到预期效果。AT89C52及其以上、AT89S52及其以上、STC89C52及其以上测试正常运行。

/***********************************************************
程序功能:52系列单片机定时器计数器2使用
程序设计:燕山大学 鲁信琼
晶振选择:24MHz, 如果晶振不匹配,请修改延时函数参数;P2^6口接数码管段选控制位; P2^7口接数码管位选控制位; P1^7口作为测试指示灯
本实验注意事项:
1. 定时器2的中断使能为IE^6位,也就是ET2; 中断服务程序标号为5。
2. 定时器2工作在16为自动重装模式下,不需要在中断服务程序中重新赋初值,在程序初始化的时候我们应该给RCAP2L和RCAP2H赋值,TH2和TL2将会在中断产生时自动使TH2=RCAP2H,TL2=RCAP2L。
3. 定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零,为了使定时尽量准确,我们常在终端服务程序中第一步就使TF2=0。
4. 使定时器2产生中断的有两个中断源,如果EXEN2(定时器2外部使能标志)置1的话,使定时器2进入中断的有可能是定时器2计数溢出,也可能是捕获到T2EX(单片机P1^1口)有负跳变,所以需要在中断服务程序中判断EXF2是否为1。承接51单片机、PIC单片机程序、VB/VC++上位机程序、电子产品软硬件设计开发工作EMail: xqlu(at)ysu.net.cn  QQ: 9790335
***********************************************************/#include
#include
#define uchar unsigned char
#define uint unsigned int
#define LED_DATA P0
sbit DULA=P2^6;
sbit WELA=P2^7;
sbit LED=P1^7;
uchar timer2_ctr,num;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x40, 0};//24MHz晶振延时x毫秒函数
void delay_ms(uint xms)
{uint x,y;for(x=xms; x>0; x--)for(y=248; y>0; y--);
}//初始化主函数
void init_main()
{DULA=0;               //关闭数码管显示WELA=0;RCAP2H=(0xFFFF-50000)/256;RCAP2L=(0xFFFF-50000)%256; //24MHz晶振下定时25ms,自动重装TH2=RCAP2H;TL2=RCAP2L;            //定时器2赋初值T2CON=0;          //配置定时器2控制寄存器,这里其实不用配置,T2CON上电默认就是0,这里赋值只是为了演示这个寄存器的配置T2MOD=0;            //配置定时器2工作模式寄存器,这里其实不用配置,T2MOD上电默认就是0,这里赋值只是为了演示这个寄存器的配置IE=0xA0;          //1010 0000开总中断,开外定时器2中断,可按位操作:EA=1; ET2=1;TR2=1;               //启动定时器2
}//数码管显示3位数:0-255
void display(uchar num)
{uchar gw,sw,bw;bw=num/100;sw=num%100/10;gw=num%10;LED_DATA=0XFE;       //1111 1110WELA=1;_nop_();_nop_();WELA=0;LED_DATA=table[bw];DULA=1;_nop_();_nop_();DULA=0;delay_ms(3);LED_DATA=0XFD;      //1111 1101WELA=1;_nop_();_nop_();WELA=0;LED_DATA=table[sw];DULA=1;_nop_();_nop_();DULA=0;delay_ms(3);LED_DATA=0XFB;      //1111 1011WELA=1;_nop_();_nop_();WELA=0;LED_DATA=table[gw];DULA=1;_nop_();_nop_();DULA=0;delay_ms(3);
}void main()
{init_main();while(1){display(num);}
}void timer2() interrupt 5
{//!!!注意!!! 定时器2必须由软件对溢出标志位清零,硬件不能清零,这里与定时器0和定时器1不同!!!TF2=0;timer2_ctr++;//定时25ms×40=1000ms即1秒钟,这里模拟一个60秒秒表if(timer2_ctr>=40){timer2_ctr=0;LED=~LED;num++;if(num>=60){num=0;}}
}

AT89S52之(定时器2)Timer2相关推荐

  1. 补充设定 timer1 定时器和 timer2 定时器定时做多件事

    文章目录 7. 补充设定 timer1 定时器和 timer2 定时器定时做多件事(教程) 7.1 补充如何暂时停止这 timer1 的CTC中断 ? 7.2 那要如何又重新启动 timer1 的CT ...

  2. 单片机定时器_单片机定时器/计数器基本原理

    目前常用的单片机中往往都配备了定时器/计数器.在AT89S52芯片内包含有三个16位的定时器/计数器:T0.T1和T2,其核心是加1计数器.我们主要要求掌握T0和T1的结构和功能.学习中要注意从电路结 ...

  3. 10. GD32F103C8T6 定时器-测量pwm的占空比和频率

    一. 利用TIM2的输入通道0,通道1测量pwm的占空比和频率 1. 配置gpio void inpit_gpio_config(void) {rcu_periph_clock_enable(RCU_ ...

  4. 8. GD32F103C8T6 定时器-输入捕获测频率

    1采集方波频率 /*-----------------------输入捕获----------------------------*/void gpio_configuration(void) {/* ...

  5. 9. GD32F103C8T6 定时器2的更新中断触发定时器0开始计时

    1. 初始化定时器TIM0 /*定时器的基本初始化和打开更新中断enable: 是否使能定时器 */ static void time_base_init(int enable) {/*定时器结构*/ ...

  6. 前端JavaScript DOM BOM 自学复盘 D1(DOM-获取DOM元素、修改HTML标签/表单/css样式属性、定时器-间歇函数)

    内容概要 1. Web API 基本认知 1.1. 作用和分类 1.2. 什么是DOM 1.3. DOM作用 1.4 DOM树 1.4.1. DOM树是什么? 1.4.2. DOM 树的作用 1.5 ...

  7. JS设置定时器和清除定时器

    最近在项目中频繁运用到js定时器,现在和大家分享一下方法.在前端开发的过程中,有些时候需要某段程序等待一段时间后再开始执行,在JavaScript中主要通过定时器实现这一类需求. JS的两种定时器 w ...

  8. 【嵌入式设计】嵌入式低功耗设计

    本文转自https://www.amobbs.com/thread-4932393-1-1.html 文章目录 前言 1.低功耗的概念 1.1.一种AD采样功耗优化方案 2.硬件低功耗设计概述 3.软 ...

  9. 使用TimerOne库

    文章目录 1. 使用TimerOne库定时做多件事 特别强调: 相关资料 如何使用硬件中断的 TimerOne (Timer1) 库, 疑难解答 1:Q: 这范例显然每0.25秒都 "先&q ...

  10. 澎湃微PT32F003/F005

    1.澎湃微PT32F003/F005产品特性 内核:Cortex-M0 最高 CPU 运行时钟频率 48MHz 存储器 Flash:16/32Kbytes RAM:2Kbytes ...

最新文章

  1. 自定义WPF窗体形状
  2. node-express-1
  3. 全国计算机二级考试vf知识点总结,VF全国计算机等级考试二级公共基础知识点总结.doc...
  4. c语言int超出范围字符串,Go返回int64类型字段超出javascript Number范围的解决方法...
  5. aop 获取方法入参出参_Spring AOP 如何将参数传递给需要织入的方法
  6. 用汇编的眼光看C++(之缺省模板、特化模板)
  7. 联想笔记本怎么进入pe系统_lenovo怎么进入pe系统
  8. 前门狗不理双人餐一份 - 北京团购网|京东团购
  9. 如何删除计算机guest用户,windows xp系统怎么删除Guest用户
  10. 短信接口api发送-kewail
  11. prng伪随机数生成器_Java伪随机数生成器(PRNG)中的弱点
  12. Glide加载图片会出现淡绿色的背景
  13. 【004】国家企业信用信息公示系统-官方渠道查询企业信息
  14. json和jsonp区别与讲解
  15. CSS技巧之精灵图/字体图标/画三角/用户页面样式/vertical-align
  16. Java简单案例练习
  17. pytorch 报告bug: Assertion idx_dim >= 0 idx_dim < index_size “index out of bounds“
  18. 风暴——老奶雷加尔使用心得
  19. Redis(学习笔记)
  20. Abaqus软件介绍

热门文章

  1. vs2013 分析 profiler 导致电脑重启
  2. twitter推文案例
  3. 关于USB以及USB的走线问题
  4. 杨立昆怒怼机器人索菲娅:AI硬加人类意识是揠苗助长
  5. 2021年贵阳六中高考成绩查询,贵阳市第六中学2021年招生简章
  6. 宋宝华Linux培训笔记-Linux多线程
  7. offer拿到手软的大佬,研究生三年是如何度过的?
  8. 区块链行业领袖汇聚一堂,共同畅谈IEO
  9. Navicat数据库管理工具的基本操作
  10. linux 物理内存释放,swap释放