[8/16位单片机] 外部中断响应时间长

[复制链接]
916|23
 楼主 | 2019-8-23 09:22 | 显示全部楼层 |阅读模式
PIC外部中断时间很长吗?我程序里只写了这一个中断的函数,进入中断后,一个引脚电平翻转,发现从检测到上升沿到相应电平翻转时间间隔了有9us,这样是正常的吗,还是说可以调整?

使用特权

评论回复
| 2019-8-23 09:23 | 显示全部楼层
上升沿到翻转,你怎么测的。

使用特权

评论回复
 楼主 | 2019-8-23 09:28 | 显示全部楼层
wahahaheihei 发表于 2019-8-23 09:23
上升沿到翻转,你怎么测的。

示波器啊

使用特权

评论回复
| 2019-8-23 09:34 | 显示全部楼层
主频多少?编译优化了?可以调试反汇编窗口,看看执行的反汇编指令有多少,大概算一下。

使用特权

评论回复
| 2019-8-23 09:40 | 显示全部楼层
你要考虑到进入中断的时间,以及你到翻转指令中间有几个指令?这些时间都要算。

使用特权

评论回复
| 2019-8-23 09:41 | 显示全部楼层
另外就是你这个要求速度超级快吗,现实意义有没有

使用特权

评论回复
 楼主 | 2019-8-23 09:53 | 显示全部楼层
进入中断就只有标志位清零和电平翻转语句

使用特权

评论回复
 楼主 | 2019-8-23 09:54 | 显示全部楼层
lcczg 发表于 2019-8-23 09:34
主频多少?编译优化了?可以调试反汇编窗口,看看执行的反汇编指令有多少,大概算一下。 ...

时钟是16M的,编译优化是咋弄,不懂唉

使用特权

评论回复
| 2019-8-23 12:01 | 显示全部楼层
djinter 发表于 2019-8-23 09:54
时钟是16M的,编译优化是咋弄,不懂唉

你可以看一下反汇编, 数一下从0004中断入口到你翻转的那条指令之间, 总共有多少条指令,就可以估算出来代码的延迟 是否跟实际的匹配....

使用特权

评论回复
 楼主 | 2019-8-23 12:11 | 显示全部楼层
CoolSilicon 发表于 2019-8-23 12:01
你可以看一下反汇编, 数一下从0004中断入口到你翻转的那条指令之间, 总共有多少条指令,就可以估算出来代 ...

汇编不会看啊,0004是进入中断的地址吗?我做的是RC4翻转,这个汇编语句是怎么写的?

使用特权

评论回复
 楼主 | 2019-8-23 12:12 | 显示全部楼层
是这一句吗? BTG PORTC, 4, ACCESS

使用特权

评论回复
 楼主 | 2019-8-23 12:14 | 显示全部楼层
       Line      Address       Opcode      Label               DisAssy           
    1        0000          EF41                    GOTO 0x82                     
    2        0002          F000                    NOP                           
    3        0004          FFFF                    NOP                           
    4        0006          FFFF                    NOP                           
    5        0008          CFFA                    MOVFF PCLATH, 0x1            
    6        000A          F001                    NOP                           
    7        000C          CFFB                    MOVFF PCLATU, 0x2            
    8        000E          F002                    NOP                           
    9        0010          CFE9                    MOVFF FSR0, 0x3               
    10       0012          F003                    NOP                           
    11       0014          CFEA                    MOVFF FSR0H, 0x4              
    12       0016          F004                    NOP                           
    13       0018          CFE1                    MOVFF FSR1, 0x5               
    14       001A          F005                    NOP                           
    15       001C          CFE2                    MOVFF FSR1H, 0x6              
    16       001E          F006                    NOP                           
    17       0020          CFD9                    MOVFF FSR2, 0x7               
    18       0022          F007                    NOP                           
    19       0024          CFDA                    MOVFF FSR2H, 0x8              
    20       0026          F008                    NOP                           
    21       0028          CFF3                    MOVFF PROD, 0x9               
    22       002A          F009                    NOP                           
    23       002C          CFF4                    MOVFF PRODH, 0xA              
    24       002E          F00A                    NOP                           
    25       0030          CFF6                    MOVFF TBLPTR, 0xB            
    26       0032          F00B                    NOP                           
    27       0034          CFF7                    MOVFF TBLPTRH, 0xC            
    28       0036          F00C                    NOP                           
    29       0038          CFF8                    MOVFF TBLPTRU, 0xD            
    30       003A          F00D                    NOP                           
    31       003C          CFF5                    MOVFF TABLAT, 0xE            
    32       003E          F00E                    NOP                           
    33       0040          A2F0                    BTFSS INTCON3, 1, ACCESS      
    34       0042          D002                    BRA 0x48                     
    35       0044          92F0                    BCF INTCON3, 1, ACCESS        
    36       0046          7882                    BTG PORTC, 4, ACCESS  




