求教AI8051U定时器T1
按照定时器生成代码,频率40MHz TL1 = 0xD8; TH1 = 0xFF; 产生的时钟不是1us,而是1.72~1.73us左右,通过示波器发现,当TL1=0xE0 TH1=0xFF时,产生1.5us的定时,而且TL1 = 0xCC是2.02~2.03us,但TL1=0xCD时,直接1.96us,按说一个计数应该是25ns,咋差这么多?而且而且当定时器设定TL1 > 0xEC之后,基本就是1.2us不会减少了,且会出现USB连接识别不对的情况,我是把定时器T0,T1写成的timer.c文件调用的,是不是这个原因,哪位大神帮忙看一下通过把T1函数挪到main里面,发现同样是TL1 = 0XE0 中断是1.05us,0xD8是1.27us 0xE2 还是1.05us,0xE3 1.05,0xE4 就变成了976ns.... 我就是想单纯的产生一个标准的1us中断啊
44.2368MHz下的0xDE,1.02us,是我找到的误差最小的
最后测试了 TH1 = 0xFF;// 40MHz下1us初值
TL1 = 0xE4;
_nop_();
P26 = !P26; 基本上能实现1us,但偶尔会变成正脉冲1.01us 负脉冲996ns应该是T0的1ms定时器影响的
大概是单片机主频太低,1us的定时器做不了太多东西 40MHz:1uS, 40个 时钟
页:
[1]