datasheet

定时计数器T0作定时应用技术(二)

2011-02-27来源: 互联网关键字:定时计数  计数器  定时  应用

1.      实验任务

AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始L1指示灯以0.2秒的速率闪烁,当2秒定时到来之后,L2开始以0.2秒的速率闪烁,如此循环下去。0.2秒的闪烁速率也由定时/计数器T0来完成。

2.      电路原理图

4.16.1

3.      系统板硬件连线

(1.       把“单片机系统”区域中的P1.0P1.3用导线连接到“八路发光二极管指示模块”区域中的L1L4

4.      程序设计内容

(1.       由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器T0来说,中断入口地址为000BH,因此在中断入口地方加入长跳转指令来执行中断服务程序。书写汇编源程序格式如下所示:

                            ORG 00H

                            LJMP START

                            ORG 0BH        ;定时/计数器T0中断入口地址

                            LJMP INT_T0

START:               NOP          ;主程序开始

                            .

                            .

 

INT_T0:             PUSH ACC                  ;定时/计数器T0中断服务程序

                            PUSH PSW

                            .

                            .

                            POP PSW

                            POP ACC

                            RETI                   ;中断服务程序返回

                            END

(2.       定时2秒,采用16位定时50ms,共定时40次才可达到2秒,每50ms产生一中断,定时的40次数在中断服务程序中完成,同样0.2秒的定时,需要4次才可达到0.2秒。对于中断程序,在主程序中要对中断开中断。

(3.       由于每次2秒定时到时,L1L4要交替闪烁。采用ID来号来识别。当ID0时,L1在闪烁,当ID1时,L2在闪烁;当ID2时,L3在闪烁;当ID3时,L4在闪烁

5.      程序框图

T0中断服务程序框图

 

 

 

 

 

 

 

 

 

主程序框图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.16.2

6.      汇编源程序

TCOUNT2S                EQU 30H

TCNT02S                    EQU 31H

ID                                 EQU 32H

                                      ORG 00H

                                      LJMP START

                                      ORG 0BH

                                      LJMP INT_T0

START:                        MOV TCOUNT2S,#00H

                                     MOV TCNT02S,#00H

                                     MOV ID,#00H

                                      MOV TMOD,#01H

                                      MOV TH0,#(65536-50000) / 256

                                      MOV TL0,#(65536-50000) MOD 256

                                      SETB TR0

                                      SETB ET0

                                      SETB EA

                                      SJMP $

INT_T0:                      MOV TH0,#(65536-50000) / 256

                                      MOV TL0,#(65536-50000) MOD 256

                                      INC TCOUNT2S

                                      MOV A,TCOUNT2S

                                      CJNE A,#40,NEXT

                                      MOV TCOUNT2S,#00H

                                      INC ID

                                      MOV A,ID

                                      CJNE A,#04H,NEXT

                                      MOV ID,#00H

NEXT:                          INC TCNT02S

                                      MOV A,TCNT02S

                                      CJNE A,#4,DONE

                                      MOV TCNT02S,#00H

                                      MOV A,ID

                                      CJNE A,#00H,SID1

                                      CPL P1.0

                                      SJMP DONE

SID1:                            CJNE A,#01H,SID2

                                      CPL P1.1

                                      SJMP DONE

SID2:                           CJNE A,#02H,SID3

                                      CPL P1.2

                                      SJMP DONE

SID3:                            CJNE A,#03H,SID4

                                      CPL P1.3

SID4:                            SJMP DONE

DONE:                        RETI

                                      END

7.      C语言源程序

#include

 

unsigned char tcount2s;

unsigned char tcount02s;

unsigned char ID;

 

void main(void)

{

  TMOD=0x01;

  TH0=(65536-50000)/256;

  TL0=(65536-50000)%256;

  TR0=1;

  ET0=1;

  EA=1;

 

  while(1);

}

void t0(void) interrupt 1 using 0

{

  tcount2s++;

  if(tcount2s==40)

    {

      tcount2s=0;

      ID++;

      if(ID==4)

        {

          ID=0;

        }

    }

  tcount02s++;

  if(tcount02s==4)

    {

      tcount02s=0;

      switch(ID)

        {

          case 0:

            P1_0=~P1_0;

            break;

          case 1:

            P1_1=~P1_1;

            break;

          case 2:

            P1_2=~P1_2;

            break;

          case 3:

            P1_3=~P1_3;

            break;

        }

    }

关键字:定时计数  计数器  定时  应用

编辑:小来 引用地址:http://news.eeworld.com.cn/mcu/2011/0227/article_3628.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:“叮咚”门铃
下一篇: 99秒马表设计

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

51单片机与stm32的定时器定时计数的区别

51单片机设置定时的时间,假设用定时器定时50毫秒,可以用这种方式TH0 = (65535 - 50000) / 256,TL0 = (65535 - 50000) % 256;可以这样理解:因为这是定时器的初值(真正的定时时间是65535 - 初始值),也就是说计数脉冲就是在这个数的基础上向上递增,到达65535后就溢出产生中断。stm32定时器当 TIM3_CNT 的值等于 TIM3_ARR 的值的时候,就会产生 TIM3 的更新中断。即计数器是从0开始计数的,arr设置的是最后的溢出值。与51单片机的不同也就在这里。
发表于 2018-08-20

51单片机的中断与定时计数器尝试

这是我的第一篇有关51单片机的博客,主要记录我的学习历程与中间遇到的问题,如有错漏请指出。在我理解里面中断与定时计数器是这样的:中断是通过检查P3.2(INT0)与P3.3(INT1)两个引脚来触发的计数器是通过检查P3.4(T0)与P3.5(T1)两个引脚的状态,要达到一定的次数(一般是记脉冲数)才触发定时器不需要检测引脚,直接计数先说中断的代码#include<reg51.h>#include<intrins.h> #define SDT P0//静态数码管定义 unsigned char temp; unsigned char code SDT_map[10]={0xC0
发表于 2018-07-12

单片机定时计数器、中断和串行口的学习

    本期主要知识点为单片机定时计数器、中断和串行口的学习。单片机对于初学者来说确 实很难理解,不少学过单片机的同学或电子爱好者,甚至在毕业时仍旧是一无所获。基于此,电子发烧友网将整合《单片机学习知识点全攻略》,共分为四个系列, 以飨读者,敬请期待!此系列对于业内电子工程师也有收藏和参考价值。      15、单片机位操作指令     前面那些流水灯的例程,我们已经习惯了“位”一位就是一盏灯的亮和灭,而我们学的指令却全都是用“字节”来介绍的:字节的移动、加法、减法、逻辑运 算、移位等等。用字节来处理一些数学问题,比如说:控制冰箱的温度、电视的音量
发表于 2018-04-05
单片机定时计数器、中断和串行口的学习

增强定时计数器和PWM输出功能

。因此被越来越多的变频设备所采用。    1.2 芯片简介    SPMC75系列MCU是凌阳科技公司设计开发的高性能16位通用MCU,具有很强的抗干扰能力、丰富易用的资源以及优良的结构,特别是增强的定时计数器和PWM输出功能。    SPMC75系列MCU使用凌阳u'nSP内核,u'nSP内核是一种高效的16位CISC内核。支持乘法、乘法累加、32/16位除法、FIR等高性能运算;支持两种中断模式。可以方便的产生SPWM波、空间电压向量PWM(SVPWM)等各种电机驱动波形。    除了拥有高性能的CPU外,SPMC75系列MCU
发表于 2018-02-18
增强定时计数器和PWM输出功能

基于AT90S8515的定时计数器

A-TCCRA  TCCRA的地址为$2F($4F),复位时值为O,各位定义如下:  COMMlA1、COMMIAO为比较A输出模式选择,决定TCNT1在与OCRIA比较匹配之后的输出引脚事件。输出引脚事件影响OC1A,即输出比较A(见上表)。    由于其对I/O口的可替换功能,此I/O口的方向控制位必须设为l,以便对输出引脚进行控制。    COMM1B1、COMM1BO为比较B输出模式选择,决定TCNT1在与OCRIB比较匹配之后的输出引脚OCIB的事件(见上表)。    在PWM模式下,上述4位的功能不同(见PWM模式下的定时计数器1)。    改变以上四位时,必须清除TIMSK中的中断使能位来禁止输出比较器中断l,否则将发生中断
发表于 2017-12-11
基于AT90S8515的定时计数器

定时计数器的原理 计数周期的计算

16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为: T=1/(12×106)Hz×1/12=1μs这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。 当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发
发表于 2017-10-12

小广播

何立民专栏

单片机及嵌入式宝典

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

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