Problema práctico con PIC PWM

1

He escrito el siguiente código para generar PWM y para cambiar el ciclo de trabajo cuando se presiona un botón. En simulaciones funciona bien. Sin embargo, cuando se implementa el circuito, el PWM comienza cuando se presiona el botón. Pero después de unos 2 segundos se detendrá. PWM no se genera continuamente. ¿Hay alguna razón por la que esto está sucediendo? (por ejemplo: PIC es un defecto, error en el código de ensamblaje)

* Estoy usando el reloj interno del PIC

 PROCESSOR PIC16F628A
#INCLUDE <P16F628A.INC>
#INCLUDE <BANKSEL.INC>   ;a macro is used to easily change the banks


org 0x00

;set the PWM period
  Bank1
   movlw d'249'    ; PR2 is 249 when Fosc=4MHz, TMR2 prescale=4
   movwf PR2

;set the PWM duty cycle- initially set to zero
Bank0
 movlw d'0'  ; set bits 9 - 2
   movwf CCPR1L
   bcf CCP1CON,CCP1X  ; set bit 5
   bcf CCP1CON,CCP1Y  ; set bit 4

  ;Make the CCP1 pin an output
  Bank1
  bcf TRISB,3

  bsf TRISB,0;make RB0 as input 

 ;Set the TMR2 prescale value  
   Bank0
   movlw b'00000101'   ; TMR2 = on, prescale = 1:4
   movwf T2CON

 ; enable pwm mode
   bsf CCP1CON,3        
   bsf CCP1CON,2  

l 
btfsc PORTB,0 ;bit test f skip if clear
call inc
goto l 


inc
movlw d'50'
addwf CCPR1L,1
return

END

    
pregunta user2835684

1 respuesta

1

Gracias PeterJ. Borrar el WDT dentro del bucle solucionó el problema. A continuación se muestra la parte modificada del código.

l 
clrwdt
btfsc PORTB,0 ;bit test f skip if clear
call inc
goto l
    
respondido por el user2835684

Lea otras preguntas en las etiquetas