找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机定时器中断 中断TF1=0,有没有频率差三倍

查看数: 3713 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-11-14 11:50

正文摘要:

我写20ms中断程序,程序参照STC ,增加TF1 = 0 正常是20ms;程序取消掉TF1 = 0 后频率差不多66ms样子,中断的程序是IO取反 IO=~IO; 参照附件的紫色示波器波形。有没有大神知道? void Timer1Init(void)   ...

回复

ID:374869 发表于 2018-11-15 13:32
SINANDXKY 发表于 2018-11-15 11:24
TF1标志是定时器1溢出之后硬件自动置1,必须软件清零,不然就运行不正常,还有你12MHZ晶振16位定时器最大就 ...

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

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

Powered by 单片机教程网

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