• 51单片机定时器实现LED闪烁


    要启用一个定时器,先要开启定时器,然后产生中断

    系统中断:

    初始化程序应完成如下工作:

    对TMOD赋值,以确定T0和T1的工作方式。

    计算初值,并将其写入TH0、TL0或TH1、TL1。

    中断方式时,则对EA赋值,开放定时器中断。

    使TR0或TR1置位,启动定时/计数器定时或计数。

    #include <reg52.h>
    /************ 定时器+中断控制led翻转 ***********/
    
    sbit LED = P0^0;
    
    typedef unsigned int u16;
    typedef unsigned char u8;
    
    void timer_init(){
        TMOD |= 0x01;  //定时器工作方式1,启用T0定时器, GATE位为0,用TCON的TR0控制T0定时器的启动
    
        //设置定时器的初始计数值
        //计算方法
        //假设定时器为1ms,一个机器周期为 1/单片机的晶振频率  即: 1/12M = 1us
        //而1个机器周期 = 12个时钟周期 所以: n x 机器周期 = 1ms ===> n x 1us = 1ms
        //所以n = 1000,也就是经过1000个机器周期,定时器要溢出(从0开始计数)
        //所以定时器的初始值为65535 - 1000 + 1 = 64536 ===> 0xFC18
        TH0 = 0xFC;
        TL0 = 0x18;
    
        EA = 1;  //总中断开关
        ET0 = 1; //T0中断
            
        TR0 = 1;//启动T0定时器
    }
    
    void trigger_timer0() interrupt 1{
        static u16 i = 0;
        TH0 = 0xFC;
        TL0 = 0x18;
        i++;
        if( i == 1000 ) { //1秒
            i = 0;
            LED = ~LED;
        }
    }
    
    void main(){
        timer_init();
        while( 1 );
    }
  • 相关阅读:
    Spring-Cloud-GateWay
    Spring-Clould-Alibaba-sentinel控制台
    Oacle学习-01Oracle的安装
    Spring-Clould-Alibaba-集成Ribbon&Feign
    Spring-Clould-Alibaba-nginx-nacos集群搭建
    Springboot整合Security
    Springboot实现QQ邮箱的发送
    java实现qq邮箱的发送
    Springboot集成Swagger2
    Hadoop集群搭建
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9163067.html
Copyright © 2020-2023  润新知