为什么我的中断响应时间会那么长?

[复制链接]
6181|15
 楼主| chenczy 发表于 2008-9-1 11:22 | 显示全部楼层 |阅读模式
    我的时钟周期为1/20uS,那么我的中断响应时间应该在5/20uS左右,但实际上测出来的响应时间在2.5uS左右,这个时间长了好多,不知道是什么原因造成的?那个高手有这方面经验的请指点一下。
lyjian 发表于 2008-9-1 11:27 | 显示全部楼层

你用的什么单片机?

 楼主| chenczy 发表于 2008-9-1 11:30 | 显示全部楼层

我用的是STC的

   我用的是STC12C5404,晶振为20MHZ,中断是外部中断的。
wangkj 发表于 2008-9-1 11:47 | 显示全部楼层

软件模拟一下,看看左下角的时间坐标不就知道了

 楼主| chenczy 发表于 2008-9-1 11:56 | 显示全部楼层

就是用软件看的

   我在中断一进来就送一个信号出去,再在示波器上看到的,这个数据应该是非常准确的了。
lyjian 发表于 2008-9-1 12:12 | 显示全部楼层

用Keil模拟STC12C5404的时间根本就不对

zyok 发表于 2008-9-1 12:20 | 显示全部楼层

请注意,下载程序的时候选择外部时钟...

2shift 发表于 2008-9-1 14:27 | 显示全部楼层

楼主说的检测方法可能存在着很多的误差

 楼主| chenczy 发表于 2008-9-1 15:41 | 显示全部楼层

我在想是不是芯片本身的问题

     再说一下吧,我什么程序都没写,就一个外部中断,中断一进来就从一个口取反,然后出中断,这样就简单了吧,不过还是会出现那个问题?有没谁用过这款芯片的指点下。我用的是汇编写的
lyjian 发表于 2008-9-1 17:11 | 显示全部楼层

贴你的程序

还有,你是怎么测试响应时间的?
 楼主| chenczy 发表于 2008-9-1 17:20 | 显示全部楼层

就是这个简单的程序

ORG     0000H
JMP     MAIN
ORG     0003H
JMP     TIP

TIP:
     PUSH     PSW
     PUSH     A
     CPL      P1.0
     POP      A
     POP      PSW
     RETI

MAIN:
     CLR     P1.0
     SETB    EA
     SETB    EX0
     SETB    IT0
     JMP     $

     我就用这个程序去检测,中断源就是外来一个下降沿就OK了,用示波器看P1.0脚,结果P1.0口的取反是在下降沿后的2.5US之后出现,按说不可能相差这么多的时间,查了好久都没查出什么原因,郁闷
农民讲习所 发表于 2008-9-1 17:50 | 显示全部楼层

改为:

TIP:
     CPL      P1.0
     RETI
农民讲习所 发表于 2008-9-1 17:51 | 显示全部楼层

把跳转也去掉

ORG     0000H
JMP     MAIN
ORG     0003H
     CPL      P1.0
     RETI

MAIN:
     CLR     P1.0
     SETB    EA
     SETB    EX0
     SETB    IT0
     JMP     $
lyjian 发表于 2008-9-1 17:58 | 显示全部楼层

一点都不奇怪

ORG     0000H
JMP     MAIN
ORG     0003H
JMP     TIP          ;3T(如果编译为LJMP为4T)

TIP:
     PUSH     PSW    ;4T
     PUSH     A      ;4T
     CPL      P1.0   ;4T
     POP      A
     POP      PSW
     RETI
MAIN:
     CLR     P1.0
     SETB    EA
     SETB    EX0
     SETB    IT0
     JMP     $      ;3T(如果编译为LJMP为4T)
**********************************
STC12C5404的中断响应时间最快为7T,最慢为17T
按你这段程序,中断下降沿到P1.0口取反的最快时间是22T=1.1us,最慢时间是31T=1.55us。
 楼主| chenczy 发表于 2008-9-2 08:18 | 显示全部楼层

re:

    按14楼的说法,20T=1us,29T怎么会是2.9us了?
    由于程序的需要,PUSH这个指令是不能少的。
    我去掉PUSH指令再试下看看。
lyjian 发表于 2008-9-2 09:06 | 显示全部楼层

哦,算错了,29T=1.45us。

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

本版积分规则

141

主题

791

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部