Hola, necesito de vuestra ayuda, porque despues de quince dias ya no se como conseguir el proposito que quiero, necesito poner ContTICKS a 1 y ContRtcc a 0 dentro de la interrupcion al cabo de 20ms aproximadamente, luego ya ajustare el tiempo hasta los 20ms exactos.
Esto es lo que tengo:
;******************************************************************************************************
; FileName: MainPWM.asm
;******************************************************************************************************
;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------
list p = PIC16873A ; Seleccionar procesador.-
#include "P16F873A.inc" ; Incluir archivo P16F873A.inc
;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the
; .asm file. The lables following the directive are located in the respective
; .inc file. See the data sheet for additional information on configuration
; word settings.
;
;------------------------------------------------------------------------------
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; VARIABLES
;------------------------------------------------------------------------------
CBLOCK H'20'
W_Temp
STATUS_Temp
ContRtcc
ContTICKS
ENDC;
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; CONSTANTES
;------------------------------------------------------------------------------
;Pulsador equ 0 ; Definimos Pulsador como el bit 0 de un registro, en este caso PORTA.-
;Led equ 1 ; Definimos Led como el bit 1 de un registro, en este caso PORTA.-
;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------
RESET ORG H'00' ; Aqui comienza el micro.-
GOTO Inicio ; Salto a Inicio de mi programa.-
ORG H'04' ; Salta al vector de Interrupcion.-
GOTO Inicio_ISR
ORG H'05' ; Origen del codigo de programa.-
;------------------------------------------------------------------------------
; VECTOR DE INTERRUPCION
;------------------------------------------------------------------------------
Inicio_ISR ;**** Guardado de registro W y STATUS.-
movwf W_Temp ; Copiamos W a un registro Temporario.-
swapf STATUS,W ; Invertimos los nibles del registro STATUS.-
movwf STATUS_Temp ; Guardamos STATUS en un registro temporal.-
ISR ;**** Atendemos la Interrupcion.-
btfss INTCON,T0IF
goto Fin_ISR
incf ContRtcc,F
movlw 0x04
subwf ContRtcc,0
btfss STATUS,Z
goto Actualizar_TMR0
goto AjusteFino
Actualizar_TMR0
movlw 0x00
movwf TMR0
bcf INTCON,T0IF
goto Fin_ISR
AjusteFino
movlw .33
movwf TMR0
bcf STATUS,Z
bcf INTCON,T0IF
movlw 0x05
subwf ContRtcc,0
btfss STATUS,Z
goto Fin_ISR
bsf ContTICKS,0
bcf ContRtcc,0
Fin_ISR ;**** Restauramos los valores de W y STATUS.-
swapf STATUS_Temp,W ; Invertimos los nibles de STATUS_Temp.-
movwf STATUS
swapf W_Temp,F ; Invertimos los nibles y lo guardamos en el mismo registro.-
swapf W_Temp,W ; Invertimos los nibles nuevamente y lo guardamos en W.-
retfie ; Salimos de la Interrupcion.-
;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------
Inicio ;**** Configuracion de Puertos ****
bcf STATUS,RP0
bcf STATUS,RP1 ; Bank 0.-
clrf PORTA ; Limpiamos PORTA.-
clrf TMR0 ; Limpiamos TMR0.-
clrf INTCON ; Desactivamos interrupciones y limpiamos T0IF.-
bsf STATUS,RP0 ; Bank 1.-
movlw 0x06
movwf ADCON1 ; I/O digitales.-
movlw b'00000000'
movwf TRISA ; RA<0> input RA<1:7> output.-
movlw b'10000011'
movwf OPTION_REG
bcf STATUS,RP0 ; Bank 0.-
movlw 0x00
movwf TMR0
bsf INTCON,T0IE ; Habilitamos interrupcion TMR0.-
bsf INTCON,GIE ; Habilitamos todas las interrupciones.-
loop nop
goto loop
END ; Fin del codigo.-
Agradeceria de vuestra ayuda.
Saludos!