找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机中断程序疑问

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:1079270 发表于 2023-6-26 09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void InterruptTimer0() interrupt 1
{
TH0 = 0xFC; //重新加载初值
TL0 = 0x67;
cnt++; //中断次数计数值加 1
if (cnt >= 1000) //中断 1000 次即 1 秒
{
cnt = 0; //清零计数值以重新开始下 1 秒计时
flag1s = 1; //设置 1 秒定时标志为 1
}
LedScan();
}
问:这里的LedScan();是920us刷新一次吗?问:为什么fc67习惯说是1ms?


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

使用道具 举报

沙发
ID:884147 发表于 2023-6-26 10:19 | 只看该作者
初值是根据晶振频率计算的,首先确定使用多大的晶振,是11.0592还是12M还是......
回复

使用道具 举报

板凳
ID:1079270 发表于 2023-6-26 10:33 | 只看该作者
mtdzok 发表于 2023-6-26 10:19
初值是根据晶振频率计算的,首先确定使用多大的晶振,是11.0592还是12M还是......

11059200
回复

使用道具 举报

地板
ID:752974 发表于 2023-6-26 10:39 | 只看该作者
1. 为什么是1ms,自己看书去。
2. 中断服务程序应该简洁,追求执行时间最短的指导思想,LedScan();最好不要放在这里。
回复

使用道具 举报

5#
ID:123289 发表于 2023-6-26 10:44 | 只看该作者
【LedScan()】,在【void InterruptTimer0() interrupt 1】中只运行了一次。
所以【void InterruptTimer0() interrupt 1】多久运行一次,【LedScan()】就多久运行一次。
也即取次于你的中断时常数设定。而时基又是晶振频率。所以你看着办吧。
回复

使用道具 举报

6#
ID:161164 发表于 2023-6-26 11:11 | 只看该作者
说的出920us就代表你懂得TH0 = 0xFC;TL0 = 0x67;的意义
但还差一点的,就是0xFC67加到0x10000溢出的时间计算
0x10000 - 0xFC67 = 921
THTL每加1的时间间隔是基于晶振频率
12Mhz是1us, 而11.0592Mhz就是12/11.0592 = 1.085us
921 x 1.085 = 999.35 差不多是1ms

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:1079270 发表于 2023-6-26 13:17 | 只看该作者
lkc8210 发表于 2023-6-26 11:11
说的出920us就代表你懂得TH0 = 0xFC;TL0 = 0x67;的意义
但还差一点的,就是0xFC67加到0x10000溢出的时间计 ...

参考了6楼的讲解,已解决问题,谢谢大家参与讨论
回复

使用道具 举报

8#
ID:1053359 发表于 2023-7-3 13:45 | 只看该作者
根据提供的代码,可以看出在 Timer0 的中断函数 InterruptTimer0() 中调用了函数 LedScan()。由于没有给出 LedScan() 的具体实现代码,无法确定其刷新频率。因此,无法准确回答 "LedScan(); 是 920us 刷新一次吗?" 这个问题。

至于为什么 TH0 = 0xFC 和 TL0 = 0x67 常被称为 1ms,是因为这是设置 Timer0 初值的方式,在一些常见的时钟频率和定时器设定下,可能导致定时器每溢出一次需要 1ms 的时间。

具体来说,当使用 11.0592MHz 的晶振作为时钟源,并将定时器 T0 设置为模式 1(16位定时/计数模式),以 12 分频(Prescaler)的方式进行计数时,初值 TH0 = 0xFC,TL0 = 0x67 可以使定时器在溢出前计数满 1000 次,而每次计数需要 1ms。
回复

使用道具 举报

9#
ID:517951 发表于 2023-7-5 08:03 | 只看该作者
中断服务函数里面,不要调用ledscan这种耗时长的子程序.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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