打印
[技术问答]

N76E003定时器0怎么调到1us?

[复制链接]
1586|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
18759302991|  楼主 | 2019-4-20 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
无论怎么改变TH0的值只能调到6us 1分频也没用。
#define TH0_INIT 253 //不分频 TimeUs=(256-(TimeUs/1/(Fosc(M)/12)))
void Init_Timer0(void)
{
        TIMER0_MODE2_ENABLE;//定时器0模式配置
        clr_T0M;//12分频
        TH0=TH0_INIT;//16M 2.5us
        TL0=TH0;
        set_TR0;//定时器0启动
        set_ET0;//定时器0中断开启
}

使用特权

评论回复
来自 2楼
18759302991|  楼主 | 2019-4-21 13:31 | 只看该作者
研究了1天终于找到问题了,结论:实际不可能调到1us的,中断响应处理都达到5.几us。所以无论怎么改变THx的值极限值是6us。

使用特权

评论回复
板凳
xxh0201| | 2019-4-20 16:50 | 只看该作者
你定时器已设成模式2:8位重装。

且12分频,

1uS,你程序能跑得过来吗?

使用特权

评论回复
地板
jcdzxh| | 2019-4-20 16:56 | 只看该作者
听听楼下怎么说

使用特权

评论回复
5
18759302991|  楼主 | 2019-4-20 18:55 | 只看该作者
xxh0201 发表于 2019-4-20 16:50
你定时器已设成模式2:8位重装。

且12分频,

调到1分频也跑不到。

使用特权

评论回复
6
tianxj01| | 2019-4-21 15:13 | 只看该作者
1uS完全可以做到,测试可以打开T0OE,让定时器输出使能,然后设置为模式2,自动重装8位,T0M=1,用系统时钟。TH0=240,启动定时器,在T0脚(P05)就可以读到1uS周期的波形。
至于你用1uS能干什么,这就是另外一个问题了,比如开中断,那么很明显这个中断在16个时钟周期必须完成起码1个LCALL指令共4个时钟(如果你不在乎别的中断向量被覆盖),加上一个RETI 5个时钟,还剩下7个时钟,能干什么就自己想吧。  

使用特权

评论回复
7
xxh0201| | 2019-4-22 09:33 | 只看该作者
tianxj01 发表于 2019-4-21 15:13
1uS完全可以做到,测试可以打开T0OE,让定时器输出使能,然后设置为模式2,自动重装8位,T0M=1,用系统时钟 ...

这就是我说的,跑不过来了。

使用特权

评论回复
8
小明的同学| | 2019-4-23 15:46 | 只看该作者
哈哈,是不可以的。况且这貌似没有意义

使用特权

评论回复
9
小明的同学| | 2019-4-23 15:47 | 只看该作者
就算你模拟时序,貌似也都是几十us吧,

使用特权

评论回复
10
天灵灵地灵灵| | 2019-4-23 23:46 | 只看该作者
提高时钟。

使用特权

评论回复
11
天灵灵地灵灵| | 2019-4-23 23:46 | 只看该作者
你要确保一条指令执行时间就小于1us

使用特权

评论回复
12
天灵灵地灵灵| | 2019-4-23 23:47 | 只看该作者
这么看你时钟配置到80MHz可以实现。

使用特权

评论回复
13
ayb_ice| | 2019-4-24 14:39 | 只看该作者
中断响应,返回,入栈,出栈都需要时间,除非你时钟够快,优先级够高是可以的

如果单周期51,20M,中断只处理简单事情(比如取反IO)肯定是可以的

使用特权

评论回复
14
downcount| | 2019-4-26 19:37 | 只看该作者
你要能保证你需要在中断里处理的东西耗时小于中断时间

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

42

帖子

1

粉丝