中间有30条啊,为什么会这样

使用特权

评论回复
| 2019-8-23 13:00 | 显示全部楼层
了解一下C编译器的中断保护现场,如果要求在保护现场之前就响应中断,那最好用汇编。

使用特权

评论回复
| 2019-8-23 16:49 | 显示全部楼层
djinter 发表于 2019-8-23 12:14
Line      Address       Opcode      Label               DisAssy           
    1        0000  ...

中断现场保护   了解一下....
你这是什么型号的PIC?
比较新一点4个数字和5个数字的型号现场保护很大一部分由硬件自动完成, 会快很多...

使用特权

评论回复
| 2019-8-23 16:50 | 显示全部楼层
djinter 发表于 2019-8-23 12:14
Line      Address       Opcode      Label               DisAssy           
    1        0000  ...

16M的主频, 就是0.25us一条指令, 30+条指令, 9us的延迟,正常的嘛..

使用特权

评论回复
| 2019-8-25 10:11 | 显示全部楼层
你要这么精确的翻转是做什么用的?

使用特权

评论回复
 楼主 | 2019-8-26 11:10 | 显示全部楼层
CoolSilicon 发表于 2019-8-23 16:50
16M的主频, 就是0.25us一条指令, 30+条指令, 9us的延迟,正常的嘛..

现在是理解这么长时间是正常的了,但是不知道怎么解决,汇编不会用,我现在用的型号是PIC18F26K80,不知道你说的中断现场保护由硬件完成的型号有哪些,能不能推荐几款

使用特权

评论回复
 楼主 | 2019-8-26 11:12 | 显示全部楼层
monitoring 发表于 2019-8-25 10:11
你要这么精确的翻转是做什么用的?

我是想精准控制MCU 输出PWM脉冲的个数,或者您有什么更好的办法吗,可能我的方法比较笨,求指教

使用特权

评论回复

评论

djinter 2019-9-6 13:37 回复TA
@bellstudio :数的个数就几百个吧,但我不太明白你说的这个用计数器的输出控制住PWM的时钟源怎么做,我现在用的是PIC18F26K80,不知道行不行,如果可以我再研究一下 
bellstudio 2019-8-29 12:21 回复TA
不知道你要数多少个PWM,理论上来说呢,如果用计数器的输出控制住PWM的时钟源就可以实现这个功能。 要看具体的型号,我随便翻了一个PIC18F26K83应该是能实现的 
| 2019-8-26 14:01 | 显示全部楼层
djinter 发表于 2019-8-26 11:10
现在是理解这么长时间是正常的了,但是不知道怎么解决,汇编不会用,我现在用的型号是PIC18F26K80,不知道 ...

PIC16F1xxx, PIC16F1XXXX,带F1字样的PIC16都是有硬件的现场保护功能的, 会快一点.

使用特权

评论回复
| 2019-8-26 14:02 | 显示全部楼层
djinter 发表于 2019-8-26 11:12
我是想精准控制MCU 输出PWM脉冲的个数,或者您有什么更好的办法吗,可能我的方法比较笨,求指教 ...

PWM触发中断, 或者PWM所用的时基产生中断, 到里面去计数, 似乎可行的.

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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