51单片机:定时器

eefocus · 电子工程世界·2021-06-18 00:00

1.1k

定时器:单条指令时间(us) = 1/单片机频率*单条指令时钟周期


TH0和TL0共16位,最多只能表示65535,所以要设定一个Base值,再利用循环多计数几次


比如0.002s:0.02 = (1/11.0592M * 12)*指令个数,指令个数 = 0.02(1/11.0592M * 12) = 0.018432


因为频率用的是M,所以结果0.018432*1000000 = 18432


使用16位寄存器的情况下,TH0和TL初始值:65536 - 18432 = 47104 = 0xB8 00


编写定时器延时函数:


#include sbit LED = P0^0;


void Delay(unsigned int sec)

{

unsigned int second_base;

unsigned int conter;             //计数次数


second_base = 2;                //Base,2ms*100 = 2s

conter = sec*100 / second_base; //转换成秒

TL0 = 0x00;                    //16位计数器低8位,设置

TH0 = 0xB8;        //高8位


while (conter)

{

if (1 == TF0)           //当高8位溢的时候,TF0标志位被置1

{

TF0 = 0;            //软件清0TF位,并给定时器赋基值

TL0 = 0xE0;

TH0 = 0xB1;

conter = conter - 1;

}

}

}


void main()

{

TR0 = 1;        //定时器0启动控制位,1代表计时器0启动

TMOD = 0x01;    //指定计数器为16位模式


LED = 0;

while(1)

{

Delay(2);    //延时2S

LED = ~LED;

}

}


8位:255


16位:65535


SFR地址:如果头文件没有定义TH0,需要自已定义TH0=0x8C


TH0:高8位。


TL0:低8位,如果是16位,则TL0溢出后,TH0+1


定时器0打开:TR0 = 1;


TF0:溢出后,硬件自动置1,通过软件或硬件清0


GATE:为1时,定时器开始计时,可以用来计测脉冲宽度,C/T:为1时使用定时器


定时器常用两种模式:


TMOD M1/M0模式为10时,自动重装:TL0溢出后,TL0重装TH0的值,并且TF0置1


TMOD M1/M0模式为01时,16位定时器:TL0溢出后,TH0加1

关键字: 51单片机 定时器 时钟周期 编辑:什么鱼 引用地址: http://news.eeworld.com.cn/mcu/ic539104.html

广告

eefocus · 电子工程世界·2021-06-18 00:00

1.1k
  • 定时器
  • 单片机
  • 用户热评
    打开摩尔芯球APP,查看更多评论

    重大事件及时推送,更流畅的沉浸式阅读体验

    参与评论

    0/200字

    登录后即可发布评论

    发布评论

    请使用浏览器自带的分享按钮,
    将你这篇文章分享出去吧。
    +86
    获取验证码
    登 录

    邮箱登录

    未注册过的用户将直接为你创建摩尔账号