精华内容
下载资源
问答
  • T0定时器相关的寄存器共4个;T0M,T0C,INTRQ,INTEN. 一、T0M模式寄存器   Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 T0M T0ENB T0rate2 T0rate1 T0rat

     

    与T0定时器相关的寄存器共4个;T0M,T0C,INTRQ,INTEN.

    一、T0M模式寄存器

     

    Bit7

    Bit6

    Bit5

    Bit4

    Bit3

    Bit2

    Bit1

    Bit0

    T0M

    T0ENB

    T0rate2

    T0rate1

    T0rate0

    -----

    -----

    -----

    -----

    /

    R/W

    R/W

    R/W

    R/W

    -----

    -----

    -----

    -----

    复位

    0

    0

    0

    0

    -----

    -----

    -----

    -----

    T0ENBT0使能位,0=不使能,1=使能

     

    T0rate2~T0rate0T0分频选择位

    T0时钟由CPU时钟分频而来,分频比如下;

    T0rate2~T0rate0

    分频比

    000

    fCPU/256

    001

    fCPU/125

    010

    fCPU/64

    011

    fCPU/32

    100

    fCPU/16

    101

    fCPU/8

    110

    fCPU/4

    111

    fCPU/2

     

     

    二、T0计数寄存器

    T08位的计数器,计数范围为0-255T0没有重装载功能,所以默认计数是从0开始,到255+1就溢出,当然T0也可以设计数初值。

     

    Bit7

    Bit6

    Bit5

    Bit4

    Bit3

    Bit2

    Bit1

    Bit0

    T0C

    T0C7

    T0C6

    T0C5

    T0C4

    T0C3

    T0C2

    T0C1

    T0C0

    /

    R/W

    R/W

    R/W

    R/W

    R/W

    R/W

    R/W

    R/W

    复位

    0

    0

    0

    0

    0

    0

    0

    0

    T0C初值=256-T0溢出间隔时间*时钟速度)

    例;T0定时10msfCPU=1mT0rate=010=fCPU/64,那么

    T0C初值=256-T0溢出间隔时间*时钟速度)

    =256-10ms*fcpu/64))

    =64H

    三、中断请求寄存器INTRQ

    四、中断请求使能寄存器INTEN

    名称

    Bit7

    Bit6

    Bit5

    Bit4

    Bit3

    Bit2

    Bit1

    Bit0

    复位

    INTRQ

    ADCIRQ

    TC1IRQ

    TC0IRQ

    T0IRQ

    SIOIRQ

    P02IRQ

    P01IRQ

    P00IRQ

    00000000

    INTEN

    ADCIEN

    TC1IEN

    TC0IEN

    T0IEN

    SIOIEN

    P02IEN

    P01IEN

    P00IEN

    00000000

    置位寄存器INTEN的相应位可以使能相应的中断。

    当中断发生时,寄存器INTRQ相应的位会被置1,这个中断标志位需要在中断中软件清零。

    T0C溢出时,如果使能了T0中断使能,则会产生T0中断,T0IRQ会被置1.

     

     

     

    例;在cpu=1M情况下,T0中断定时10ms

    #include<sn8p2612.h>

    main()

    {

    FT0IEN=0; //配置中断的时候最好先关闭相应中断

    T0M=0X20; //分频 fCPU/64

    T0C=0X64; //10ms初值

    FT0IEN=1; //开定时器T0中断

    FGIE=1; //开总中断

     

    while(1);

    }

     

    //所有中断共用一个入口,所以要在中断中查询相应的标志位来判断是哪个中断

     __interrupt T0INT(void)

    {

     

    if(INTRQ&0X10) //T0中断查询

    {

    T0C=0x64; //10MS初值重装0x64

    FT0IRQ=0; //标志位手动清零

    //中断处理,该干嘛干嘛去!!!

    }

    }

     

     

     

     

     

    展开全文
  • 51单片机T0做精确时钟

    千次阅读 2010-11-08 13:42:00
    51单片机T0,精确时钟

    51单片机T0做精确时钟

    T0做精确时钟,为了做到尽量精确,必须减少中断的次数,所以选择使用方式1,它最多可以计数65536次。但是,方式1中断后需要重新给定时器赋初值,这样就要耽误几个机器周期,很难保证时钟的精确。

    有两个方法可以解决这个问题。

    第一个方法:你可以计算出中断处理时重新给定时器赋初值所用的机器周期数,在你计算出的初值里除去这几个机器周期,作为补偿。这个方法,只是在每次定时器中断后,都可以按时得到执行时很精确,但事实上中断什么时候执行谁都说不准,所以这个方法,只能做到尽量精确。

    第二个方法:计算出一个凑巧的初值,使TL0正好等于0x00,这样每次中断溢出后,TL0都从0x00开始计数,即使中断没有得到执行,TL0也会继续计数。利用这一点,在中断处理函数中,只需要对TH0重新赋值,不需要管TL0。以下是示例程序:

    //定时器T0时钟参数

    unsigned char T0_S = 0;                   //

    unsigned char T0_M = 0;                 //

    unsigned char T0_H = 0;                  //

    unsigned char T0_Cycle = 0;           //循环次数

    //本程序所用晶振22.1184MHz,每次定时25ms,循环40次正好1s

    void Timer0_Init(void)           //T0初始化函数

    {

    TMOD = 0x01;                     //设置T0工作方式1

    TH0  = 0x4c;                       //(65536-46080)/256,设置初值46080,晶振22.1184MHz

                                                            //每个机器周期0.5425微秒,定时25ms

    TL0  = 0x00;                        //(65536-46080)%256 TL0恰好=0x00

    IE   |= 0x82;                        //开中断

    TR0  = 1 ;                                     //T0开始定时

    }

     

    //

    void Timer0(void) interrupt 1

    {

    TH0  = 0x4c;                       //重新给TH0赋值

    //TL0  = 0x00;                       //不对TL0赋值,让其继续计数

    TF0  = 0 ;                                      //定时溢出清0  

     

    T0_Cycle ++ ;

    if(T0_Cycle == 40)                        //循环40次,每次25ms,定时1s

    {

               T0_Cycle = 0 ;            

               T0_S++ ;

     

               if(T0_S == 60)

               {

                        T0_S = 0;  

                        T0_M++;

     

                        if(T0_M == 60)

                        {

                                 T0_M = 0;

                                 T0_H++;

                                          

                                 if(T0_H == 24)

                                 {

                                           T0_H = 0; 

                                 }

                        }

               }                         

    }

    }

    以上程序即使T0中断赋初值会耽误几个机器周期,中断没有得到及时执行也没有关系,因为TL0的计数不受影响。但有一种情况必须要注意,虽然这种情况发生的可能性不大。如果T0中断长时间没有得到响应,TL0再一次溢出了,这时这种方法的误差就大了。

    经过测试,第二种方法还是比较精确的,时钟跑了一天快了10s,这个误差应该是晶振本身的问题,如果是定时器的问题,应该是慢了,不会快了。

     

    展开全文
  • 简单的T0定时器实现中断,LED灯可接P1.0口 实现一秒钟一闪
  • 用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。下面我就开始介绍如何制作这款单片机记时器。
  • 本文主要讲了用单片机定时器T0和P1.7端口产生连续矩形脉冲的程序,希望对你的学习有所帮助。
  • C51单片机运用定时器T0中断实现电子时钟,含有原理图和相关程序设计。
  • C51单片机定时器T0,T1的常用基本设置

    万次阅读 2017-05-06 18:30:11
    提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时) 代码如下 #include "reg52.h" #define time_...

    有时候带手机不方便,可以又想知道时间,这时候可以用蜂鸣器做一个音频的时间提醒器,每60秒发一声提醒

    提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时)

    代码如下

    #include "reg52.h"
    
    #define uint unsigned int
    #define uchar unsigned char
    
    #define time_set0 5000//设置定时器0的计时长度
    
    #define th0 (65536-time_set0)/256//计算定时器高8位装入值
    
    #define tl0 (65536-time_set0)%256 //计算定时器低8位装入值
    #define time_set1 256-200//设置定时器1的计时长度
    
    sbit P1_1=P1^1;//系统运行指示灯管脚
    
    sbit beep=P1^7;//蜂鸣器管脚
    
    uint cnt=0;//计数器
    uint cnt2=0;//计数器
    uint cnt3=0;//计数器
    
    void delay(uint i)//延时函数
    {
    uchar k;
    for(;i>0;i--)
    for(k=0;k<200;k++);
    }
    
    timer0()interrupt 1 using 1//定时器0设置
    {
        cnt++;//每次中断增加一
    if(cnt>100)//计数时间5ms*100=500ms
    {
    cnt=0;
    }
    
        TH0=th0;//重装定时器
        TL0=tl0;
    }
    
    timer1()interrupt 3 using 2//定时器1设置
    {
        cnt2++;
    if(cnt2>=5000)//计数时间0.2ms*5000=1s
    {
    cnt2=0;
    cnt3++;//秒计数器增加一
    P1_1=!P1_1;//指示灯每秒翻转一次
    }
    }
    
    void main()
    {
        TMOD=0x21;//设置定时器1方式2(高4位0010,自动重装TH->TL,计满255),定时器0方式1(低4位0001,16位定时器,可计满65535)
        TH0=th0;//装载定时器初始值
        TL0=tl0;
        TH1=time_set1;
        TL1=time_set1;
        EA=1;//开总中断
        ET0=1;//开定时器0中断
        ET1=1;//开定时器1中断
        TR0=1;//打开定时器0
        TR1=1;//打开定时器1
    while(1)
    {
      if(cnt3>=60)//计时60秒
      {
      cnt3=0;//计时清零
    beep=0;//打开蜂鸣器
    delay(100);//延时100
    beep=1;//关闭蜂鸣器
      }
    }
    }

    展开全文
  • 一、实验目的 1、利用单片机定时器计数器中断设计秒表,从而实现00.00s~59.99s的计时 2、综合运用所学的理论知识,通过实践...1)利用定时器/计数器T0的工作方式1 2)秒表的变化范围是0.00s~59.99s 3)用独立键盘控

    一、实验目的

    1、利用单片机定时器计数器中断设计秒表,从而实现00.00s~59.99s的计时

    2、综合运用所学的理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力,加深对课程的全面认识。

    3、该实验通过单片机的延时设计及内部中断设计,实现简单的计时器系统。

    二、实验内容

    结合键盘,中断和数码管相关知识,实现一个精度为0.01s的秒表,并用数码管前四位显示。详细要求如下:

    1)利用定时器/计数器T0的工作方式1

    2)秒表的变化范围是0.00s~59.99s

    展开全文
  • 51单片机,通过使用定时器T0,利用方式2达到输出PWM脉冲并控制占空比程序。
  • void Timer0() interrupt 1 { static u16 i; TH0=0XF4; //给定时器赋初值,定时1ms TL0=0X48; i++; if(i==1000) { i=0; led=_crol_(led,1); } }
  • 3、主函数:二、各个定时器和工作方式:方式0:方式2:方式3:借鉴:郭天祥《新概念51单片机C语言教程》一、原理:51单片机,拥有两个定时器,用来中断计数,分别是T0和T1。而52单片机和51单片机的定时器是一样的,...
  • 单片机中断优先级以T0及T1中断为例
  • 与大家一起分享,基于51单片机的定时计数器T0应用2仿真
  • 与大家一起分享,基于51单片机的定时计数器T0应用1仿真
  • /********************************************** 方法1:延时法 ...描述:T0用于定时,方式1,定时时间50ms,中断方式,定时时间到,TF1=1,利用模拟串口发送字符0x67 ********************************
  • 单片机T0作定时器实现数码管显示的汇编程序(中断法),一起来学习一下
  • 51单片机定时器/计数器T0|T1的四种工作方式

    千次阅读 多人点赞 2020-06-23 15:27:14
    • 选择方式0、方式1、方式2时,T0|T1的工作情况相同 • 选择方式3时,T0|T1的工作情况不同 方式0:13位定时器/计数器,TH0的高8位,TL0的低5位 方式1:16位定时器/计数器,TH0的高8位,TL0的低8位 方式2:自动重...
  • AT89S51 单片机的定时 /计数器 T0 的应用 1实验任务 用 AT89S51 单片机的定时 /计数器 T0 产生一秒的定时时间 作为秒计数时间 当一秒产生 时秒计数加 1秒计数到 60 时自动从 0 开始硬件电路如下图所示 2 电路原理图 ...
  • 文件名称:测试T0定时器中断晶振频率:内部16Mhz指令周期:晶振频率/16,即1us文件版本:V1.1文件作者:SWS文件实现的功能描述:采用T0定时器,定时10Ms,计数器变量加一,等加到50次时就是500Ms,每500ms led灯闪烁...
  • 51单片机定时器(T0/T1)的使用与配置流程

    千次阅读 多人点赞 2020-03-10 12:27:07
    即M1M0 = 0 1 或M1M0 = 1 0 第二步:赋初值 —— THx、TLx 注意: (1) 51单片机定时器常常方式1或者方式2 (2)方式1可以装入的总数是65536 (3)方式2可以转入的总数是256 赋值举例(以方式1和方式2): 1、采用...
  • 名称:T0 控制 LED 实现二进制计数 说明:本例对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在 T0 引脚的按键每次按下时,会使计数寄存器的值递增,其值...
  • 使用普通51单片机 T0定时器产生500ms方波信号 改变T0初值 输出方波频率可调
  • #include <reg52.h> #define guan P0 #define wei P2 #define uchar unsigned char #define uint unsigned int sbit wei0=P2^4; sbit wei1=P2^5; sbit wei2=P2^6; sbit wei3=P2^7;...unsigned ...
  • PIC16F648A进行T0中断用LED显示,适合初学PIC单片机
  • 基于AT89S51单片机设计的定时计数器T0作定时应用技术(二)并且配有proteus仿真模拟
  • 基于AT89S51单片机设计的定时计数器T0作定时应用技术(一)并且配有proteus仿真模拟

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,476
精华内容 2,590
关键字:

单片机t0