zoukankan      html  css  js  c++  java
  • 定时工作方式2实现1s定时

    定时器的几种工作方式中,除0和前面的1类似都需要初始化计数值,然后开始计数,计数溢出后,需要再次控制计数的初值,但工作模式2不同于此,工作方式2将THx和TLx分开处理,将初值存放在THx中,计数时只处理TLx的8位,所以计数最大值为2^8=256,方式2的另一个特点是,当计数溢出后,不需要控制初值,而是会自动将THx中的值做为计数初值重新开始计数。用工作方式2,实现1s延时程序如下:

    查询方式

    #include <reg52.h>
    
    sbit LED = P0^2;
    unsigned int vT = 0;
    
    void main()
    {
        LED = 0;         // 初始亮灯
        TMOD = 0x02;     // 工作模式2 最大计数值256
        TH0 = 0x06;         // 从6开始  256-6=250 * 1us = 0.25ms
        TL0 = 0x06;
        TR0 = 1;         // 启动定时器0
        while(1)
        {
            if (TF0 == 1)    // 如果定时器计数溢出
            {
                TF0 = 0;
                vT++;
                if (vT == 4000)     // 0.25ms * 4000 = 1000ms = 1s
                {
                    LED = !LED;
                    vT = 0;            
                }        
            }    
        }
    }

    中断方式

    #include <reg52.h>
    
    sbit LED = P0^2;
    unsigned int vT = 0;
    
    void main()
    {
        LED = 0;           // 初始亮
        TMOD = 0x02;       // 模式2
        TH0 = 0x06;           // 256-6=250 * 1us = 0.25ms
        TL0 = 0x06;
        ET0 = 1;           // 定时器0中断开启
        EA = 1;               // 总中断开
        TR0 = 1;           // 定时器0开启
        while(1);
    }
    
    void MyInterrupt(void) interrupt 1      // 中断服务程序
    {
        vT++;
        if (vT == 4000)   // 4000*0.25ms=1000ms=1s 
        {
            LED = !LED;
            vT = 0;
        }
    }
  • 相关阅读:
    CodeForces
    4.15随笔
    oracle新建用户并赋予权限等
    catch时,获取异常信息
    ORACLE 判断是否为数字类型
    UNION ALL用法
    2019.11.7随笔
    oracle 查询锁表和解锁
    2019.11.1随笔
    oracle拼接子查询返回的多个结果
  • 原文地址:https://www.cnblogs.com/coloregg/p/3602733.html
Copyright © 2011-2022 走看看