找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 797|回复: 5
打印 上一主题 下一主题
收起左侧

单片机定时器时间计算

[复制链接]
跳转到指定楼层
楼主
ID:1041297 发表于 2022-9-6 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TH0 = (65536-1600)>>8;                                //63936---
TL0 = (65536-1600);        
每100us进入中断,请问这个1600是怎么计算的

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-9-6 11:41 | 只看该作者
你用的是16Mhz晶振
16Mhz * 0.0001s = 1600

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:624769 发表于 2022-9-6 12:46 | 只看该作者
16MHz 晶振 1us = 16,   16x100 = 1600

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:1034262 发表于 2022-9-6 13:23 | 只看该作者
估计楼主用的是STC的51,定时器0单周期计数,主频为16MHz,则100us就要1600个计数,于是就是65536-1600.我一般用这样的:
#define  Fosc   24000000UL

TH0 = (u8)((65536-Fosc/10000)>>8);    //定时10000Hz(100us)   
TL0 = (u8)(65536-Fosc/10000);   

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:1007932 发表于 2022-9-6 13:41 | 只看该作者
定时器就是数输入时钟周期个数,比如你这个,输入时钟为16MHz,周期即1/16 000 000(s),数1600个时钟即1/10 000(s)=0.1(ms)=100(us)。(有的单片机还可以时钟分频,所以输入时钟不一定是晶振频率)
THx和TLx是定时器高八位和低八位,可看成是两个8位寄存器合成的16位寄存器,由于赋值默认从低位取,所以高八位赋值时要右移8位,把原来高八位移到低八位再赋值给THx,是常见的数据拆分方法。

很基础的东西了,多看看书!

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:123289 发表于 2022-9-7 10:45 | 只看该作者
1600是定时器溢出前CLK的数量。
定时器是增量计时器,只会做+1。而它是16位的,即加到65536才溢出。
你要+1600次溢出,就要先给个底数,这个底数就是:65536-1600
1600是你需要的时间,就是1600个CLK需要的时间,沙发给出的是CLK使用系统晶振的时间。如果CLK取自其它时钟源,则要用其它时钟作为时基计算。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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