找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3609|回复: 2
收起左侧

单片机定时器初始化程序求解释

[复制链接]
ID:696938 发表于 2020-2-23 14:18 | 显示全部楼层 |阅读模式
希望懂的人指点一下,每一条命令是表达什么?谢谢
void timer_init()          //定时器初始化
{
        TMOD=0x01;                  //定时器0,方式1
        TH0=0x3c;                  //初值50ms,这50怎么算出来的?
        TL0=0XB0;
        TR0=1;
        ET0=1;
        EA=1;
}

回复

使用道具 举报

ID:235200 发表于 2020-2-23 14:38 | 显示全部楼层
void timer_init()          //定时器初始化
{
        TMOD=0x01;                  //设置定时器0方式1,即16位计数,用TH0TL1来计数
        TH0=0x3c;                    //设置初值50ms,TH0=(65536-50000)/256 这是按机器周期1us算的
        TL0=0XB0;                    //TL0=(65536-50000)%256 这是按机器周期1us算的
        TR0=1;                         //开始计数工作
        ET0=1;                        //开启中断允许
        EA=1;                          //开启总中断允许
}

机器周期就是晶振动12次的时间,用T表示的话  T=1/12000000x12,其中1/12000000是12MHz晶振振动1次的时间,乘上12是1个机器周期需要振动12次,算出来就是1us时间
TH0TL0组成的16位计数器如果从0x0000计数到0xffff就需要65536个机器周期,为了达到计数50000次,即50ms,所以设置起点(65536-50000)=15536,用16进制表示就是0x3CB0
回复

使用道具 举报

ID:294296 发表于 2020-2-23 15:01 | 显示全部楼层
定时器满值65536-初值50000(50ms)=15536,这个减出来的差值15536换成16进制就是3CB0,然后TH0取高两位,TL0取低两位赋值。
51hei截图.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表