JackCin's blog JackCin's blog
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

JackCin

前端小菜鸡(✪ω✪)
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • test1
  • test2
  • 独立按键
  • 定时器
    • AT24C02存储器
    • 笔记:Html
    JackCin
    2023-09-11
    目录

    定时器

    # 定时器

    # 1、定时器的基本概念

    (对于51单片机的定时器看来几篇博客,写的和详细,所以就没再自己详细写,感谢大佬们的分享🌼🌷🌹)

    (13条消息) 【51单片机】十分钟学会定时器&中断¹_51单片机定时器_謓泽的博客-CSDN博客 (opens new window)

    (13条消息) 【51单片机】配置定时器_定时器里面的t0count是什么_謓泽的博客-CSDN博客 (opens new window)

    (六)51单片机基础——定时器_单片机定时器_花园宝宝小点点的博客-CSDN博客 (opens new window)

    # 2、初识化定时器函数

    img

    • GATE 连接的是非门(即为取反,就是0变为1,1变为0)
    • ——INTO连接的是或门(有1为1,全0为0)
    • TR0连接的是与门(全1为1,其余为0)

    img

    img

    • 步骤
        1. 先配置TMOD(定时器模式)和TCON(定时器控制寄存器)
        1. 设置定时初值
        1. 配置中断寄存器
    void Timer0Init(void)
    {
    	//配置定时器模式(TMOD)
    	TMOD&=0xF0; //把TMOD的低四位清零,高四位保持不变
    	TMOD|=0x01;	//把TMOD的高四位保持不变,最低位置为1
    	
    	
    	TL0 = 0x18;		//设置定时初值
    	TH0 = 0xFC;		//设置定时初值
    	
    	//配置定时器控制寄存器(TCON)
    	TF0 = 0;		//清除TF0标志
    	TR0 = 1;		//定时器0开始计时
    	
    	
    	//配置中断寄存器
    	ET0=1; 
    	EA=1;
    	PT0=0;
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    # 3、定时器中断处理函数

    //基础模板
    void Timer0_Routine() interrupt 1
    {
    	static unsigned int T0Count;
    	TL0 = 0x18;		//设置定时初值
    	TH0 = 0xFC;		//设置定时初值
    	T0Count++;		//T0Count计次,对中断频率进行分频
    	if(T0Count>=500) //分频500次,500ms
    	{
    		T0Count=0;
    		//if(LEDMode==0)			//模式判断
    		//	P2=_crol_(P2,1);	//LED输出
    		//if(LEDMode==1)
    		//	P2=_cror_(P2,1);
    	}
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    • 中断函数注意要重新赋定时初值
    • 我们上面创建的定时函数是1ms溢出一次,即执行一次中断函数,所以要每0.5s进行一次操作,需要有个变量 T0Count 里进行计数

    # 4、循环移位函数

    • #include <INTRINS.H>函数库里有

    • _cror_(unsigned char,unsigned char); 循环右移函数

    • _crol_(unsigned char,unsigned char); 循环左移函数

      P2=0xFE;  //1111 1110
      //P2=_crol_(P2,1);  //P2= 1111 1101
      //即是8位数在首尾循环,不会出现越界问题
      P2=_crol_(P2,8);  //P2= 1111 1110
      
      1
      2
      3
      4

    补充:我们上面使用的是16位定时器,16位定时器的计数比较多,但是每次需要我们自己重新赋初值,而8位的就是将16位分开,一个计数,一个存放初值,每次计数完成后,AR会自动将初值给CNT,不用我们自己代码赋初值,比较快,但是计数范围小

    计数器

    编辑 (opens new window)
    上次更新: 2023/09/12, 14:55:44
    独立按键
    AT24C02存储器

    ← 独立按键 AT24C02存储器→

    最近更新
    01
    51单片机及补充知识
    09-13
    02
    独立按键
    09-13
    03
    LCD1602液晶显示器
    09-13
    更多文章>
    Theme by Vdoing | Copyright © 2019-2023 Evan Xu | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式