SINANDXKY 发表于 2018-11-15 11:24 的确是,我没有吧初值放在interrupt 1里面,只写到main 函数里面了。估计是这里问题 |
TF1标志是定时器1溢出之后硬件自动置1,必须软件清零,不然就运行不正常,还有你12MHZ晶振16位定时器最大就定时65.535MS所以你是不是没重赋初值 |
我也很奇怪,以前用89C52 和 STC100W 都没有这个问题,是不是STC15 204S 芯片问题,这个芯片比普通的运行快很多,我照办普中程序的延迟都用不了,跑的飞起![]() |
加EA=1; ET0=1: |
![]() AUXR不要去动它,本身就是默认的12T了,第一个图片是产生误差的那代码吗?如果是的话,也没有你说的那大的误差的,你要知道,20mS取反一次实际上25HZ,你那是26HZ左右,实际上只差别了2.52mS 问题在哪里?我不知道,不会C,看不明白,但我没有看到取反的函数,你把取反的代码直接放在TR1 = 1后面,这样精度会高一点. 示波器应该是可以量时间的呀,你可以找找看,像20mS这种是可以很精确的测量出来的,注意看增量那一行 |
使用定时器1中断方式不必操作TF1,TF1在中断响应后自动清0。使用查询方式才需要程序操作清0。 |