打印

PIC单片机中将TMR0设置为外部脉冲计数会造成部分中断缺失

[复制链接]
4002|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在TMR0中断里面对TMR0重赋值TMR0=0FFH。这样当PORTA,4/T0CKI有一个外部上升沿时,就会产生中断。中断只做PORTD,1的置位,主程序中做PORTD,1的清零。
问题是当调整主程序时间后,中断输出没有规律,会出现PORTD,1没有出现高电平的点。
程序如下
ORG  0x000
CLRF  PCLATH   
GOTO  MAIN;冗余
ORG   0X004
PUSH  ;进栈
BANK0
CLRF  PCLATH
GOTO  INTSEV
;-----------------------
;中断服务子程序
;-----------------------
INTSEV  NOP  ;中断程序体
BTFSS  T0IE ;判断是否允许TMR0外部计数中
GOTO  BACK0;允许,则继续判断是否产生中断
BTFSC  T0IF ;中断吗?
GOTO INT00
BACK0 BANK0
BCF T0IF ;退出中断
   POP;出栈
RETFIE
;-----各个中断处理----
INT00  BANK0;检测过零点,-开启TMR1和设定其初值
BSF  RESLED
MOVLW  0FFH;定时常数
MOVWF  TMR0;重新装载TMR0
GOTO  BACK0
MAIN BANK1  ;上电复位判断?
MOVF  PCON, W
BSF  POR
BTFSS  POR
GOTO  $-2
BANK0
ANDLW  02H
BTFSS  Z
GOTO  RSTELSE
;-----------------------
RSTELSE   CLRWDT ;特殊功能寄存器初始化
BANK1
MOVLW B'00000111'
MOVWF ADCON1
BANK0
MOVLW 0FFH
MOVWF  PORTA
MOVLW  0FFH
MOVWF PORTB
MOVLW  B'00000000'
MOVWF  PORTC
CLRF  PORTD
CLRF  PORTE
;以上IO口初始设置
BANK1
MOVLW  0FFH
MOVWF  TRISA;PORTA为开关端口。
MOVLW  0FFH
MOVWF  TRISB;8421拨码开关接口是PORTB
MOVLW  B'00000000'
MOVWF  TRISC
MOVLW B'00000001'
MOVWF  TRISD
CLRF  TRISE
BSF T0CS ;TMR0设置为外部上升沿脉冲计数
BSF T0SE
BANK0
BSF PSA
BSF GIE
BSF T0IE
BCF T0IF
MOVLW 0FFH
MOVWF TMR0 ;TMR0的计数初值
MAIN1 BANK0
CLRWDT
BSF  PSA
BCF  PORTD,1
GOTO MAIN1
在张明峰的《PIC单片机入门与实战》里198页有说TMR0工作于外部脉冲计数模式时,不要对其进行任何写操作。这里并没有提到不得已的时候一定要写TMR0该如何.主要因为我的硬件是已经有的,使用到PORA,4/T0CKI脚接的是外部过零脉冲,所以只能使用TMR0作为外部中断入口。
PS:当有外部中断的时候开TMR1和给其赋值,这样做有影响吗?也就是说处理时没有得到脉冲,也有可能是由于TMR1没有中断。种种原因。
还请大家指教一二。
最主要的就是TMR0可以作为外部中断吗?如果可以受什么影响呢?主程序的时间吗?可以在TMR0中开TMR1吗?
黄色的是过零检测脉冲
蓝色的是PORTD,1输出脉冲,即TMR0的中断点。
沙发
weimao228|  楼主 | 2011-3-24 10:33 | 只看该作者
差点忘了,我使用的单片机是PIC16F74。

使用特权

评论回复
板凳
yewuyi| | 2011-3-24 19:14 | 只看该作者
如果一定要操作,可以使用类如“TMR0+=6;”这样操作看看是否OK 。

使用特权

评论回复
地板
tcc8073| | 2011-3-25 08:06 | 只看该作者
本帖最后由 tcc8073 于 2011-3-25 08:11 编辑

PIC中断使用有时候真的是麻烦,是不是中断处理过程过长漏掉了

使用特权

评论回复
5
yewuyi| | 2011-3-25 08:33 | 只看该作者
PIC中断使用有时候真的是麻烦,是不是中断处理过程过长漏掉了
tcc8073 发表于 2011-3-25 08:06


:o 任何一种MCU,如果中断处理的时长超出了信号的速度,都有可能漏掉。

使用特权

评论回复
6
tcc8073| | 2011-3-25 08:36 | 只看该作者
本帖最后由 tcc8073 于 2011-3-25 13:34 编辑

我要说的就是这个意思,如果中断取样速度和外部信号有冲突的话,怎么样的中断方式也保证不了100%能产生中断,只有在满足中断条件的时候单片机采样到中断才能产生中断

使用特权

评论回复
7
weimao228|  楼主 | 2011-3-25 10:13 | 只看该作者
:o 任何一种MCU,如果中断处理的时长超出了信号的速度,都有可能漏掉。
yewuyi 发表于 2011-3-25 08:33

这个问题可以解决了,可能是因为中断返回后马上就把PORTD,1给清零了。所以引起一些误操作。我尝试在中断里将PORTD取反,发现中断没有丢掉的点。对TMR0赋值是可以做到的。呵呵...

使用特权

评论回复
8
yewuyi| | 2011-3-25 11:00 | 只看该作者
我要说的就是这个意思,如果中断取样速度和外部信号有冲突的话,怎么样的中断方式也保证不了100%能产生中断
tcc8073 发表于 2011-3-25 08:36


那也不是,中断标志肯定会产生的,只是中断响应延迟罢了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

60

帖子

1

粉丝