;****************************************************************************
;
;  Generador de sincronismo.ASM    Desarrollado por R.conde (robertomasconde@hotmail.com) 27/9/2010
;  con los fragmentos de codigo del proyecto de   (C) M. MAGGI  
;  Programa creado para un PIC16F84 trabajando sobre un cristal de 4MHz.
;  Cada instruccion (excepto saltos), lleva 1.0 us 
;  Desarrollado para trabajar bajo sistemas PAL-N
;****************************************************************************

      
      
      
      
       LIST  P=16F84 

       #include        "p16f84.inc"
    
                              
                              
                              
                                 __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
                                   RADIX HEX                     

        
                            
                            
                                CBLOCK 0X0C 
                                 
                                                       
                                DURHOR , DURHOR1 , DURHOR2 , CANTHB1 , CANTHB2 , CANTHB3 , CANTPRE
                                DUREQU , DURVER , CANTVER , TIEMPO , CAMPO , CANTPOS
                                                   
                                ENDC 
 


                              
                                                     

                                                                                 



          ORG   1
          goto    MAIN
          ORG     0x05
MAIN
          CLRF  PORTA                                      ;TODOS LOS BITS EN 0
          CLRF  PORTB                                      ;TODOS LOS BITS EN 0
          BSF   STATUS,RP0                                 ;SELECCIONA BANCO DE REGISTROS 1
          MOVLW B'11111111'
          MOVWF TRISA                                      ;TODOS LOS BITS DEL PUERTO A COMO ENTRADAS
          CLRF  TRISB                                      ;TODOS LOS BITS DEL PUERTO B COMO SALIDA
          BCF   STATUS,RP0                                 ;SELECCIONA BANCO DE REGISTROS O
      
        
          BCF    INTCON, 7        ;DESACTIVO TODAS LAS INTERRUPCIONES
          MOVLW  b'11110000'
          MOVWF  CAMPO            ; DEFINO COMIENZO DEL  CAMPO 
          MOVLW  5                ;**********************************
          MOVWF  CANTPRE          ; PULSOS DE PREECUALIZACION       *
          MOVLW  5                ;                                 *
          MOVWF  CANTVER          ; PULSOS DE SINCRONISMO VERTICAL  *
          MOVLW  5                ;                                 *
          MOVWF  CANTPOS          ; PULSOS DE POSEQUALIZACION       *
                                  ;**********************************
  
preequ    BSF    PORTB ,0
          BSF    PORTB ,1          ; PULSOS DE PREECUALIZACION y BORRADO
          BCF    PORTB,0
          MOVLW  D'16'             ;************************************************************
          MOVWF  CANTHB1           ; SE CARGA CUANTAS LINEAS HORIZONTALES SE HACEN CON BORRADO *
          MOVLW  D'7'              ;************************************************************
          MOVWF  DUREQU
          NOP
loop1     DECFSZ DUREQU  ,F        ; SE COMPLETAN LOS 32µS ENTRE PULSOS
          GOTO   loop1
          NOP
          DECFSZ CANTPRE ,F
          GOTO   preequ            ; SE COMPLETAN LOS 5 PULSOS 
          NOP
sincrover BSF    PORTB, 0          ; PULSOS DE SINCRONISMO VERTICAL
          MOVLW  D'8'
          MOVWF  DURVER            ; DURACION DEL PULSO VERTICAL 27 MICRO.S
loop2     DECFSZ DURVER  ,F                                             
          GOTO   loop2
          NOP
          BCF    PORTB, 0 
          NOP
          DECFSZ CANTVER ,F        ; CUENTO 5 PULSOS VERTICALES
          GOTO   sincrover
          NOP
posequ    BSF    PORTB, 0          ; PULSOS POSEQUALIZADOR
          NOP
          BCF    PORTB, 0          ; DURA 2 MICRO.S
          MOVLW  D'8'
          MOVWF  DUREQU
loop3     DECFSZ DUREQU  ,F        ; SE COMPLETAN LOS 32µS 
          GOTO   loop3
          NOP
          DECFSZ CANTPOS  ,F       ; SE CUENTAN 5 PULSOS
          GOTO   posequ
          BTFSS  CAMPO,0           ; SE TESTEA CAMPO PAR O IMPAR  CAMPO PAR 1 CAMPO IMPAR 0
          BSF    PORTB, 0          ; COMIENZA CAMPO IMPAR
          BTFSC  CAMPO,0           ; SE TESTEA CAMPO PAR O IMPAR  
          GOTO   par               ; ACA ESTA UN SALTO PARA AÑADIR MAS TIEMPO AL  SEGUNDO CAMPO O (CAMPO PAR)
          NOP
