在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的中断点。 |