Autor Tema: INTERRUPCIONES POR DESBORDAMIENTO DE TIMER0  (Leído 2376 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DIAZ_D_A

  • PIC10
  • *
  • Mensajes: 1
INTERRUPCIONES POR DESBORDAMIENTO DE TIMER0
« en: 12 de Mayo de 2010, 10:45:07 »
Yo realice este trabajo en donde tengo q enviar un dato a unmedio compartido, lo q teniaq lograr es q si el medio ocupado espere, pero aca esta el problema no me interrumpe el timer?
que esta mal? lo reviso y reviso y no se que mas hacerle.
soy nueva en esto del a programación
agradeceria su ayuda
;*********************************************************************************
; Este programa simula el envío de un dato de un byte a un medio compartido, en donde si el medio esta
; disponible se realiza una espera para realizar nuevamente el traslado del dato.
;****** CABECERA DEL PROGRAMA ******************************************************************************
   LIST      P=PIC18F4620      ;LIST = Directiva que define el procesador.
   #include   <p18f4620.inc>      ;Definición de variables específicas del procesador, evita el uso de EQUs.
;************************************************************************************************************
;****** DEFINICIÒN DE VARIABLES ****************************************************************************
tiempo EQU 13h
;
;****** PROGRAMA PRINCIPAL *********************************************************************************         ORG 00h
      ORG 00h
      GOTO INICIO
      ORG 08h
;*******RUTINA DE SERVICIO**********************************************************************************
      bcf   INTCON, INT0IF   
       clrf tiempo
      RETFIE


INICIO
;******INICIALIZACION****************************************************************************************
      movlw 0Fh            ;carga w con 0Fh
      movwf ADCON1         ;configura los 4bits bajos del puerto A como digitales
      clrf TRISB            ;pone en 0 el TRISB y lo configura como salida
      setf TRISA            ;pone en 1 el TRISA y lo configura como entrada
      bsf INTCON,GIE         ;habilito las nterrupciones globales
      bsf INTCON,TMR0IE      ;habilito las interrupciones por desbordamiento del timer0
      
;******CARGO TABLA DE DATOS EN MEMORIA*************************************************************************   
      LFSR FSR0,15h         ;cargo el registro FSR0 con la direccion 15h, y vamos cargando en memoria
      movlw 81h            ;hasta la posición 1Ch la tabla de datos
      movwf POSTINC0         ;
      movlw 88h            ;
      movwf POSTINC0         ;
      movlw 83h            ;
      movwf POSTINC0         ;
      movlw 86h            ;
      movwf POSTINC0         ;
      movlw 82h            ;
      movwf POSTINC0         ;
      movlw 85h            ;
      movwf POSTINC0         ;
      movlw 89h             ;
      movwf POSTINC0         ;   
      movlw 83h            ;
      movwf INDF0            ;
      lfsr FSR0,15h         ;

;*******ACCESO AL MEDIO************************************************************************************   
testea    btfss PORTA, 0         ;si el bit 0 del Puerto A esta en 0
      goto DATOS            ;salta a DATOS
      ;PRIMERA ESPERA
      movlw b'10011111'      ;sino configuramos el T0CON
      movwf T0CON            ;Activamos el Timer0
      movlw d'156'         ;
      movwf TMR0L            ;largamos el Timer con 156
      movlw 90h            ;carga el valor 90h en portB
      movwf PORTB            ;para indicar q el medio esta OCUPADO y prende 1 led indicando 1ra espera
      setf tiempo
      goto nada
   
      btfss PORTA, 0         ;si el bit 0 del Puerto A esta en 0
      goto DATOS            ;salta a DATOS
      ;SEGUNDA ESPERA
      movlw b'10010100'      ;sino configuramos el T0CON
      movwf T0CON            ;Activamos el Timer0 usando el Prescaler
      movlw 0A0h            ;carga el valor A0h en portB
      movwf PORTB            ;para indicar q el medio esta OCUPADO y prende 1 led indicando 2da espera
      setf tiempo
      ;goto nada
   ;   bcf T0CON, TMR0ON      ;      PARAMOS EL TIMER O SOLO SE RE - CONFIGURA?????????

      
      btfss PORTA, 0         ;si el bit 0 del Puerto A esta en 0
      goto DATOS            ;salta a DATOS
      ;TERCERA ESPERA
      movlw b'10010101'      ;sino configura el T0CON
      movwf T0CON            ;Activamos el Timer0 usando el Prescaler
      movlw 0C0h            ;carga el valor C0h en portB
      movwf PORTB            ;para indicar q el medio esta OCUPADO y prende 1 led indicando 3ra espera
      setf tiempo
      ;goto nada

otra_vez ;bcf T0CON, TMR0ON      ;PARAMOS EL TIMER O SOLO SE RE - CONFIGURA?????????

      btfss PORTA, 0         ;si el bit 0 del Puerto A esta en 0
      goto DATOS            ;salta a DATOS
      ;CUARTA Y SIG ESPERA
      movlw b'10010110'      ;sino configura el T0CON
      movwf T0CON            ;Activamos el Timer0 usando el Prescaler
      movlw 0F0h            ;carga el valor F0h en portB
      movwf PORTB            ;para indicar q el medio esta OCUPADO y prende 3 led indicando 4ta y sig espera
      setf tiempo
      ;goto nada
      goto otra_vez         ;salta a otra_vez para testear x 5ta vez si el medio esta disponible
      
DATOS
      movf POSTINC0,0         ;cargamos en el puerto B
      movwf PORTB            ;el dato apuntado por FSR0 y se incrementa el mismo
      goto testea            ;vuelve a testear
      
;ver xq NO interrumpe!!!!!!
;hacemos una espera o queda ahi???

 nada
      nop
      goto nada


; DONDE PONEMOS "NUESTRA" ETIQUETA DE DESBORDE???????
;HACE FALTA?????

END


 

anything