rlh       BCF    PORTB, 0          ; TERMINA 1ºPULSO HORIZONTAL TRAS EL POSEQUALIZADO (SOLO PARA EL PRIMER CAMPO
          MOVLW  D'18'
          BTFSS  CAMPO, 0 
          NOP
          MOVWF  TIEMPO            
loop4     DECFSZ TIEMPO ,F
          GOTO   loop4
          NOP
          NOP
campo2    BSF    PORTB, 0 
          DECFSZ CANTHB1 ,F        ; SE CUENTAN 16 LINEAS CON BORRADO DESPUES DE LOS POSEQUALIZADORES
          GOTO   rlh
          NOP                      
          CLRF   PORTB             ; TERMINA EL BORRADO
          MOVLW  D'3'              ;******************************************************
          MOVWF  CANTHB2           ; CARGO CANTIDAD DE BLOQUES                           *
          MOVLW  D'94'             ; CARGO CANTIDAD DE LINEAS  PARA EL PRIMER BLOQUE     *            
          BTFSC  CAMPO,0           ;                                                     *
          MOVLW  D'95'             ; SUMO UNA LINEA MAS EN EL CAMPO PAR O (SEGUNDO CAMPO)*
          BTFSC  PORTA, 4          ;******************************************************
          ADDLW  2                 ; SUMO DOS LINEAS PARA COMPLETAR LOS PRIMEROS BLOQUES DE CADA CUADRO
          NOP                      ; SI NO DETECTA ENTRADA PARA MODIFICAR SINCRONISMO VERTICAL
          MOVWF  CANTHB3             
loop6     NOP                      ;PUNTO DE RETORNO DE LAS LINEAS HORIZONTALES
          MOVLW  D'5'              ;************************************************
          MOVWF  CANTPRE           ;CARGO CANTIDAD DE PULSOS PREECULIZADORES       *
          MOVWF  CANTPOS           ;CARGO CANTIDAD DE PULSOS POSEQUALIZADORES      *
          MOVWF  CANTVER           ;CARGO CANTIDAD DE PULSOS SINCRONISMO VERTICAL  *
          MOVLW  D'14'             ;************************************************
          MOVWF  DURHOR            ; TIEMPO BAJO ENTRE EL ULTIMO PULSO DE SINCRONISMO CON BORRADO 
loop5     DECFSZ DURHOR ,F           ; Y EL COMIENZO DEL PORTICO ANTERIOR DEL RESTO DE LOS PULSOS 
          GOTO   loop5
bloque    BSF    PORTB, 1          ; EMPIEZA PORTICO ANTERIOR O RETORNAN LOS BLOQUES HORIZONTALES
          NOP
          BSF    PORTB, 0          ; EMPIEZA PULSO DE SINCRONISMO
          NOP
          NOP
          NOP
          BCF     PORTB, 0         ; TERMINA PULSO DE SINCRONISMO
          NOP
          NOP      
          NOP
          NOP
          NOP
          BCF     PORTB,1          ; TERMINA PORTICO POSTERIOR
          DECFSZ  CANTHB3 ,F       ; CUENTO 96 LINEAS
          GOTO    loop6
          NOP                      ;******************************************
          MOVLW   D'96'            ;CARGO CANTIDAD LINEAS A CONTAR POR BLOQUE*
          MOVWF   CANTHB3          ;******************************************
          DECFSZ  CANTHB2 ,F
          GOTO    ret
          MOVLW   D'1'
          BTFSS  CAMPO,0
          MOVLW   D'12'
          NOP      
          BTFSC  CAMPO,0
          GOTO   mas1
mas1      NOP
          MOVWF   DURHOR2
loop7     DECFSZ  DURHOR2 ,F
          GOTO    loop7
          SWAPF   CAMPO ,F
          GOTO    preequ
ret       MOVLW   D'13'
          MOVWF   DURHOR2
t1        DECFSZ  DURHOR2 ,F
          GOTO    t1
          NOP
          GOTO    bloque

;**************************************************************************************

par       MOVLW    D'8'           ; CARGO + TIEMPO EN EL COMIENZO DE EL CAMPO PAR
          MOVWF   TIEMPO            
loop8     DECFSZ  TIEMPO ,F
          GOTO    loop8
          NOP
          GOTO    campo2        ; SALTO PARA COMENZAR EL CAMPO PAR O (SEGUNDO CAMPO)      
;**************************************************************************************

  
  
   END

































       
