| 
 
| 在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的中断点。
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |