欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

51单片机定时/计数器

发布时间:2023/12/20 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 51单片机定时/计数器 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

定时计数器

什么是定时/计数器以及用处

51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5)
这里所说的16位是指定时/计数器内部分别有16位计数寄存器。

当工作再定时模式时,每经过一个机器周期,寄存器的值就会加1,当这个寄存器装满时就会溢出。我们可以计算工作再定时模式时最高单次定时时间为65535*1.085 us= 时间(单位us)
当工作再计数器模式时,T0(P3.4引脚),T1(P3.5引脚)每来一个脉冲,计数器加1.

定时器的作用:定时计数器可以用于精确事件定时(比延时函数精确),PWM脉宽调制,波形发生,信号时序测量等方面。

使用定时/计数器的步骤

1.启动定时/计数器(通过TCON控制器)

2.设置定时/计数器工作模式(通过TMOD控制器)


  • TH0、TH1为高八位,TL 0、TL 1为低八位
  • M0=1 (不可以这么写)应写成例:TMOD = 0x01
  • 复位值为0x00
  • 3. 查询定时/计数器是否溢出(读TCON内TF位)

    实践

    使用定时计数器0的十六位模式

    定时器0的初始化

    void timer0Init() {TR0 = 1;//启动定时器0TMOD = 0x01;//定时器模式1,16位定时模式TH0 = (65535-46082/256;TL0 = (65535-46082)%256;//定时50ms}

    定时时间超过50 ms可在主函数写

    unsigned char msec,sec; if(TF0 == 1//判断是否溢出 {TF0 = 0;//软件清零溢出标志位TH0 = 0x4b;TL0 = 0xfd;//定时50msmsec++;//50ms到if(msec == 20){msec = 0;sec++;//一秒时间到}}

    定时/计数器的计数模式

    TR0 = 1;//启动定时器0TMOD = 0x05;//定时器模式1,16位计数模式

    总结

    以上是生活随笔为你收集整理的51单片机定时/计数器的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。